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.
59 lines
2.9 KiB
Markdown
59 lines
2.9 KiB
Markdown
# 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.
|