docs(stage3): make the lane portable and retire its superseded state

Review finding P1: Stage 3 was neither portable nor accurately
recoverable. `bottom-panel-stage3` had no upstream and no
`githubsucks/` ref, while docs/active-work.md still described Stage 3 as
"not started" — so a reader on another machine would have found a lane
claiming nothing existed, and no way to fetch the two commits that did.
That is precisely the failure this ledger records as its own rule:
"When a PR is opened, give it a lane", learned when #171 drifted 153
commits while invisible here. A branch without a PR is the same hazard
with less warning.

The lane now carries branch, base, the two completed steps with their
hashes, what remains, the verification at this head, and a recovery
command.

Review finding P2: the framing retained state the census superseded. It
still said "Nothing has been implemented or measured" and that the
blast-radius measurement "has not been taken", directly contradicting
§1.6b two screens below. Both bullets are rewritten to point at the
measurement rather than deny it, and the dired question is marked
DECIDED rather than left open.

Also records, in both documents, the thing step 2's original commit
message overstated: it is DEFAULT-PRESERVING WITH ONE INTENTIONAL
NORMALIZATION, not "behaviour-preserving". Every adopter kept its
default and the suite is byte-identical to baseline, but terminal's
invalid-input behaviour moved on purpose — and the sweep could not have
caught it, because every existing assertion passes an unknown STRING,
which takes the same path under both designs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Levi Neuwirth 2026-08-01 20:35:05 -04:00
parent 41d37fcbcb
commit 8d14e6a334
No known key found for this signature in database
1 changed files with 73 additions and 10 deletions

View File

@ -311,19 +311,82 @@ them) and why `dired`/`listview` were the correct first two families.
Whichever starts second integrates first.
## Bottom-panel lane (Arc 7) — STAGE 2 COMPLETE; STAGE 3 IS THE LAST STEP
## Bottom-panel lane (Arc 7) — STAGE 3 IN PROGRESS on `bottom-panel-stage3`
**Stage 1, the Stage 2 framing, and Stages 2A, 2B-1, 2B-2 and 2B-3 are
all on `main` @ `4cd4a7b`** (#155, #175, #177, #184, #187, #198). Stage 2
is complete. Durable facts are in `docs/agent-handoff.md` §1, including
the v20-baseline / v21-negotiated handshake that Stage 2B-3 made
compatible.
all on `main`** (#155, #175, #177, #184, #187, #198). Stage 2 is
complete. Durable facts are in `docs/agent-handoff.md` §1, including the
v20-baseline / v21-negotiated handshake that Stage 2B-3 made compatible.
- **Stage 3 — the adopter default flip — is the arc's last step and is
not started.** This lane stays until it lands; it is not removed at
2B-3's merge.
- **DAP waits for Stage 2, not Stage 1** — that dependency is now
satisfied.
**Stage 3 — the adopter default flip — is Arc 7's last step and is NOW
IN PROGRESS**, not "not started" as this lane said until 2026-08-01.
Framing `docs/bottom-panel-stage3-framing.md` revision 3, approved with
amendments after one review round.
- **Branch `bottom-panel-stage3`**, based on `githubsucks/main` @
`21de0b2`. Developed in the primary checkout on the laptop, not a
worktree. **No PR yet** — the flip has not landed.
- **Steps 1 and 2 of the framing's §7 are DONE:**
- `0224c68` — the **fallout census**, taken before any change: a
throwaway flip, a full `--no-fail-fast` sweep, then revert. **37
failures across 5 suites**, classified per test in framing §1.6c.
- `41d37fc` — the **shared resolver**
(`resolve_adopter_display` / `pmacs.window._resolve_display`),
replacing four hand-written copies of the same validation.
**Default-preserving with one intentional normalization** (below).
- **Steps 36 are NOT done:** the flip itself, the ~37 test revisions,
the capability-fallback criterion, and the lane/handoff close-out.
### What the census established, and why it ran first
- **A census that stops at the first failing binary is not a census.**
The first sweep reported 2 failures in 1 suite because `cargo test`
halts after a failing binary; `--no-fail-fast` revealed 37 across 5.
**Any re-measurement must pass that flag.**
- **`m4_acceptance` is a transitive adopter nobody named.** Its two
failures are the LSP hover and outline panels, which are **listview
consumers**. Q#BP12's four rows are the *direct* population; the real
one is everything built on listview.
- **The proportions invert the obvious reading.** `compile_mode` has the
most failures (17) and the least placement content; `listview_
acceptance` has 13 but loses **three quarters of its suite**.
### The normalization step 2 changed, deliberately
Terminal previously raised **mlua's type error** for a non-string
`display`; the Lua adopters stringified into their own message. Now all
four take the shared custom error, rendered **by type alone**
(`unknown display (integer)`), because it names the legal vocabulary.
**Pinned** in `bottom_panel_stage1_acceptance::acc19` at the terminal
entry point, asserting the error *and* that nothing is created. The type
**spelling** is deliberately unpinned — Lua 5.4 says `integer` where
LuaJIT has no integer subtype, so a literal assertion would pass on one
CI flavor and fail on the other. **Verified 46/46 under both.**
### Verification at this head
Full serialized suite **3447 passed / 0 failed**, with **zero suites
differing from the pre-change baseline** — the measurement that makes
"default-preserving" a claim rather than an intention. Plus fmt,
diff-check, clippy, `--lib` 1896, and
`bottom_panel_stage1_acceptance` 46/46 under **both** Lua flavors.
### Recovery from a clean checkout
```sh
git fetch githubsucks
git worktree add ../pmacs-bp-stage3 \
-b bottom-panel-stage3 \
githubsucks/bottom-panel-stage3
```
- **DAP waits for Stage 2, not Stage 1** — satisfied. Q#BP12's adopter
table already carries a `DAP stack/variables` row, so Stage 3 settles
the debugger's panel policy before the debugger exists.
- **The tree primitive is the next thing to scope after this**, per
`COHERENCE.md` §14: Tree is graded ✗, and DAP's variables view is its
next would-be inventor.
## Reap-ledger silent failures — MERGED (#202); kept for its parked follow-ons