repo-mailbox/scripts
Kjell Tore Guttormsen 0d1183800e feat(route): give next-cost a writer, and make the rubric the only copy
The board line's next-cost field had a reader (board.sh) and no writer, so
its value was retyped by hand every session and drifted into several
competing spellings. Cleaning the data could not fix that: the cause was the
missing write path.

route.sh is that writer. Four scored traits of the next task -- path,
verification, reversibility, scope -- plus a required rationale, run through
the operator's model rubric moved here as the single copy. The row table is a
closed set of six values, so a seventh spelling cannot enter circulation, and
route-selftest.sh section 6 runs the round trip (route emits -> board parses)
inside one repo rather than across two.

Two spellings of one decision come out of one table: the rubric name for the
board line, the CLI alias for the command the operator pastes. Effort levels
are the set pinned in this marketplace; model aliases are gated against the
installed claude rather than hardcoded.

Three things worth naming:

- Escalation is asymmetric. Any single trait escalates; the cheapest row needs
  all four at the cheap end. Underkill costs one session, overkill costs quota
  every session -- but a wrong architecture call costs more than either.
- The Fable rows fire only from an explicit judgement flag, never inferred
  from the last-session record. "The session did not finish" also covers
  context exhaustion and operator interrupts, which say nothing about the
  model, and Fable runs without an advisor.
- The trait block is a single-line HTML comment because board.sh's NESTE
  extractor skips only lines that START with '<!--'. Measured first: a YAML
  block or a multi-line comment silently replaces the repo's next step on the
  board with "next_task:". Pinned by section 7.

board.sh is untouched as a program; its header now points at route.sh for the
value set so this does not reopen the two-specs defect 305f168 closed.

Selftests: coord 136, board 30, route 47 (new), node 7.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017peNgsxVt1BR4BTuMwiPoX
2026-07-31 10:10:22 +02:00
..
board-selftest.sh fix(board): one spec for next-cost, and it is the rubric's 2026-07-28 22:06:45 +02:00
board.sh feat(route): give next-cost a writer, and make the rubric the only copy 2026-07-31 10:10:22 +02:00
coord-count.sh feat(engine)!: counting is not delivering, and an empty inbox is not all clear 2026-07-27 20:31:21 +02:00
coord-done.sh fix(engine)!: identity is derived, never invented 2026-07-25 20:34:43 +02:00
coord-inbox.sh feat(engine)!: counting is not delivering, and an empty inbox is not all clear 2026-07-27 20:31:21 +02:00
coord-selftest.sh feat(engine)!: counting is not delivering, and an empty inbox is not all clear 2026-07-27 20:31:21 +02:00
coord-send.sh fix(engine)!: identity is derived, never invented 2026-07-25 20:34:43 +02:00
route-selftest.sh feat(route): give next-cost a writer, and make the rubric the only copy 2026-07-31 10:10:22 +02:00
route.sh feat(route): give next-cost a writer, and make the rubric the only copy 2026-07-31 10:10:22 +02:00