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:
parent
9cb610ecd6
commit
cf75a51867
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in New Issue