pmacs/docs/active-work.md

149 lines
5.9 KiB
Markdown

# 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` @ `86fc1bc` (Vterm Stage 2 #130 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 `86fc1bc` or a newer intentional main.
If it does not, stop and repair the remote/fetch configuration.
## Modeline detection implementation lane
- Portable branch: `githubsucks/modeline-detection`
- Approved framing head: `6b4f3c3`
- Implementation head: `f8d05d2`
- Base: originally canonical `main` @ `d5d9b9c`; current canonical `main`
@ `86fc1bc` (Vterm Stage 2 #130) is integrated before merge.
- PR: #132, <https://github.com/levineuwirth/pmacs/pull/132>, open against
canonical `main` and explicitly authorized for merge.
- State: Revision 2's bounded Emacs/Vim parser, explicit-over-inferred
precedence, alias normalization, shared fresh-load language pin, LSP path
guard, and all thirteen acceptance criteria are implemented. Protocol
remains v18.
- Verification:
- focused modeline + shebang-pin acceptance before integration: 7 passed on
default LuaJIT and 7 passed on non-default Lua 5.4;
- post-integration `cargo fmt --check`;
- post-integration `cargo clippy --workspace --all-targets -- -D warnings`;
- post-integration `cargo test --lib`: 1,753 passed;
- post-integration `cargo test --lib --features crdt`: 1,929 passed;
- post-integration `cargo test --test m4_acceptance -- --skip basedpyright`:
120 passed, 3 ignored, 1 filtered;
- post-integration `PMACS_REQUIRE_GPU=1 cargo test -p pmacs-gpu`: 109 passed;
- post-integration `cargo test --workspace -- --skip basedpyright`: 2,888
passed across 82 suites, 19 ignored, 1 filtered;
- `git diff --check`.
- Next: push the current-main integration and merge PR #132 as authorized.
Recovery worktree on a machine that does not already own the branch:
```sh
git worktree add --track \
-b modeline-detection \
../pmacs-modeline-detection \
githubsucks/modeline-detection
```
## 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.