From fff1779677692f5068665712a2a255031001dc9e Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 14 Aug 2026 13:11:56 +0200 Subject: [PATCH] docs(framing): Stage 1 revision 18 --- residuals that outlive the buffer, and two overclaims narrowed Answers review of revision 17. Still framing only; no code. **IDENTITY HAS A SECOND HALF, AND R2/R3 CANNOT REACH IT.** A panel or terminal residual is keyed to a surface that GOES AWAY, so replacement is naturally observable. The document's and the minimap's do not work that way: they live in the long-lived GPU `State` and OUTLIVE the buffer. Their reset is a manual list --- buffer replacement (`pmacs-gpu/src/main.rs:5922` onward) zeroes `scroll_top`, `code_scroll_residual` and `code_scroll_left` one explicit line at a time, each with its own comment. A new wheel residual will not reset itself, and nothing fails if it is forgotten except a user's next document scrolling from someone else's offset. R4 document A -> document B, covering the document residual AND the chrome residual it shares; successor starts from zero. Mutation: omit the document residual from the replacement reset. R5 minimap across A -> B; its residual is independent (B6) so it needs its own reset and its own leg. Mutation: omit the minimap residual from the replacement reset. The mutations are deliberately separate --- one reset omitted at a time --- because a single "forgot to reset" mutation would bite both legs and prove neither field individually covered. `code_scroll_left` had precisely this defect once, which is why it now carries a comment explaining that a switch would otherwise inherit the previous document's leftward viewport. **AND TWO OVERCLAIMS IN THE SIGNATURE ROWS.** I wrote that both steps ran "the same executable". They ran the same TARGET but different ARTIFACTS: `pmacs-9d4963151c6f3151` at 211,777,472 bytes and `pmacs-7624ed4bed0b6617` at 214,462,056, and `cmp` reports differing bytes. What is supported is the same libtest target, its 1,940-test population, and default intra-binary threading --- which is all the concurrency conclusion ever needed, so that conclusion is unchanged. "Cargo runs test binaries sequentially" was also stated as a universal. It is narrowed to what was observed: under cargo 1.95.0, this sweep ran its 119 binaries sequentially. The rows no longer generalize to cargo versions or invocations they did not measure. Gates: all nine green under `env -u TMPDIR`, log 20260814T110707Z. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai --- docs/gui-stage1-input-framing.md | 53 ++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/docs/gui-stage1-input-framing.md b/docs/gui-stage1-input-framing.md index 02a88e6..fa63dba 100644 --- a/docs/gui-stage1-input-framing.md +++ b/docs/gui-stage1-input-framing.md @@ -1,7 +1,27 @@ # GUI arc, Stage 1 — input foundation (framing) -**Status: revision 17 — AWAITING APPROVAL.** Revision 17 answers review -of 16. Two additions and one correction: +**Status: revision 18 — AWAITING APPROVAL.** Revision 18 answers review +of 17: + +- **Identity has a second half that R2/R3 cannot reach.** A panel or + terminal residual is keyed to a surface that *goes away*; the + **document's and the minimap's live in the long-lived GPU `State` + and outlive the buffer**. Their reset is a **manual list** — + `pmacs-gpu/src/main.rs:5922` zeroes `scroll_top`, + `code_scroll_residual` and `code_scroll_left` one line at a time — so + a new wheel residual will not reset itself. **R4** (document plus the + chrome residual it shares) and **R5** (the minimap's independent + residual) add buffer A→B legs, each with its own mutation omitting + its own reset. `code_scroll_left` had this exact defect once already. +- **U9/U10 said "the same executable"; the two artifacts differ.** + `pmacs-9d4963…` and `pmacs-7624…`, different sizes, differing bytes. + The supported claim is the same *target*, 1,940-test population and + default intra-binary threading. **"Cargo runs test binaries + sequentially" is narrowed to the observed cargo 1.95.0 sweep** rather + than asserted universally. The concurrency conclusion is unaffected. + +**Previously, revision 17 — SUPERSEDED.** Two additions and one +correction: - **B1 gains the two separations its crossing witness could not reach.** "Per axis and surface" has two nouns; 16 witnessed one @@ -337,6 +357,35 @@ defect as leaking between kinds but invisible to a kind-level row. - **R3 — terminal A→terminal B:** the same, across two terminal buffers. *Mutation: key the residual by "the terminal".* +**R2 and R3 are not the whole of identity, because the document and the +minimap do not get replaced — their state OUTLIVES the buffer.** A +panel or terminal residual can be keyed to a surface that goes away; the +document's and the minimap's live in the long-lived GPU `State`, which +survives a buffer switch. **Their reset is manual, and there is a list +to be forgotten from.** Buffer replacement (`pmacs-gpu/src/main.rs:5922` +onward) zeroes `scroll_top`, `code_scroll_residual` and +`code_scroll_left` **one explicit line at a time**, each with its own +comment — including `code_scroll_left`, added later precisely because a +switch *"inherits the PREVIOUS document's leftward viewport and renders +the new buffer scrolled sideways until a cursor motion repairs it — a +symptom nothing about the new buffer explains."* **A new wheel residual +will not reset itself.** Two more legs: + +- **R4 — document A→document B**, covering the document residual **and + the chrome residual it shares** (chrome's owner is the document's, so + one reset must serve both): bank a sub-tick over the document, replace + the buffer, motion over B **starts from zero**. *Mutation: omit the + document residual from the replacement reset.* +- **R5 — minimap across A→B:** the minimap's residual is **independent** + (B6), so it needs its own reset and its own leg. *Mutation: omit the + minimap residual from the replacement reset.* + +Two mutations, deliberately separate: **one reset omitted at a time**, +because a single "forgot to reset" mutation would bite both legs and +prove neither field is individually covered. This is the same defect +`code_scroll_left` already had once, and the reason it now has a +comment explaining itself. + R2 and R3 also pin the **discard on disappearance**: a residual banked against a surface that no longer exists must not be inherited by its successor. That is the identity question and the staleness question at