Skip to content

docs(philosophy): state the availableModels dispatch-seam consequence the tier ladder lacked - #1916

Merged
kyle-sexton merged 1 commit into
mainfrom
docs/roster-r9-choosing-model
Aug 4, 2026
Merged

docs(philosophy): state the availableModels dispatch-seam consequence the tier ladder lacked#1916
kyle-sexton merged 1 commit into
mainfrom
docs/roster-r9-choosing-model

Conversation

@kyle-sexton

Copy link
Copy Markdown
Contributor

Summary

Doc-alignment roster row 9: Choosing the right model (live page byte-identical to the archived slice — MD5 confirmed by producer and verifier independently against both the capture and today's live page).

Row dispositions:

  • IA-6 (vet-delta triggers): closed, nothing owed here. Its mechanism half already shipped as criteria I21/I22 via the Q8 ownership carve-out (I22 carries all four trigger shapes, the delta-not-re-run discipline, and consumer-supplies-baseline); the instance half is dotfiles-owned. The targeted delta check was run anyway against the executed 2026-07-29 vet (issue chore: effort judgment recalibration (choosing-a-model routing vet) #1697): no trigger fired.
  • DOC-40 (four-question second lens): not shipped, correctly still routed to the dotfiles routing-doctrine seam per its recorded disposition.
  • OQ-6 (fast mode): deferral holds — zero latency-first lanes exist, and model-config now documents /fast refusing to toggle under an allowlist that excludes the target, one more availability constraint on a research preview.

What ships (+15 lines, docs/PLUGIN-PHILOSOPHY.md only, no version bump per this file's precedent): an enterprise availableModels dispatch-seam consequence the Model-tiers section lacked. Upstream (model-config, quoted character-exact): the allowlist reaches subagent/skill/command model frontmatter; a pin naming an excluded model "falls back to the inherited or default model rather than failing the request"; under enforceAvailableModels the Default remaps to the first allowed, available allowlist entry, and that remap reaches "the fallback used when an excluded selection is dropped". Consequence: a blocked pin can silently land below the session tier — the section's own invariant (consequential verdict at session tier or above) is not self-enforcing under an allowlist, and no error is raised. The paragraph states the failure mode, the operator action, and a non-vacuous recheck trigger. This is a dispatch-seam consequence, not a second selection checklist — DOC-40's declined shape.

Test plan

  • Single file, +15/−0; markdownlint clean; parity scripts green; merge-tree clean vs current main.
  • Producer ran a two-round adversarial loop before handoff: a fresh Fable verifier falsified an advisor-recall claim (the paragraph's first draft asserted the opposite direction) against the primary source, and caught a vacuous recheck trigger; both fixed, then a second adversarial pass returned SHIP with one precision fix (the "allowed, available" qualifiers restored).
  • Orchestrator-commissioned Fable verifier: live-page sentence fidelity (three quotes character-exact, qualifiers present, anchor resolves), step-by-step reconstruction of the invariant-breakage scenario including the alias-resolution subtlety, IA-6 closure evidence (I21/I22 on main; carve-out record; delta-check spot-checks), contested-call boundary (no factor checklist restated), OQ-6 spot-checks, hygiene — 6/6 PASS, empty defect list.

Related

🤖 Generated with Claude Code

https://claude.ai/code/session_019gaVX25Txd6GXdiu9HEH3X

…er cannot see

The Model tiers section states that agent frontmatter "binds a floor". An
enterprise `availableModels` allowlist is the case where that floor is not the
consuming fleet's to hold: the allowlist applies "everywhere a user can specify
a model", frontmatter pins included, and a pin naming an excluded family "falls
back to the inherited or default model rather than failing the request".

Which of those two branches applies is unresolved upstream, and the paragraph
says so rather than picking one. What is documented is enough to settle the
consequence: `enforceAvailableModels` resolves a Default falling outside the
list to the FIRST allowed, available allowlist entry, and that resolution
reaches "the fallback used when an excluded selection is dropped" — an ordering nothing ties to this ladder. A session explicitly on a
permitted `opus` with a lane pinned to an excluded family can therefore land on
whatever heads the allowlist, which may be Haiku.

So the section's own core invariant — a consequential verdict runs at the
session-model tier or above, never below — is not self-enforcing under an
allowlist, and neither is the cost ordering beneath it. The authoring
consequence is the sentence that earns the paragraph: a lane may not depend on
its pin in either direction, and a design whose correctness needs a tier needs a
mechanism that is not a frontmatter pin.

PROVENANCE, recorded because it is worth more to the next reader than a clean
body: this paragraph first asserted the opposite directional claim — that the
upward invariant was robust and only the downward economy broke. A fresh-context
verifier falsified it against the `enforceAvailableModels` enforced-Default path,
which was confirmed verbatim upstream before the correction was made. The
recheck trigger was rewritten in the same pass: its first form ("the allowlist's
reach extending past those surfaces") was already satisfied on the live page and
so fired vacuously, failing the observability bar in
docs/conventions/upstream-drift/README.md.

`availableModels` had zero occurrences repo-wide before this commit, against a
standing posture that treats team and enterprise scenarios as in scope by
default. Mechanics are not restated: borrowed sentences are quoted rather than
carried as this document's own prose, the allowlist's reach is cited by
upstream's own pointer-shaped summary rather than an enumeration that would
drift, and the paragraph carries the verification stamp plus observable recheck
trigger the upstream-drift convention requires.

Roster row 9 (Choosing the right model) dispositions, recorded here because
no other tracked file carries them:

- IA-6 (model-delta vet-delta triggers) is CLOSED with nothing owed in this
  repository. Its mechanism half shipped as criteria I21/I22; its instance half
  is explicitly dotfiles-owned. The targeted delta check it calls for was run
  rather than skipped, and no trigger fired: choosing-a-model is byte-identical
  to the 2026-07-29 capture (MD5 ec643f10c70fb551f3ed5097aaa70769, 7,568 B), and
  every volatile figure re-verified live against the models overview.

- DOC-40 is NOT shipped and remains owed to the dotfiles routing seam, where its
  recorded disposition routes it. This paragraph is a separate finding that
  DOC-40's access-constraints member pointed at, shipped on its own merits. It
  is a dispatch-seam failure mode, not a model-selection factor, and so is not
  the second factor checklist that disposition declined.

Deliberately no criteria row: a check for undocumented allowlist behavior would
fire on every correctly authored repository, failing the same
fire-on-designed-surfaces test that stopped IA-2(d).

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
@cursor

cursor Bot commented Aug 4, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@claude

claude Bot commented Aug 4, 2026

Copy link
Copy Markdown

Claude finished @kyle-sexton's task in 2m 48s —— View job


Reviewing PR #1916

  • Gather context (diff, changed files, CLAUDE.md/AGENTS.md rules)
  • Understand the request (code review of docs/PLUGIN-PHILOSOPHY.md addition)
  • Review changed content for correctness, alignment with philosophy doc, and fresh-docs mandate
  • Post final review

Summary

Single-file, +15/−0 addition to the ### Model tiers section of docs/PLUGIN-PHILOSOPHY.md, stating the consequence of an enterprise availableModels allowlist on the model-tier invariant. This falls under the repo's fresh-docs mandate (documented harness behavior), so I independently re-fetched model-config#restrict-model-selection rather than trusting the PR's own verification claim.

Fact-check against the live page

All quoted fragments are character-exact against the current live page:

  • "everywhere a user can specify a model" — matches the allowlist-scope sentence.
  • "falls back to the inherited or default model rather than failing the request" — matches the Subagent, skill, or command override bullet under "Claude Code handles any other blocked selection according to where the model was set."
  • "the fallback used when an excluded selection is dropped" — matches the closing clause of the enforceAvailableModels paragraph.
  • The paraphrase "resolves a Default falling outside the list to the first allowed, available allowlist entry" correctly restores the "allowed, available" qualifiers from "resolves to the first availableModels entry that names an allowed, available model."
  • The anchor #restrict-model-selection resolves to the correct section.

Correctness of the inference

The paragraph's central claim — a blocked frontmatter pin can resolve below the session tier with no error raised — is a sound inference from the source, not an overreach: the source itself leaves "inherited or default" unresolved for the override-fallback branch, and the PR text correctly flags that ambiguity ("unresolved upstream, and stated here as such") rather than picking a side unsupported by the primary source. Given that the enforceAvailableModels Default-remap can land on an arbitrary first allowlist entry, a lane pinned above session tier that gets excluded can plausibly resolve well below it — the paragraph's scenario holds up.

The framing versus the declined DOC-40 shape (dispatch-seam consequence vs. a restated selection checklist) is honest — this paragraph states a failure mode and a recheck trigger, it doesn't reintroduce a factor list.

Nits (non-blocking)

  • Line 627-628: "a lane may not depend on its pin in either direction, neither that it is at least its tier nor that it is cheap" — grammatically workable but the neither…nor reads slightly strained after "may not depend"; a small rewrite like "cannot rely on its pin for either guarantee — staying at least its tier, or staying cheap" would read more cleanly. Purely stylistic, not a correctness issue.
  • No markdownlint tooling was available in this sandboxed environment to independently re-run the "markdownlint clean" claim from the test plan; manual inspection found no trailing whitespace, and line-wrapping is consistent with the surrounding section's convention of one long URL per line.

Verdict

No correctness, architecture, or maintainability issues found. Quotes verified character-exact against the live source, the inference is appropriately hedged where the upstream doc is itself ambiguous, and the recheck trigger is concrete (names the specific sentences to watch) rather than vacuous. No changes requested.

@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

Claude has reviewed this PR 1 time. The lane skips further automatic reviews after 5; deleting this comment resets the count.

@kyle-sexton
kyle-sexton merged commit a113de2 into main Aug 4, 2026
32 checks passed
@kyle-sexton
kyle-sexton deleted the docs/roster-r9-choosing-model branch August 4, 2026 06:41
kyle-sexton added a commit that referenced this pull request Aug 4, 2026
…orbids it (#1917)

## Summary

Doc-alignment roster row 11: **Thinking** (live page byte-identical to
the archived 917-line slice — MD5 confirmed by producer and verifier
independently).

Headline: the roster recorded IA-4's three harness rules as *unshipped*;
they were in fact already covered by the I17 family — and that stale
status was hiding a live defect inside the coverage. **criteria 1.12.0 /
claude-config 0.21.4**:

- **I17 base row amended** (the defect): the live thinking page states,
with no effort qualifier, that Fable 5 / Mythos 5 / Mythos Preview
reject `thinking: {type: "disabled"}` outright. The old row's
remediation offered "lower the effort to `high` or below" — a branch
that still 400s on that family — and its unscoped fence *excused* the
unconditional-reject case. Now two Detect arms with per-arm fences and
remediations; heading retitled to "…where the model forbids it"; the
second arm is API-form-only (on Fable 5 the harness surfaces are
documented silent no-ops and stay I17-a's; for the Mythos models the
harness pages state nothing, recorded as silence — no claim either
direction).
- **I17-b extended** to the thinking half of mid-session churn (the page
renders both dials into the prompt; switching modes or budgets starts a
new cache prefix), with a deliberate, honest carve-out: a Claude Code
surface prescribing a mid-session thinking toggle is *out of reach* —
neither excused nor flagged — because harness prompt-caching docs name
only model and effort as out-of-prompt cache-key settings and document a
confirm dialog for effort alone; a non-vacuous re-scope trigger is
recorded. Plus an I17-b/I17-c co-firing note in the house pattern.
- IA-4 rule 2 already fully covered by I17-a (untouched); IA-5's gate
(PA-AE) was answered 2026-08-02 — rules 1–3 shipped long since as I18,
rules 4–8 stay deferred on recorded grounds (no instruction surface to
run on; rule 8 is the same deferral row 6 recorded), nothing
zero-instance shipped.

## Test plan

- Docs-only; markdownlint 0 errors; changelog parity all three modes;
`instruction-scan.test.sh` 46/46; `conflict-scan.test.sh` 41/41;
manifest validation pass.
- Producer: scripted quote fidelity (9 quotes vs seven live sources,
plus a negative assertion that the over-broad phrasing is gone); its own
independent reviewer caught two gaps pre-handoff (I17-b/I17-c overlap
note; a reach ambiguity), both fixed.
- Orchestrator-commissioned Fable verifier: live fetches of the thinking
and harness prompt-caching pages, confirmation of the old row's double
defect (both readings wrong), per-arm scenario construction (including
the case the old row passed as compliant), carve-out honesty, coverage
spot-checks — **6/6 PASS**; its two minor defects (stale instance count;
Mythos over-generalization) fixed and re-checked, with the final
one-line residual (a changelog echo) fixed before push.

## Related

- No linked issue.
- Doc-alignment loop, roster row 11. Predecessors: #1908#1916.
Follow-up candidate recorded on the roster: opus-5.md's RA-8 clause is
silent on the API-form unconditional reject for the Fable family —
natural doctrine-side home for the second arm.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_019gaVX25Txd6GXdiu9HEH3X

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant