diff --git a/docs/active-work.md b/docs/active-work.md index a303151..225a7d7 100644 --- a/docs/active-work.md +++ b/docs/active-work.md @@ -38,16 +38,17 @@ is gone again and its durable lesson is in `docs/agent-handoff.md` §5; 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` @ `0442d78` (the M4 config-sink race fix #174, atop - bottom-panel Stage 2B-1 #184, the Journey/GPU directory-target ratchet - #183, Journey Stage 1a #182 and the previously recorded landed work). + `githubsucks/main` @ `7586905` (the docs-only coherence listview + correction #189, atop the docs-only landed-state refresh #185, the M4 + config-sink race fix #174, bottom-panel Stage 2B-1 #184, the + Journey/GPU directory-target ratchet #183, Journey Stage 1a #182 and + the previously recorded landed work). **Protocol schema support is `v6..=v21`; the production server-first `Hello` still advertises v20** — two different facts, and #184 landed only the first. The - previous snapshot named `7fd646d`, and **the + previous snapshot named `0442d78`, and **the recovery floor advances with it**: the check below now requires - `0442d78` or newer, so a tree at `7fd646d` — or at `6bee09d` — no - longer passes. That is + `7586905` or newer, so a tree at `0442d78` no longer passes. That is deliberate — the floor moves with the base, because a check that accepts an older commit than the declared base passes on a tree the rest of this file does not describe. @@ -86,7 +87,7 @@ git worktree list git status --short --branch ``` -The `git log` command must expose `0442d78` — the base named above — or a +The `git log` command must expose `7586905` — the base named above — or a newer intentional main. Keep this threshold and the canonical-base line in step: a recovery check that accepts an older commit than the base it declares canonical will pass on a tree the rest of this file does not @@ -228,17 +229,18 @@ If it does not, stop and repair the remote/fetch configuration. never been enforced. Any CI job that compiles the `crdt` targets has to fix them first or it will be red on arrival. -## Bottom-panel lane (Arc 7) — 2B-1 MERGED; 2B-2 IN FLIGHT +## Bottom-panel lane (Arc 7) — 2B-1 MERGED; 2B-2 PR #187 OPEN Stage 1, the Stage 2 framing, Stage 2A, and **Stage 2B-1 are all on `main`**. Framing revision 5's three-way split of 2B was explicitly approved on 2026-07-27; revision 6 records PR #184's review correction. -**2B-2 — the daemon panel projection and epoch machine — is under way** -on branch `bottom-panel-stage2b2`, worktree `../pmacs-bp-stage2b2`, -branched fresh from `githubsucks/main` @ `6bee09d`. It is *not* stacked -on the 2B-1 branch, which is the rule for every slice in this arc. Note -that `main` has since advanced to `0442d78`; the only difference is the -test-only #174, so the slice's integration surface is unchanged. +**2B-2 — the daemon panel projection and epoch machine — is open as +[PR #187](https://github.com/levineuwirth/pmacs/pull/187)** on branch +`bottom-panel-stage2b2`, worktree `../pmacs-bp-stage2b2`. It branched +fresh from landed 2B-1 rather than stacking on its feature branch, and +has since integrated landed main through `7586905` (#174, #185, and +#189). The exact pre-round-2 reviewed head was merge checkpoint +`0dba358`; the round-2 code-and-test checkpoint is `bfaaf2b`. **2B-2's boundaries, restated because they are easy to overrun:** the production `Hello` stays at v20 and `panel_capable` stays `false`. The @@ -247,6 +249,53 @@ activation, the GPU band, and the negotiated capability flip are all 2B-3's, and 2B-3 may **not** simply change the unsolicited `Hello` to 21. +- **What PR #187 ships, dark by construction:** the semantic daemon's + `FrontendCellGeometry` epoch machine; one reconciled panel grid + derivation; `PanelFrame::{Present, Absent}` projection on both document + and terminal semantic paths; stable presentation epochs; resize and + pointer validation against the live window/buffer/epochs; the panel's + own statusline context; and pre-drain semantic panel-terminal resize. + It does not add the GPU consumer or enable the capability. +- **Review round 1 closed five findings plus one sweep result at + `3ecb03d`.** The wire-area clamp became durable hide state; a stale + same-buffer reopen can no longer retain input authority; semantic panel + terminals resize before child drain; `NoMessage` retains a published + band baseline while `Invalidated` clears it; wheel activation follows + the terminal-only focus rule; and legally wide panels clamp their PTY + content without disappearing. +- **Review round 2 closed two findings at `bfaaf2b` plus this ledger + commit.** Side affinity can replace the buffer while preserving the + `WindowId`, so retained panel statusline segments are now keyed by the + full `(WindowId, BufferId)` presentation. Every authoritative `Absent` + also clears that baseline, including duplicate-suppressed `Absent`, so + a later `Present` under `NoMessage` cannot resurrect peer state that + was already cleared. Two acceptance tests bite those exact transitions. + This lane and `docs/agent-handoff.md` now name the open PR, current + landed base, checkpoint, and 2B-3 ordering instead of calling 2B-2 + merely “next.” +- **Round-2 verification at code checkpoint `bfaaf2b`:** formatting and + strict workspace Clippy; library **1,863 passed + 3 ignored** default + and **2,048 passed + 4 ignored** CRDT; bottom-panel Stage 1 / 2A / + 2B-1 / 2B-2 **46 / 17 / 16 / 28**; statusline **8 CRDT**; semantic + routing **2 CRDT**; M4 **121 passed + 3 ignored + 1 filtered**; + required GPU **202/202**; isolated-config full workspace sweep; and + `git diff --check`. The first workspace sweep had one GPU rendering + failure in `failures_and_display_math_render_as_source`; that test had + passed in the immediately preceding required-GPU run, passed alone, + and the complete workspace rerun passed. Real-daemon and managed-attach + cases were rerun outside the tool sandbox after its local-socket policy + produced `Operation not permitted`; the authoritative reruns passed. +- **Cross-machine recovery (fresh clone):** + + ```sh + git fetch githubsucks --prune + git switch --track -c bottom-panel-stage2b2 githubsucks/bottom-panel-stage2b2 + git rev-parse HEAD + ``` + + Require the remote branch to contain `bfaaf2b` or newer and confirm + PR #187's exact-head checks before resuming. Do not start 2B-3 until + #187 lands. - **Stage 2B-1 MERGED as #184** (`main` @ `6bee09d`, 2026-07-28; all twelve checks green on the reviewed head `5539b6e`; two review rounds plus a gate-found follow-up). Branch diff --git a/docs/agent-handoff.md b/docs/agent-handoff.md index 6c99502..96dbeee 100644 --- a/docs/agent-handoff.md +++ b/docs/agent-handoff.md @@ -1,9 +1,10 @@ # Agent handoff — cross-machine continuity -**Last updated: 2026-07-28, after the M4 config-sink race fix (#174) and -bottom-panel Stage 2B-1 (#184) merged; the canonical landed base is -`0442d78`. #174 is test-only. #184 is the substantive one — the reserved -protocol-v21 +**Last updated: 2026-07-28, after the docs-only coherence listview +correction (#189) and landed-state refresh (#185) merged; the canonical +landed base is `7586905`. The runtime anchor beneath them is the M4 +config-sink race fix (#174) and bottom-panel Stage 2B-1 (#184). #174 is +test-only. #184 is the substantive one — the reserved protocol-v21 bottom-panel wire family, dark by construction, with the production handshake deliberately still advertising v20 — following the Journey/GPU directory-target ratchet (#183), following Journey Stage 1a (#182), @@ -51,9 +52,11 @@ commands, read `docs/active-work.md` immediately after this file. ## 1. Where the project stands (2026-07-28) -- `main` @ `0442d78` (the M4 config-sink race fix #174 — test-only — - atop bottom-panel Stage 2B-1 #184, the Journey/GPU - directory-target ratchet #183, Journey Stage 1a #182, incorporating +- `main` @ `7586905` (the docs-only coherence listview correction #189, + atop the docs-only landed-state refresh #185, the M4 config-sink race + fix #174 — test-only — atop bottom-panel Stage 2B-1 #184, the + Journey/GPU directory-target ratchet #183, Journey Stage 1a #182, + incorporating terminal configuration + copy mode landed docs #180, Lean 4 Stage 4b #181, the dired Stage 1 landed docs #169 and the PTY-terminate diagnostic #176, terminal copy mode @@ -518,20 +521,23 @@ commands, read `docs/active-work.md` immediately after this file. `bottom_panel_stage1_acceptance` 46; kill ring 30; compile 67; M4 121; required GPU 152; initial-target 14 CRDT; all three vterm suites; folding Stage 2 48. All 12 CI checks green at merge. - - **Stage 2 (the GPU panel band) is FRAMED, and its first two slices - have LANDED** — `docs/bottom-panel-stage2-framing.md` rev 6, four + - **Stage 2 (the GPU panel band) is FRAMED; its first two slices have + LANDED and its third is open as PR #187** — + `docs/bottom-panel-stage2-framing.md` rev 6, four framing review rounds, no open framing items; the rev-5 implementation split was explicitly approved 2026-07-27 and rev 6 records PR #184's server-first compatibility and gate correction. It reserves protocol **v21** and ships as four serial implementation slices: **2A** classified census routing + per-window painter extraction (no wire change, #177), **2B-1** the - wire (#184), **2B-2** the daemon projection and epoch machine, - then **2B-3** the GPU band, compatible v21 activation, and the + wire (#184), **2B-2** the daemon projection and epoch machine + (implemented but not landed in PR #187), then **2B-3** the GPU band, + compatible v21 activation, and the negotiated `panel_capable` flip. Production attachment remains v20 through 2B-2. Parent acceptance 37–55 remains authoritative. - Stage 3 is the adopter default flip. **2B-2 is the next slice, and - it branches from `0442d78` or newer.** + Stage 3 is the adopter default flip. **Do not start 2B-3 until PR + #187 lands.** Its branch, checkpoints, two review rounds, verification, + and exact recovery commands live in `docs/active-work.md`. - **The §1.3 census is CLASSIFIED, not uniformly redirected.** Only the Projection class (#1–#12, #21–#22) routes through `primary_document_window`; focus/input (#13–#15, #23), focus chrome