Files
booth/persistent-memory.d/2026-09-22-u6-benches-released.md
vh c5ac49356f memory: snapshot — U6 released at v0.6.0, six of seven v1 units landed
Nothing in flight. The in-flight section is rewritten to the post-release
state and carries the five things a fresh session must not do: push (main is 8
ahead of origin/main), seed the registry, send the 17-handle note, run either
dated prediction early, or start U7 without re-counting the booths first.

Two new detail files: the release itself, and what each of the five review
passes could only see alone -- the strongest evidence this repo has for running
all of them rather than picking one. The earlier U6 entry is reconciled; it was
written while the gates were still out and said NOT TAGGED.

Restored in the rewrite: the warning that the 17 handles were never told `keep`
stopped meaning "waiting on an answer", which is load-bearing for how the
2026-10-06 re-count reads, and the fact that a remote now exists.
2026-09-22 14:24:12 -07:00

2.9 KiB

U6 released as v0.6.0 — benches, and the number that was two defects

2026-09-22 · booth

The sixth of seven v1 units. Only U7 remains. 444 → 607 tests. Tagged v0.6.0 (minor, operator-approved). NOT PUSHED — push is his call.

What shipped

  • booth/benches.py — stdlib-only AND sibling-free. Bench, normalize_bench_url (the identity), a lenient read_benches on the render path and a strict _load_strict on the write path, mkstemp + fsync + os.replace under an flock, and order_benches with a stated total order (state rank, name casefolded, id).
  • links.booth_target — ONE predicate for "is this a booth URL", host-agnostic, path-shaped, percent-decoding, control-character-rejecting, never raising. Three callers: the CLI refusal, the board's dead marker, bench import.
  • booth link refuses a booth URL (naming booth new --why) and a credentialed one, writing nothing in either case.
  • The board marks dead rows — 161 of 221 live. Removal stays the operator's two clicks through the bulk control that already existed. Nothing deletes.
  • booth bench add|ls|state|rm|import. --apply REQUIRES the ids.

The decision that shaped the unit, and it was measured

The design doc's headline "69% rot" was two defects wearing one number, and splitting them is what made the unit the right size — see 2026-09-22-one-number-was-two-defects. 178 of 221 rows are booth announcements (156 already dead) whose cause U5 had already closed; only 8 are the bench re-post the registry fixes. A unit scoped off the unsplit number would have built the registry, declared victory, and left 178 rows rotting.

Identity is the FULL normalized URL, not the origin, and that was measured rather than chosen: origin identity merges eight distinct gitea repositories into one row, three unrelated HuggingFace model cards into one, and the two LRPG surfaces on 10.100.10.50:8321 — the design doc's own example of two real benches — into one. It destroys more than it deduplicates.

booth link is NOT deprecated, against the design doc's plan. Roughly 14 of the 35 distinct non-booth targets are reference bookmarks (repos, model cards, docs) for which the board is the right and only home. Deprecating it would have evicted a third of its live content. The IA doc is corrected.

The gates

All four closed, and every one paid — see 2026-09-22-three-cold-panels-on-one-unit. Contract review 01M35BWCJ806MT75NA630Y4WFH, code review 01M35CK8YKEKMV7T15JXEF6A8N, bug hunt 01M35CRRK2RTVWWF1BN09AFQG3, one consolidated reply sent to heid at 01M35FY8QZTB9E5VR4WXDSBGEV.

Live evidence, unplanned

The sweeper ran mid-session: 23 booths → 19, and dead board rows went 156 → 161 in about fifteen minutes. The defect compounding in real time while the fix was being built — which is the argument for U6-before-U7 playing out on its own.