spritzer 0.4.1 -> 0.5.0, and the turn completes every time - #109
Merged
Conversation
Both spritzer fixes this needed merged on 2026-08-03 and 08-04, three weeks
after v0.4.1 was tagged. `latest` and `0.4.1` were byte-identical manifests
and the release workflow only fires on a `v*` tag, so nothing published
carried either one and every deployment kept reproducing a bug that was
already fixed on main. spritzer 0.5.0 is now cut and this moves to it.
What that closes, with fountain#603 already in the v0.6.1 pin:
#603 a lost stdin write crashed the ConversationServer, and its restart
found the sandbox `ready`, reattached, and orphaned the turn
#19 an unupgraded GET on the exec path answered 426 rather than the
session list, which is what fountain asks for before reattaching
#20 an unrecognised command now holds its exec session open until stdin
EOF, so the prompt reaches a process that is still there
34 of 34 conversations completed at these pins, including batches fired back
to back — the pacing that used to fail most — with no crash, no reattach, no
426 and no :command_exited. The prompt is written as stdin and comes back on
stdout, so what is asserted is a round trip and not just an exit code.
So the gate stops hedging. It asserted a result, then a pairing, then only
observed which ending it saw, and each retreat was correct at the time
because the ending was a race. It is not one now, so both former outcomes
become failures, and each says which pin must have moved to produce it.
Completing a turn moves to Verified. `Does not work` keeps the claim that
was always the real one and never moved: nothing here talks to a model.
Verified: `just e2e` green from nothing at fountain v0.6.1 + spritzer 0.5.0.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jhgaylor
force-pushed
the
spritzer-0.5.0
branch
from
August 7, 2026 05:36
8b5448e to
769364b
Compare
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.
spritzer:0.4.1was released 2026-07-14. The two fixes this repo needed mergedon 08-03 and 08-04.
latestand0.4.1were byte-identical manifests, andthe release workflow only fires on a
v*tag — so nothing published carriedeither fix, and every deployment kept reproducing a bug that was already fixed
on main. spritzer 0.5.0 is now
cut; this moves to it.
What closes
With
fountain#603already in thev0.6.1pin, three fixes across two repos:ready, reattached, and orphaned the turnGETon the exec path answered426instead of the session list — the call fountain makes before deciding to reattachMeasured
34 of 34 conversations completed at
fountain v0.6.1+spritzer 0.5.0,including batches fired back to back — the pacing that used to fail most. Zero
crashes, zero reattaches, zero
426s, zero:command_exited.:command_exitedAnd the prompt now makes the round trip, which is more than an exit code:
The gate stops hedging
It asserted a result, then a pairing, then only observed which ending it saw.
Each retreat was right at the time — the ending was a race. It is not one now,
so both former outcomes become failures, and each names the pin that must have
moved:
verify-conversationgoes back to one assertion for both planes: exit 0 andoutput streamed.
Docs
Completing a turn moves to Verified, and Does not work is now empty —
with a line saying why, so an empty section does not read as an oversight.
That the local turn is the echo rather than a model stays as a qualifier on the
Verified row and in
data-plane.md's what it will never prove, where itbelongs. It is not a defect of this deployment: whether a model replies depends
on a real data plane and a tenant's own inference credentials, which is outside
what this repo deploys.
data-plane.mdkeeps the history in a collapsed note rather than deleting it.This was described wrongly three times — as an arm64/amd64 split, then as a
dispatch race "decided by machine speed" from 5-of-5 and 2-of-2 samples, then
as "no turn finishes, by upstream design" while v0.6.0 was completing 13 of 30.
Every one was a small sample of a coin flip read as a property, and that is
worth leaving on the page.
Verification
just e2egreen from nothing at these pins, with the strict gate:just checkandjust siteclean.Supersedes #105, which described a race this makes historical — I will close it.
🤖 Generated with Claude Code