chore: cut 2.3.0 (#363) - #366
Merged
Merged
Conversation
Drops the -dev suffix. Tagged as v2.3.0; a follow-up bumps to 2.3.1-dev. One feature, and it is a correction to something 2.1.0 got wrong about its own new capability. - #363 -- agent_args composes in the argv sandy BUILDS, and that is not the same as composing in EFFECT. For a flag the agent's parser reads once, the second contributor silently discards the first. It shipped: two features each contributed --append-system-prompt-file, claude kept the last, and the first feature's prompt never reached the system prompt while every observable read healthy -- mounts present and :ro, and the marker recording BOTH features, because the marker records what was PASSED. Sandy now consults a published policy table (--print-schema -> manifest.agent_args_compose) and, at TWO OR MORE contributors of a listed flag, merges them into a file it owns and mounts :ro, passing the flag once. A flag that REPLACES rather than appends is never merged -- the collision and the loser are named instead. At ONE contributor nothing happens and the argv is byte-identical to 2.2.0. agent_args_composed (session marker + --print-state) is the half that makes it visible, and answers a different question from agent_args: that one records what was passed, this one whether it can have taken effect. The launch also SAYS which features applied, without SANDY_VERBOSE. Before this a selected feature printed nothing and a skip was verbose-only, so "installed" and "applied to this sandbox" were indistinguishable at launch. Additive throughout: new emitted fields, a new --print-schema block, and a new mount in a case that previously lost data. Nothing was removed, so schema_version stays at 3 and README's ## Deprecated table is unchanged. SANDY_SANDBOX_MIN_COMPAT stays 2.0.0 -- within a major it may never advance above X.0.0, and nothing here touches persistent sandbox layout. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Drops the
-devsuffix:SANDY_VERSION2.2.1-dev→2.3.0. Tagv2.3.0follows the merge; a second PR then bumps to2.3.1-dev.What is in it
#363 —
agent_argscomposes in the argv sandy BUILDS, which is not the same as composing in EFFECT.For a flag the agent's parser reads once, the second contributor silently discards the first. That shipped, and was found in the field: two features each contributed
--append-system-prompt-file, claude kept the last, and the first feature's prompt never reached the system prompt — while every observable read healthy, mounts present and:ro, and the session marker faithfully recording both features, because the marker records what was passed.Sandy now consults a published policy table (
--print-schema→manifest.agent_args_compose) and, at two or more contributors of a listed flag, merges them into a file it owns and mounts:ro, passing the flag once. A flag that replaces rather than appends is never merged — the collision and the loser are named instead. At one contributor nothing happens and the argv is byte-identical to 2.2.0.agent_args_composed(session marker +--print-state) answers the questionagent_argsstructurally cannot: that one records what was passed, this one whether it can have taken effect.The launch also says which features applied, without
SANDY_VERBOSE— before this a selected feature printed nothing and a skip was verbose-only, so "installed" and "applied to this sandbox" were indistinguishable at launch.Also on
mainsince 2.2.0 and therefore in this release: #362 and #365, two acceptance harnesses that still installed the relay via the config key removed in 2.2.0. Test-only; neither changes the shipped script.Semver
Minor. Additive throughout: new emitted fields, a new
--print-schemablock, and a new mount in a case that previously lost data.schema_versionstays 3, and README's## Deprecatedtable is unchanged. No entry is added there, which the rules only permit in anX.0.0anyway.SANDY_SANDBOX_MIN_COMPATstays 2.0.0 — within a major it may never advance aboveX.0.0, and nothing here touches persistent sandbox layout. Existing 2.x sandboxes are unaffected and need no recreation.Verification
test/run-tests.shandtest/run-integration-tests.shby the maintainer: the only failures were§106(10a2)(fixed in feat(#363): compose agent_args flags the agent reads only once, and say which features applied #364 before merge) and the two pre-existing issues below.--print-versionon this branch:{"schema_version":3,"version":"2.3.0","commit":"af1488a","full_version":"2.3.0-af1488a"}.lint-bash32.shclean; all threeregen-*.sh --checkscripts clean.Known red, not fixed here
run-integration-tests.sh§14below-floor sandbox is hard-refused at launchhas been failing since 2.0.0: it greps sandy output for"refuses to launch against it", a phrase that last existed in v1.15.0. Its sibling,below-floor refusal happens before container launch, is vacuous — it greps for the absence of a launch banner, so it passes whether or not the refusal fires. Both should assert the property (non-zero exit beforedocker run; message names the remediation). Deliberately out of scope for a version-bump PR.🤖 Generated with Claude Code