feat(board)!: rank --plan on five ordered groups, planned above in-progress

Replaces the weighted score shipped in 0.19.0 with five lookups: chain-root
credit, unhandled inbox, planned, in-progress, undeclared status. Within a
group: that group's own quantity, then a Sonnet next-cost, then oldest plan.

The score's objection is accepted, not forgotten, and is written into board.sh
and CLAUDE.md so a later session reads it as decided rather than as an unfixed
defect: a group order cannot express "owes one message AND releases two others"
as one quantity. What the score could not do was hold still for the format's
second consumer - re-tuning one weight against another silently reorders a
parser in another repo, and no test here can catch that.

planned now ranks above in-progress, inverted by the same decision: converting a
decision into motion is the slow step; live work is already moving.

Debt stays uncapped and never excluded. One group below chain-root credit is not
the cap declined at 0.19.0 - the debtor keeps its tab, its most-owed-first
position, and its why=inbox:N. Pinned by a discriminating fixture the score
would fail: a root releasing one repo outranks a repo owing four.

board-selftest 134 -> 138. Suite 183 + 138 + 73 = 394.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6ULuFCPMNYAPNN3pAjsXQ
This commit is contained in:
Kjell Tore Guttormsen 2026-08-03 06:55:21 +02:00
commit d0a5ffe515
10 changed files with 287 additions and 118 deletions

View file

@ -5,6 +5,53 @@ 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).
## [0.20.0] - 2026-08-03
### Changed
- **`--plan` ranks on FIVE ORDERED GROUPS, replacing the weighted score shipped
one version earlier.** The groups are chain-root credit, unhandled inbox,
`planned`, `in-progress`, and undeclared status — each a lookup over a field
the scan already read, so a selftest pins an outcome rather than a
coefficient. Within a group: the quantity that group is about, then a Sonnet
`next-cost`, then oldest plan first.
The objection the score answered is **accepted, not forgotten**, and is
recorded in `board.sh` and `CLAUDE.md` so it is read as decided rather than as
an unfixed defect: a group order genuinely cannot express "owes one message
**and** releases two others" as a single quantity. What the score could not do
was hold still for the format's second consumer — re-tuning 40 against 15
silently reorders a parser living in another repo, and no test here can catch
that. Operator decision, 2026-08-03.
- **`planned` now ranks ABOVE `in-progress`**, inverted from every earlier
version by the same decision. A decided but unstarted next step is the step
that converts a decision into motion; live work is already moving. Flipping it
back is a policy change, not a sort fix.
- **`why=` names the group that admitted the repo**, not the dominant scoring
term. The emitted values are unchanged (`unblocks:N`, `inbox:N`, `planned`,
`in-progress`, `uavklart`), so neither consumer sees a new token — but the
chain-root group is tested first, so `why=unblocks:N` now wins for **any**
root, not only where its weight happened to dominate.
- **The Sonnet `next-cost` tiebreak introduced with the score is carried
forward deliberately**, demoted to the last key below group and magnitude. It
is a lookup, and removing a shipped property nobody asked to remove would be
the larger surprise. It can now only separate repos that are otherwise equal.
### Notes
- **Debt is still neither capped nor excluded.** Being one group below
chain-root credit is not the cap that was proposed and declined at 0.19.0: a
debtor keeps its tab, its most-owed-first position among the other debtors,
and its `why=inbox:N`. Selftest section 12 pins both halves on a
discriminating fixture — a root releasing **one** repo outranks a repo owing
**four** (which the score would have ordered the other way), and that debtor
keeps everything it had.
- `board-selftest.sh` is 134 → **138 checks**. Suite total 183 + 138 + 73 =
**394**.
## [0.19.0] - 2026-08-02
### Added