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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai
This commit is contained in:
Levi Neuwirth 2026-08-14 13:11:56 +02:00
parent 836f417313
commit fff1779677
No known key found for this signature in database
1 changed files with 51 additions and 2 deletions

View File

@ -1,7 +1,27 @@
# GUI arc, Stage 1 — input foundation (framing) # GUI arc, Stage 1 — input foundation (framing)
**Status: revision 17 — AWAITING APPROVAL.** Revision 17 answers review **Status: revision 18 — AWAITING APPROVAL.** Revision 18 answers review
of 16. Two additions and one correction: 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 - **B1 gains the two separations its crossing witness could not
reach.** "Per axis and surface" has two nouns; 16 witnessed one 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 - **R3 — terminal A→terminal B:** the same, across two terminal
buffers. *Mutation: key the residual by "the 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 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 against a surface that no longer exists must not be inherited by its
successor. That is the identity question and the staleness question at successor. That is the identity question and the staleness question at