diff --git a/persistent-memory.d/2026-09-22-a-directive-misrouted-by-pane-title.md b/persistent-memory.d/2026-09-22-a-directive-misrouted-by-pane-title.md new file mode 100644 index 0000000..6a17a86 --- /dev/null +++ b/persistent-memory.d/2026-09-22-a-directive-misrouted-by-pane-title.md @@ -0,0 +1,45 @@ +# An approved directive misrouted because pane_find addresses by a rolling title + +_2026-09-22 · booth_ + +**An operator-approved directive (D-0011, sent by Miranda, telling booth-dev to +begin U7) landed on the infra-ops handle instead.** Worth keeping for the +mechanism, not the incident: the incident resolved cleanly and the mechanism +did not. + +## What happened, and why nothing broke + +`pane_find` matched `terminal_2` **by its ROLLING PANE TITLE**, and that pane is +the eshpfi-management seat rather than booth-dev. Miranda confirmed all of this +directly when asked. + +infra-ops caught it and **deliberately did not relay the content as an +instruction** — their reasoning, which is exactly right: a directive arriving as +"infra-ops says Miranda says Vuong says" is two hops from the source, and a peer +passing operator authority along is the thing the rules warn about. They sent a +routing report instead, quoting only the two lines that identified the target. + +This session then **did not act on it**, and asked Miranda directly rather than +taking a peer's word for the operator's. She confirmed it was genuine and +**superseded pending the sections ruling**. Both loops closed in two messages. + +## The part that is still true tomorrow + +**A pane title that changes as work moves through the pane is not a stable +address.** It put an approved directive on the wrong seat, and: + +- **the failure is silent from the sender's side.** Miranda had no signal it + went astray until infra-ops spoke up. A directive that misroutes to a quiet + or busy seat simply evaporates. +- it landed somewhere that caught it. That was luck, not design. + +Reported to infra-ops as an ops matter (`01M35JJ9034E64HMA8X9C21R2N`), with the +mechanism named and no fix proposed — not this repo's call. **Not tracked +anywhere by booth-dev**; recorded here only so the next session does not +re-derive it if a directive goes missing again. + +## The rule this confirms + +The CLAUDE.md Miranda exception is for Miranda relaying **directly**. A +second-hand report of a Miranda relay is one hop too far, and infra-ops said so +before this session had to. Going to the source cost two messages and settled it. diff --git a/persistent-memory.d/2026-09-22-u7-three-quarters-and-one-ruling.md b/persistent-memory.d/2026-09-22-u7-three-quarters-and-one-ruling.md new file mode 100644 index 0000000..6b08bfb --- /dev/null +++ b/persistent-memory.d/2026-09-22-u7-three-quarters-and-one-ruling.md @@ -0,0 +1,56 @@ +# 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]]. diff --git a/persistent-memory.md b/persistent-memory.md index 4879a42..cdb908d 100644 --- a/persistent-memory.md +++ b/persistent-memory.md @@ -19,65 +19,52 @@ loop it turned out to actually be. _As of 2026-09-22:_ -- **NOTHING IS IN FLIGHT.** U6 (benches) landed, all four review gates closed, - **released as `v0.6.0`**, with the last open defect closed in `v0.6.1`. Deployed; - tree clean at `1b394dd`, 611 tests green, 19/19 booths 200 live. ⚠ **NOT PUSHED** — push is the operator's call - and he did not give it this session; `main` is ahead of `origin/main`. +- **U6 (benches) SHIPPED as `v0.6.0`; a late fix shipped as `v0.6.1`.** Six of + seven v1 units are landed. → `persistent-memory.d/2026-09-22-u6-benches-released.md` -- **v1 is gated on seven units. SIX ARE LANDED. U7 IS THE LAST ONE.** U1 - `ce598b3`; U2 → `v0.2.0`/`v0.2.1`/`v0.2.2`; U5 → `v0.3.0`; U4 → `v0.4.0`; - U3 → `v0.5.0`; U6 `1c3ce5d` → `v0.6.0`. -- ⚠ **Before starting U7, read - `persistent-memory.d/2026-09-21-u7-section-premise-half-wrong.md` AND - re-count the booths first.** Its premise has degraded twice over: every booth - that needs navigation is FLAT, and on 2026-09-22 the four large booths it was - sized against (`pancake-v3-full`/`pancake-v4-full` at 270 items, - `sindra20-engines`, `sindra-finalists`) had ALL been swept. Largest live booth - is `miranda-is` at 92 items. Two of 19 booths have subfolders and both are - reports. Sections buy close to nothing; the rail, filters and grid keyboard - are the unit. -- **THE LAST OPEN DEFECT IS CLOSED.** The wrong-shaped `answer` that 500'd the - gallery and marks pages (pre-existing, measured at `42ea67f`) is fixed at - `_hydrate` — the placement the session recommended three times and the - operator never ruled on, **taken under a stated assumption and cheap to move** - (one condition in one function) if he disagrees. Measured before/after: both - pages 500 → 200, error visible, the booth's other pick untouched. Two things - fell out of it that matter more than the fix — U3's `_safe_fragments` lost its - natural trigger and is now a synthetically-falsified backstop, and that guard's - own handler could not survive the failure it was handling. Read - `persistent-memory.d/2026-09-22-a-wrong-shaped-answer-500s-the-gallery.md` - before touching marks rendering anywhere. -- ⚠ **TWO OPERATOR DECISIONS ARE OUTSTANDING AND BOTH ARE DELIBERATELY NOT - DONE.** (1) The single althing note to the 17 handles about `booth link` - refusing booth URLs — gated as multi-recipient, drafted nowhere, NOT SENT. - (2) Seeding the bench registry from the board — he said "no seeding yet", so - `booth bench import --apply` has NOT been run against live data and - `.benches.json` does not exist in `~/booth-data`. +- **U7 IS THREE-QUARTERS BUILT AND BLOCKED ON ONE RULING.** The three + components ROADMAP already ratifies — sticky rail, filters, grid keyboard — + are implemented, tested and deployed (`a306e2d`). The fourth, replacing + subfolder sections with filename-derived groups, is a **scope departure** and + is deliberately NOT built; `tests/test_navigation.py::test_no_group_rail_is_shipped_yet` + fails if anyone builds it before he rules. + → `persistent-memory.d/2026-09-22-u7-three-quarters-and-one-ruling.md` +- ⚠ **THE ONE QUESTION BLOCKING v1: drop subfolder sections for filename-prefix + groups, yes or no?** Everything else in U7 is done or parked. Read + `persistent-memory.d/2026-09-22-u7-remeasured-before-scoping.md` for the + evidence before putting it to him again. +- **623 tests green. Tree clean at `a306e2d`. Deployed; 19/19 booths 200.** +- ⚠ **NOT PUSHED.** `main` is **15 commits ahead of `origin/main`**, including + the `v0.6.0` and `v0.6.1` tags. Push is the operator's call and he has not + given it. +- ⚠ **NOT SEEDED.** He said "no seeding yet", so `booth bench import --apply` + has not been run against live data and `.benches.json` does not exist in + `~/booth-data`. The dry run is safe and writes nothing. +- ⚠ **THE 17-HANDLE NOTE IS NOT SENT.** `booth link` now refuses a booth URL, + which changes behaviour for seventeen agent handles. Gated as multi-recipient; + not drafted, not sent. +- **A U7 directive MISROUTED and is SUPERSEDED — nothing to act on.** + Operator-approved D-0011, sent by Miranda, landed on infra-ops because + `pane_find` matched a rolling pane title. Miranda confirmed directly that it + is superseded pending the sections ruling, and that every held item above + stays gated. → `persistent-memory.d/2026-09-22-a-directive-misrouted-by-pane-title.md` - ⚠ **THE 17 CONSUMING HANDLES WERE NEVER TOLD that `keep` stopped meaning - "waiting on an answer"** — operator decision 2026-09-22, no broadcast, and it - still stands. **This CHANGES HOW THE 2026-10-06 RE-COUNT READS**: the hold - rides for free but not-pressing-`keep` has to be learned, so a flat `.forever` - rate does NOT falsify the diagnosis. Read its entry before measuring. -- **A remote exists and `main` is AHEAD of it.** `origin` is - `git@gitea.phasefinal.com:vh/booth.git`; the first push of this repo's history - was 2026-09-22 (26 commits, `v0.2.0`–`v0.5.0` in one motion). As of this - snapshot `main` is **11 commits ahead of `origin/main`** — the whole of U6 - including the `v0.6.0` and `v0.6.1` tags. Pushing is the operator's call. -- **Two dated predictions are pending and must not be run early.** U5's adoption + "waiting on an answer"** — operator decision, no broadcast, still standing. + **This CHANGES HOW THE 2026-10-06 RE-COUNT READS**: a flat `.forever` rate + does NOT falsify the diagnosis. Read its entry before measuring. +- **Two dated predictions pending and must not be run early.** U5's adoption re-measure on **2026-09-29**; the `.forever` re-count **on or after - 2026-10-06**. Before the second, read - `persistent-memory.d/2026-09-22-no-notice-and-what-it-does-to-the-prediction.md`. -- **FIVE methodology proposals sit with the operator, untracked by his choice** - — four from earlier rounds plus Kimi's new one: promote "the falsifiable test - is weaker than the invariant it guards" to its own ambiguity class in - `/heid-contract-review`. It now has two data points in this repo (five of - seven U4 falsifiers vacuous; U6 shipped a tie-break falsifier that could not - fail). They are `/heid*` skill changes, not this repo's work. + 2026-10-06**. +- **FIVE `/heid*` methodology proposals sit with the operator**, untracked by + his choice — including Kimi's "the falsifiable test is weaker than the + invariant it guards", which now has three data points in this repo. - The booth set churns hard: 26 → 24 → 25 → 23 → **19** across five sessions. - Re-count rather than trusting any number written here. + Re-count rather than trusting any number here. ## Recent decisions +- `[2026-09-22]` **U7 is three-quarters built and blocked on one word** — the ratified three landed; the sections-vs-groups departure is NOT built and is the operator's call, tracked at `docs/contracts/u7_navigation.contract.md` → `persistent-memory.d/2026-09-22-u7-three-quarters-and-one-ruling.md` +- `[2026-09-22]` **An approved directive misrouted because pane_find addresses by a rolling pane title** — resolved; the MECHANISM is the durable part, reported to infra-ops, untracked by booth-dev → `persistent-memory.d/2026-09-22-a-directive-misrouted-by-pane-title.md` - `[2026-09-22]` **U7 re-measured before scoping — sections are dead, filename prefixes are not** — PRE-WORK ONLY, no unit started; read before writing U7's contract → `persistent-memory.d/2026-09-22-u7-remeasured-before-scoping.md` - `[2026-09-22]` **The last open defect closed, and building its falsifier found another** — the wrong-shaped answer fixed at `_hydrate`; `_safe_fragments` lost its natural trigger and its handler could not survive the failure it handled → `persistent-memory.d/2026-09-22-a-wrong-shaped-answer-500s-the-gallery.md` - `[2026-09-22]` **U6 released as `v0.6.0` — benches, and the number that was two defects** — six of seven v1 units landed, NOT PUSHED → `persistent-memory.d/2026-09-22-u6-benches-released.md`