From 5fcc3a3febd1aba673098eb7807c3bdfcef2edc5 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Wed, 2 Sep 2026 20:11:38 +0200 Subject: [PATCH] docs: record PR 247 review fixes and gate Advance the Stage 1b framing reference to revision 22 and record the GPU presentation and direct panel-replacement fixes from the first PR review. Pin the head-exact sixteen-stage review gate at ef25920, including the four executed mutations, 326 GPU tests, and clean stage-log reads. --- docs/active-work.md | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/docs/active-work.md b/docs/active-work.md index 42b1317..8863975 100644 --- a/docs/active-work.md +++ b/docs/active-work.md @@ -320,15 +320,16 @@ before the rewrite, not after, so nothing depended on a local-only ref surviving. Framing -`docs/gui-stage1-input-framing.md`, **revision 21** — §2a re-measured at +`docs/gui-stage1-input-framing.md`, **revision 22** — §2a re-measured at this base, the panel-replay prerequisite recorded as DISCHARGED by #243, and (revision 21) the GPU's authority recorded as **structural**, its lifetime tables made frontend-specific. **The both-axis effect witness is no longer owed**; see the completion note below, which is the authority on what this lane still has outstanding. -**Landed so far** (latest verified code head `9ec4ff1`; **full gate green -at `04ebd2f`**, run `20260902T125049Z-4162684`, all 16 steps)**:** B1's per-target fractional +**Landed so far** (latest verified code head `ef25920`; **full review +gate green at that exact head**, run `20260902T180422Z-311523`, all 16 +steps)**:** 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**, @@ -505,8 +506,38 @@ L8b–L8e, and that bullet's GPU half described the latch that no longer exists. **Owed outright: nothing. The implementation and its evidence are -complete.** The full pre-PR gate is green at `04ebd2f`; the lane is -held immediately before opening its PR. +complete.** The original pre-PR gate is green at `04ebd2f`; after the +first PR review's two implementation fixes, the full review gate is +green at code head `ef25920`, run `20260902T180422Z-311523`. PR #247 +remains open and unmerged. + +### PR #247 review 1 — presentation and direct panel replacement + +Two findings were implementation defects, not documentation residuals. + +- **B2 changed `code_scroll_left` without requesting a redraw.** The + event loop returns to `ControlFlow::Wait`, and horizontal document + scrolling deliberately emits no viewport wire event. The stored + origin therefore could remain invisible until unrelated input. The + new production-path row asserts both halves independently: the origin + changes and the redraw-request count advances exactly once. Removing + the request leaves the first assertion green and fires the second. +- **B1 disposed panel banks on `Absent`, but not on a direct accepted + identity replacement.** `ResidualOwner::Panel(BufferId)` cannot + distinguish a persistent buffer returning under a new `panel_epoch`, + so A's fraction could survive A → B → A and be spent by the successor. + Separate mapped and legacy rows drive the real producer through a + same-buffer/new-epoch replacement with no `Absent`; omitting either + branch's discard fires only that family. A geometry-only re-grid is + the negative control: it is the same panel surface, preserves the + bank, and fails if `geometry_epoch` is folded into wheel identity. + +All four mutations were built and executed, not inferred from grep. +`PMACS_REQUIRE_GPU=1 cargo test -p pmacs-gpu` reports **326 passed**. +The full 16-stage gate at `ef25920` passed fmt, workspace/all-targets +clippy, lib, lib-crdt, all eight touched acceptance suites, m4, GPU, +the workspace sweep and diff-check. Reading every stage log finds zero +`FAILED` lines and zero non-zero-failure `test result:` lines. The last three closed in order: