test(board): pin the "field inserted before neste" class; 16 of 16 mutants die

An independent review ran 16 mutants of the PLAN column against the 461
board checks and 5 survived:
- --row taking neste from a stale index (neste=5d|...)
- --inbox-plan taking neste from a stale index (neste=5d)
- the no-STATE.md record one field short (plan=(ingen STATE.md))
- Nd measured behind NOW instead of behind the last commit
- the '?' branch (a plan with no commit) rendered as '-'

Section 34 part 8 adds a fixture for each: a NESTE with a '|' inside,
pinned exactly in --row and --inbox-plan; a repo with no STATE.md; a repo
whose last commit is 30 days old, so the two definitions give different
numbers; a repo with a plan and no commit. Rebuilt from this tree and run
against the full suite: 16 of 16 mutants now fail it.

The same fixtures exposed two defects, fixed here:
- --inbox-plan took neste as ONE field and cut the prose at its first '|'
  (also in 0.34.0); it now takes that field onward.
- a symlinked PLAN.md was aged by the link's own mtime; it now uses
  stat -L, so the plan's age is the target's.

Docs: CHANGELOG no longer says "field 17 onward" (the index is 18) and
now records the no-STATE.md record fix and the --inbox-plan fix; README's
requirement says macOS, since board.sh uses BSD stat and renders nothing
under GNU stat.

board-selftest 461 -> 478 (badge 978). Suites: coord 257, board 478,
route 73, orders 116, guard 54; npm test 12/12, run after git add.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-17 17:58:49 +02:00
commit 6f4908a5dc
5 changed files with 145 additions and 15 deletions

View file

@ -467,7 +467,7 @@ marketplace plugin. Three components, one boundary:
- **Board (`scripts/board.sh`):** cross-repo attention board. Reads STATE.md
next-step blocks + board lines, `git status`, and mailbox pending counts, and
prints one line per repo. Read-only by construction: it writes to no repo, no
STATE.md and no mailbox. Pinned by `board-selftest.sh` (461 checks).
STATE.md and no mailbox. Pinned by `board-selftest.sh` (478 checks).
**It lives here because the mailbox is one of its three inputs, and it carries
the same axis distinction the mailbox does.** A pending count means *others
@ -1489,6 +1489,23 @@ marketplace plugin. Three components, one boundary:
"last field onward" index now moves with the record (17 -> 18 here). F6
counts DRT from the right, so its `NF-3` became `NF-4` for the same reason.
**An independent review then ran 16 mutants against the 461 checks and 5
survived** - three of them the same class as the dispatch defect (`--row`
and `--inbox-plan` reading `neste` from a stale index, and the no-STATE.md
record one field short), one the column's DEFINITION (days behind now
instead of behind the last commit - every fixture's commit was close enough
to now that the two coincided), and one the `?` branch. Section 34 part 8
now has a fixture for each, and all 16 die. Every "last field onward"
reader is pinned on the EXACT start of the prose with a `|` inside it,
because a reader taking one field instead of "onward" was a second,
pre-existing defect in `--inbox-plan` that the same fixture exposed.
A symlinked PLAN.md is aged by its target (`stat -L`). Stated, not closed:
the 34-character nested key still shifts its row (the section's own header
splitter would misread such a row; fixture names are short on purpose), and
the "trap is armed" fixture check is red on a case-sensitive volume - this
repo is macOS-only (BSD `stat`), and a case-sensitive APFS volume is the
remaining gap.
- **Skills (`skills/coord-send/`, `skills/board/`, `skills/route/`, `skills/dispatch/`):** natural-language front
doors mapping user intent to engine invocations. No mailbox logic lives here
either. `board` additionally owns the *ranking* — which repo wins and why —
@ -1537,7 +1554,7 @@ obligations in another repo.
builtins only in hook and tests.
- TDD: no behavior change without a failing selftest check first.
`bash scripts/coord-selftest.sh` must exit 0 (257/257),
`bash scripts/board-selftest.sh` must exit 0 (461/461),
`bash scripts/board-selftest.sh` must exit 0 (478/478),
`bash scripts/route-selftest.sh` must exit 0 (73/73),
`bash scripts/orders-selftest.sh` must exit 0 (116/116) and
`bash scripts/state-line-guard-selftest.sh` must exit 0 (54/54).