pmacs/docs/active-work.md

158 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Active work — cross-machine resume ledger
**Snapshot: 2026-07-22.** 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` @ `d5d9b9c` (mode system handoff #131 merged;
protocol v18).
- 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 first command must expose `d5d9b9c` or a newer intentional main.
If it does not, stop and repair the remote/fetch configuration.
## Vterm Stage 2 implementation lane
- Portable branch: `githubsucks/vterm-tui`
- Feature head after review round 2: `b9a7e40`
- Base: originally canonical `main` @ `f1a2f75`; current canonical `main`
@ `d5d9b9c` (mode system wiring #129 and handoff #131) is integrated before
merge.
- PR: #130, <https://github.com/levineuwirth/pmacs/pull/130>, open against
canonical `main` and explicitly authorized for merge.
- State: `docs/vterm-framing.md` Revision 7 criteria 1527 are implemented.
The lane composes per-frontend/window terminal views in the TUI, installs
the strict `pmacs.terminal` API and terminal-local bindings, drains
clipboard/BEL through the authenticated frontend, and routes daemon
terminal input by connection source. Protocol remains v18; Stage 2 changes
neither the wire schema nor the GPU renderer.
- Review round 1: addressed. Dispatch now requires `C-c` before terminal-local
editor bindings; non-terminal context operations error; controller
replacement is atomic per frontend; zero-area layouts retain view anchors;
view projection borrows retained rows instead of deep-cloning scrollback.
- Review round 2: addressed. Partial eviction clamps anchors to the first
surviving wrapped-line cell; `invoke_interactive` now inherits only an
authenticated dispatch origin; explicit context failures are named; terminal
mouse routing reads geometry without cloning cells; the framing records the
v18 semantic-controller boundary and bracketed-paste injection deferral.
- Implementation commits: `39e07cb`, `7c39535`, `0a846d9`, `0dacac7`,
`dc92257`, merge `0ddff24`, integration hardening `da8f6ae`, first-review
fixes `8702791`, and second-review fixes `b9a7e40`.
- Second-review final verification: `cargo fmt --check`; strict workspace
Clippy; 1,744 default + 1,920 CRDT library tests (3 ignored each);
Stage 1 acceptance 9 default + 10 CRDT; Stage 2 acceptance 4 default +
4 CRDT; statusline acceptance 7 default + 8 CRDT; M4 114 passed
(3 ignored, 1 filtered); required GPU 109; workspace 2,872 passed across
81 suites (19 ignored, 1 filtered); `git diff --check` clean.
- Next: integrate canonical `main`, rerun gates, then merge PR #130 as
authorized.
Recovery worktree on a machine that does not already own the branch:
```sh
git worktree add --track \
-b vterm-tui \
../pmacs-vterm-tui \
githubsucks/vterm-tui
```
## 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
- **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.