feat(route)!: Fable rows are a hand-written override, never a route.sh outcome
The operator removed the "Fable can only be suggested after a failed Opus 5/xhigh session" policy on 2026-08-06 - it stood in the way too often. Until now that policy was implemented as code: --opus-xhigh-failed was the ONLY way route.sh's SELECTION chain could reach rows 5-6 (Fable), so the rubric still enforced a policy the operator had already dropped. Given a choice between (A) deleting the branches and the flag outright, so the calculator's output range closes at row 4, or (C) keeping a path that renders a Fable row on explicit instruction with rule=operator-override, the operator chose A (AskUserQuestion) - CLAUDE.md is explicit that the rubric stays the only deterministic lookup and a Fable choice is now always a deviation from it, recorded in STATE as an override rather than produced here. board.sh is untouched and still parses "Fable 5/high"/"Fable 5/xhigh" written by hand into a board line (route-selftest.sh section 6 now pins that half directly, since route.sh can no longer produce the strings itself). TDD: every affected selftest check was rewritten to fail against the unmodified route.sh first (72->68/69, confirmed red), then route.sh was edited to match. --opus-xhigh-failed is gone outright - passing it now exits 2 like any other unknown argument, not silently accepted as a no-op. route-selftest.sh: 73 -> 69 checks (three checks tested command shapes row_advisor() can no longer produce; the two row-5/row-6 reachability checks in section 1 collapsed into one "the flag is gone" check). coord 191, board 142 unaffected. Suite total 406 -> 402. Also folds in a standalone fix already pushed this session: section 14 was gating the wrong CLI fact (whether "claude --advisor fable" is rejected, which row_advisor() never depends on) instead of the one it actually rests on (whether opus/sonnet can advise a FABLE main model). Re-pointed and verified against the installed CC 2.1.226. Verified before committing: grepped every repo under ~/repos for a route line carrying --opus-xhigh-failed (none - one repo has it in prose only, not in its <!-- route: --> comment) and ran board.sh --plan/--brief over the real tree to confirm no repo's command line broke. Sent a follow-up coord-send to catalog superseding an earlier now-stale "406" stat-line correction with the current 402. skills/route/SKILL.md: usage block, "last-session record" framing, and the closing --opus-xhigh-failed paragraph rewritten to match. CLAUDE.md, README and CHANGELOG updated (checks 73->69, badge 406->402, new 0.21.0 entry). Version bumped 0.20.3 -> 0.21.0 across plugin.json, package.json and all three skill frontmatters (breaking CLI removal at 0.x -> minor, per v0.20.0 precedent). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ap1WKHCDPcSfpjo4ds2dQX
This commit is contained in:
parent
4821ba8d4b
commit
dd8f3ce042
10 changed files with 172 additions and 124 deletions
|
|
@ -20,7 +20,7 @@ description: >-
|
|||
user names no repo and no tool — choosing *between* repos is this skill. Not for
|
||||
"where were we" inside the current repo: that is this repo's own STATE.md,
|
||||
already injected at session start.
|
||||
version: "0.20.3"
|
||||
version: "0.21.0"
|
||||
---
|
||||
|
||||
# board — which repo deserves the next session
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ description: >-
|
|||
covers retiring a broadcast that has become wrong or obsolete: "retract that
|
||||
broadcast", "that announcement is outdated, pull it", "trekk tilbake kringkastingen",
|
||||
"den broadcasten er utdatert".
|
||||
version: "0.20.3"
|
||||
version: "0.21.0"
|
||||
---
|
||||
|
||||
# coord-send — natural-language front door for inter-repo messages
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ description: >-
|
|||
the operator names no model and no tool — choosing the model for the next
|
||||
session IS this skill. Not for choosing which REPO gets the next session:
|
||||
that is the `board` skill.
|
||||
version: "0.20.3"
|
||||
version: "0.21.0"
|
||||
---
|
||||
|
||||
# route — what the next session should run with
|
||||
|
|
@ -40,7 +40,6 @@ scoring step and are doing the thing this skill replaces.
|
|||
--reversibility <cheap|costly|one-way> \
|
||||
--scope <local|multi-file|cross-cutting> \
|
||||
--rationale "why these four scores" \
|
||||
[--opus-xhigh-failed] \
|
||||
[--last-model <name> --last-effort <level> \
|
||||
--last-completed <yes|no> --last-corrections <n>]
|
||||
|
||||
|
|
@ -94,11 +93,24 @@ procrastination available, and it hides the real defect.
|
|||
This check is worth more than the tokens the routing saves. Do not skip it by
|
||||
scoring `partial` to keep things moving.
|
||||
|
||||
## Fable rows are never this calculator's output
|
||||
|
||||
`route.sh` only ever emits rows 1-4. Rows 5-6 (Fable) fired from an explicit
|
||||
`--opus-xhigh-failed` flag until 2026-08-06, when the operator removed that
|
||||
policy; nothing replaced it as a trait-derived outcome. Choosing Fable is now
|
||||
always a deliberate deviation from the rubric — CLAUDE.md is explicit that the
|
||||
rubric stays the only deterministic lookup and a departure from it is recorded
|
||||
in STATE as an **override**, never as something this skill produces. If Fable
|
||||
is the right call for the next step's *form* (big-picture, review, planning),
|
||||
write the board line and the `rule` by hand — `board.sh` still parses
|
||||
"Fable 5/high" and "Fable 5/xhigh" — and say so plainly in the rationale rather
|
||||
than scoring the four traits to land there. One fact worth carrying into that
|
||||
override: a Fable session runs without an advisor.
|
||||
|
||||
## The last-session record
|
||||
|
||||
Rows 5 and 6 (Fable) are history-dependent, so without a record they are dead
|
||||
policy. Write it whenever all four fields are actually known, from what happened
|
||||
in the session that is ending — never from what STATE.md prescribed:
|
||||
Write it whenever all four fields are actually known, from what happened in
|
||||
the session that is ending — never from what STATE.md prescribed:
|
||||
|
||||
- `--last-model` / `--last-effort` — what this session actually ran with. Both
|
||||
are closed sets (`Sonnet 5|Opus 5|Fable 5`, and the verified effort levels),
|
||||
|
|
@ -143,13 +155,6 @@ One honest limit: `CLAUDE_EFFORT` is the *current* level, so if the operator
|
|||
changed it mid-session with `/effort`, "the effort this session ran with" is not
|
||||
a single value. Record the level the work was actually done at and say so.
|
||||
|
||||
Read the previous `route-last` line out of STATE.md before overwriting it.
|
||||
Pass `--opus-xhigh-failed` **only** when it says an `Opus 5`/`xhigh` session ran
|
||||
at this same next step and did not complete it. A session that ran out of
|
||||
context, was interrupted, or stalled waiting on another repo is not a model
|
||||
failure — and Fable runs without an advisor, so a wrong escalation here is
|
||||
expensive. When it is ambiguous, leave the flag off.
|
||||
|
||||
## Writing it into STATE.md
|
||||
|
||||
Three single-line HTML comments sit directly under the `👉 NESTE` heading, in
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue