docs: record Themes Arc 4 completion
Advance canonical main and protocol state after PR #125, remove the completed statusline lane from the active-work ledger, and mark the first four roadmap arcs complete. Record Arc 5 stage 2 as the next formal roadmap stage. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
4ae888dda3
commit
b65c927ac4
|
|
@ -14,7 +14,7 @@ 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` @ `bb17ec9` (#123 merged atop #124, protocol v17).
|
||||
`githubsucks/main` @ `7bc0c61` (#125 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
|
||||
|
|
@ -48,62 +48,9 @@ git worktree list
|
|||
git status --short --branch
|
||||
```
|
||||
|
||||
The first command must expose `bb17ec9` or a newer intentional main.
|
||||
The first command must expose `7bc0c61` or a newer intentional main.
|
||||
If it does not, stop and repair the remote/fetch configuration.
|
||||
|
||||
## Active lane: Arc 4 stage 3 — statusline segments
|
||||
|
||||
- Portable branch: `githubsucks/statusline-segments`
|
||||
- Feature head:
|
||||
`1be7a30468f1fab73432b363dd8e44c8d2234d93`
|
||||
- Pull request: #125,
|
||||
**feat(statusline): composable modeline segments at protocol v18** —
|
||||
<https://github.com/levineuwirth/pmacs/pull/125>
|
||||
- State: two review rounds addressed; Revision 3's Q#SL1-Q#SL11 and
|
||||
Acceptance 1-27 remain implemented and awaiting review. The feature
|
||||
history is based on canonical `main`
|
||||
`bb17ec955e083a56aa937b596906fce84a00533a`. The branch is **not
|
||||
merged**. Review resolutions:
|
||||
<https://github.com/levineuwirth/pmacs/pull/125#issuecomment-5036372634>
|
||||
and
|
||||
<https://github.com/levineuwirth/pmacs/pull/125#issuecomment-5036628171>.
|
||||
- Scope delivered: strict composable per-window `pmacs.statusline`
|
||||
providers; borrow-released evaluation and per-context failure latches;
|
||||
legacy-preserving TUI composition; a pure built-in LSP provider;
|
||||
dynamic modeline-face inventory; protocol-v18 authoritative
|
||||
`StatuslineSegments`; snapshot/version symmetry; and atomic GPU
|
||||
validation, face resolution, shaping, clipping, and caching.
|
||||
- Real TUI smoke: hermetic XDG roots under `/tmp`, live tmux PTYs at
|
||||
100x24 and verified 46x24, faced left/right custom runs with CJK,
|
||||
combining text, and an injected ESC. The ESC rendered as a space;
|
||||
ordering, clipping, protected `L1:C1 All`, and the separate echo row
|
||||
remained legible without overlap. Both sessions exited 0; focused TUI
|
||||
statusline/mode-line tests passed 6 + 1.
|
||||
- Final verification after review round 2, sequential:
|
||||
`cargo fmt --check`; workspace/all-target Clippy with `-D warnings`;
|
||||
1,619 default library tests (3 ignored); 1,793 CRDT library tests (3
|
||||
ignored); 7 default and 8 CRDT statusline acceptance tests; 114 M4
|
||||
acceptance tests (3 ignored, `basedpyright` filtered); 109 required
|
||||
GPU tests; the exact one-invocation workspace sweep (2,718 passed
|
||||
across 78 suites, 19 ignored, `basedpyright` filtered); and
|
||||
`git diff --check`. No flaky or environment rerun was needed.
|
||||
- Recovery state at handoff: `/home/jeans/Repos/active/pmacs-statusline`
|
||||
is clean, its local branch and `githubsucks/statusline-segments` both
|
||||
point at the feature head above, PR #125 targets canonical `main`,
|
||||
and GitHub reports 22 changed files (+5,707/-302), `MERGEABLE`, with
|
||||
merge-state checks currently `UNSTABLE`.
|
||||
|
||||
Recovery worktree on a machine that does not already have the local
|
||||
branch:
|
||||
|
||||
```sh
|
||||
git fetch githubsucks statusline-segments
|
||||
git worktree add --track \
|
||||
-b statusline-segments \
|
||||
../pmacs-statusline \
|
||||
githubsucks/statusline-segments
|
||||
gh pr view 125 --repo levineuwirth/pmacs
|
||||
```
|
||||
|
||||
## Parked lane: kill-ring browser + persistence
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
# Agent handoff — cross-machine continuity
|
||||
|
||||
**Last updated: 2026-07-21, after the statusline stage-3 Revision 3
|
||||
review update, JSON/YAML (#123) merge, and cross-machine continuity
|
||||
audit; main also reflects GPU font preferences (#124), themes stage 1
|
||||
(#120), and injections (#122).** This file is the
|
||||
**Last updated: 2026-07-21, after Themes Arc 4 completed with
|
||||
statusline segments (#125), JSON/YAML (#123), GPU font preferences
|
||||
(#124), named UI faces (#120), and multi-language injections (#122).**
|
||||
This file is the
|
||||
bridge between development machines. If you are an agent reading
|
||||
this on a fresh clone: this document plus the `docs/*-framing.md`
|
||||
files ARE your memory. Read this fully before taking on work, seed
|
||||
|
|
@ -16,9 +16,9 @@ commands, read `docs/active-work.md` immediately after this file.
|
|||
|
||||
## 1. Where the project stands (2026-07-21)
|
||||
|
||||
- `main` @ `bb17ec9` (JSON + YAML #123 merged atop GPU font preferences
|
||||
#124), protocol **v17** (`SUPPORTED=[6..17]`; v15→16 shipped
|
||||
`ThemeFacts`, v16→17 shipped `FontFacts`).
|
||||
- `main` @ `7bc0c61` (statusline segments #125), protocol **v18**
|
||||
(`SUPPORTED=[6..18]`; v16 = `ThemeFacts`, v17 = `FontFacts`, v18 =
|
||||
`StatuslineSegments`).
|
||||
- **Syntax-highlight / language-detection side-quest (#114–#118)
|
||||
LANDED** — a one-shot arc built in sibling worktrees off main while
|
||||
the user's themes lane (`theme-faces`) ran concurrently in the shared
|
||||
|
|
@ -143,14 +143,18 @@ commands, read `docs/active-work.md` immediately after this file.
|
|||
and snapshot geometry changes. Test fixtures enter fontdb before
|
||||
`FontSystem` construction; alternate advances are measured across
|
||||
complete shaped runs, not sampled glyphs.
|
||||
- **NEXT: themes stage 3 — Lua statusline-segment API.**
|
||||
Revision 3 is preserved on branch `statusline-segments`, re-scouted
|
||||
against `bb17ec9` with no relevant substrate drift, and awaits review.
|
||||
It scopes additive per-window modeline providers, face-name segments,
|
||||
dynamic `ThemeFacts` inventory, and a new v18 `StatuslineSegments`
|
||||
channel; the existing LSP status tracker is the first built-in
|
||||
provider. Approval → implementation → gates → PR. Completing stage 3
|
||||
completes Arc 4.
|
||||
- **Themes (Arc 4) stage 3 LANDED — #125; ARC 4 COMPLETE**
|
||||
(`docs/statusline-segments-framing.md` rev 3). Strict composable
|
||||
`pmacs.statusline` providers evaluate per frontend/window through a
|
||||
borrow-released three-phase transaction with per-context failure
|
||||
latches. TUI composition is grapheme/display-width correct; the pure
|
||||
built-in LSP provider proves passive-window context. Protocol v18
|
||||
carries complete `StatuslineSegments` replacements and dynamic
|
||||
modeline faces; snapshot baselines reset symmetrically. GPU validates
|
||||
untrusted payloads atomically, shapes rich runs without wrapping, and
|
||||
right-pins the protected suffix under narrow clipping. Review
|
||||
hardening pins fixed-face sortedness, retains flattened provider
|
||||
tracebacks, and names unavailable layout contexts accurately.
|
||||
- **PARKED: kill-ring browser + persistence.** Revision 2 framing is
|
||||
preserved on branch `kill-ring-browser`, but its `0efb5cd` scout is
|
||||
stale and must be repeated before implementation. No PR or
|
||||
|
|
@ -165,6 +169,10 @@ commands, read `docs/active-work.md` immediately after this file.
|
|||
- **Arc 3 (persistence) COMPLETE** — saveplace/recentf (#98),
|
||||
desktop-save (#99), autosave/crash-recovery (#100), save-clobber
|
||||
fix (#101).
|
||||
- **Arc 4 (themes + extensibility) COMPLETE** — named UI faces (#120),
|
||||
live GPU font preferences (#124), statusline providers (#125).
|
||||
- **Arc 5 stage 1 COMPLETE** — compile mode (#113); stage 2 vterm is
|
||||
the next formal roadmap stage.
|
||||
|
||||
## 2. How we work (the part that must not drift)
|
||||
|
||||
|
|
@ -273,9 +281,10 @@ buffer owns a path's recovery slot; only recover/discard release
|
|||
unclaimed crash data; adopt clears the old owner's skip cache.
|
||||
|
||||
**Protocol** — encoding-breaking bumps are deliberate and versioned
|
||||
(`SUPPORTED=[6..17]`). v15 = `CompletionPopup` +
|
||||
`StatusFacts.message`; v16 = `ThemeFacts`; v17 = `FontFacts`. New wire
|
||||
surface ⇒ bump + both-frontends support + acceptance.
|
||||
(`SUPPORTED=[6..18]`). v15 = `CompletionPopup` +
|
||||
`StatusFacts.message`; v16 = `ThemeFacts`; v17 = `FontFacts`; v18 =
|
||||
`StatuslineSegments`. New wire surface ⇒ bump + both-frontends support +
|
||||
acceptance.
|
||||
|
||||
**Fake LSP** (`src/bin/pmacs_fake_lsp.rs`) modes: `fullonly`,
|
||||
`rangeonly`, `rangeonly16` (UTF-16 + fail-closed bounds validation),
|
||||
|
|
|
|||
|
|
@ -54,50 +54,37 @@ modes; DAP debugging; GPU splits / multi-buffer / auto-reconnect.
|
|||
|
||||
## Arcs, ranked by value-per-effort
|
||||
|
||||
### Arc 1 — LSP utility surface: "light up the dark matter" ← ACTIVE
|
||||
### Arc 1 — LSP utility surface: "light up the dark matter" — COMPLETE
|
||||
|
||||
Data layer is done; only UI is missing.
|
||||
The completion popup and LSP utility panels shipped across #92–#96,
|
||||
followed by hardening in #102, #105, and #106. Completion, hover,
|
||||
references, document symbols, and the supporting semantic/signature
|
||||
paths are now wired through both frontend contracts.
|
||||
|
||||
- **1a. In-buffer completion popup** (first). Trigger on typing,
|
||||
TAB/RET accept, both frontends. GPU needs a wire message — mirror the
|
||||
minibuffer-dropdown pattern (protocol v12). Framework + popup view
|
||||
already exist.
|
||||
- **1b. Panels**: hover popup, code-action picker, references list,
|
||||
document-symbol outline. Generalize the buffer-list UI pattern
|
||||
(`*buffer-list*` buffer-local bindings) into a reusable list-buffer
|
||||
idiom.
|
||||
- **1c. Semantic-token auto-pull fix** (small): pull on attach + on
|
||||
edit-flush, like inlay hints already do.
|
||||
- **1d. Signature-help auto-trigger** on `(`.
|
||||
### Arc 2 — Editing table stakes — COMPLETE
|
||||
|
||||
### Arc 2 — Editing table stakes (interleave with Arc 1)
|
||||
Query-replace (#97), the real kill ring and `M-y` (#103/#105/#106),
|
||||
comment toggle (#107), auto-indent (#109), and auto-pairing (#110)
|
||||
landed.
|
||||
|
||||
Each small, core-only, frontend-agnostic: query-replace (isearch
|
||||
exists; `search.rs` has no replace API), real kill ring + `M-y`,
|
||||
comment/uncomment, auto-indent on newline, auto-pairing.
|
||||
### Arc 3 — Persistence/serialization — COMPLETE
|
||||
|
||||
### Arc 3 — Persistence/serialization
|
||||
Saveplace/recentf (#98), desktop save/restore (#99),
|
||||
autosave/crash-recovery (#100), and the save-clobber fix (#101) landed.
|
||||
|
||||
Desktop-save (buffer set + layout + cursors → restore), recentf,
|
||||
saveplace, autosave + crash recovery, optional backups. Generalize the
|
||||
`$XDG_STATE_HOME/pmacs/` pattern from minibuffer history. Framing
|
||||
question: what is a "session" in a daemon world; do CRDT snapshots
|
||||
ride along.
|
||||
### Arc 4 — Themes + extensibility surface — COMPLETE
|
||||
|
||||
### Arc 4 — Themes + extensibility surface
|
||||
Stages 1–3 landed as #120, #124, and #125: named `ui.*` faces with
|
||||
daemon-resolved `ThemeFacts`; the live global `pmacs.gpu.set_font`
|
||||
preference at protocol v17; and composable per-window
|
||||
`pmacs.statusline` providers transported to semantic/GPU frontends by
|
||||
protocol-v18 `StatuslineSegments`.
|
||||
|
||||
Extend `pmacs.theme` from syntax captures to named UI faces (modeline,
|
||||
minibuffer, gutter, selection, status band); wire GPU chrome to it —
|
||||
Q#UX1 lesson applies: rendering is frontend-local but control is
|
||||
daemon-owned, so a wire channel (`ThemeFacts`-style) is needed. Add
|
||||
`pmacs.gpu.set_font` (designed, never built) and a Lua
|
||||
statusline-segment API.
|
||||
### Arc 5 — Terminal, staged ← NEXT FORMAL ARC
|
||||
|
||||
### Arc 5 — Terminal, staged
|
||||
|
||||
- **Stage 1**: compile-mode / grep-mode / shell-command on the existing
|
||||
PTY + ANSI + REPL-package substrate (line-oriented output buffer,
|
||||
error-regex jump-to-file, `M-x compile`). Cheap, transformative.
|
||||
- **Stage 1 — LANDED (#113)**: compile mode streams line-oriented
|
||||
process output through the PTY/ANSI substrate, with error-regex
|
||||
navigation and `M-x compile`.
|
||||
- **Stage 2 (vterm)**: extend `ansi.rs` into a 2D grid model
|
||||
(alt-screen, cursor addressing, scrollback — parser already
|
||||
recognizes and discards these), grid-backed buffer view, GPU
|
||||
|
|
|
|||
Loading…
Reference in New Issue