fix(ci): pin the model server by digest and preflight streamed tool calls - #40
Merged
Merged
Conversation
…alls The live-model gate failed on its first real run and blocked the publish. The cause was the pin, not the agent: `server-bNNNN` tags stop at b5350 because the project renamed its tags afterwards, so the newest-looking tag was a year-old build. That build serves plain chat fine and answers every STREAMED tool call with `Cannot use tools with stream` — which is exactly what the executor does, so the run died deep inside the agent with nothing pointing at the runtime. - Pin by digest (b10450). A digest cannot rot into a different meaning the way a naming scheme can. - Add a preflight that sends one streamed tool call and fails with a message naming the image. Verified to discriminate: HTTP 500 on b5350, 200 on the new digest. Re-measured on the new image: the 3B passes; a 1.5B still never calls the tool (0/3 runs, `calls: []`), so the floor stays where it is. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011FKop4At26QqqkwVGEjJur
Its first version shipped broken and could not be exercised on the PR that introduced it — the paths filter only listed dependency files, so the first real execution was on main, where it blocked a publish. The workflow, the test and its helpers now trigger it too. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011FKop4At26QqqkwVGEjJur
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.
What happened
The live-model gate from #39 failed on its first real run and skipped the publish. It was right to block, but it blocked for my mistake, not a real regression.
The pin was wrong.
server-bNNNNtags stop at b5350 (May 2025) because the project renamed its tags afterwards — so "the newestserver-btag" silently meant a year-old build. That build serves plain chat perfectly and answers every streamed tool call with:The executor streams, so every tool call 500'd and the run died inside the agent with nothing in the failure pointing at the runtime. Current build is b10450.
Fix
@sha256:0668d42b…, = b10450). A digest cannot rot into a different meaning the way a naming scheme can;:serveris the floating tag to resolve when bumping.server-b5350(the one that broke the release)Cannot use tools with stream@sha256:0668d42b…(b10450)The model floor, re-measured on the new image
Since the runtime changed, the earlier 1.5B-vs-3B comparison had to be redone rather than carried over — it was made on a self-built server, so it proved nothing about this one.
files__secret, real value in the final text (28s)calls: []— never touches the toolSo the floor stays at 3B. The 1.5B would run roughly 20s faster per attempt against weights that are cached anyway; the price is a test that cannot fail for the reason it exists.
Checks
typecheck,format:check,build,testgreen (171 pass, 1 skipped). The live-model test itself was run against the pinned image locally — 1 pass — and the preflight was verified against both images.Generated by Claude Code