fix(board): one spec for next-cost, and it is the rubric's

The board line's cost field had two specifications and one of them was this
script. `--help` prescribed a versionless `sonnet/xhigh`; the global model
rubric it points at spells the model `Sonnet 5 / xhigh`. A session following
either was correct by its own source, so the field drifted with nobody making
a mistake. Measured across a real 44-repo tree: 14 board lines carrying eight
distinct strings, and not one of them the form documented here - the only
spelling nobody used was ours.

The help now prescribes the rubric's, which is also what most lines already
carry. The parser is untouched and stays lenient: it reads to `;` or `-->` so
the rubric's spacing survives, and the fixtures still vary the spelling on
purpose to pin that. Read-side leniency was never the defect; it is what makes
a documentation-only fix sufficient.

No normalization at read, deliberately. Board lines are rewritten every session
by convention, so an unambiguous spec self-heals the existing lines in about one
session per active repo - mapping variants would be permanent code migrating
data that migrates itself. Nothing compares the field mechanically today either:
KOST is a display column and the board sorts on a numeric bucket key, so the
defect was real but latent. Two checks (28 -> 30) pin the documented form,
red first, because cleaning the data cannot fix a spec that regenerates the
divergence every session. Validation at write has no write path to attach to:
nothing in this repo emits a board line outside the fixtures.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U6EixQo6hpoRCVtiAXdnFs
This commit is contained in:
Kjell Tore Guttormsen 2026-07-28 22:06:45 +02:00
commit 305f1687b7
5 changed files with 54 additions and 5 deletions

View file

@ -5,6 +5,34 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Fixed
- **The board line's `next-cost` field had two specs, and one of them was
ours.** `board.sh --help` prescribed a versionless `sonnet/xhigh` while the
global model rubric it points at spells the model `Sonnet 5 / xhigh`. Neither
a session following the help nor one following the rubric was doing anything
wrong, so the field drifted: measured across a real 44-repo tree, the 14
existing board lines carried **eight** distinct strings — and not one used the
form documented here. The help now prescribes the rubric's spelling
(`Sonnet 5/xhigh`), which is also the one most lines already use.
**The parser is unchanged and stays lenient.** It still reads to `;` or
`-->` rather than stopping at the first non-lowercase character, precisely so
the rubric's spacing survives; the selftest fixtures still vary the spelling
on purpose to pin that. Leniency on the read side was never the defect — it
is what makes a documentation-only fix sufficient.
**No normalization was added, deliberately.** Board lines are rewritten every
session by convention, so an unambiguous spec self-heals the existing lines
within about one session per active repo. Mapping variants at read time would
be permanent code migrating data that migrates itself, and nothing compares
the field mechanically today: `KOST` is a display column, and the board sorts
on a numeric bucket key. Two new `board-selftest.sh` checks (30 total) pin the
documented form, because a spec that contradicts the rubric regenerates the
divergence no matter how often the data is cleaned up.
## [0.9.0] - 2026-07-28
### Added