Skip to content

Claude Code floor 2.1.281 -> 2.1.284: sonnet means Sonnet 5.5; pins verified against the signed manifest - #477

Merged
seathatflowsinourveins merged 3 commits into
mainfrom
claude/claude-code-floor-2-1-284-20260929
Sep 29, 2026
Merged

seathatflowsinourveins merged 3 commits into
mainfrom
claude/claude-code-floor-2-1-284-20260929

Conversation

@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator

Scope

  • What this PR changes, in one or two sentences: raises the native Claude Code floor from 2.1.281 to 2.1.284 in both platform pins, manifests/stack.json, the adoption docs and the floor tests, because 2.1.284 is the first release whose sonnet alias resolves to Sonnet 5.5 on the Anthropic API (an older client routes it to Sonnet 5). Both pins are re-verified against the publisher's signed manifest: signature checked, both platform binaries re-hashed from their pin URLs.
  • Base commit: 11648f9a (origin/main at the last rebase; a git merge-tree against it is clean)
  • Lane: lane:shared. It changes what a shared hot file says (manifests/stack.json: the claude-code version and its freshness text), so it needs the trading lane's acknowledgement before merge; the rest is foundation-lane. The hot-file commit is last.
  • Owned paths touched: adoption/{bootstrap.md,bootstrap-linux.sh,bootstrap-macos.sh,pins-linux-x86_64.json,pins-macos-arm64.json}, adoption/platforms/{linux-wsl2.md,macos-arm64.md}, blueprints/token-native-focus/saturation-audit.json (tied to stack.json by test_stack_lifecycle), catalogs/landscape/upstream-snapshot.json (one row), docs/decisions/2026-09-23-claude-user-profile.md (dated addendum), tests/test_adoption_bootstrap.py, tests/test_adoption_bootstrap_macos.py, tests/test_adoption_status.py; shared: manifests/stack.json, manifests/evidence.json (hash registration), and the regenerated catalogs/landscape/new-host-grand-list.json and docs/new-host-grand-list.md.
  • Not touched: every model routing rule, agent definition, workflow and the PR-H: E2E preregistration for the token-save-practice stack (frozen tasks, metrics, gate, procedure) #381 files. The Sonnet 5.5 dispatch decision is a separate pull request (claude/sonnet55-dispatch-20260929); this one only makes the client floor match it.

SOTA sources

  • Publisher release manifest and binaries: https://downloads.claude.ai/claude-code-releases/2.1.284/manifest.json (version 2.1.284, commit 2b8ce618c24de26410e4bdfc4e1d592accd61f61, buildDate 2026-09-28T02:36:51Z) with its detached signature manifest.json.sig, and the documented verification procedure in the setup page, Binary integrity and code signing (key https://downloads.claude.ai/keys/claude-code.asc, fingerprint 31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE).
  • anthropics/claude-code CHANGELOG.md 2.1.284 ("Added Claude Sonnet 5.5 (claude-sonnet-5-5), now the default Sonnet model on the Anthropic API"), release v2.1.284 (published 2026-09-28T18:02:03Z, tag commit 8364969e9f5234ef3d9743cf7c790e9aab0ac3b1), and the model-config version-history table (sonnet is Sonnet 5.5 from v2.1.284, Sonnet 5 from v2.1.197), all read 2026-09-29.
  • The channel pointers https://downloads.claude.ai/claude-code-releases/latest (2.1.284) and /stable (2.1.277), read 2026-09-29.

Evidence-class table

Claim Evidence class Command / receipt
The manifest's GPG signature is good for 2.1.284 and 2.1.281, and fails for a copy with one byte changed native_proven (this host, gpg 2.4.4, an empty keyring) the procedure in the linked setup page; the pins' checksum_ref and install_note and the 2026-09-23 record's addendum state the result; the negative control returned BAD signature, rc 1
The linux-x64 and darwin-arm64 binaries served at the pin URLs hash to the manifest's values (243059896 and 226563088 bytes) native_proven (streamed and hashed on 2026-09-29, nothing executed) the same two values are in the pins; the installed linux 2.1.284 binary also hashes to the linux value
Apple's code signature on the darwin-arm64 binary, and the key's own certification, expiry and revocation not claimed no macOS host here; the fingerprint comes from the same documentation
The pins, docs and fixtures agree on 2.1.284, and the floor tests fail against the old pin local_integration the four adoption modules (361 tests), the new tie tests with a negative control (each fails with the pin set back to 2.1.281)
The claude-code snapshot row matches GitHub source_review the three checks were re-run with gh api (gh 2.101.0, the file's stated client); the response fields equal the row

Local commands run

$ python3 -m unittest tests.test_adoption_bootstrap tests.test_adoption_bootstrap_macos tests.test_adoption_status tests.test_adoption_docs_consistency
exit 0  Ran 361 tests, OK (skipped=33, the same 33 as clean main)
$ python3 -m unittest tests.test_stack_lifecycle tests.test_new_host_grand_list tests.test_component_matrix tests.test_foundation_catalog tests.test_landscape tests.test_catalog_freshness_pins tests.test_foundation_stack_pins tests.test_adoption_version_probes
exit 0  Ran 248 tests, OK (skipped=8)
$ python3 -m unittest <the three pre-push registry tests, zizmor on PATH>     exit 0  Ran 3 tests, OK
$ python3 scripts/validate.py                    exit 0  {"components": 69, "hashed_files": 7987, "profiles": 4, "receipts": 165, "status": "passed"}
$ python3 scripts/landscape.py --root .          exit 0
$ python3 scripts/component_matrix.py --check ; python3 scripts/new_host_grand_list.py --check    exit 0 and exit 0

Decision record

docs/decisions/2026-09-23-claude-user-profile.md, "Addendum (2026-09-29)": its overturn condition (a documented signature procedure and public key) is met. Reviews: the branch was built by a Sonnet 5.5 builder (its tests as the oracle) and reviewed once by an independent Opus 5.5 reviewer at max, which confirmed every pin, checksum, URL, size and tag claim and found one medium and seven low text or provenance findings (a false "no published key or procedure" statement, a rtk comparison, provider scope of the alias claim, the publisher's stable channel, the snapshot's client, a stale date, the commit order, a fixture pin with no tie). All were repaired in one round: the signature is now verified, the darwin binary re-hashed, the snapshot row re-run with gh api, the tie tests added and the shared-file hunk moved to the last commit.

Host evidence

Not applicable: no files under evidence/hosts/ change.

Not verified

Apple's codesign result and notarization of the darwin-arm64 binary; the manifest's manifestSignatureEnforcement: "flag" field (what it changes is not documented); the key's certification, expiry and revocation.

Checklist

  • No new or changed GitHub Actions.
  • No new or changed workflows.
  • No secrets are printed, logged or committed; no new required secret was added.
  • No new paid hosting, subscription or billing surface was introduced.
  • Peer-owned untracked files and worktrees were preserved.

🤖 Generated with Claude Code

Scout and others added 3 commits September 28, 2026 21:41
…ests

2.1.284 is the first release whose `sonnet` alias resolves to Sonnet 5.5 on the Anthropic API
(CHANGELOG.md 2.1.284; model-config version history), so an older client routes the alias to
Sonnet 5. Both platform pins move together. The pins' values equal the 2.1.284 manifest
(commit 2b8ce618, built 2026-09-28): linux-x64 5cd90aab... and darwin-arm64 50a14c2f....
Verified on 2026-09-29: the manifest's GPG signature with the documented key and fingerprint
(a one-byte-changed copy fails), the darwin-arm64 and linux-x64 binaries streamed from the pin
URLs and re-hashed to the manifest values, and the updater-installed linux binary. Not verified:
Apple's code signature (no macOS host) and the key's own certification. macOS checksum_source is
manifest_crosscheck again (manifest value plus a re-hash of the served binary). The floor tests
move with the pin and now fail if their fixture pin drifts from the real pin file; the 2026-09-23
record gains an addendum because its overturn condition (a documented signature procedure and
key) is met.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
The row's three checks (repo, releases/latest, commits/v2.1.284) were re-run with gh 2.101.0,
the client the file's methodology names; the response fields equal the row's (latest stable
v2.1.284, published 2026-09-28T18:02:03Z, tag commit 8364969e, pushed_at 2026-09-29T00:05:54Z).
The stdout hashes are those of the authenticated gh api bodies.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…eports

The shared hot files of this lane change here, in the last commit: manifests/stack.json (the
claude-code version and its freshness text, which now names the latest GitHub release and the
publisher's latest channel separately from its stable channel), the hashes of the files this
branch changes in manifests/evidence.json, and the regenerated new-host grand list.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
@seathatflowsinourveins seathatflowsinourveins added the lane:shared Touches files owned by both lanes; needs both lanes' acknowledgement label Sep 29, 2026
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Trading lane acknowledgement (docs/lanes.md shared-file rule). Reviewed at head 0d7a15b6 by ecosystem-roadmap-2026, which has held the trading lane since 2026-09-29 about 00:45Z on the user's instruction.

  • Trading paths: none of the 17 changed files is trading-owned. A gh pr diff 477 --name-only check against the Trading row of docs/lanes.md:25 and the trading tests found 0 hits.
  • Shared content: the only shared-file content change is the claude-code version and freshness text in manifests/stack.json. The paper engine and its units run in the Nautilus venv and do not depend on the Claude Code floor.

No objection.

@seathatflowsinourveins
seathatflowsinourveins merged commit 6d62665 into main Sep 29, 2026
27 checks passed
@seathatflowsinourveins
seathatflowsinourveins deleted the claude/claude-code-floor-2-1-284-20260929 branch September 29, 2026 02:06
seathatflowsinourveins added a commit that referenced this pull request Sep 29, 2026
…nt on Opus 5.5, effort and default child model saved in settings (2.1.284 probes) (#479)

* Settings: pin the coordinator effort at xhigh and default an unnamed child to Opus

Claude Code 2.1.284: ultracode neither raises nor overrides effort, so a Sonnet 5.5
session with no saved level ran at medium; a stage that names no model runs the lead's.
The project and portable settings carry effortLevel xhigh; the template pins
claude-sonnet-5-5 at xhigh and sets CLAUDE_CODE_SUBAGENT_MODEL=opus (the portable file
does too, the project file leaves the host layer to). Tests added.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Instructions: Sonnet 5.5 fan-out units, the default child model and the measured effort rule

The portable instructions and the workflows README state which units may run on Sonnet 5.5
(oracle- or Opus-checked fan-out), keep every judgment on Opus, and record the 2.1.284
effort and inheritance findings. The instruction word budget is re-baselined to 1,310.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Decision record and receipt: Sonnet 5.5 and Opus 5.5 dispatch, effort and the default child model

Adds docs/decisions/2026-09-29-sonnet-5-5-dispatch.md, the probe receipt
claude-model-effort-probes-20260929, a dated addendum to the 2026-09-23 record and two
anti-pattern rows.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* child-usage: document how the sonnet and fable aliases resolve by client version

ALIAS_RESOLUTION had rows for opus only, so a child that requested sonnet but
ran an older Sonnet than its client version documents was not flagged as
substituted. Add sonnet (Sonnet 5 from v2.1.197, Sonnet 5.5 from v2.1.284) and
fable (Fable 5.1 from v2.1.257) from the model-config doc's version history
table (fetched 2026-09-29). haiku and any alias without rows still have no
expectation.

test-child-usage.mjs: the "alias without rows" case moves from sonnet to
haiku; the opus table's sonnet clause takes the documented value
(claude-sonnet-5 on 2.1.281) and gains a haiku-is-null clause; new cases cover
the sonnet and fable version tables, a whole child on claude-sonnet-5 under
2.1.284 (older than documented), claude-sonnet-5-5 under 2.1.284 and
claude-sonnet-5 under 2.1.283 (complete), and a change from claude-sonnet-5-5
to claude-sonnet-5 within one child. 95 -> 101 cases.

SHA256SUMS lines for both files regenerated. manifests/evidence.json is left
to the integrating coordinator.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Record: close the two open items of the 2026-09-28 addendum that this change resolves

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Effort guard: stop assuming `ultracode: true` runs a session at xhigh

Claude Code 2.1.284 (measured 2026-09-29): ultracode neither sets nor overrides
a per-model effort level. An unsaved claude-sonnet-5-5 session ran at medium under
the host settings and the guard stayed silent, because resolve() returned xhigh for
any settings file with `ultracode: true`. That also kept the SessionEnd healer from
saving a level, since it only saves when resolve() gives none.

- resolve(): drop the ultracode branch. The level now comes only from
  CLAUDE_CODE_EFFORT_LEVEL, the highest-precedence saved modelSettings or applicable
  top-level effortLevel, and the maxEffortLevel caps. No other logic changed.
- Docstring: record the 2.1.284 measurement and that 2.1.281 behaved differently
  (docs/decisions/2026-09-23-max-effort-default.md stays as history).
- Tests: an unsaved Sonnet 5.5 under ultracode now warns; a saved xhigh stays silent;
  a saved lower level still warns; under ultracode the healer saves xhigh when nothing
  is saved, and respects a saved low.
- SHA256SUMS: regenerate the effort-default-guard.py line.

The installed host copy (~/.claude/hooks/effort-default-guard.py) is not touched here.
Refresh it with tools/adoption/install_claude_profile.py --only guard; until then
test_shipped_guard_is_verbatim fails on a host that has the old copy installed.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Profile recipe: dated 2.1.284 correction to the Ultracode effort statement

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Receipt: count each assistant message once and reproduce every row from the transcripts

The 2026-09-28 model-currency addendum counted the Sonnet child's 82 transcript rows as
messages; it made 38 (all claude-sonnet-5-5 at max), and the first receipt drafts carried the
same kind of row counts (299 for the coordinator). The receipt is regenerated by a script that
asserts every row (model, effort, reminder lines, message count, client version) against the
native transcripts before writing, takes the run times from them, and embeds one extractor per
kind (headless cases, interactive cases) with a per-script digest. Its claim now separates the
headless findings from the interactive one (the lead's max reached every child, the Opus ones
included), scopes the effort findings to the setting form and to levels passed with --settings,
and counts 27 probes and two session observations. The addendum's count is corrected and the
mistake goes in the anti-pattern log.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Guard and child-usage: name the models the user-scope key reaches, document the same-family alias

The SessionStart warning said a user-settings top-level effortLevel does not apply to Opus 5.5
and later; it applies only to Opus 5, Fable 5.1 and earlier models (Sonnet 5.5 ran at medium
under a top-level xhigh, receipt case A1). The guard's docstring cites the documentation of the
2.1.284 change and scopes its ultracode rule to 2.1.284 and later. child-usage.mjs no longer
says a stage without effort inherits the coordinator's xhigh, and its alias table notes the
documented same-family exception (a family alias resolves to the lead's exact model when the
lead belongs to that family). test-envelope.mjs states the documented order for a stage that
names no model. Both SHA256SUMS files are regenerated and the host guard copy reinstalled.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Instructions and records: scope every 2.1.284 statement and align the Sonnet rule across files

Repairs the findings of one GPT-6 and three Opus 5.5 reviews of this branch. The workflow
contract, the routing table, the recipes, the portable CLAUDE.md and the dated addendum now
state the Ultracode and effort behaviour with its version (2.1.284: the setting leaves effort
unchanged, --effort ultracode still sets xhigh, Ultracode stays on at other levels; 2.1.281
statements are history). The portable Quality bullet lists the same Sonnet classes and
conditions as the README (a test oracle alone never clears a Sonnet build); the coordinator
model is stated once (Opus 5.5 by default, a Sonnet 5.5 coordinator sends each judgment to an
opus stage). The record quotes the system card and the benchmark pages with their scope (the
three Terminal-Bench 4.0 evaluations disagree and differ in more than the harness, the
FrontierCode result for max, the Vals cost and latency figures, the welfare-section figure it
no longer leans on), names the floor change's branch, records the guard and CLAUDE.md host
steps, and corrects the sealed-run and RUNBOOK statements. The instruction word budget is
re-baselined to 1,356.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Record: state the base commit the branch was reviewed against

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Repair round 2: separate what the receipt shows from what the definitions explain, fix the child-usage and coordinator statements

Applies the second-round review of this branch. The interactive inheritance finding is limited
to the children that named no effort (C1, C3 to C6); the project agents of C2 and C8 declare
effort max, so they show the definition, and the receipt, the record, the README, the recipe
and the addendum now say so. The record no longer says child-usage.mjs flags a Sonnet 5 child
on a client older than 2.1.284 (its alias table records that as the documented resolution) and
tells the operator to check `claude --version` before routing a stage to `sonnet`; it names the
floor pull request (#477). The portable CLAUDE.md gains the coordinator condition (a Sonnet 5.5
session hands each judgment to an opus-named stage), one Opus list and one build condition
across README, CLAUDE.md and the record, and the teammate effort follows the lead's session
effort. The recipe's remaining 2.1.281 statements are dated, the non-orchestrated max session
uses the 2.1.284 form (documented, not probed together with --effort max), the settings
example's description lists the two added keys, test comments no longer carry the retracted
rationales, the shell row drops the speed advantage (Vals' Terminal-Bench 4.0 data lists higher
latency and output tokens for Sonnet 5.5), the overturn conditions name measurements this
repository can make, and the anti-pattern row stops citing a generator the repository does
not retain. The instruction word budget is 1,372.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Repair round 3: the confirmed findings of the cross-family check

A read-only GPT-6 Astra review at max of head 52d11856 returned four medium and one low finding
and no high one; four are confirmed against the repository text or the documentation and are
one-line edits, and the fifth (the receipt not yet registered) is the deferred hot-file step.
The recipe states the documented model order for a stage that names no model (definition, then
CLAUDE_CODE_SUBAGENT_MODEL, then the lead) instead of the lead alone. A Sonnet coordinator no
longer verifies teammate claims itself: the lead collects results and has any claim verified on
Opus, in the portable CLAUDE.md and the record's teammate row. The two test comments scope the
headless observation and state frontmatter precedence and the interactive case. The README
carries the same Haiku statement as the portable instructions. The record notes that the floor
pull request has merged.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Record: state the base commit after the floor pull request merged

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

* Hot files: evidence registration for the dispatch branch

Registers the dispatch receipt and the hashes of the files this branch changes on the
current main copy of manifests/evidence.json, the only shared hot file this lane touches.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

---------

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Sonnet 5.5 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:shared Touches files owned by both lanes; needs both lanes' acknowledgement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant