docs: absorb #242, and the #239/#240 blocks that were still marked OPEN

SS5b merged as #242 (47b5463) at approved head 61f0faf, via
--match-head-commit so the merge is provably of the reviewed head.
PROTOCOL_VERSION is now 25. panel-pointer-replay is unblocked and is the
next step in the arc.

#239 (ca92796) and #240 (72da24a) both merged on 2026-08-13 and the
ledger has been calling them OPEN for a week. Their blocks are kept for
their reasoning, relabelled for their status.

#240's block gains the postscript it earned: its TMPDIR isolation was
the thing I defeated during SS5b review round 4 by running the CRDT
sweep by hand, outside scripts/gate. Two m4_24 base-resolution rows
failed, I reported them as pre-existing and proposed CI as the arbiter,
and the actual cause was /tmp/.git being inherited as an ancestor
project root. Through the gate, both pass.

Adds U11 to the red registry, the row deferred during #242's review so
that no docs commit would invalidate that PR's head-exact gate evidence.
It carries the exact selector and panic fragment, both attempt IDs, the
1960/1 counts, and the fact that the margin is unrecoverable because
duration_ms is omitted from the assertion message --- which is why a
recurrence owes a merge-base control rather than a comparison. The four
exact-head local passes, the two macOS/luajit greens and the identical
async_runtime.rs blob are recorded as narrowing evidence and explicitly
not as causality.

Per the standing rule, this absorption does not advance any canonical
base to its own commit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
This commit is contained in:
Levi Neuwirth 2026-08-20 19:26:41 +02:00
parent 47b54631f4
commit 879f309c8e
No known key found for this signature in database
2 changed files with 79 additions and 3 deletions

View File

@ -270,7 +270,33 @@ hazard in a shape that looks committed. **A documented error message
that never appears is worse than no documentation**, because the reader that never appears is worse than no documentation**, because the reader
waits for a signal that is not coming. waits for a signal that is not coming.
## Panel cell-mapping generation (v25) — REBASED, FULL GATE GREEN, review round 4 fixed ## Panel cell-mapping generation (v25) — MERGED as #242 (`47b5463`)
- **MERGED 2026-08-20T17:25:01Z** at approved head `61f0faf`, merge
commit `47b5463`, via `--match-head-commit` so the merge is provably
of the reviewed head. **14/14 CI green on that exact head**, and the
full 16-stage local gate green on it too (log
`20260820T163107Z-879828`), with `HEAD` and a clean worktree captured
before and after the run.
- **`PROTOCOL_VERSION` is now 25.** `PANEL_MAPPING_MIN_VERSION` is a
literal 25; `ADVERTISED_PROTOCOL_VERSION` stays pinned at **20**. GUI
arc 1e's `OpenTarget` moved to **v26**, corrected in
`docs/gui-stage1-input-framing.md` by the slice itself.
- **Replay effects remain `panel-pointer-replay`'s** — this slice
shipped the trigger and the state, not the effects. That lane is now
unblocked and is the next step in the arc.
- **Review round 4 fixed one functional defect**: both inbound arms
discarded the dispatcher's bool and updated the accepted-gesture
latch unconditionally, so a rejected `Down` armed and a rejected `Up`
consumed a real gesture. Both arms now gate on the return, and
`dispatch_semantic_panel_pointer` is `#[must_use]` so a future
discarded answer is a clippy failure. Four rows cover it, each with a
positive control, and three mutations each bite their named rows.
- **`docs/ci-red-signatures.md` gained U10** from this lane's gating.
- **U11 is recorded below from PR #242's comment**, per the deferral
agreed during review.
### Superseded lane state, kept only for the record
- **BASE IS `5f2015c`**, current `githubsucks/main`. Rebased there - **BASE IS `5f2015c`**, current `githubsucks/main`. Rebased there
cleanly, no conflicts; the two commits picked up are docs-only (the cleanly, no conflicts; the two commits picked up are docs-only (the
@ -1275,7 +1301,19 @@ from #171 and #215.
an otherwise unchanged gate, a distinct `error` outcome, and a an otherwise unchanged gate, a distinct `error` outcome, and a
non-Linux-unix statement. non-Linux-unix statement.
## `scripts/gate` TMPDIR isolation — PR #240 OPEN ## `scripts/gate` TMPDIR isolation — MERGED as #240 (`72da24a`)
- **MERGED 2026-08-13T20:12:58Z** at head `cf09f5a`, merge commit
`72da24a`. Absorbed 2026-08-20; the block below was written while the
PR was open and is kept for its reasoning, not its status.
- **Its isolation earned itself back during §5b review round 4.** Two
`m4_24_*` base-resolution rows were reported as pre-existing local
failures that only CI could arbitrate. They were neither: the sweep
had been run BY HAND, outside `scripts/gate`, so it inherited
`TMPDIR=/tmp` — and `/tmp/.git` exists on that machine, which project
detection walks up into. Run through the gate, both rows pass. **The
hazard this lane fixed is exactly the one that reappeared the moment
the gate was bypassed.**
**Written with the branch's first commit**, per the standing correction **Written with the branch's first commit**, per the standing correction
from #171 and #215. from #171 and #215.
@ -1368,7 +1406,11 @@ from #171 and #215.
- **Out of scope, deliberately:** the overdue absorption of #239. This - **Out of scope, deliberately:** the overdue absorption of #239. This
lane is the gate fix and nothing else. lane is the gate fix and nothing else.
## GUI arc Stage 1a — `TextInput` at v24 — PR #239 OPEN ## GUI arc Stage 1a — `TextInput` at v24 — MERGED as #239 (`ca92796`)
- **MERGED 2026-08-13T13:00:14Z** at head `36a3296`, merge commit
`ca92796`. Absorbed 2026-08-20; the block below was written while the
PR was open and is kept for its reasoning, not its status.
**Written with the branch's first commit**, per the standing correction **Written with the branch's first commit**, per the standing correction
from #171 and #215. from #171 and #215.

View File

@ -929,3 +929,37 @@ binary — and it remains unrun. Until it runs, this family should not
consume another review round. consume another review round.
**Widening a budget is not the fix**, and R1 already rejected it. **Widening a budget is not the fix**, and R1 already rejected it.
### U11 — `dispatch_parse_round_trips_a_rust_source_file`, macOS `lua54`, one occurrence, green on rerun
Recorded from PR #242, 2026-08-20, on head `61f0faf` — the head that
merged as `47b5463`. **Deferred to post-merge absorption by decision**,
so that no docs commit would invalidate that PR's head-exact gate
evidence; the fragments lived in
[PR #242's comment](https://github.com/levineuwirth/pmacs/pull/242#issuecomment-5359360750)
in the interim, because the raw job log is machine-local and **not
portable evidence**.
| field | value |
| --- | --- |
| **selector** | `--lib async_runtime::tests::dispatch_parse_round_trips_a_rust_source_file` |
| **job / flavor** | `Test (macos-latest / lua54)`, run `32393462318` |
| **required fragment** | `trivial parse should be fast`, panicking at `src/async_runtime.rs:3328` |
| **counts** | `1960 passed; 1 failed; 3 ignored`, finished in 64.49s |
| **attempt 1** | job `96504773333` — **failure** |
| **attempt 2, rerun** | job `96511228345` — **success** |
| **status** | **one occurrence, not reproduced** |
| **THE MARGIN IS UNRECOVERABLE** | the assertion is `assert!(duration_ms < 100, "trivial parse should be fast")` — a 100ms wall-clock budget on a 30-byte source, **with `duration_ms` omitted from the message**. The red cannot say whether it missed by 1ms or by 900ms, and **no future occurrence can be compared against this one**. This is a property of the assertion, not of the observation |
| **what IS established** | **non-determinism across these observations, and nothing more.** Four passes of the same selector on the exact head in local gate `20260820T163107Z-879828` — one each in `03-lib`, `04-lib-crdt`, `13-sweep`, `15-sweep-crdt`. Two `Test (macos-latest / luajit)` greens on the same commit and OS, jobs `96504773331` and `96511275402`. `src/async_runtime.rs` **byte-identical to `main`**, blob `9310ce3fca8c5fd8ebd39a68c29ad6985e256049` on both sides — not merely an empty diff |
| **what is NOT** | environmental cause, or harmlessness. The luajit greens narrow the red below "macOS at this commit"; they do not explain it. **A green rerun establishes intermittence only** |
| **relation to U10** | **not U10.** Different selector, different fragment, different subsystem, and remote rather than local. Filed separately for the same reason U10 was filed apart from U6 and U7 |
**A recurrence is not another instance of this row.** Because the margin
was never captured, a second red cannot be compared with the first, so
it owes a **merge-base control** before any claim is made about the
tree.
**The one-line fix that would make this family diagnosable** — include
the measured `duration_ms` in the assertion message — is **owed its own
small lane**. It was deliberately kept out of #242, whose diff does not
touch `src/async_runtime.rs`.