# U7 is three-quarters built and blocked on one word _2026-09-22 · booth_ **The last v1 unit, decomposed by what the operator has already ratified versus what he has not.** ROADMAP's U7 row names four components. Three were already approved there and are **built, tested and deployed** (`a306e2d`). The fourth is a scope departure and is **deliberately not built**. | component | ROADMAP | state | |---|---|---| | sticky rail | ratified | **landed** — totals + per-filter counts | | filters | ratified | **landed** — all / flagged / annotated / unanswered | | grid keyboard | ratified | **landed** — `←/→ f n Enter Esc`, bound only when a grid exists | | **sections → filename groups** | **departs** | **NOT BUILT** | `tests/test_navigation.py::test_no_group_rail_is_shipped_yet` fails the moment somebody builds the group rail anyway, so the departure cannot arrive by accident while the ruling is outstanding. ## The question, and why it is his **Drop subfolder sections for filename-prefix groups — yes or no?** Measured (see [[2026-09-22-u7-remeasured-before-scoping]]): **zero of eleven gallery booths have a subdirectory**, so sections buy nothing; stripping a trailing digit-run from the stem yields **5–16 sensible groups on four of the five large galleries** and degenerates to one group on the fifth. The replacement is better on the evidence — but swapping a ratified component for an unratified one is scope direction, not implementation. Contract at `docs/contracts/u7_navigation.contract.md`, status `PARTIALLY LANDED`, with the departure named as the operator's call. ## Decisions taken under stated assumption, both cheap to reverse - **`unanswered` means HAS AN OPEN PICK** — the U4 hold predicate, which already exists. The other reading ("has no mark at all") is a genuinely different question and stays an open question on the contract. - **Filters are LINKS, not scripts**, resolved server-side, so the gallery keeps working with JavaScript off. U3 cost the verbatim path its no-JS operation and said so plainly; the gallery is the surface the operator actually reviews on, and this unit does not repeat it there. ## The vacuous falsifier, written an hour after the entry about them `test_filtering_never_reorders` compared each filtered view against the **unfiltered response** — so a mutation reversing the order reversed both sides and it **stayed green under the exact change it forbade.** Caught only by running the mutation rather than trusting the assertion. Rewritten against an independent truth: U1 INV-3 says the order IS `sorted(rel)`, so each view must be sorted, full stop, with no reference to another response. Re-verified RED. **Every new falsifier in this session was mutation-checked after this**, and that is the practice to keep — see [[2026-09-22-vacuous-falsifiers]].