docs(panels): score Arc 1b bets + as-built (bet #3 false, findings, process note)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Levi Neuwirth 2026-07-08 14:10:40 -04:00
parent 4199a1c272
commit c9e56a7509
1 changed files with 43 additions and 14 deletions

View File

@ -156,22 +156,51 @@ position-encoding hardening remains one deferral, not four new ones.
Arc 2 interleave point (query-replace) after phase 2.
## Categorical bets (score at close)
## Categorical bets (scored at close — ARC COMPLETE, PRs #94 + #95)
1. **The listview module covers all three panels without per-panel
Rust.** The whole arc lands with one small core seam (Q#P6) and
zero protocol change.
2. **Cursor-zeroing bites once.** `switch_active_buffer` clears
cursor/overlays; some flow (refresh, visit-then-return) will land
the cursor somewhere surprising before the re-seat discipline is
applied everywhere.
3. **GPU panels render via the existing BufferSnapshot/F29 path with
no GPU changes.** The mechanism exists (mid-session CRDT upgrade +
snapshot push); a panel buffer exercising it from a `switch_buffer`
is the untested claim in this arc.
4. **Round-trip routing has one gap somewhere** — a key that neither
round-trips nor falls through correctly while a panel is focused
(the Q#C6-class finding of this arc).
Rust — HELD.** One core seam (Q#P6: a `HashSet` + one binding +
one `dispatch_idle` clause), zero protocol change; outline,
references, and hover-doc are all pure Lua `listview.open` calls,
and the code-action picker reused the minibuffer dropdown with no
panel at all.
2. **Cursor-zeroing bites once — HELD** (mild): the re-seat
discipline (`seat_cursor` after every render/switch) was applied
from the start, so the predicted surprise never surfaced in the
panels; the *latent* form of it bit elsewhere (bet #3's finding 2).
3. **GPU panels render with no GPU changes — SCORED FALSE, the
arc's load-bearing finding.** Two blocking bugs at GPU validation,
neither a GPU change but both invisible to the bet as framed: (a)
the F29 snapshot push fires only on the *upgrade* tick, so
switching *back* to a known buffer sent nothing and the GPU froze
on the old buffer while input targeted the new one — fixed with a
daemon active-buffer-*follow* path (semantic sessions only; a
first cut gated on `crdt_replica` duplicated the TUI's init-once
snapshot and broke *all* attach — round-2 regression). (b) A
long-latent bug the panels made constant: `switch_active_buffer`
clears window overlays and the runtime dedup tables blocked
re-attach, so *every* buffer switch (plain `C-x b` included) had
been stripping syntax/LSP/diagnostic styling — fixed with a new
`buffer.after-switch` hook. **Lesson: "the mechanism exists" is
not "the mechanism fires on this trigger" — snapshot delivery was
coupled to CRDT *upgrade*, not active-buffer *change*.**
4. **Round-trip routing has one gap somewhere — NOT OBSERVED.** Q#P6
held cleanly in both frontends; no key mis-routed while a panel
was focused.
## As-built divergences
- **Code actions took no panel.** The picker is `minibuffer.read`
with `"N: title"` candidates (bare index also accepts), not a
`listview` — a single action still applies directly. Cleaner than a
list buffer for a pick-one-and-close flow.
- **The two blocking findings were daemon/runtime, not panel Lua**
(bet #3) — the panel code itself needed no correctness fixes across
either PR.
- **Coverage caught a process gap**: the phase-2 tests initially
shipped with a `too-many-lines` clippy deny masked by a swallowed
exit code in a chained local gate command. Run `clippy` as its own
gate step, not `&&`-chained after a test whose exit code you read.
## Deferred (named, not silently dropped)