Repository navigation
Sonnet 5.5 and Opus 5.5 dispatch: fan-out units on Sonnet 5.5, judgment on Opus 5.5, effort and default child model saved in settings (2.1.284 probes) - #479
Merged
Conversation
…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]>
…he 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]>
… 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]>
…ent 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]>
… change resolves Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
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]>
…ement Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…om 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]>
…cument 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]>
… 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]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
…ions 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]>
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]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
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]>
seathatflowsinourveins
deleted the
claude/sonnet55-dispatch-20260929
branch
September 29, 2026 02:35
seathatflowsinourveins
pushed a commit
that referenced
this pull request
Sep 29, 2026
…ion; relate the record to #479 and the effort guard A second read-only GPT-6 run with live search checked the vendor section against its sources and returned nine wording corrections (five low, four medium). The coordinator re-fetched Cognition's data.json, Anthropic's Sonnet 5.5 launch page (footnote 2) and Zapier's leaderboard (1.0.6) and applied all nine: the guidance sentence is scoped to the cited pages, the xhigh token saving carries its similar-performance context, the FrontierCode token, cost and time figures are labelled Main with the Extended figures beside them, Anthropic's two-case footnote is stated as two cases, Extended is an effective tie (63.58% against 63.53%), the Zapier figures carry their default-fallbacks label (42.47% against 35.77%), --bare skips automatic discovery, the two Claude Code results point in different directions without isolating skills or subagents, and the Opus 5.5 gain is stated as varying by benchmark. One suggestion (Cognition's tokens field as output tokens) could not be confirmed from the fetched sources and was not adopted. The header now names the rebase base (ba31dcd), quotes #479's addendum ("not adopted ... left to the user") as the trigger this record acts on, and describes how the effort guard treats a session that the launcher starts at max (SessionEnd returns at xhigh or above; the SessionStart warning is settings-derived and advisory). Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
5 tasks done
seathatflowsinourveins
added a commit
that referenced
this pull request
Sep 29, 2026
… max only when nothing chose an effort); receipt and decision record (#483) * Launcher: interactive terminal launches start at effort max (--effort max only when nothing chose an effort) Claude Code cannot save max (the 2.1.284 settings schema takes low, medium, high, xhigh for effortLevel and modelSettings) and CLAUDE_CODE_EFFORT_LEVEL would override every --effort, /effort and child effort, so the documented --effort flag is added by the launcher that install_native writes, in both bootstrap scripts (identical copies). It adds --effort max only when stdin and stdout are a terminal, no -p/--print (also as a short-flag cluster such as -pc), no --effort, CLAUDE_CODE_EFFORT_LEVEL unset, nothing after a "--", and the client reports 2.1.284 or newer (2.1.284 keeps Ultracode on at any effort level; on 2.1.281 a max session turned orchestration off). Another command name gets the plain launcher. Tests (tests/test_adoption_bootstrap.py): InteractiveEffortLauncherTests runs the generated launcher on real pseudo-terminals against a stub client that reports a version and records its exact arguments as JSON: a 27-case table (terminal, -p, --print, -pc, -cp, --, empty and multi-line arguments, explicit --effort, the effort variable, no terminal, pipes, clients from 2.1.281 to 3.0.1, unreadable version) and nine broken launchers that the table must reject. The pty helper kills and reaps a timed-out child and closes both descriptors on every path. Cross-family review (one GPT-6 read-only round) found five issues, all handled in one repair round: clusters, "--" and operands, the version floor, the leaking helper and a lossy recorder. Decision record: docs/decisions/2026-09-29-max-default-effort.md. Co-Authored-By: Claude Sonnet 5.5 <[email protected]> * Receipt claude-max-default-effort-20260929 and the decision record's evidence, reviews and vendor sections The native receipt (kind native_cli_e2e, component claude-code) built by a script that asserts every row against the client's own transcripts before writing: seventeen headless probes (saved xhigh baselines, --effort max, children, the --settings env layer, ultracode false, Haiku), four interactive terminal cases through a login shell on the installed launcher (max; xhigh after /effort xhigh; explicit --effort xhigh; claude -p in a terminal), the 2.1.284 binary's settings-schema windows and Ultracode gate, the repository tests re-run, and the host launcher's before/after hashes. An independent verifier re-derived the headless rows from the raw transcripts (17 of 17). The decision record gains the verified vendor and third-party max-against-xhigh measurements (30 of 40 claims confirmed, 10 corrected, none unsupported), the settings audit (31 of 36 rows confirmed, 5 corrected; nothing else to change), the one prior-art wrapper found, the review round and the corrected description of which interactive runs the receipt holds. Co-Authored-By: Claude Sonnet 5.5 <[email protected]> * Decision record: apply the cross-family fact-check of the vendor section; relate the record to #479 and the effort guard A second read-only GPT-6 run with live search checked the vendor section against its sources and returned nine wording corrections (five low, four medium). The coordinator re-fetched Cognition's data.json, Anthropic's Sonnet 5.5 launch page (footnote 2) and Zapier's leaderboard (1.0.6) and applied all nine: the guidance sentence is scoped to the cited pages, the xhigh token saving carries its similar-performance context, the FrontierCode token, cost and time figures are labelled Main with the Extended figures beside them, Anthropic's two-case footnote is stated as two cases, Extended is an effective tie (63.58% against 63.53%), the Zapier figures carry their default-fallbacks label (42.47% against 35.77%), --bare skips automatic discovery, the two Claude Code results point in different directions without isolating skills or subagents, and the Opus 5.5 gain is stated as varying by benchmark. One suggestion (Cognition's tokens field as output tokens) could not be confirmed from the fetched sources and was not adopted. The header now names the rebase base (ba31dcd), quotes #479's addendum ("not adopted ... left to the user") as the trigger this record acts on, and describes how the effort guard treats a session that the launcher starts at max (SessionEnd returns at xhigh or above; the SessionStart warning is settings-derived and advisory). Co-Authored-By: Claude Sonnet 5.5 <[email protected]> * Launcher tests: keep the parent's slave descriptor open until the terminal is read (macOS discards unread output at the last slave close) On the macos-15 runner (run 36512404577, job validate-macos) the three InteractiveEffortLauncherTests cases failed with an empty capture: the helper closed its copy of the slave right after starting the launcher and read the master only after the child had exited. XNU's ptsclose calls ttyclose, whose ttyflush(tp, FREAD | FWRITE) empties both queues at the last close of the slave, so the stub's two lines were gone before the read; Linux keeps them, which is why the same tests passed there. The helper now holds the slave open, reads the master while the launcher runs (it stops when the stub's two lines are in, or when the child has exited and nothing more arrives), captures stderr, and puts it in the failure message. The Linux run of the class passes (3 tests); the macOS result is the next CI run. Co-Authored-By: Claude Sonnet 5.5 <[email protected]> * Register the launcher change, its tests and the receipt in manifests/evidence.json (hot-file commit, last) Receipt entry claude-max-default-effort-20260929 (native_cli_e2e, claude-code) and the hashes of the six changed or new files, on top of main's manifest at ba31dcd (docs/lanes.md protocol: main's copy, register each file, component_matrix and new_host_grand_list --write; validate.py passes: 69 components, 7993 hashed files, 167 receipts). Co-Authored-By: Claude Sonnet 5.5 <[email protected]> --------- Co-authored-by: Scout <scout@local> Co-authored-by: Claude Sonnet 5.5 <[email protected]>
This was referenced Sep 29, 2026
5 tasks done
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.
Scope
sonnetalias mean Sonnet 5.5, it saves the coordinator effort per model (xhigh) and defaults an unnamed child to Opus, states which fan-out units may run on Sonnet 5.5 (units an executable oracle or a later Opus stage checks; every judgment stays on an Opus 5.5 stage), giveschild-usage.mjsthe sonnet and fable alias rows, stops the effort guard from assumingultracode: trueruns a session at xhigh, scopes every statement about Ultracode and effort to the client version that measured it, and records the decision with a native receipt (27 probes and two session counts on 2.1.284).6d626654(origin/mainat the last rebase, which includes Claude Code floor 2.1.281 -> 2.1.284: sonnet means Sonnet 5.5; pins verified against the signed manifest #477)lane:foundation. The only shared hot file ismanifests/evidence.json, by hash registration in the last commit.AGENTS.mdis not touched here; its one stale sentence (three clauses, listed in the record) goes in a separatelane:sharedpull request. The Claude Code floor raise to 2.1.284 was its own pull request, Claude Code floor 2.1.281 -> 2.1.284: sonnet means Sonnet 5.5; pins verified against the signed manifest #477 (merged as6d626654, base of this branch)..claude/settings.json,adoption/templates/claude.settings.template.json,adoption/hooks/claude/effort-default-guard.pyand itsSHA256SUMS,docs/decisions/2026-09-23-max-effort-default.md(dated addendum),docs/decisions/2026-09-27-model-currency.md(one count corrected: the Sonnet child made 38 assistant messages, not 82),docs/decisions/2026-09-29-sonnet-5-5-dispatch.md(new),docs/harness-defaults.md(three anti-pattern rows),evidence/receipts/claude-model-effort-probes-20260929.json(new),examples/claude-native/CLAUDE.md,examples/claude-native/ultracode.settings.json,examples/claude-native/workflows/{README.md,child-usage.mjs,test-child-usage.mjs,test-envelope.mjs,test-contract-mutations.mjs,SHA256SUMS}(the three test files: a fixture expectation and comments),recipes/claude-native-profile.md,recipes/claude-native-ultracode.md,tests/test_effort_default_guard.py,tests/test_install_claude_profile.py,manifests/evidence.json.SOTA sources
CHANGELOG.md, "Added Claude Sonnet 5.5 (claude-sonnet-5-5), now the default Sonnet model on the Anthropic API" and "Changed Ultracode into its own toggle in /effort: it no longer forces xhigh effort and stays on at any effort level") and its documentation, read 2026-09-28 and 2026-09-29: model-config (alias version history, "Adjust effort level", automatic fallback), settings reference (ultracode,effortLevel), env-vars (CLAUDE_CODE_SUBAGENT_MODEL), sub-agents, advisor, costs, workflows.docs/decisions/2026-09-23-max-effort-default.md), repeated on 2.1.284.Evidence-class table
ultracodesetting neither sets nor overrides effort on 2.1.284 (a per-model level passed with--settingswins; a projecteffortLevelormodelSettingsentry applies; the user-scope top-leveleffortLeveldid not reach a Sonnet 5.5 session); a child that names no model runs the lead's;CLAUDE_CODE_SUBAGENT_MODEL=opusputs it on Opus; in an interactive session at max every child that named no effort ran at maxnative_proven(one host, one client version, Agent-tool children for the environment default)claude-model-effort-probes-20260929(29 cases; the extractors in its provenance,extract_all.pyandextract_interactive.py, reproduce every row from the client's own transcripts, with a digest per retained script); the host read-back after the settings change is cases D1 to D3source_reviewlocal_integrationpython3 -m unittest tests.test_effort_default_guard(28 tests), with the builder's negative control: exactly three new tests fail against the unchanged guardlocal_integrationnode examples/claude-native/workflows/test-child-usage.mjs(101 cases; 4 fail against the unchanged file)Local commands run
The full
python3 -m unittestfails the same 302 test ids on clean main on this workstation (a worktree under/tmp, host tooling); CI'svalidatejob is the authority.Decision record
docs/decisions/2026-09-29-sonnet-5-5-dispatch.md(alternatives considered, overturn conditions and unresolved items are in it). Reviews: one read-only GPT-6 Astra review at max (12 findings) and three independent Opus 5.5 reviewers at max (evidence fidelity, reproduction with negative controls, pins and consistency; 41 findings, several duplicates); a first repair round (receipt regenerated from the transcripts, guard and child-usage, instructions and records); an Opus 5.5 re-check of that repair (1 high, 3 medium, 7 low findings: a false statement thatchild-usage.mjsflags a Sonnet 5 child on an older client, an inference from two project agents whose definitions declare effort max, a recipe procedure that contradicted its own 2.1.284 update, and the missing coordinator condition in the portable CLAUDE.md, among others); and a second repair round that fixed all eleven. A last cross-family check of the second-round head (52d11856: one read-only GPT-6 Astra review at max) closed the review loop; nothing was reviewed after its repair. It returned no high finding, four medium and one low. One medium was the receipt not yet being registered (the deferred hot-file step, done in the last commit). The other four were confirmed against the repository text or the documentation and repaired in one commit (90f4a719, one-line text edits): the recipe now states the documented model order for a stage that names no model (definition,CLAUDE_CODE_SUBAGENT_MODEL, lead); a Sonnet coordinator no longer verifies teammate claims itself (the lead has any claim verified on Opus); 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.Residuals (recorded, not repaired here)
~/.claude/CLAUDE.mdcarries this branch's first-round Quality, Ultracode and agent-team text, not the second-round wording (coordinator condition, teammate effort, one Opus list). The sync is held at the request of the session that owns the max-effort default (native-agent-stack-03), whose rule will change the same bullets; it lands with the follow-up that also carries theAGENTS.mdline 35 pull request.AGENTS.mdline 35 (three clauses the record lists) and the--effort ultracodeand--effort maxplusultracode: falseforms are not probed here; the latter is covered by the other session's receipt once it is published.Applied outside the repository (host, not tracked)
~/.claude/settings.json:modelSettings.claude-sonnet-5-5.effortLevel = xhighandenv.CLAUDE_CODE_SUBAGENT_MODEL = opus; the user'smodel,advisorModeland every other key untouched; backup.bak-20260929-dispatch; read back with fresh headless sessions (receipt cases D1 to D3).~/.claude/hooks/effort-default-guard.pyreinstalled from this branch withtools/adoption/install_claude_profile.py --only guard(the other eight hook files already matched); backup.bak-20260929-dispatch.~/.claude/CLAUDE.md: the Quality, Ultracode and agent-team bullets take this branch's first-round text (backup.bak-20260929-dispatch, read back: the retired sentences are gone, the new ones present); see the residuals above for the held second-round sync.For the Gate A owner
Nothing here edits a #381 file or a role body. It does change the environment a sealed run inherits: the project
effortLevel: xhigh(this PR), the host settings above, and the guards of #470. See the comment on #381 aboutRUNBOOK.mdline 222 (arms launched with no--model; this host's default is thesonnetalias, Sonnet 5.5).Host evidence
Not applicable: no files under
evidence/hosts/change.Checklist
🤖 Generated with Claude Code