docs: U20, the shared-target red's third occurrence, and the latch entry

Three records, all from the same session.

**U20.** U6's composition-overhead test redded ALONE, its paired
keystroke test passing in the same run. U6's own closing rule says that
is a different incident, so it is filed as one rather than as a sixth
U6 occurrence: U6's selector requires the pair, and its whole argument
is that two unrelated subsystems failing at once is less likely than
one loaded machine. One test alone does not carry that argument.

The observing diff touches the paint path, so it was a live suspect and
was tested instead of argued about --- three full-lib runs with it and
three with the two files restored to HEAD, all six green. The margin is
recorded per U11: 1.879 against a 1.10 budget, a third worse than U6's
worst. The row says plainly that the size of the margin does not
resolve whether this is load or regression, and that a contemporaneous
load reading is the missing evidence.

**The shared-target false red fired a third time**, giving the complete
set of four error sites that the second occurrence's captured tail had
cut to three. An earlier draft of that entry guessed the missing fourth
was widest_display_columns; the third occurrence shows the guess was
right, and the entry now says it was still right not to record it --- a
signature that is usually right is one nobody can match against.

**And the latch entry was wrong.** It listed the manual horizontal
authority latch as "landed but not yet witnessed". It was written in
four places and read in none on the GPU, and absent entirely on the
TUI. An unread bool preserves nothing. The entry now carries the
measurement that showed it --- origin 30, next paint 0 --- and the three
things the framing's L-table did not anticipate, since those are what a
recovering session would otherwise rediscover from scratch.
This commit is contained in:
Levi Neuwirth 2026-09-01 21:35:45 +02:00
parent 9cb610ecd6
commit cf75a51867
No known key found for this signature in database
2 changed files with 91 additions and 10 deletions

View File

@ -319,7 +319,7 @@ Framing
this base, the panel-replay prerequisite recorded as DISCHARGED by #243,
and the both-axis effect witness still owed.
**Landed so far** (code head `f441d3d`)**:** B1's per-target fractional
**Landed so far** (latest verified code head `9cb610e`)**:** B1's per-target fractional
wheel residual (the producer), B2's daemon-side horizontal panel leg,
B3/B7's shared `scroll_window_columns` with its saturated bound and wrap
pin, B4's middle-click PRIMARY paste, **B6's minimap wheel routing**,
@ -354,18 +354,58 @@ documentation-only commits and remains the recovery source. Calling
commit carrying the sentence — the self-certifying checkpoint defect
this ledger has already recorded elsewhere.
**Landed but NOT yet witnessed** — recovery needs this split, because
"L1–L8 owed" reads as though none of the mechanism exists:
### The latch was never the thing the ledger said it was
**This entry was wrong, and the correction is the recovery-relevant
part.** It listed the manual horizontal authority latch as "landed but
not yet witnessed". Writing L1 showed otherwise:
`manual_left_authority` existed on the GPU, was **written in four
places and read in none**, and did not exist on the TUI at all. What
had landed was the arming. The preservation the latch exists for was
nowhere, on either frontend.
L1 measured it before anything changed: a sideways wheel moved the TUI
origin to 30, and the next paint put it back to 0. **A horizontal
scroll was undone by the following frame.** An unread `bool` preserves
nothing, and "landed but unwitnessed" is exactly how that reads from
the outside.
**`9cb610e` implements clauses 2–5 for the TUI** and witnesses each:
L1 preservation across a real `paint_frame`, L3 release on a genuine
cursor move, L4 a vertical wheel preserving authority, L5 viewport-only,
L6 an absorbed notch arming nothing, L7a re-clamp on widening, L8 wrap
clearing the latch. Seven mutations run, each biting its named rows.
Three things the framing's L-table did not anticipate, all surfaced by
setup assertions rather than by reading:
- **L4's stated hazard cannot arise in the setup the same table
mandates.** The vertical wheel carries point only when the caret is
INSIDE the viewport — `pos_to_display` returns `None` left of the
edge (Q#HS7(c′)) — and every other L-row requires it outside. L4
places the caret inside and uses the **latch** as its discriminator,
because the origin cannot discriminate there.
- **Clause 3 needs a mechanism, not an exemption.** `scroll_window`
refreshes `manual_left_cursor` to the point it dragged along, so
clause 4's "genuine cursor change" stays false. Keying release on the
cursor byte alone releases exactly where clause 3 forbids it.
- **`paint_frame` runs the follow BEFORE resolving the frame's wrap
mode and content width**, so a geometry or wrap change reaches the
follow one frame late. L7a and L8 paint twice and say why.
**Still owed on this axis: L7b (content shrink), and the GPU's entire
read side with L2 and L5's GPU leg.** The GPU's four writes remain
inert until something consults them.
**Landed but NOT yet witnessed:**
- the **manual horizontal authority latch** (`manual_left_authority`),
armed only by an *effective* move (clause 2);
- **wrap and buffer-replacement clearing** of that latch and the origin
(clause 5), on both the GPU's `scroll_by_columns` and the buffer
replacement path;
- **R4 and R5's residual resets**, as two separate clears beside
`code_scroll_left` so omitting either is individually visible.
**Owed outright:** the **L1–L8 rows** for the latch above, step 3's
**Owed outright:** L7b and the GPU's whole read side (above), step 3's
fractional both-axis panel witness, R4/R5's own replacement witnesses,
and **B1's disposal half** — a residual keyed to a surface that goes
away must go with it, and this frontend does not yet track "that buffer
@ -453,10 +493,17 @@ error: could not compile `pmacs-gpu` (bin "pmacs-gpu" test)
due to 4 previous errors
```
Three of the four were read off the second occurrence's output —
`main.rs:13291`, `:14517`, `:14578`; the fourth scrolled past the
captured tail and is **not** recorded here rather than guessed. All are
uses of the module the 1b branch added in `9e54cd2`.
**THREE occurrences now**, all local. The third (at `9cb610e`) gave the
complete set of four sites, which the second's captured tail had cut to
three: at that head they were `main.rs:9049`, `:13546`, `:14772` and
`:14833` — every use of the module the 1b branch added in `9e54cd2`.
Line numbers drift as the file grows; the module path is the stable
part of the signature.
An earlier draft of this entry guessed the missing fourth site was
`widest_display_columns`. The third occurrence shows that guess was
right — and it was still right not to record it, because a signature
that is *usually* right is one nobody can match against.
**Why it is false.** Both times, the module was fully present:
`pmacs-protocol/src/columns.rs` existed and matched HEAD, and

View File

@ -1083,6 +1083,40 @@ regression in two unrelated subsystems at once is far less likely than
one loaded machine. If a future run reds **one** of these without the
other, that is a different incident and should be judged as one.
### U20 — U6's composition test reds ALONE, which U6 says is a new incident
Recorded during GUI Stage 1b, 2026-09-01, local (Linux). **This row
exists because U6's closing rule says it must**: *"If a future run reds
one of these without the other, that is a different incident and should
be judged as one."* This is that run. It is filed separately rather than
as a sixth U6 occurrence, because U6's selector requires **both** tests
failing together and its whole argument rests on the pair — a real
regression in two unrelated subsystems at once being less likely than
one loaded machine. One test alone does not carry that argument.
| field | value |
|---|---|
| **selector** | `--lib editor::tests::composition_overhead_under_ten_percent`, **alone** — `optimistic::tests::criterion_1_end_of_line_typing_completes_sub_frame_per_keystroke` passed in the same run |
| **job / flavor** | local (Linux), bare `cargo test --lib` (default features), full-lib load, **not** `scripts/gate` |
| **required fragments** | `composition machinery added more than 10% overhead` + a ratio; the run also printed `dispatch overhead : 87.9%` and `realistic overhead : 82.1%` |
| **status** | **ONE occurrence.** Not reproduced in six subsequent full-lib runs — three on the observing tree and three on the same tree with the observing diff reverted |
| **margin** | **1.879 against a 1.10 budget** (`single=158789 ns, dispatch=298366 ns`). Recorded because U11 taught this registry what a missing margin costs. This is far the largest margin any occurrence of this selector has shown: U6's five were 1.297, 1.182, 1.592, 1.527 and one unrecorded |
| **what IS established** | the observing diff (`9cb610e`, the TUI horizontal-authority latch) adds work to the paint path, so it was a live suspect. It was tested rather than argued about: three full-lib runs with the diff and three with `src/editor.rs` and `src/window.rs` restored to HEAD. **All six green.** The single failure is therefore not reproducible either way |
| **what is NOT** | why it fired. The load confound is once again unmeasured — no `/proc/loadavg` reading was taken at the moment of failure, which is the same gap U15 exists to close |
**The margin is the part that does not fit.** 1.879 is not a budget
missed by a hair; it is the machinery costing nearly twice what the
budget allows, and it is a third again worse than U6's worst. A
load-sensitive assertion can produce that, but so can a real
regression, and this row does not pretend the size of the margin
resolves the question. What it does establish is that the observing
diff is not the cause, because six controlled runs say so.
**If this selector reds alone again, this row is where it goes**, and
the first thing to capture is a contemporaneous load reading — the one
piece of evidence that would separate the two explanations and that
neither U6 nor this row has at the moment of failure.
### U7 — a *different* wall-clock render-budget test reds each sweep
Recorded during worker identity Stage 1 review round 3, 2026-08-09.