docs(roadmap): r3 landed — the compare ring and stepping rules, compare mode off the parking lot

The stale v1.1 line for compare pairing is corrected to the 2026-09-24
ruling (pairs are picked, never detected). persistent-memory records r3
live and unpushed, and the open race note for design-dev.
This commit is contained in:
vh
2026-09-24 15:57:42 -07:00
parent f8d136a521
commit cf08ae3f33
2 changed files with 25 additions and 16 deletions
+5 -2
View File
@@ -119,6 +119,8 @@ Where it already binds, and what the rule is in each case:
| embed anchors in a verbatim report | **document order** — what `querySelectorAll` yields, so the author's markup decides (U3) |
| the embed tail (fragments the author did not place) | **payload order**, which is the marks order `(created, id)` — one rule, whether a fragment lands at an anchor or at the end (U3) |
| questions within a pick | declaration order, in the payload's `questions` LIST — carried by the format rather than by object-key insertion order (U3) |
| the compare filmstrip | **the compare ring**: the review ring (item order, media only) less any rel compare cannot open, so no strip link offers a pair that 404s (r3) |
| compare stepping | along the compare ring, modulo its length; linked moves both sides one place and keeps their distance, unlinked moves the active side only (r3) |
U3's three rows are the first case where the rule binds across a language
boundary: the order is decided in Python and honoured in JavaScript, and a
@@ -140,7 +142,8 @@ gallery booths have a subdirectory.
(section ordering among themselves, compare pairing) resolved differently:
section ordering is MOOT, because U7 renders no section rail — `Item.section`
still exists and is still derived, it simply has no ordered surface. Compare
pairing rode into v1.1 with compare mode itself. **U6's bench listing is
pairing was ruled 2026-09-24: pairs are PICKED, never detected from filenames,
and compare landed with r3 (rows above). **U6's bench listing is
settled** — the row above.
The test for any new ordered surface: *can you write the rule down in one line?*
@@ -162,7 +165,7 @@ weighed against the v1 path and lost on purpose.
| item | why parked |
|---|---|
| ~~**Compare mode**~~ — **UNPARKED 2026-09-23, IN THIS ARC** | Parked as "the only new capability rather than a fix for a measured defect", and **that deferral was ours and the operator overruled it.** design-dev argued it belongs in this arc because the ladders and bakeoffs already need it; the operator ruled `this_arc`. Lands AFTER the Desk and the reel, as a view toggle over the same item record. Recorded so nobody re-parks it by reading an older rule. |
| ~~**Compare mode**~~ — **UNPARKED 2026-09-23, LANDED 2026-09-24 (r3)** | Parked as "the only new capability rather than a fix for a measured defect", and **that deferral was ours and the operator overruled it.** design-dev argued it belongs in this arc because the ladders and bakeoffs already need it; the operator ruled `this_arc`. Lands AFTER the Desk and the reel, as a view toggle over the same item record. Recorded so nobody re-parks it by reading an older rule. |
| Virtualized / progressive grid loading | Speculative. 270 `<img loading="lazy">` may be fine. **Measure the real booth before optimising it** — if it renders inside a second, this is invented work. |
| Bench uptime history + graphs | The v1 need is "is it dead", which one flag answers. A time series is a different product. |
| Cross-booth search | No evidence of the need in the usage data. |
+20 -14
View File
@@ -19,18 +19,22 @@ loop it turned out to actually be.
_As of 2026-09-24:_
- 🔶 **WAITING ON design-dev: the r3 (compare mode) contract.** The operator
ruled r3 on 2026-09-24, in design-dev's session, as both of us recommended:
pairs are PICKED (no filename auto-pairing; design-dev measured it: 1 booth in
26 pairs cleanly, and `sindra-h2h` gets none), and the verdict is a FLAG on
the winner. So **r3 needs nothing new from `booth_items` or marks.** The
compare URL is keyed by REL (`?a=<rel>&b=<rel>`), never by ordinal (our U1
note, adopted). Sequencing: design-dev's SVOS phone approval page merges
FIRST (operator-approved, pending heid reviews), then the r3 contract. When
he pings, do the SEAM PASS on the r3 contract against the real module
surface. If the SVOS page lands in THIS repo, its merge still needs the
operator's word in this session.
- ✅ **LIVE AND PUSHED: origin/main = `d5ead3f`, 888 green.** Tonight landed, in
- ✅ **r3 COMPARE IS LIVE, NOT PUSHED** (operator: "merge r3 once the
mutation check is clean", 2026-09-24). Fast-forwarded to design-dev's
`f8d136a` after our own run of the gate on that exact commit: 918 passed, and
148/148 falsifiers proved (r2b 55, r2c 36, r3 57). Service restarted at 1557
and checked with `/healthz`, the Desk, `/openapi.json` and an empty-pair 404
only. **origin/main is still `d5ead3f`; the push is the operator's call.**
Our seam pass on the contract caught 12 mismatches before code, the two that
mattered being duplicate `data-region` ids (a save would have made B's flag
button flag A) and 22 mutation-table rows anchored in the script that moved.
**Open, design-dev's to take or refuse:** the review route calls
`cring.index(f)` after a second resolve of `f`, so a file removed or relinked
mid-request is a `ValueError` 500 on the review page (a narrow race; compare's
`ring.index(a)` is the same shape). The accepted-not-fixed list from the heid
bug hunt is in `docs/contracts/r3_compare.contract.md`.
- ✅ **PUSHED: origin/main = `d5ead3f`, 888 green** (local main is ahead: the
09-24 memory snapshot, r3 and its roadmap commit). On 09-23 landed, in
order: r2b merge 1 (`b92b002`, reveal all + booth fog), r2b merge 2
(`cce6a20`, Desk row + dates + theme toggle), the Desk sort (`64f6488`), the
blur round-trip (`6880ab3`), 768-wide thumbnails (`1d31ab0`), r2c the review
@@ -69,8 +73,9 @@ _As of 2026-09-24:_
presumably the operator, as he said he would. **Do not blur, unblur or
reveal them on his behalf.** The Desk still shows up to 4 images per booth.
- 🛑 **NO `1.0.0` YET** (operator, 2026-09-23). The tag stays `1.0.0b1`, with
no further pre-release until the arc lands (r3 compare is still in it). ⚠ It
has looked complete twice already.
no further pre-release until the arc lands. r3 compare, the last unit we
held named in it, landed 2026-09-24; **whether that closes the arc is the
operator's call, never ours.** ⚠ It has looked complete twice already.
- 🛑 **STANDING: NO ANNOUNCEMENTS out of this repo until the whole arc is done,
and the operator sends that one himself.** Do not offer, draft-and-await, or
raise it.
@@ -80,6 +85,7 @@ _As of 2026-09-24:_
## Recent decisions
- `[2026-09-24]` ✅ **r3 compare merged on the operator's word, gated by our own run** — fast-forward to `f8d136a` only after 918 green and 148/148 falsifiers on that exact commit, run here rather than taken from design-dev's report. The seam pass is what made the build clean: 12 contract-vs-code mismatches folded before a line was written.
- `[2026-09-24]` ✅ **r3 compare ruled: pick two, flag the winner** — operator, in design-dev's session. No `booth_items` or marks work; the URL is rel-keyed. The A/same/B pairwise verdict is **PARKED (deferred)**, with our ordered-pair-of-rels note attached. Tracked in design-dev's r3 contract parked entry, althing thread `01M3952NCDRRJX5XDFSPMSP5HJ`.
- `[2026-09-23]` ✅ **The Desk's "Everything else" sorts by last UPDATE, not last activity** — the operator chose the simple fix over repairing `.viewed` from the access log. READ BEFORE CHECKING THE LIVE SERVICE → `persistent-memory.d/2026-09-23-desk-sorts-by-last-update.md`
- `[2026-09-23]` ✅ **The blur round-trip, and the migration that recreated the bug it fixed** — three rounds, and the third was our own 09-21 marks lesson repeated. READ BEFORE ANY DOTFILE FORMAT CHANGE → `persistent-memory.d/2026-09-23-blur-round-trip-and-the-migration-that-recreated-it.md`