fountain v0.7.0 -> v0.16.0: the pin catches up, and gets something watching it - #120
Open
lex00 wants to merge 1 commit into
Open
fountain v0.7.0 -> v0.16.0: the pin catches up, and gets something watching it#120lex00 wants to merge 1 commit into
lex00 wants to merge 1 commit into
Conversation
…tching it The declared default sat nine releases behind. `just up` stood up an instance with no team roster, no teammate schedules, no webhook endpoints and no sandboxes routes, against docs on this same site that describe all four, and a client generated from the current OpenAPI spec failed against it in ways that read like client bugs. Closes #119. Two literals held the pin: chant.config.ts's declared default and src/params.ts's fallback behind it, and only the first was visible from the docs. Both now read FOUNTAIN_VERSION from src/lib/fountain-image.ts, so they cannot say different things and a bump is one line. Same rule as workflows/shared.ts's K3D_VERSION — a pin stays honest only while there is exactly one place it lives. The recurrence gets a reader rather than a line in a checklist, because every other pin here already has one and this was the one with none. image-pin/pipeline.ts renders .github/workflows/image-pin.yml: weekly and on demand, read the pin, ask GitHub for fountain's latest release, confirm the tag is actually on ghcr (a release is not an image — the publish lands minutes later), and open one PR moving that line. It does not merge, does not touch the prose the pin is quoted in — the body lists those files instead — and will not raise the same bump twice, so a bump somebody declined stays declined. `just ci` and `just ci-check` cover it like the other three. What nine releases changed for us, found by standing it up rather than by reading the notes: - The database is 41 tables, not the 25 status.md claimed. This run measured it. - The conversation turn no longer completes against the emulator, and that one is not ours to fix. fountain speaks the Agent Client Protocol to its runtimes from v0.9.0 (fountain#671), and #674 deleted the spawn path it replaced — an agent comes back `acp: true` whatever you post to /api/agents, so there is no way back to the old path. A turn now runs `claude-agent-acp` and sends `initialize`; spritzer 0.5.0 echoes command lines, speaks no JSON-RPC, and answers -32601. The turn stage ends `failed`, deterministically, every run. spritzer's newest release is the 0.5.0 this already pins, so nothing here closes it. So the gate stops claiming a completed turn. It asserts what this deployment owns — the sandbox is provisioned, the turn is dispatched into it, the runtime's output streams back — and then recognises exactly that one refusal on the emulated plane, by name. Any other ending still fails, the two old regressions included, and a real data plane is still held to a turn that exits 0. The "34 of 34" evidence stays where it was measured, at v0.6.1 over a path that no longer exists. status.md moves the row to Does not work rather than re-attributing it, data-plane.md replaces the mechanism, ci.md says what the gate now does. That row has been described wrongly four times now; the fourth is written down with the other three. Full `just e2e` from nothing on the new pin, green: readiness through to the database, MASTER_SECRETS_KEY byte-identical across a re-run, restartCount 0, the backup taken and restored into a throwaway and table-matched against live, register and self-verify over the API, the first account admin and audit-recorded, the conversation plumbing to the handshake, every seam accepted by a real API server.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
chant.config.tsandsrc/params.tsboth spelled outghcr.io/binarybourbon/fountain:v0.7.0, nine releases behind, sojust upstood up an instance without the team roster, teammate schedules, webhook endpoints or the sandboxes routes.src/lib/fountain-image.ts, which both files now import. Two literals with nothing watching them is how this drifted;workflows/shared.tsalready does the same forK3D_VERSION.image-pinworkflow, declared in TypeScript like the others and rendered byjust ci, that runs weekly, asks for the latest release, checks the tag actually exists on ghcr, and opens a single-line pull request when the pin is behind. It does not merge, does not rewrite prose, and does not reopen a bump whose branch already exists.status.md, which this run measured at 41 rather than the 25 the page claimed.Read this before merging: the bump changes what the conversation gate can assert. Fountain has spoken ACP to its runtimes since v0.9.0, and spritzer 0.5.0 answers
initializewith-32601, so a turn on the emulated plane can no longer reach a completed ending.verify-conversationnow asserts everything the deployment owns, which is the sandbox, the dispatch and the streamed output, and recognises that one refusal by name. Any other ending still fails, including the two regressions the gate was written for, and a real data plane is still held to exit 0.status.mdmoves "Completing a turn" from Verified to Does not work and says why, and the earlier "34 of 34" evidence stays attributed to v0.6.1. The alternative was to file a spritzer issue and leave the gate red; that choice is yours to reverse.Closes #119
Validation:
just checkpasses: typecheck, chant lint, 35 tests, build.just cithenjust ci-checkpass, so all four workflows match their declarations.actionlintis clean.just e2epasses from nothing on the new pin: readiness reports the database ok, the master key is byte-identical across a redeploy, the restore matched live across 41 tables, registration and first-account admin work, and the conversation plumbing is verified as described above.tier=haandtarget=kuberneteswere not re-run at the new pin.