pmacs/pmacs-gpu
Levi Neuwirth 2d19713b0e
feat(gui-1b): B1's per-target fractional wheel residual
The producer 1b owes. `apply_wheel` used to round to whole lines and
return on zero BEFORE consulting the pointer, so every sub-tick delta
bound for the panel or the terminal was discarded by a decision taken
upstream of routing. §2a CORRECTION 5 measured that ordering; this
inverts it.

The pipeline is now: classify the target, bank the fractional delta
against THAT target's accumulator, route only the whole ticks that fall
out. `WheelTarget` exists because `PointerSurface` cannot name what B1
needs --- it resolves panel geometry only and collapses the document,
the terminal, the minimap and the chrome into one `Elsewhere`, three of
which B1 and B6 must keep apart.

Residual owners follow §2a's enumeration exactly: per panel, per
terminal, the minimap's own, the document's --- and chrome shares the
document's deliberately, so a gesture that strays onto the gutter does
not lose its banked motion. Panel divider and background bank NOWHERE
and clear the panel banks: a residual they could share with a cell would
let motion over an inert strip complete a tick the moment the pointer
entered a live one, which is the surface-switch jump B1 exists to
forbid.

Nine rows, including R1-R5's identity discriminators and §2a's required
crossing witness. `trunc` rather than `round`, so a half-tick that was
never delivered is not spent.

Two things this commit does not do, both recorded rather than stubbed:

- IDENTITY'S SECOND HALF --- disposal --- is owed. A residual keyed to a
  surface that goes away must go with it, and this frontend does not
  currently track "that buffer is gone". A helper nothing calls would
  read as a contract met, so the method is absent and the gap is
  documented on the type.
- `scroll_by_columns` and the manual-authority latch land here as B3/B7
  and Q#S1-11's foundation, but their witnesses (L1-L8) do not. They
  come with the horizontal wire path.

One behaviour regression caught by an existing row and fixed: a wheel
before the first cursor motion has no pointer position, and the first
draft dropped it. It targets the document, as it did before 1b.
2026-08-31 22:54:44 +02:00
..
fonts feat(math): bundle Latin Modern Math and read its MATH constants 2026-07-24 18:27:34 -04:00
src feat(gui-1b): B1's per-target fractional wheel residual 2026-08-31 22:54:44 +02:00
Cargo.toml feat(release): binaries on tag — Distribution Stage 1 2026-08-01 14:40:47 -04:00