chore(agent-tools,compat): bump the Claude Code pin 2.1.220 → 2.1.221 — live re-verification, closing #235's owed gate #274
No reviewers
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Cloonar/coding-lab!274
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "afk/273"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #273
Moves the agent-tools Claude Code pin to 2.1.221, with the compat re-verification the bump procedure demands done first. The re-verification is the work; the two-line
versions.envedit is the trivial part.The live gate is closed — #235's owed work, done here
The issue made #235 a hard prerequisite: without a green live suite on the outgoing pin, you cannot tell 2.1.221 drift from the pre-existing #56 assertion bug. Both halves are done:
live_recipes_test.gostill expected a resolved dialog to surface as a demoted tool chip; issue #56 made it a dialog message carrying its recordedOutcome. Fixed againstdialogoutcome.go's actual shape. Nothing earlier in either test was weakened — the recipe driving, pane polling and recorded-answer comparison are byte-identical.TestCompat_LiveTranscripts_resolutionShapesTestCompat_Live_authStatusParsesTestCompat_Live_authLogoutTestCompat_Live_configDirResolutionTestCompat_Live_askUserQuestionRecipeTestCompat_Live_exitPlanModeApprovalZero skips on both — a skipped run is not a pass, and these carry four skip-gates. The two recipe tests drive a real dialog through the production
DialogKeystrokes/AnswerDialogpath and read the recorded answers back out of the transcript; both spawn without--remote-control, so this is live evidence on §12's arm.Why this version
2.1.221 fixes a Bash tool permission-check bypass where zsh could execute hidden commands in
[[ ]]regex conditionals without prompting — in--permission-mode auto, the exact mode lab spawns, on runs that are unattended by design.Reachability is conditional, and the record says so rather than overstating it: lab ships no shell (
Containerfile.claudeisFROM scratch),grep -rn zshover this repo returns zero hits, and the session shell comes from the operator-supplied dev image lab does not pin. Bash-only dev image → not reachable; zsh dev image → reachable, blast radius one container instance and its worktree. Defense in depth, not an incident. The PowerShell companion fix cannot reach lab at all.Pin verification
The digest was re-derived from the downloaded bytes, not trusted from the issue:
…matching Anthropic's per-version
manifest.json, and verifying underbuild.sh's ownsha256sum -ccheck. The artifact was then executed through Alpine's musl loader — the same proofContainerfile.claude:51's pre-patch sanity run makes — and reports2.1.221 (Claude Code).§10 re-scrape — no drift from this bump, but three pre-existing stale rows found
Re-extracted from the sha256-verified musl artifact itself and A/B'd against 2.1.220 with the same extractor.
/statusis byte-identical, despite the changelog's session-kind behavior change. The behavior moved; the string did not — which is exactly what the verbatim pin exists to catch, so it was checked rather than assumed.commands.goupdated with the bundle evidence quoted in the commit message:feedback,usage-credits, anddoctor./doctoris a shape change: it now carries an operator-facingmenuDescriptionplus adescriptionthat has become a long model-facing prompt. Its curated-out reason was also factually wrong ("interactive diagnostics UI" — it runs as a model turn now) and is corrected; thefalseverdict survives on the invasive-config ground.Method lesson recorded in §10 for the next sweep: a forward regex over
description:"…"reports a renamed key as an absent row. The check that actually settles drift is the reverse direction — grep the raw binary for each pinned string. That is what caught all three./fork— explicit written ChatSafe decision:falseIt is genuinely enabled and visible in every lab session (
isEnabled:()=>!Nb(), andNb()needsCLAUDE_CODE_COORDINATOR_MODE, which lab does not set), so the verdict is load-bearing rather than moot. Three independent grounds: transcript identity (the same hazard that disqualifies/resume), worktree leakage (every lab instance already is a linked worktree; a fork cutting its own leaves a checkout lab never registered and will never prune), and an unsupervised background session./subtaskinherits it — same spawn path.The standing catalog gap, now measured
The pinned table is 33 rows against a 105-name registry. That delta is pre-existing (byte-identical at 2.1.220), not this bump's drift, and it is now measured and curated in §10 as deliberately omitted, with the add-candidates named (
helpis the strongest). Widening the served composer surface changes what every operator sees — a product decision that wants its own issue, not a pin bump.Verification run
go build -tags ui ./cmd/...— OKgo test -tags ui ./...— all passgo test ./...— all passgolangci-lint run ./...(v2.12.2, matching CI) — 0 issuesgofmt -l— cleanTestCompat_BuiltinCommands_pinned— PASSOne gap, stated plainly
The container build and injection smoke test were not run locally — this host has no container runtime (no podman/docker, no root).
containers/agent-tools/build.sh claudeandsmoke-test.shcould not execute here.What covers it: the digest was re-derived and verifies under
build.sh's exact check, the artifact was executed through the same musl loader the image bundles, and this PR is path-gated onto theagent-toolsCI workflow (versions.envlives undercontainers/**), whosesmokejob builds both images and runs the injection smoke test againstdebian:stable-slimandalpine. That CI leg is the authority on the image; please confirm it goes green before merging.Also not re-driven, so not claimed anywhere in the record: the §12 pending-
tool_useflush A/B, the §2 deep-link registry (an ad-hoc probe failed identically on both versions — a broken probe, not drift), and the §3b by-hand credential-refresh recipe.[autoland] verdict: pass