diff --git a/docs/active-work.md b/docs/active-work.md index b913265..5f4f830 100644 --- a/docs/active-work.md +++ b/docs/active-work.md @@ -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** (latest verified code head `9cb610e`)**:** B1's per-target fractional +**Landed so far** (latest verified code head `a2d5b26`)**:** 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**, @@ -393,6 +393,31 @@ setup assertions rather than by reading: mode and content width**, so a geometry or wrap change reaches the follow one frame late. L7a and L8 paint twice and say why. +**`a2d5b26` then closed clause 5's replacement half**, which the first +latch commit had left undone: three TUI paths replace a window's buffer +— `switch_active_buffer_for`, `install_buffer_in_window` and the +daemon's `align_primary_document_window` — and **none cleared +`view_left` or the latch**. Two already reset cursor, selection and +`view_top` a line at a time; the horizontal origin was simply missing +from the list. One `Window::forget_manual_horizontal_origin`, three +call sites, three rows (L8b/L8c/L8d), each firing only on its own call +site's removal. L8d sits in `daemon.rs` because that function is +private there. + +Two witness repairs in the same commit, both of the same shape — an +assertion that looked strict and was not: + +- **L7a asserted only that the origin came DOWN.** Any arbitrary + reduction satisfied that, including an off-by-one that strands a + column. It now asserts `widest − viewport` exactly, against a named + fixture constant, and is mutation-checked with that off-by-one. +- **L4's stated rationale was false.** It claimed the caret stays + inside the viewport after the vertical wheel; with short filler lines + the caret clamped to their end, LEFT of the origin — so the origin + discriminated too and the reason given for using the latch instead + did not hold. The filler is now 120 columns and the row asserts the + caret is still inside, through `pos_to_display`. + **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. diff --git a/docs/ci-red-signatures.md b/docs/ci-red-signatures.md index d3364b0..84b80c7 100644 --- a/docs/ci-red-signatures.md +++ b/docs/ci-red-signatures.md @@ -1100,17 +1100,23 @@ one loaded machine. One test alone does not carry that argument. | **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 | +| **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. It is the largest this selector has shown: U6's were 1.297, 1.182, 1.592, 1.527 and one unrecorded. Against the previous worst of 1.592 that is **1.18× as large as a ratio, or 1.48× as much budget excess** (0.879 over vs 0.592 over) — two different numbers for two different questions, which is why neither is summarized here as a single adjective | +| **what IS established** | the observing diff (`9cb610e`, the TUI horizontal-authority latch) adds work to the paint path, so it was a live suspect. Three full-lib runs with the diff and three with `src/editor.rs` and `src/window.rs` restored to HEAD: **all six green.** That establishes **non-reproduction in six runs, and nothing more** — this registry's own rule is that reruns establish intermittence only | | **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. +budget allows. 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. + +**Nor do the six controlled runs.** An earlier draft of this row said +they establish that the observing diff is not the cause. They do not: a +tree that fails intermittently can carry a *changed failure rate* that +six runs are far too few to see, and treating non-reproduction as +exoneration is precisely the reasoning this registry refuses when a +rerun turns a red green. What the controls do is remove the easy +story — "the diff obviously did it" — and leave the question open. **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