Skip to content

Model currency 2026-09-27: per-lane decision record, model-fallback guards, advisor template - #434

Closed
seathatflowsinourveins wants to merge 9 commits into
mainfrom
claude/w5-model-currency-20260927
Closed

seathatflowsinourveins wants to merge 9 commits into
mainfrom
claude/w5-model-currency-20260927

Conversation

@seathatflowsinourveins

@seathatflowsinourveins seathatflowsinourveins commented Sep 27, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Records the 2026-09-27 model-currency check the user asked for ("only the latest SOTA models, even the latest ones
released in the past weeks") and closes three routes by which work could run on an older model or lose its advisor.

  • docs/decisions/2026-09-27-model-currency.md: one decision table per lane and role. Every routed model is the
    newest in its family on 2026-09-27, so no row switches. Four rows hold a newer model behind an upstream gate:
    jina-reranker-v3.5 for qmd, Nemotron-3-Embed-1B for ai-memory, Claude Sonnet 5.5 and Haiku 5.5 (announced, no model
    ID), and Opus 5.5 on OmniRoute (the gateway lists no claude-opus-5-5, so Opus-role stages stay on native Claude
    Code).
  • Fallback guards: .claude/settings.json and examples/claude-native/ultracode.settings.json, plus the recipe's
    embedded copy, now carry "switchModelsOnFlag": false and env.CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK = "1", the
    template's two guards. Before this, a session that loaded only this repository's files, or an adopter who ran
    claude --settings with the portable file, could re-run a flagged Opus 5.5 or Fable request on Opus 4.8 or Opus 5.
  • Advisor: adoption/templates/claude.settings.template.json sets "advisorModel": "fable", so a new host that
    applies the template gets the Fable 5.1 advisor the user's rule assigns.
  • Catalog: the isolated-builder label in lean-workflow-child-routing changes from "Sonnet/max" to "Opus/max",
    matching all three agent definitions.
  • llama.cpp: the pin stays at b11057. v0.5.0 is b11146 (commit 7fe450e1), but the paired acceptance of the
    2026-09-25 re-pin gate has not run. The record notes the divergence, the review status of the 2026-09-26 receipts
    and that acceptance as the one gate still open.
  • Workstation refresh record: one dated line closes its bin/vllm follow-up on this host, from the coordinator's
    host observation.

Scope

  • Base commit: bfdc99cb (origin/main at the last replay, after #381 PR-A: token-adoption measurement kernel (M3/M4/M5, RTK eligibility, MCP attempt states) #432). The branch was cut from
    ec8a48927c5d2536a57884f7f163c2d13770e7e2, the commit that the failing-first runs below name.
  • Lane: lane:foundation. Every changed path is foundation-owned (docs/lanes.md). The only shared hot file,
    manifests/evidence.json, changes by hash registration alone, which "does not by itself make a PR shared".
  • Owned paths touched: .claude/settings.json, adoption/templates/claude.settings.template.json,
    catalogs/foundation/decisions.json, docs/decisions/2026-09-25-workstation-sota-refresh.md (one dated line),
    docs/decisions/2026-09-27-model-currency.md (new), examples/claude-native/ultracode.settings.json,
    recipes/claude-native-ultracode.md, tests/test_foundation_catalog.py, tests/test_install_claude_profile.py,
    and manifests/evidence.json (hot-file commit only).

Changes

Current shas, after the replay onto bfdc99cb, oldest first:

  1. f21012c2 Model currency record: the method (three Opus research units, one adversarial refuter each and one
    synthesis), the decision table, the holds and their gates, the fallback guards, the advisor, the isolated-builder
    label, the llama.cpp divergence, evidence classes, alternatives, overturn conditions, unresolved items and
    limitations.
  2. 94d5c607 Fallback guards in the committed project and portable Ultracode settings, and in the recipe's embedded
    copy and prose. New CommittedSettingsFallbackGuardTests: both files carry the template's value and form, and the
    recipe embeds the portable file without $schema.
  3. 0f219fc5 "advisorModel": "fable" in the Claude profile template. New
    test_the_advisor_is_fable_and_accepted_for_the_main_model: the value is fable, the main model is Opus (the
    pairing table accepts Fable for it), and the template sets none of the variables that turn off feature-flag fetching
    or the advisor.
  4. cda311e5 Foundation catalog label isolated-builder (Opus/max). New CheckedInAgentLabelTests: every
    "agent (Model/effort)" label in the foundation decisions must match that agent's frontmatter. The test reads the
    frontmatter with a regex, so it does not need PyYAML.
  5. c5af2cc8 Hot-file commit: scripts/host_receipts.register_file for the eight changed files only (19 insertions
    and 14 deletions: two fields for each of seven updated entries and five lines for the new one). component_matrix.py --write and new_host_grand_list.py --write produced no content change. manifests/stack.json is unchanged.
  6. 28a4b0b9 and 302fe71d Review repair (one round). The record states the review status of the 2026-09-26 llama.cpp receipts:
    independent agree for the current install and use receipts, needs_changes for the superseded first install
    receipt, and a stale "only self reviews" sentence in the serving-switch receipt. It keeps the paired acceptance as
    the one re-pin gate. It adds deniedModels as alternative 4, names it in the guards' Overturn, and closes the
    bin/vllm follow-up, in the record and with one dated line in the workstation refresh record. 302fe71d narrows
    the record's bin/vllm evidence row to "no receipt in the repository". Neither commit touches
    manifests/evidence.json; the two edited records need re-registration.
  7. 152548f6 GPT-6 review repair (one round; see Independent review). The embedding row now says qmd 2.8.3
    formats Qwen3-Embedding as well as EmbeddingGemma and loads other models through QMD_EMBED_MODEL, and it
    cites the Gemma releases page for the 2025-09-04 date. The query-expansion row lists
    tobil/qmd-query-expansion-0.6B-gguf (2026-04-24) as a candidate for evaluation, not a switch. The llama.cpp row
    limits its claim to li26's arms and proxy workload. The main-session row gives the coordinator's xhigh.
    17d3d8fc re-registers the record in the hot-file commit, which stays last.

Evidence

Claim Evidence class Command / receipt
Model release dates and current routing recommendations source_review Anthropic release notes, models overview, model deprecations and the Opus 5.5 announcement; the OpenAI API changelog; the Hugging Face cards and GitHub releases cited in the record, all re-fetched 2026-09-27
Claude Code 2.1.283 is the latest client source_review (platform record) npm registry dist-tags.latest = 2.1.283 (published 2026-09-25T18:46:11Z); the newest CHANGELOG heading at 7779afb1
The gateway serves no Opus 5.5 local_integration (read-only native call) GET /v1/models on the loopback gateway, 2026-09-27: 582 IDs, 55 of them Claude, none with opus-5-5
Both guard keys exist; the setting's scope; the variable's effect and scope source_review settings reference and model-config (fetched 2026-09-27); the installed 2.1.283 client (jD, orn, IAr, Rhn, Qzn); not probed
The committed settings carry the guards; the recipe matches the portable file synthetic (structural test, failing first) CommittedSettingsFallbackGuardTests
The template's Fable advisor pairs with its main model synthetic (structural test, failing first) test_the_advisor_is_fable_and_accepted_for_the_main_model
Foundation decision labels match the agent definitions synthetic (structural test, failing first) CheckedInAgentLabelTests
llama.cpp tag identities source_review (platform record) gh api git/ref/tags/b11057, b11146, v0.5.0, git/tags/c13fcbf6 and releases/latest, 2026-09-27
Review status of the 2026-09-26 llama.cpp receipts; no later llama.cpp receipt source_review (repository records) the reviews and limitations fields of the three host receipts under evidence/hosts/nativestack-5975wx-20260925/ and of evidence/receipts/local-inference-c2-serving-switch-20260926.json; the origin/main tree and manifests/stack.json, read 2026-09-27 (the record names the commit)
deniedModels (2.1.283) is managed-only; that denying the older Opus IDs would stop the fallback to them without disabling the opus wildcard is an inference source_review (not probed) CHANGELOG at 7779afb1, lines 6-7; settings reference, deniedModels; model-config lines 350, 353, 364 and 517 (Markdown source, fetched 2026-09-27)
The host's bin/vllm link points at the 0.30.0 prefix local_integration (the coordinator's host observation; no receipt in the repository) repointed 2026-09-27T19:21:18Z; the 0.25.0 prefix is retained and no systemd unit uses the link

No native run backs the guard or advisor changes. No request was flagged on purpose, because deliberately tripping a
safety classifier is not an acceptable test, and no session was started with the changed files.

The table uses this template's four classes. The committed record names the same evidence in its own terms: its
structural_validation rows are the synthetic rows here, its "independent observation (platform record)" rows are
the source_review (platform record) rows, its "native operation (read-only)" gateway call is the first
local_integration row, and its "the coordinator's host observation (no receipt in the repository)" row is the
bin/vllm row. Both describe the same claims.

Local commands run (unit outputs are kept in the unit's notes). The four new tests are
tests.test_install_claude_profile.CommittedSettingsFallbackGuardTests,
tests.test_install_claude_profile.ProfileTemplateSettingsTests.test_the_advisor_is_fable_and_accepted_for_the_main_model
and tests.test_foundation_catalog.CheckedInAgentLabelTests.

$ python3 -m unittest -v <the four new tests>   # ec8a4892 with the two test files from 75d4edaa
exit 1; Ran 4 tests; FAILED (failures=4)
  CommittedSettingsFallbackGuardTests (path='.claude/settings.json'): None != '1'
  CommittedSettingsFallbackGuardTests (path='examples/claude-native/ultracode.settings.json'): None != '1'
  test_the_advisor_is_fable_and_accepted_for_the_main_model: None != 'fable'
  CheckedInAgentLabelTests (lean-workflow-child-routing, isolated-builder): ('sonnet', 'max') != ('opus', 'max')
$ python3 -m unittest -v tests.test_install_claude_profile.CommittedSettingsFallbackGuardTests
  # the same, plus both settings files from 75d4edaa, recipe still at ec8a4892
exit 1; Ran 2 tests; FAILED (failures=1)   # test_the_recipe_embeds_the_portable_settings_file
$ python3 -m unittest -v <the four new tests>   # at 75d4edaa
exit 0; Ran 4 tests; OK
$ TMPDIR=/var/tmp/claude-models python3 -m unittest -q tests.test_install_claude_profile tests.test_foundation_catalog   # at 75d4edaa
exit 0; Ran 80 tests; OK (skipped=3)
$ node test-envelope.mjs            # examples/claude-native/workflows, at ec8a4892 and at 75d4edaa
exit 0 both times; SUMMARY passed=254 failed=0 total=254
$ node test-contract-mutations.mjs  # at ec8a4892 and at 75d4edaa
exit 0 both times; SUMMARY passed=74 failed=0 total=74
$ python3 scripts/component_matrix.py --write
exit 0; {"flip_rule_violations": 0, "rows": 32, "status": "written"}; no content change
$ python3 scripts/new_host_grand_list.py --write
exit 0; {"status": "written", "layers": 32, "winners": 66}; no content change
$ python3 scripts/validate.py
exit 0; {"components": 69, "hashed_files": 7347, "profiles": 4, "receipts": 159, "status": "passed"}
$ TMPDIR=/var/tmp/claude-models python3 -m unittest -q    # full suite at 75d4edaa
exit 1; Ran 6670 tests in 683.040s; FAILED (failures=1, errors=1, skipped=765)
  ERROR tests.test_order_throughput.CapacityRunTests.test_cli_refuses_live_base_url_from_env_file_without_network:
        SafetyError: credential_file_permissions:worktree
  FAIL  tests.test_gpt6_family_tiering_20260926.RunnerTests.test_sigterm_records_the_running_call_as_interrupted_without_counting_it:
        run_arm: the temporary directory /tmp must lie outside the state directory and every repository
$ TMPDIR=/var/tmp/claude-models python3 -m unittest -q <those two tests>   # at ec8a4892, then at 75d4edaa
exit 1 both times; Ran 2 tests; FAILED (failures=1, errors=1), with identical messages
$ python3 scripts/validate.py                          # at 75d4edaa, after the commit
exit 0; {"components": 69, "hashed_files": 7347, "profiles": 4, "receipts": 159, "status": "passed"}

Both full-suite failures come from the worktree's location under /tmp: the unit's worktree sits there. Neither
touches a changed path, and both fail the same way at the base commit, so they are not regressions.

Repair round, at b7dfe498 (the same results at 56426d69), with TMPDIR=/var/tmp/claude-models-repair:

$ git diff --check          # working tree, 75d4edaa..b7dfe498 and ec8a4892..b7dfe498
exit 0 all three times
$ python3 -m unittest tests.test_foundation_catalog tests.test_install_claude_profile
exit 0; Ran 80 tests; OK (skipped=3)
$ python3 scripts/validate.py   # before re-registration
exit 1; "SHA-256 mismatch" and "byte count mismatch" for exactly
  docs/decisions/2026-09-25-workstation-sota-refresh.md and docs/decisions/2026-09-27-model-currency.md

Replay onto e82e6be7, at a127cc2c (hot-file protocol, docs/lanes.md):

$ replay (rebase, then re-register the branch's own files in the last commit)
registered 9 (own set A 8, changed-and-hashed-on-main 8); dropped foreign set-A entries: 0
content lines (ex evidence.json) IDENTICAL; scripts/validate.py FAILS=0
$ TMPDIR=/var/tmp/claude-models-repair uv run --no-project --with pyyaml==6.0.1 python -m unittest tests.test_foundation_catalog tests.test_install_claude_profile
exit 0; Ran 80 tests; OK   # no skips: the three skips above are the PyYAML-dependent frontmatter tests
$ git diff --check origin/main HEAD
exit 0

After the GPT-6 repair, at d5a6a7b2 (still on e82e6be7; the diff from the reviewed head a127cc2c is the
record and its manifests/evidence.json entry):

$ python3 scripts/validate.py
{"components": 69, "hashed_files": 7349, "profiles": 4, "receipts": 159, "status": "passed"}
$ git diff --stat a127cc2c d5a6a7b2
 docs/decisions/2026-09-27-model-currency.md | 8 ++++----
 manifests/evidence.json                     | 4 ++--

Replayed again onto 55fc8d17 (#433 merged) as 89c6d9b3 (d5a6a7b2 and 80694cf4 before the replay): content
lines identical, 9 files re-registered, scripts/validate.py FAILS=0. Replayed onto bfdc99cb (#432 merged) as
17d3d8fc: content lines identical, 9 files re-registered, FAILS=0.

Those four lines report the two edited records' stale registrations in manifests/evidence.json; the hot-file commit
re-registers both.

SOTA sources

Every change follows these primary sources (fetched or re-checked 2026-09-27):

Decision record

docs/decisions/2026-09-27-model-currency.md: evidence classes, eight alternatives, overturn conditions and unresolved
items.

Independent review

One independent evidence review returned repair. Its medium finding: the record said the 2026-09-26 llama.cpp
receipts carry only self reviews, but three carry independent_session reviews. Its low finding: the 2.1.283
deniedModels setting was missing from the alternatives. The single repair round the bounded review loop allows
(56426d69 and b7dfe498) fixed both, re-weighed the llama.cpp decision on the corrected review status (unchanged: the paired
acceptance remains the gate) and closed the bin/vllm follow-up from the coordinator's host observation.

A cross-family review followed. GPT-6 Astra at max ran through the packaged landscape-sweep codex_call.sh
lane, read-only, with live web search, at a127cc2c. Its seven checks included recomputing all ten files'
hashes and sizes, the Claude and GPT-6 release dates and IDs, the six-task RTEB(Code) means at e0c9e75e, the
2.1.283 guard behaviour, and read-only mutation checks of the two guard assertions. It returned repair with five
findings. The coordinator verified each against the primary source before editing:

Severity Finding Verified against Repair
medium The query-expansion row said the publisher released nothing newer Hugging Face API: qmd-query-expansion-0.6B-gguf created 2026-04-24 (edddacb0), the 1.7B 2026-01-25 (7816de0b); qmd v2.8.3 src/llm.ts L285 (1.7B default), L307-308 (QMD_GENERATE_MODEL) the 0.6B listed as a candidate for evaluation; its card (458 bytes) states no comparison
low "a 2026 embedder would need a qmd change" src/llm.ts L86-119 (Qwen3-Embedding and EmbeddingGemma formats), L281-282 and L303-304 (QMD_EMBED_MODEL) EmbeddingGemma stays the default; a switch waits for a retrieval evaluation
low "the strongest model that fits" exceeds li26 li26 README: arms limited to the Qwen3.8 family and releases of the past weeks; the workload is a proxy the claim is limited to li26's arms and workload
low "(effort max)" for the main session the template: effortLevel xhigh, modelSettings.claude-opus-5-5.effortLevel xhigh, ultracode true the coordinator at xhigh; agents and workflow children at max
low The EmbeddingGemma date needs a release source Gemma releases: "September 4, 2025 Release of EmbeddingGemma in 308M parameter size" cited without the fragment, which the page's HTML does not carry

Per the bounded review loop, there is no second review round. GPT-6's residuals: it ran no test suite, live
session, model load or GPU acceptance. The full settings-reference page exceeded its web tool. Some pinned
Hugging Face cards were intermittently unreachable. It did not observe the gateway inventory or the vllm symlink.

Residuals

  • CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK is undocumented. Its effect on subagents and workflow children rests on a
    source review of the 2.1.283 client and was not probed, so a client update can drop it silently. The recipe says to
    re-check it after each update, but no automated watch exists yet. The documented deniedModels (2.1.283) works only
    from managed settings, which this repository does not write; adopting managed settings would make it the preferred
    guard (record, alternative 4 and Overturn).
  • Behaviour change: in this repository a flagged request now ends in a refusal, or in a -p error, in the main thread
    and in every child, instead of an answer from Opus 4.8 or Opus 5. Coordinators check the child's transcript for a
    refusal before retrying. A contributor who wants the automatic switch opts out in .claude/settings.local.json.
  • Workflow children are documented to inherit advisorModel, but that was not observed, and the resolved advisor ID
    has not been seen in a transcript.
  • Template precedence: apply_claude_settings.py lets the template win for scalars, so re-applying the template resets
    a host that chose opus or no advisor. The record explains how such a host keeps its choice.
  • Deferred: a workflow-contract check in test-envelope.mjs would change the portable contract, its SHA256SUMS and
    every adopter's vendored copy. The Python tests cover this repository's files.
  • The llama.cpp re-pin to b11146 (v0.5.0) still needs the paired acceptance of the 2026-09-25 gate against a fresh
    b11057 baseline in an owned window; that is the remaining gate. The 2026-09-26 host receipts already carry
    independent reviews (agree for the current install and use receipts, needs_changes for the superseded first
    install receipt). Their own limitation sentences, and limitations[4] of
    local-inference-c2-serving-switch-20260926, still say they carry only self reviews; that text is stale, and this
    PR edits no receipt.
  • Holds until their gates open: jina-reranker-v3.5 (stock llama.cpp rank-pooling; #26286 is open); Nemotron for
    ai-memory (2.5.0 with docs: refresh foundation layer pins and evidence dates #859); Sonnet 5.5 and Haiku 5.5 (no model ID yet). When those ship, three version-keyed places
    need an edit: the template's modelSettings, LEGACY_EXACT in adoption/hooks/claude/effort-default-guard.py and
    ALIAS_RESOLUTION in examples/claude-native/workflows/child-usage.mjs. Opus 5.5 on OmniRoute is held until the
    gateway lists claude-opus-5-5.
  • Other items the record leaves unresolved: which stages use GPT-6 Sol, the OmniRoute provider path and whether it
    clamps max, unconfirmed release dates, workstation boundaries, and alias resolution on other hosts such as the
    Mac.
  • The two known environment failures of worktrees under /tmp are not chased (see Evidence). A checkout outside
    /tmp should run the full suite once before merge.
  • The branch is replayed onto bfdc99cb. The only shared path is manifests/evidence.json. After the replay,
    re-register the nine changed files (the eight above and docs/decisions/2026-09-25-workstation-sota-refresh.md,
    which main already registers), re-run both --write generators and scripts/validate.py.

Checklist

  • No GitHub Actions or workflows changed.
  • No secrets printed, logged or committed. No credential value was read. The committed record has no private
    paths or account data.
  • No new paid hosting or subscription. The template does not change any host until it is applied. Billing note:
    once applied, each advisor call spends Fable tokens under the host's existing billing: API rates, plan limits,
    or usage credits on plans where Fable bills that way. If the account still needs the usage-credits consent, the
    advisor bills nothing until that consent is given
    (advisor, Cost). This host already runs with
    advisorModel: "fable".
  • Peer-owned files and worktrees were preserved.

Recommended label: lane:foundation

🤖 Generated with Claude Code

@seathatflowsinourveins seathatflowsinourveins added the lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers label Sep 27, 2026
@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/w5-model-currency-20260927 branch from a127cc2 to d5a6a7b Compare September 27, 2026 21:26
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Cross-family review (GPT-6 Astra, max, read-only, live web search) at a127cc2c: repair, 5 findings (1 medium, 4 low).

Of its seven checks, these passed:

  • all ten files' hashes and sizes against manifests/evidence.json;
  • Claude and GPT-6 release dates and IDs;
  • the six-task RTEB(Code) means at e0c9e75e;
  • 2.1.283 guard behaviour, including read-only mutation checks of both guard assertions;
  • advisor and template application;
  • component pins.

The coordinator verified every finding against its primary source, and the single repair round (80694cf4, re-registered in d5a6a7b2) fixed all five:

  1. medium: the query-expansion row missed tobil/qmd-query-expansion-0.6B-gguf (2026-04-24, edddacb0), which qmd loads through QMD_GENERATE_MODEL (src/llm.ts L307-308). It is now listed as a candidate for evaluation; the 1.7B stays qmd's default (L285).
  2. low: qmd 2.8.3 formats Qwen3-Embedding too (L86-119), so "a 2026 embedder would need a qmd change" is withdrawn. A switch waits for a retrieval evaluation.
  3. low: the llama.cpp claim is limited to li26's arms (the Qwen3.8 family and releases of the past weeks) and its proxy workload.
  4. low: the main session runs at xhigh under Ultracode (effortLevel and modelSettings); agents and workflow children run at max.
  5. low: the EmbeddingGemma date cites the Gemma releases page.

Details are in the PR body under "Independent review". There is no second round, per the bounded review loop.

@seathatflowsinourveins
seathatflowsinourveins force-pushed the claude/w5-model-currency-20260927 branch from d5a6a7b to 89c6d9b Compare September 27, 2026 21:54
Scout and others added 9 commits September 27, 2026 18:16
…he routes to an older model

Record the 2026-09-27 model-currency check the user asked for ("only the latest
SOTA models, even the latest ones released in the past weeks"): three Opus
research units (Claude, OpenAI/Codex with OmniRoute, open-weight workstation
models), one adversarial refuter each and one synthesis.

- Decision table per lane and role: current, latest available with release
  date, action. No row switches; four hold behind upstream gates:
  jina-reranker-v3.5 for qmd (stock llama.cpp rank-pooling, #26286 open),
  Nemotron-3-Embed-1B for ai-memory (2.5.0 with #859), Sonnet 5.5 and Haiku
  5.5 (announced, no model ID), and Opus 5.5 on OmniRoute (the gateway lists
  no claude-opus-5-5, so Opus-role stages stay on native Claude Code).
- The committed-settings fallback guards, the template advisor and the
  isolated-builder label are recorded with their evidence classes.
- llama.cpp: v0.5.0 is b11146 (commit 7fe450e1); the 2026-09-25 re-pin gate
  (paired acceptance against a fresh b11057 baseline) has not run, so the
  b11057 pin stays and the divergence and the qualification are recorded.

Sources (re-fetched 2026-09-27): platform.claude.com release notes, models
overview and model deprecations; anthropic.com/claude-opus-5-5;
code.claude.com settings-reference, model-config, advisor, env-vars and
settings; anthropics/claude-code CHANGELOG at 7779afb1 (tag v2.1.283);
developers.openai.com API changelog; registry.npmjs.org
@anthropic-ai/claude-code (latest 2.1.283); gh api for ggml-org/llama.cpp
tags b11057, b11146, v0.5.0 and releases/latest, akitaonrails/ai-memory
releases and #859, vllm-project/vllm and tobi/qmd releases; a read-only
GET /v1/models on the loopback gateway (582 IDs, 55 Claude, no opus-5-5).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
… settings

.claude/settings.json and examples/claude-native/ultracode.settings.json now
carry the template's two guards in the template's form: "switchModelsOnFlag":
false and env CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK="1". The recipe's embedded
copy of the portable file matches it. Before this, a session that loaded only
this repository's files, or an adopter running claude --settings with the
portable file, could re-run a flagged Opus 5.5 or Fable request on Opus 4.8
(cybersecurity) or Opus 5 (biology). This closes the "ultracode recipe alone"
gap of docs/decisions/2026-09-25-model-fallback-guard.md.

Sources (fetched 2026-09-27):
- code.claude.com/docs/en/settings-reference#switchmodelsonflag: "Scope: Any
  file"; false pauses an interactive session and ends a -p request as an
  error. The env entry: "Scope: Any file"; project values apply after
  workspace trust or at -p startup; the documented project ignore list does
  not name either key.
- code.claude.com/docs/en/model-config#automatic-model-fallback: the targets.
- CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK is not found in env-vars, model-config,
  settings-reference or the CHANGELOG at anthropics/claude-code 7779afb1
  (tag v2.1.283). Source review of the installed 2.1.283 client: jD() is
  !a.CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK&&!Ote(); the fallback handler runs
  only on jD() or a server-armed same-model silent retry (IAr returns the
  refusing model); orn() returns "subagent" before it reads
  switchModelsOnFlag; a's getters (Rhn) read process.env live; the project
  ignore set Qzn does not contain the variable. Not probed.

Evidence: CommittedSettingsFallbackGuardTests failed at ec8a489 for both
files (None != '1'); after the settings edit the recipe-copy test failed
until the recipe matched; both pass now. node test-envelope.mjs 254/254 and
node test-contract-mutations.mjs 74/74 before and after.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…assigned advisor

The user's rule pairs the Opus 5.5 main model with Fable 5.1 as the native
advisor for truly complex calls, and this host carries advisorModel "fable"
in its user settings, but the adoption template had no advisorModel key, so a
new host that applied it got no advisor.

Sources (fetched 2026-09-27):
- code.claude.com/docs/en/settings-reference#advisormodel: "Scope: Any file";
  "fable", "opus", "sonnet" or a full model ID; unset leaves the advisor off;
  /advisor saves the pick to ~/.claude/settings.json, the file the template
  renders into.
- code.claude.com/docs/en/advisor, "Choose an advisor model": an Opus 5.5 main
  model accepts "Fable, and Opus 5 or later" (the template's model is
  opus[1m]); Sonnet 5 accepts Fable; subagents inherit the advisor under the
  same pairing check (documented, not observed). Without Fable access or
  the usage-credits consent, requests go without the advisor and an
  interactive session shows a notification pointing to /model fable.
- code.claude.com/docs/en/env-vars, "Features that need feature-flag
  fetching": the template sets none of the variables that turn fetching,
  and so the advisor, off, nor CLAUDE_CODE_DISABLE_ADVISOR_TOOL.

apply_claude_settings.py merges scalars with the template winning, so a
re-apply resets a host that chose opus or no advisor; the record says how
such a host keeps its choice.

Evidence: test_the_advisor_is_fable_and_accepted_for_the_main_model failed
at ec8a489 (None != 'fable') and passes now.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…ld-routing

The lean-workflow-child-routing activation in catalogs/foundation/decisions.json
still described isolated-builder as "Sonnet/max". All three copies of its
definition (.claude/agents, adoption/agents/claude,
examples/claude-native/agents) declare model: opus and effort: max since the
2026-09-27 harness-settings change (docs/decisions/2026-09-27-claude-harness-settings.md,
item 1), and the token-e2e runner binds it to opus (Amendment 2, #413). This
closes follow-up 5 of that record's independent verification.

A new test, CheckedInAgentLabelTests, compares every "`agent` (Model/effort)"
label in the foundation decisions with the agent's frontmatter, read with a
regex so it needs no PyYAML.

Evidence: the test failed at ec8a489 (('sonnet', 'max') != ('opus', 'max'))
and passes now; tests.test_foundation_catalog and scripts/validate_foundation.py
through test_checked_in_catalog_passes stay green.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
… files

Hot-file commit for the model-currency unit. manifests/evidence.json files[]
now carries the current sha256 and byte count of each file this branch
changes against origin/main (ec8a489), registered one by one with
scripts/host_receipts.register_file:

- .claude/settings.json
- adoption/templates/claude.settings.template.json
- catalogs/foundation/decisions.json
- docs/decisions/2026-09-27-model-currency.md (new entry, sorted insert)
- examples/claude-native/ultracode.settings.json
- recipes/claude-native-ultracode.md
- tests/test_foundation_catalog.py
- tests/test_install_claude_profile.py

No other entry changes (19 insertions, 14 deletions: two fields for each of
seven updated files, five lines for the new one). manifests/stack.json is
unchanged: the llama.cpp pin stays b11057, as the model-currency record
explains. scripts/component_matrix.py --write (32 rows, 0 flip-rule
violations) and scripts/new_host_grand_list.py --write (32 layers, 66
winners) regenerated their reports with no content change.

Evidence: python3 scripts/validate.py exit 0 ({"components": 69,
"hashed_files": 7347, "profiles": 4, "receipts": 159, "status": "passed"};
integrity and scope checks only).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…e, bin/vllm follow-up closed

Review repair (one round):
- The three 2026-09-26 llama.cpp host receipts carry independent_session
  reviews: agree for install-2 and use, needs_changes for the superseded
  first install receipt. The serving-switch receipt has no reviews field,
  and its limitations[4] "only self reviews" sentence predates them. The
  b11057 pin stands: the paired acceptance against a fresh b11057 baseline
  is the remaining gate (eval_arm.py pins every li26 arm to b11146).
- Alternative 4: the Claude Code 2.1.283 deniedModels setting, not adopted
  because it is managed-only; the guards' Overturn now names it.
- The workstation refresh record's bin/vllm follow-up is closed on this
  host, from the coordinator's host observation (one dated line).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…the repository

The coordinator's host observation has no receipt in this repository
(no evidence file changed between ec8a489 and origin/main); the row no
longer implies that none exists anywhere.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
…ander, li26 scope, coordinator effort)

The cross-family review found five defects, each verified against source:
- qmd 2.8.3 formats Qwen3-Embedding as well as EmbeddingGemma (src/llm.ts L86-119) and takes other models through QMD_EMBED_MODEL (L281-282, L303-304); the embedding row no longer says a 2026 embedder needs a qmd change, and cites the Gemma releases page for the 2025-09-04 date.
- tobil/qmd-query-expansion-0.6B-gguf (2026-04-24, edddacb0) is newer than the 1.7B default (L285) and loadable through QMD_GENERATE_MODEL (L307-308); it is listed as an evaluation candidate, not a switch.
- The llama.cpp row limits its claim to li26's arms and proxy workload.
- The main-session row gives the coordinator's xhigh (template effortLevel and modelSettings) and max for agents and workflow children.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Superseded by #470: the same seven reviewed commits rebased onto current main (the only conflict was manifests/evidence.json), plus a 2026-09-28 addendum for the Sonnet 5.5 launch and one repair round from a cross-family review. I have left this PR open and untouched; close it after #470 merges.

seathatflowsinourveins added a commit that referenced this pull request Sep 29, 2026
…addendum (fallback guards, template advisor, catalog label) (#470)

* Model currency record: every routed model current; holds, gates and the routes to an older model

Record the 2026-09-27 model-currency check the user asked for ("only the latest
SOTA models, even the latest ones released in the past weeks"): three Opus
research units (Claude, OpenAI/Codex with OmniRoute, open-weight workstation
models), one adversarial refuter each and one synthesis.

- Decision table per lane and role: current, latest available with release
  date, action. No row switches; four hold behind upstream gates:
  jina-reranker-v3.5 for qmd (stock llama.cpp rank-pooling, #26286 open),
  Nemotron-3-Embed-1B for ai-memory (2.5.0 with #859), Sonnet 5.5 and Haiku
  5.5 (announced, no model ID), and Opus 5.5 on OmniRoute (the gateway lists
  no claude-opus-5-5, so Opus-role stages stay on native Claude Code).
- The committed-settings fallback guards, the template advisor and the
  isolated-builder label are recorded with their evidence classes.
- llama.cpp: v0.5.0 is b11146 (commit 7fe450e1); the 2026-09-25 re-pin gate
  (paired acceptance against a fresh b11057 baseline) has not run, so the
  b11057 pin stays and the divergence and the qualification are recorded.

Sources (re-fetched 2026-09-27): platform.claude.com release notes, models
overview and model deprecations; anthropic.com/claude-opus-5-5;
code.claude.com settings-reference, model-config, advisor, env-vars and
settings; anthropics/claude-code CHANGELOG at 7779afb1 (tag v2.1.283);
developers.openai.com API changelog; registry.npmjs.org
@anthropic-ai/claude-code (latest 2.1.283); gh api for ggml-org/llama.cpp
tags b11057, b11146, v0.5.0 and releases/latest, akitaonrails/ai-memory
releases and #859, vllm-project/vllm and tobi/qmd releases; a read-only
GET /v1/models on the loopback gateway (582 IDs, 55 Claude, no opus-5-5).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Model-fallback guards in the committed project and portable Ultracode settings

.claude/settings.json and examples/claude-native/ultracode.settings.json now
carry the template's two guards in the template's form: "switchModelsOnFlag":
false and env CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK="1". The recipe's embedded
copy of the portable file matches it. Before this, a session that loaded only
this repository's files, or an adopter running claude --settings with the
portable file, could re-run a flagged Opus 5.5 or Fable request on Opus 4.8
(cybersecurity) or Opus 5 (biology). This closes the "ultracode recipe alone"
gap of docs/decisions/2026-09-25-model-fallback-guard.md.

Sources (fetched 2026-09-27):
- code.claude.com/docs/en/settings-reference#switchmodelsonflag: "Scope: Any
  file"; false pauses an interactive session and ends a -p request as an
  error. The env entry: "Scope: Any file"; project values apply after
  workspace trust or at -p startup; the documented project ignore list does
  not name either key.
- code.claude.com/docs/en/model-config#automatic-model-fallback: the targets.
- CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK is not found in env-vars, model-config,
  settings-reference or the CHANGELOG at anthropics/claude-code 7779afb1
  (tag v2.1.283). Source review of the installed 2.1.283 client: jD() is
  !a.CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK&&!Ote(); the fallback handler runs
  only on jD() or a server-armed same-model silent retry (IAr returns the
  refusing model); orn() returns "subagent" before it reads
  switchModelsOnFlag; a's getters (Rhn) read process.env live; the project
  ignore set Qzn does not contain the variable. Not probed.

Evidence: CommittedSettingsFallbackGuardTests failed at ec8a489 for both
files (None != '1'); after the settings edit the recipe-copy test failed
until the recipe matched; both pass now. node test-envelope.mjs 254/254 and
node test-contract-mutations.mjs 74/74 before and after.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Claude profile template: advisorModel "fable" so a new host gets the assigned advisor

The user's rule pairs the Opus 5.5 main model with Fable 5.1 as the native
advisor for truly complex calls, and this host carries advisorModel "fable"
in its user settings, but the adoption template had no advisorModel key, so a
new host that applied it got no advisor.

Sources (fetched 2026-09-27):
- code.claude.com/docs/en/settings-reference#advisormodel: "Scope: Any file";
  "fable", "opus", "sonnet" or a full model ID; unset leaves the advisor off;
  /advisor saves the pick to ~/.claude/settings.json, the file the template
  renders into.
- code.claude.com/docs/en/advisor, "Choose an advisor model": an Opus 5.5 main
  model accepts "Fable, and Opus 5 or later" (the template's model is
  opus[1m]); Sonnet 5 accepts Fable; subagents inherit the advisor under the
  same pairing check (documented, not observed). Without Fable access or
  the usage-credits consent, requests go without the advisor and an
  interactive session shows a notification pointing to /model fable.
- code.claude.com/docs/en/env-vars, "Features that need feature-flag
  fetching": the template sets none of the variables that turn fetching,
  and so the advisor, off, nor CLAUDE_CODE_DISABLE_ADVISOR_TOOL.

apply_claude_settings.py merges scalars with the template winning, so a
re-apply resets a host that chose opus or no advisor; the record says how
such a host keeps its choice.

Evidence: test_the_advisor_is_fable_and_accepted_for_the_main_model failed
at ec8a489 (None != 'fable') and passes now.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Foundation catalog: isolated-builder is Opus/max in lean-workflow-child-routing

The lean-workflow-child-routing activation in catalogs/foundation/decisions.json
still described isolated-builder as "Sonnet/max". All three copies of its
definition (.claude/agents, adoption/agents/claude,
examples/claude-native/agents) declare model: opus and effort: max since the
2026-09-27 harness-settings change (docs/decisions/2026-09-27-claude-harness-settings.md,
item 1), and the token-e2e runner binds it to opus (Amendment 2, #413). This
closes follow-up 5 of that record's independent verification.

A new test, CheckedInAgentLabelTests, compares every "`agent` (Model/effort)"
label in the foundation decisions with the agent's frontmatter, read with a
regex so it needs no PyYAML.

Evidence: the test failed at ec8a489 (('sonnet', 'max') != ('opus', 'max'))
and passes now; tests.test_foundation_catalog and scripts/validate_foundation.py
through test_checked_in_catalog_passes stay green.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Model currency record: receipt review status, deniedModels alternative, bin/vllm follow-up closed

Review repair (one round):
- The three 2026-09-26 llama.cpp host receipts carry independent_session
  reviews: agree for install-2 and use, needs_changes for the superseded
  first install receipt. The serving-switch receipt has no reviews field,
  and its limitations[4] "only self reviews" sentence predates them. The
  b11057 pin stands: the paired acceptance against a fresh b11057 baseline
  is the remaining gate (eval_arm.py pins every li26 arm to b11146).
- Alternative 4: the Claude Code 2.1.283 deniedModels setting, not adopted
  because it is managed-only; the guards' Overturn now names it.
- The workstation refresh record's bin/vllm follow-up is closed on this
  host, from the coordinator's host observation (one dated line).

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Model currency record: the bin/vllm evidence row names no receipt in the repository

The coordinator's host observation has no receipt in this repository
(no evidence file changed between ec8a489 and origin/main); the row no
longer implies that none exists anywhere.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Model currency record: GPT-6 review repairs (qmd formats and 0.6B expander, li26 scope, coordinator effort)

The cross-family review found five defects, each verified against source:
- qmd 2.8.3 formats Qwen3-Embedding as well as EmbeddingGemma (src/llm.ts L86-119) and takes other models through QMD_EMBED_MODEL (L281-282, L303-304); the embedding row no longer says a 2026 embedder needs a qmd change, and cites the Gemma releases page for the 2025-09-04 date.
- tobil/qmd-query-expansion-0.6B-gguf (2026-04-24, edddacb0) is newer than the 1.7B default (L285) and loadable through QMD_GENERATE_MODEL (L307-308); it is listed as an evaluation candidate, not a switch.
- The llama.cpp row limits its claim to li26's arms and proxy workload.
- The main-session row gives the coordinator's xhigh (template effortLevel and modelSettings) and max for agents and workflow children.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>

* Model currency record: 2026-09-28 addendum (Sonnet 5.5 launch, alias measured, fallback map)

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

* Model currency record: repair round for the 2026-09-28 cross-family review (guard scope, Vals fallback counts, alias observation scope, lifecycle scope, advisor test)

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

* Model currency record: apply the re-check findings (workflow-stage observation dropped, project-file reach, Vals page dates)

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

* Hot files: evidence registration for the model-currency branch

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

---------

Co-authored-by: Scout <scout@local>
Co-authored-by: Claude Opus 5.5 (1M context) <[email protected]>
@seathatflowsinourveins

Copy link
Copy Markdown
Collaborator Author

Closing: superseded by #470, merged as bab0600 on 2026-09-29T00:02Z. The seven reviewed commits, the guards, the template advisor, the catalog label and the record are all on main, with a 2026-09-28 addendum.

@seathatflowsinourveins
seathatflowsinourveins deleted the claude/w5-model-currency-20260927 branch October 8, 2026 07:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane:foundation Foundation lane: Claude/Codex setup, hosts, memory, RAG, research, workers

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant