docs: refresh the ledger to current main and Stage 2's real state

PR #149 review round 5 flagged this PR as stale: it still claimed `main`
@ `c49a8c7`, Stage 2 framing "rev 2, under review; no implementation, no
PR", while `main` is `47581f4` and Stage 2 is implemented and open.

- Base snapshot and the recovery check bump `c49a8c7` -> `47581f4`.
- The folding Stage 2 lane becomes IMPLEMENTED / PR #149 OPEN: framing
  rev 4 approved, the `VisibleLineMap` spine, the base-moved merge (and
  why it was merged rather than rebased), and the five review rounds'
  design-changing findings — each of which is a trap Stage 3 inherits.
- `main`'s ledger had gone unrefreshed through four merges, not one, so
  "Closed since the last snapshot" now also records web grammars HTML +
  CSS (#146) and LaTeX Stage 1 (#144) with its inline-math framing
  (#145), including their durable lessons.
- agent-handoff §1: `main` @ `47581f4`, the "Last updated" line, the
  Stage 2 substrate bullet, and the roadmap entry.

Rebased onto `47581f4` so it stays one documentation-only commit
directly off canonical main.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q5BkezMppbpCgGAYk2ftxV
This commit is contained in:
Levi Neuwirth 2026-07-23 21:58:02 -04:00
parent 5f7270d26a
commit f16d72fded
2 changed files with 93 additions and 39 deletions

View File

@ -14,8 +14,9 @@ backlog.
machine-local: `origin` may name this canonical URL, a release mirror,
or something else, and therefore has no authority by name alone.
- Canonical base at this snapshot:
`githubsucks/main` @ `c49a8c7` (folding Stage 1 #142 atop one-command GPU
invocation #141 and documentation refresh #140; protocol v19).
`githubsucks/main` @ `47581f4` (web grammars HTML+CSS #146 atop the LaTeX
Stage 1 #144 / inline-math framing #145 pair and folding Stage 1 #142;
protocol v19).
- On the transfer source, `origin/main` named a release mirror at
`d3fa632` and lagged badly. On the current destination, `origin` names
the canonical URL. This difference is why all recovery begins by
@ -49,33 +50,46 @@ git worktree list
git status --short --branch
```
The first command must expose `c49a8c7` or a newer intentional main.
The first command must expose `47581f4` or a newer intentional main.
If it does not, stop and repair the remote/fetch configuration.
## Folding Stage 2 framing lane (Arc 6)
## Folding Stage 2 lane (Arc 6) — IMPLEMENTED, PR #149 OPEN
Stage 1 (the headless fold engine) is MERGED as **#142** (see "Closed since
the last snapshot"); this lane carries the Stage 2 (grid/daemon collapse)
work off the resulting main.
- Portable branch: `githubsucks/folding-tui`; worktree `../pmacs-folding-tui`.
- Base: canonical `main` @ `c49a8c7` (folding Stage 1 / #142 merged).
- Framing head: `docs/folding-stage2-framing.md` (rev 1 → rev 2; rev 2
absorbs review round 1's five findings + two rulings). Numbering continues
the parent `Q#FD` scheme from `Q#FD12`.
- State: **framing only, rev 2, under review; no implementation, no PR.**
Load-bearing reframe (Q#FD12): the TUI has no non-identity
source-line↔display-row map today (`view_top + row` is baked into ~13
sites), so Stage 2's spine is one shared visible-line-map primitive that
every consumer routes through. Correction to the parent premise (Q#FD19):
yank + query-replace are `apply_active_edit` callers (local), not
Lua-mutator callers; only comment-toggle/yank-pop take the Lua path
(shared with the remote/optimistic-CRDT apply deferred to Stage 3). No
wire schema or protocol change — `FoldState` production (Stage 1) is
- Base: originally canonical `main` @ `c49a8c7`; `main` moved to `47581f4`
(#146) during the arc, so the branch carries a **merge** of it. The merge
is textually clean but was NOT semantically clean — #146 added three new
`Viewport` literals to `src/highlight.rs`'s unit tests and Stage 2 gives
`Viewport` a `folds` field — so the carry-over is resolved in the merge
commit. Merged rather than rebased so the four framing revisions the
review rounds cite by SHA stay reachable.
- Framing head: `docs/folding-stage2-framing.md` **rev 4, APPROVED**
(`4222ffa`; rev 1 → 4 absorb review rounds 13). Numbering continues the
parent `Q#FD` scheme from `Q#FD12`.
- State: **implemented; PR #149 OPEN, five review rounds so far, awaiting
the merge word.** The spine (Q#FD12) is `src/fold_view.rs`'s
`VisibleLineMap`, derived per rendered window and per command/event
operation and never stored; fold projection is per-frontend
(`FrontendView.fold_projection`, Q#FD21). 48 acceptance tests in
`tests/folding_stage2_acceptance.rs`, each asserting on the real
`paint_frame` cell grid; every behavioral claim bite-verified. No wire
schema or protocol change — `FoldState` production (Stage 1) is
untouched; the GPU render path is Stage 3.
- Next: land the remaining review rounds → implement Stage 2 on this branch
→ PR. Stage 3 (GPU) is a separate branch/PR off the resulting main,
re-framed in detail after Stage 2 lands.
- Review findings that changed the design, worth carrying forward: fold
projection must be per-frontend or a simultaneous unfolded GPU session's
cursor skips lines it displays (round 2); maps are per-window, and a
command's map follows the operation's TARGET window, not the active one
(rounds 23); crossing folds need merged hidden components, not
"outermost containing fold" (round 3); hidden-cursor motion must project
the whole POSITION and `set_view_top` must clamp in the setter (round 4);
the Lua widening must key on the **post-intercept** edit site, since a
managed intercept may relocate the op (round 5).
- Next: remaining review rounds → merge word. Stage 3 (GPU) is a separate
branch/PR off the resulting main, re-framed in detail after Stage 2 lands.
Recovery worktree:
@ -122,6 +136,24 @@ git worktree add --track \
## Closed since the last snapshot
- **Web grammars HTML + CSS — MERGED as #146** (`main` @ `47581f4`,
2026-07-23). `.html/.htm/.xhtml` and `.css` highlight off the official
`tree-sitter-html` 0.23 / `tree-sitter-css` 0.25 crate query constants (no
in-repo overlay), and HTML's `INJECTIONS_QUERY` lights up `<script>` → js
and `<style>` → css. Durable lesson recorded in
`docs/web-grammars-html-css-framing.md`: the `highlight.rs` capture table
is **global**, so adding a capture name retro-paints every other language —
check the reverse direction and pin it.
- **LaTeX Stage 1 — MERGED as #144**, with its parent inline-math framing
committed as **#145** (`main` @ `f09b0a1`, 2026-07-23).
`.tex/.latex/.sty/.cls` highlight via `codebook-tree-sitter-latex` 0.6 plus
the first in-repo query overlay (`builtin/queries/latex/highlights.scm`,
`include_str!`) — the reusable pattern for grammars whose crate ships no
usable queries. The crates.io `tree-sitter-latex` is provably broken (no
`scanner.c`). The math parser and Tiers 34 are deferred to the inline-math
arc.
- **Folding Stage 1 (headless fold engine) — MERGED as #142** (`main` @
`c49a8c7`, 2026-07-23, after three review rounds; round 3 clean). The
instance-side fold store + translating/dropping `View`, the structural
@ -132,8 +164,9 @@ git worktree add --track \
carry nothing unmerged; the `folding-framing.md` framing is preserved.
CI red at merge was an unrelated environmental perf flake
(`outline_5_level_100_entry_renders_within_100ms`, macOS/luajit only),
green on rerun. Stage 2 continues on `folding-tui` (see the lane above);
durable substrate seams live in `docs/agent-handoff.md` §1.
green on rerun. Stage 2 is implemented and open as **PR #149** on
`folding-tui` (see the lane above); durable substrate seams live in
`docs/agent-handoff.md` §1.
- **Vterm Stage 3 (protocol v19 + GPU terminal) — MERGED as #135** (`main`
@ `cac4961`, 2026-07-22, after two review rounds). Arc 5's terminal stage

View File

@ -1,8 +1,9 @@
# Agent handoff — cross-machine continuity
**Last updated: 2026-07-23, after folding Stage 1 (#142, the headless fold
engine) landed, following one-command GPU invocation (#141), the documentation
refresh (#140), Vterm Stage 3 (#135, protocol v19 and native GPU terminal),
**Last updated: 2026-07-23, after web grammars HTML+CSS (#146) landed,
following the LaTeX Stage 1 / inline-math framing pair (#144/#145), folding
Stage 1 (#142, the headless fold engine), one-command GPU invocation (#141), the
documentation refresh (#140), Vterm Stage 3 (#135, protocol v19 and native GPU terminal),
tab-width rendering parity (#137), locals-query processing (#134), modeline
detection (#132), mode system wiring (#129), config registry (#127), Vterm
Stages 12 (#126/#130), and completed Themes Arc 4 (#120/#124/#125).**
@ -19,10 +20,10 @@ commands, read `docs/active-work.md` immediately after this file.
## 1. Where the project stands (2026-07-23)
- `main` @ `c49a8c7` (folding Stage 1 #142 atop one-command GPU invocation
#141 and documentation refresh #140), protocol **v19** (`SUPPORTED=[6..=19]`;
v16 = `ThemeFacts`, v17 = `FontFacts`, v18 = `StatuslineSegments`, v19 =
terminal frames/events).
- `main` @ `47581f4` (web grammars HTML+CSS #146 atop LaTeX Stage 1 #144 /
inline-math framing #145 and folding Stage 1 #142), protocol **v19**
(`SUPPORTED=[6..=19]`; v16 = `ThemeFacts`, v17 = `FontFacts`, v18 =
`StatuslineSegments`, v19 = terminal frames/events).
- **Folding Stage 1 (headless fold engine) LANDED — #142**
(`docs/folding-framing.md` rev 5; merge `c49a8c7`; three review rounds,
round 3 clean). Arc 6's engine — instance-side and headless; **no frontend
@ -57,14 +58,32 @@ commands, read `docs/active-work.md` immediately after this file.
- Durable lesson (round 2): after wiring a cleanup into a production hook,
PIN IT THROUGH THE REAL PATH — a direct-call unit test misses the wiring
(falsify by revert).
- **Stage 2 (grid/daemon collapse) is in framing** on `folding-tui`
(`docs/folding-stage2-framing.md`, rev 2). Its load-bearing reframe: the
TUI has **no non-identity source-line↔display-row map** today (`view_top +
row` is baked into ~13 sites), so Stage 2's spine is one shared
visible-line-map primitive that the render loop, gutter, diagnostics,
caret, selection, peer presence, viewport/scroll/motion, and the mode-line
indicator all route through, plus the interactive-Lua unfold widening.
Stage 3 (GPU) follows.
- **Stage 2 (grid/daemon collapse) is IMPLEMENTED — PR #149 OPEN** on
`folding-tui` (`docs/folding-stage2-framing.md` rev 4, approved). Its
load-bearing reframe: the TUI had **no non-identity
source-line↔display-row map** (`view_top + row` was baked into ~13 sites),
so Stage 2's spine is `src/fold_view.rs`'s `VisibleLineMap` — derived from
the fold store plus a window's line offsets, never stored — that the render
loop, gutter, diagnostics, caret, selection, peer presence,
viewport/scroll/motion, and the mode-line indicator all route through, plus
the interactive-Lua unfold widening. Threaded as `Option<&'a
VisibleLineMap>` on a lifetime-bearing `Viewport<'a>` that stays `Copy`.
Design points the review rounds forced, each a trap for Stage 3:
- the map's unit is a **merged hidden component** (overlapping *or
adjacent* intervals unioned, keeping the earliest visible head), not a
fold — folds may cross, and an inner/later fold's own head can be hidden;
- instances are **per rendered window** and **per command/event
operation**, never per frame; a command's map follows the operation's
TARGET window (a wheel event names a pane without activating it);
- fold projection is **per-frontend** (`FrontendView.fold_projection`, set
at attach from the negotiated `semantic_render` bit) — shared
`EditorCore` motion would otherwise make a simultaneous unfolded GPU
session's cursor skip lines it still displays;
- a hidden cursor normalizes by **position**, not row, and `set_view_top`
clamps in the setter rather than being repaired at render time;
- the interactive-Lua unfold keys on the **post-intercept** edit site — a
managed buffer intercept may legally relocate the op.
No protocol bump. Stage 3 (GPU) follows.
- **One-command GPU invocation LANDED — #141**
(`docs/gpu-invocation-framing.md` rev 6; merge `63fbc66`; two implementation
reviews). The additive public path is `pmacs --gpu [--socket NAME|PATH]`;
@ -466,8 +485,10 @@ commands, read `docs/active-work.md` immediately after this file.
shipped without a protocol change.
- **Arc 6 (folding) Stage 1 LANDED — #142** — the headless fold engine
(store, structural source, Lua `C-c @` surface, command-path unfold,
`FoldState` production). Stage 2 (grid/daemon collapse) is in framing on
`folding-tui`; Stage 3 (GPU) follows.
`FoldState` production). Stage 2 (grid/daemon collapse) is implemented and
open as **PR #149** on `folding-tui`; Stage 3 (GPU) follows.
- **Web grammars HTML+CSS LANDED — #146**, and **LaTeX Stage 1 — #144**
with its inline-math parent framing **#145**.
- Remaining ranked arcs: 6 folding Stages 23, 7 DAP, 8 GPU splits, plus
the `.ipynb` arc (its JSON-grammar prerequisite shipped in #123).