# Active work — cross-machine resume ledger **Snapshot: 2026-07-23.** This file records volatile work that has not landed on `main`. Read it after `docs/agent-handoff.md`. Remove completed entries when their PR merges; do not let this become a second permanent backlog. ## Repository authority - Canonical development URL: `https://github.com/levineuwirth/pmacs.git`. This ledger uses the normalized local alias `githubsucks` so its refs and recovery commands are identical on every machine. Remote names are otherwise 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` @ `4daa1b8` (inline-math framing #145 atop one-command GPU invocation #141 and its landed-state handoff #143; 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 verifying URLs and normalizing `githubsucks` rather than trusting `origin/main`. - The shared desktop checkout contained unrelated uncommitted work. The branches below were prepared in isolated worktrees; never clean or overwrite the shared checkout to recover them. Start on another machine by inspecting its remotes: ```sh git remote -v git remote get-url githubsucks ``` If the second command says the alias is absent, add it; if it prints a different URL, stop and resolve that collision rather than overwriting an unknown remote: ```sh git remote add githubsucks https://github.com/levineuwirth/pmacs.git ``` Then recover current refs: ```sh git fetch githubsucks --prune git log -1 --oneline githubsucks/main git worktree list git status --short --branch ``` The `git log` command must expose `4daa1b8` or a newer intentional main. If it does not, stop and repair the remote/fetch configuration. ## Active lane: GPU initial target - Portable implementation branch: `gpu-initial-target` (publish to `githubsucks/gpu-initial-target` at the first verified checkpoint); worktree `../pmacs-gpu-initial-target`. - Approved framing branch: `githubsucks/gpu-initial-target-framing`; Revision 2 checkpoint `71039d1`. - Implementation base: canonical `githubsucks/main` @ `c49a8c7` (folding Stage 1 #142 merged after the framing base); protocol v19 before this work. - State: implementation complete and smoke-tested on 2026-07-23; protocol v20; no PR yet. The first portable checkpoint and integration with current canonical `main` are next. - Scope delivered: one session-scoped `pmacs --gpu [--socket …] FILE` target, protocol-v20 semantic bootstrap, launcher-owned tilde/cwd resolution, exact Unix path transport, pre-window target readiness, replica coherence, and the approved behavioral acceptance matrix. - Verification: formatting and strict Clippy; 1,792 default + 1,968 CRDT library tests; target gate 1 default + 13 CRDT; M4 121; required GPU 152; Vterm Stage 3 5 default + 7 CRDT; workspace sweep 3,260 across 87 suites. A coherent release launch displayed `README.md` first at protocol v20. - Deferred unchanged: automatic GUI selection, multiple files, general live-open commands, packaging, and remote GPU paths. Recovery worktree after the first push: ```sh git worktree add --track \ -b gpu-initial-target \ ../pmacs-gpu-initial-target \ githubsucks/gpu-initial-target ``` ## Folding framing lane (Arc 6) - Portable branch: `githubsucks/folding`; worktree `../pmacs-folding`. - Base: **rebased onto canonical `main` @ `96d0bae`** at implementation start (was `cac4961`; the earlier base fell behind the docs + tab-width housekeeping). - Framing head: revision 5 of `docs/folding-framing.md` (rev 1 → … → rev 4 absorbed three review rounds; rev 5 records approval + the Q#FD4 binding decision). - State: **Stage 1 (fold engine, headless) implemented; PR #142 OPEN**, two review rounds landed on the branch. Bindings decided (Q#FD4 → Emacs hideshow `C-c @` set); Bet B1 accepted as framed. Load-bearing decision (Q#FD1): the bundled grammars ship no fold query and no `folds.scm`, so the roadmap's "tree-sitter fold ranges" is not free; v1 is structural node folding (block-like node ≥2 source lines, derived head line, closer-aware tail), with indentation fallback and curated queries deferred. `FoldState` already exists in the protocol; Stage 1 starts *producing* it (authoritative-empty), no protocol bump; gutter markers are frontend-derived like the diagnostic sign bars, so no new wire type. Staged like vterm: Stage 1 engine (headless), Stage 2 TUI, Stage 3 GPU. - PR: **#142** (`Arc 6 folding — Stage 1: instance fold engine`), open against `main`. Round 1 (tail-boundary delete bug + buffer-kill cleanup + close-all point-move) and round 2 (pin the kill-path + close-all through the real command surface) are landed as fix commits on the branch. - Next: land Stage 1; Stages 2/3 are separate branches/PRs, each re-framed in detail after the prior stage lands. Recovery worktree: ```sh git worktree add --track \ -b folding \ ../pmacs-folding \ githubsucks/folding ``` ## Parked lane: kill-ring browser + persistence - Portable branch: `githubsucks/kill-ring-browser` - Parked framing head: `503c489` - State: framing only, revision 2; no implementation and no PR. - Status: explicitly parked by the user on 2026-07-20. - Its original scout was based on `0efb5cd`. The preserved framing marks this ground truth stale and requires a complete re-scout against the then-current `githubsucks/main` before implementation. - Compile-mode has merged since the original scout, so old “compile-mode in flight” keybinding/touch-set assumptions are not authoritative. Recovery worktree, only when the user un-parks it: ```sh git worktree add --track \ -b kill-ring-browser \ ../pmacs-kill-ring-browser \ githubsucks/kill-ring-browser ``` ## Documentation lane - Portable branch: `githubsucks/handoff-2026-07-20` - Carries synchronized `AGENTS.md` / `CLAUDE.md`, this ledger, the durable handoff refresh, and the keybinding reference correction. - It changes no runtime code. - Review and merge this documentation branch separately; it must not be folded into a feature framing branch. - Now also absorbs both landed arcs: Vterm Stage 1 (#126) and the config registry (#127). Canonical `main` is merged into it up to `2e37c04`, so its diff against `main` is documentation only. ## Closed since the last snapshot - **Vterm Stage 3 (protocol v19 + GPU terminal) — MERGED as #135** (`main` @ `cac4961`, 2026-07-22, after two review rounds). Arc 5's terminal stage is complete (compile mode #113, Stage 1 #126, Stage 2 #130, Stage 3 #135). Its lane, worktree (`../pmacs-vterm-gpu`), and branch are done; durable substrate facts live in `docs/agent-handoff.md` and `docs/vterm-framing.md`. - **Branches deleted 2026-07-22 (authorized):** `vterm-stage3-framing` (Revision 8 framing; its content is carried on `vterm-gpu`, verified as a superset before deletion — the branch was NOT an ancestor of `vterm-gpu` because the framing was copied rather than merged, so it needed a forced local delete) and `tab-width-parity` (a clean ancestor of `main` via #137). Both removed as worktree + local ref + `githubsucks` ref; the `origin` tracking refs were pruned. The `-framing` branches for each are deliberately kept. - **Tab-width rendering parity — MERGED as #137** (`main` @ `2625ec7`, 2026-07-22). One fixed 8-column `TAB_STOP_COLUMNS` in `pmacs-protocol` now drives core/TUI columns, GPU code projection, and minimap width; source bytes and protocol ranges are unchanged. Its lane, worktree, and `tab-width-parity` branch (local + `githubsucks`) are deleted; the `tab-width-parity-framing` branch is kept. This closes the long-standing "tab width is a rendering-parity bug, NOT a config gap" deferral recorded in `docs/agent-handoff.md` §5. - **Locals-query processing — MERGED as #134** (with handoff #136), and **modeline detection handoff #133**. Both landed between this lane's base and its canonical-main integration. - **Config registry — MERGED as #127** (`main` @ `2e37c04`). Its lane (`config-registry`, worktree `../pmacs-config-registry`) is done; the branch is kept but carries nothing unmerged. Durable substrate facts moved to `docs/agent-handoff.md` §1 per rule 3 below. - Both this and Vterm Stage 1 ran as **concurrent lanes in sibling worktrees off `main`**, with the shared files (`src/editor.rs`, `src/lua_bindings/mod.rs`, `src/lib.rs`) assigned to one lane each in advance. The rebase of the second lane onto the first had **zero conflicts** — worth repeating for future parallel work, along with its precondition: agree the file split before either lane starts, and keep each lane's footprint in the other's files to a single line. ## Update protocol Whenever a listed lane changes materially: 1. update its public branch and head/state here; 2. record new verification and remove superseded caveats; 3. keep durable architecture in `docs/agent-handoff.md`, not here; 4. remove the lane after merge or abandonment; 5. verify every recovery command from a clean worktree before calling the transfer complete.