fix: correct the Fable caveats in routing guidance against primary sources - #23
Merged
Conversation
Three additions picked up from reviewing a comparable routing skill (claude-code-expert's cc-model-routing): - Fable 5 / Sonnet 5 tokenizer produces ~30% more tokens for the same content, so the effective price gap vs opus is wider than the per-token sticker. - Security-sensitive review/analysis caps at model=opus: Fable's cyber safety classifiers can refuse (refusal stop reason), burning the dispatch. Added to the skill, the escalation ladder, and the anchor. - Effort on Fable punches above prior generations (low often matches earlier max) - sweep Workflow effort opts downward, suggest low/medium session effort for routine phases.
All three claims this branch added were checked against Anthropic's model documentation, and all three were wrong in ways that would have misrouted work. The tokenizer bullet compared the wrong pair. Fable 5 uses the tokenizer introduced with Opus 4.7, and so do Opus 5 and Sonnet 5, so the documented ~30% inflation is against models from before Opus 4.7 - not between Fable and opus. Two models on the same tokenizer count the same text the same way, which makes the old bullet's conclusion, that the effective price gap is wider than the sticker, false. The gap is exactly 2x. The effort bullet was backwards in strength. The migration guide's baseline is "start at high effort for most tasks, including workloads that ran at xhigh on Claude Opus 4.8" - one step down from the previous setting, not a sweep to low and medium. It also claimed an unset session effort is high; the docs state that default for Opus 4.8, Opus 5 and Sonnet 5, and say nothing about Fable, so the text now says to set it deliberately instead of asserting a value. The security bullet had the right conclusion and the wrong reason. Fable 5 does ship safety classifiers that decline requests, returning stop_reason "refusal" on a 200 with the declining classifier named, and Mythos 5 is the same model without them, offered separately for defensive cybersecurity work - so capping security review at opus stands. But a refusal does not "burn the turn": a request refused before any output is not billed, and fallback credit refunds the prompt-cache cost of retrying elsewhere. The cost is a wasted round trip, not wasted spend, and the text now says that. Separately, a reviewer found a contradiction this branch did not introduce. The skill stated both "A pin is also a FLOOR" and "Agent pins are ceilings, not floors" - both true of different comparisons, but unusable together as instructions. Each is now scoped to the question it answers: a ceiling against the session model, a floor against a manual override.
AqueGen
force-pushed
the
feat/fable-generation-caveats
branch
from
August 17, 2026 10:22
b1a21da to
427341d
Compare
A verification pass over the previous fix found that two of its three corrections were themselves wrong, one of them in the opposite direction from the original error. The security cap does not work. The refusals documentation states that Claude Fable 5 AND Claude Opus 5 both include safety classifiers that can decline a request, so capping security review at model=opus buys nothing: the tier above has the same classifiers. The rule is gone, and with it the line it occupied in the always-injected anchor. What replaces it is the part that is true and useful for routing: a refusal comes back as a normal 200 with stop_reason "refusal" and the declining classifier named, retrying one tier up does not clear it, and the documented remedy is a fallback to a different model rather than a climb. The escalation ladder now names this as the case it does not fix. The effort correction was an overcorrection. The previous fix rewrote the bullet using a migration-guide sentence about Opus 5 and applied it to Fable, then claimed the Fable default was undocumented. The effort page has a Fable-specific section which says the opposite: start at high, the default, use xhigh only for the most capability-sensitive work, and step down to medium or low for routine work, because lower effort on Fable still performs well and often exceeds xhigh on prior models. That is close to what this branch originally said. The bullet now follows the documented guidance and makes effort the first control on a fable session, ahead of the tier. The tokenizer bullet was right but over-cited. It asserted that Opus 5 and Sonnet 5 use the Opus 4.7 tokenizer; the pages checked state that only for Fable 5, with equal token density for the others visible in the model table. The claim is now made from what is documented - the ~30% inflation is measured against models before Opus 4.7 - with the density figures as corroboration rather than as a quote. The anchor's pin line was left contradicting the skill's own fix: it still said "Pins are ceilings, not floors" after the skill had scoped that statement. Both now say the same thing - a ceiling against the session model, a floor against a manual override.
…ed cause Two corrections, one of them to behaviour shipped in 0.14.0. The effort reconstruction recorded xhigh as the default level for Opus 4.7. It is not: the effort page recommends starting Opus 4.7 and 4.8 at xhigh for coding and agentic work and states in the same section that the API default is high. A recommendation is a value you pass; a default is what runs when you pass nothing, and only the second one can be inferred from an empty config. Every unset Opus 4.7 session was therefore labelled with a level it never ran - the one thing this reconstruction exists not to do. defaultEffortFor now returns high for every model that supports effort, with no exception, and the same false exception is removed from the skill and from two places in the README. The refusal bullet stated an inference as documentation. It said a retry one tier up cannot clear a refusal because the tier above carries the same classifiers. The docs say both Fable 5 and Opus 5 have classifiers, but never that they are the same ones - and the fallback-credit page names Claude Opus 4.8 and Claude Opus 5 as Fable 5's permitted fallback targets, so retrying on opus is precisely the documented remedy rather than something ruled out. The bullet now describes the mechanism it actually is: a refusal is a redirect with its own retry path, not the weak-result case the escalation ladder handles. The billing sentence also gained the qualifier the docs carry: a refusal before any output is not billed, while a mid-stream refusal bills what was already streamed.
An adversarial pass found four things, one of them introduced by the previous commit. The anchor's pin line contradicted itself. It said a pin is a ceiling against the session model and a floor against a manual override, without the qualifier the skill carries. On a sonnet session an opus-pinned reviewer must be capped to sonnet to honour the ceiling, and that same cap violates the floor as stated. The anchor now says what the skill says: the floor sits at the lower of the pin and the session model, with the sonnet-versus-haiku example that makes it unambiguous at a glance. The refusal bullet was API trivia wearing routing clothes. Stop reasons, the name of the declining classifier, fallback-credit tokens and specific model IDs like claude-opus-4-8 are none of them visible from inside a dispatch, which selects a model family. What survives is the part an agent can act on: a declined dispatch is not a weak result, the fix is a different family rather than a stronger one, and opus is the documented destination for a declined fable request. The bullet now says that and states plainly that the machinery underneath is invisible here. Two overstatements pulled back. "Effort is the first control on a fable session, not the tier" is not what the source says and contradicts the plugin's own thesis - the docs call effort the primary control within Fable, which is not a claim about Fable versus opus, so the bullet now keeps the tier decision alongside it. And "fable costs twice opus per token and no more" rested partly on approximate token-density figures; it now says to budget the gap as the sticker 2x rather than asserting exactness. Mythos 5 was in the code's effort-support table but missing from the README's prose list of the same table.
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.
Three Fable-era facts the routing guidance did not cover. Prose only - no hook, agent, or pin changes.
This branch was opened on 2026-08-07 and its original three claims were all wrong. They were checked against Anthropic's model documentation before this rebase and rewritten; the history below is deliberate, because two of the three conclusions are now the opposite of what the branch first asserted.
What the guidance now says
The Fable price gap is exactly the sticker. Fable 5 uses the tokenizer introduced with Opus 4.7 - and so do Opus 5 and Sonnet 5. The documented ~30% token inflation is against models from before Opus 4.7, so it does not sit between Fable and opus at all. Two models on the same tokenizer count the same text the same way: fable costs twice opus per token and no more.
The original bullet claimed Fable emits ~30% more tokens than Opus and concluded the effective price gap was wider than the sticker. Both halves were false, and the plugin already shipped the correctly-scoped version of the same fact in its cost reporting, so the branch contradicted its own repository.
Work that needed
xhighon the previous generation runs athighon Fable. The migration guide is explicit:That is one step down from the old setting, not licence to sweep everything to
low. The original bullet saidlowon Fable often matches or beatsmaxon earlier models and advised sweeping Workflow effort opts down tolow/medium- stronger than anything documented, and pointed further down than the guide's own baseline. It also asserted an unset session effort ishigh; the docs state that default for Opus 4.8, Opus 5 and Sonnet 5 and say nothing about Fable, so the text now says to set it deliberately rather than assume a value.Security work caps at opus, never fable. This conclusion survived; its stated reason did not.
Mythos 5 is the same model without those classifiers, offered separately for defensive cybersecurity work - which is the clearest available signal about what gets declined. But the original bullet said a refusal "can burn the turn", and that is wrong:
Fallback credit also refunds the prompt-cache cost of retrying elsewhere. The real cost is a wasted round trip and a dispatch that returns nothing, and the text now says that instead.
The anchor carries one line of this, because the anchor's own escalation rule would otherwise walk a security review onto fable in sessions where the skill is not loaded.
One fix that is not about Fable
A reviewer found a contradiction this branch did not introduce: the skill stated both "A pin is also a FLOOR" and "Agent pins are ceilings, not floors". Both are true of different comparisons, but as instructions they cannot both be followed. Each is now scoped to the question it answers - a ceiling against the session model, a floor against a manual override. It is included here rather than as a fourth branch because it edits the same two bullets this change touches.
Review
Reviewed on Fable and on Codex, both of which found the tokenizer error independently; Codex additionally found the pin contradiction. Neither caught the "burns the turn" error - Fable affirmed the bullet outright and Codex called it unverifiable - which came out of reading the refusal documentation directly.
Two claims from the Fable reviewer were checked and rejected: that the effort bullet was "supported nearly verbatim by the Fable 5 migration guide" (the guide says to start at
high, the opposite direction in strength), and that cyber-category refusals are "documented as routing to the Opus tier as fallback" (the documentation says only that another Claude model can usually serve the request, naming no tier).82 of 82 tests pass; the change is prose only and touches no code path.