Merge pull request #214 from levineuwirth/docs-absorption-213
docs: retire the bottom-panel lane — Arc 7 is done
This commit is contained in:
commit
bfb97c67c6
|
|
@ -11,8 +11,15 @@ exercised from this checkout and the `githubsucks` alias was absent and
|
|||
had to be added, exactly as that section anticipates. **One lane opened:
|
||||
CI CRDT coverage**, which had been sitting under "NEEDS A LANE" with no
|
||||
branch and no owner since #166. It is implemented on
|
||||
`ci-crdt-coverage` and its block replaces the old one below. Everything
|
||||
else in this file is unchanged.
|
||||
`ci-crdt-coverage` and its block replaces the old one below.
|
||||
|
||||
**Updated 2026-08-04.** Four PRs landed since: the CI CRDT coverage
|
||||
lane #209, Distribution Stage 1 #211 (released as **v1.1.0**), the
|
||||
post-release accuracy pass #212, and **bottom-panel Stage 3 #213 —
|
||||
which completes Arc 7**. Its lane is **removed** per rule 4: the arc is
|
||||
done *and* its durable facts are in `docs/agent-handoff.md` §1. The
|
||||
distribution and CI-CRDT lanes are rewritten rather than removed,
|
||||
because each keeps named follow-ons.
|
||||
|
||||
**This snapshot is an absorption pass, taken with ZERO open PRs** —
|
||||
the one window in which a ledger refresh has nothing to re-conflict
|
||||
|
|
@ -82,21 +89,23 @@ lesson, §1 for the two framings).
|
|||
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` @ `cfc1710` (discovery Stage 1 #207, atop the
|
||||
ambient-root isolation implementation #206, Journey Stage 1b-3 #205,
|
||||
1b-2 #204 and 1b-1 #203, the reap-ledger diagnostic #202, the
|
||||
isolation framing #201, the process-signal diagnostic #200, the ledger
|
||||
absorption #199, 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 `fbcf235`, and **the
|
||||
recovery floor advances with it**: the check below now requires
|
||||
`cfc1710` or newer, so a tree at `fbcf235` 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.
|
||||
- Canonical base at this snapshot: **`githubsucks/main` @ `f186253`**
|
||||
— bottom-panel Stage 3 **#213**, which completes Arc 7, atop the
|
||||
post-release accuracy pass **#212**, Distribution Stage 1 **#211**
|
||||
(released as **v1.1.0**, the first release with prebuilt binaries),
|
||||
and the CI CRDT coverage lane **#209**. Beneath those, `cfc1710`:
|
||||
discovery Stage 1 #207, the ambient-root isolation implementation
|
||||
#206, Journey Stage 1b-3 #205, 1b-2 #204 and 1b-1 #203, the
|
||||
reap-ledger diagnostic #202, the isolation framing #201, the
|
||||
process-signal diagnostic #200 and the ledger absorption #199.
|
||||
**Protocol schema support is `v6..=v21`; the production server-first
|
||||
`Hello` still advertises v20** — two different facts, and #184 landed
|
||||
only the first.
|
||||
**The recovery floor advances with the base**, so the check below
|
||||
now requires `f186253` or newer; a tree at `cfc1710` no longer
|
||||
passes. That is deliberate — a check accepting an older commit than
|
||||
the declared base passes on a tree the rest of this file does not
|
||||
describe.
|
||||
**Lanes below that name an older base have not been re-based; derive
|
||||
their integration surface from `git diff <their base>..main`.**
|
||||
- On the transfer source, `origin/main` named a release mirror at
|
||||
|
|
@ -132,7 +141,7 @@ git worktree list
|
|||
git status --short --branch
|
||||
```
|
||||
|
||||
The `git log` command must expose `cfc1710` — the base named above — or a
|
||||
The `git log` command must expose `f186253` — 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
|
||||
|
|
@ -142,7 +151,7 @@ If it does not, stop and repair the remote/fetch configuration.
|
|||
**This path was exercised, not asserted, at this snapshot** — ahead of a
|
||||
machine move. From an empty directory: `git clone` the canonical URL,
|
||||
add the `githubsucks` alias, `git fetch githubsucks --prune`, confirm
|
||||
`cfc1710` is an ancestor of `githubsucks/main`, and recover a lane with
|
||||
`f186253` is an ancestor of `githubsucks/main`, and recover a lane with
|
||||
the three-argument `git worktree add <path> -b <local> githubsucks/<branch>`
|
||||
form. All four steps ran clean. **The two-argument form still does not
|
||||
work** for a remote-only branch (`fatal: invalid reference`), which is
|
||||
|
|
@ -166,6 +175,28 @@ Durable facts — the corrections, the traps, the census tool — are in
|
|||
recovered**, the other four excluded with stated reasons.
|
||||
- Branch `ci-crdt-coverage` retained; it carries nothing unmerged.
|
||||
|
||||
### Two CI weaknesses Stage 3 exposed — decisions, not defects
|
||||
|
||||
Both surfaced while gating #213 and belong to this lane because it owns
|
||||
the crdt job.
|
||||
|
||||
- **CI does not pass `--no-fail-fast`, so a multi-suite break reports as
|
||||
a single-suite one.** `cargo test` halts after a failing binary, so
|
||||
#213's first crdt failure showed **one** suite when a local
|
||||
`--no-fail-fast` sweep of the same tree showed **thirteen**. The
|
||||
Stage 3 census hit the identical trap and recorded it; CI has it too.
|
||||
The cost of the flag is running the remaining suites on a red build,
|
||||
which is usually what you want when diagnosing.
|
||||
- **The crdt job pairs the heaviest build with real-PTY deadlines.** It
|
||||
installs lavapipe, builds the full workspace with `crdt`, runs the
|
||||
largest test count, and includes real-PTY smokes with **5-second**
|
||||
waits. #213 saw two different such suites fail on two runs of the
|
||||
same commit. One of those was a real regression the flip caused; the
|
||||
other was load. **That ambiguity is the problem** — a job where noise
|
||||
and signal look alike trains people to rerun rather than read.
|
||||
Candidate: longer deadlines for real-PTY assertions in this job
|
||||
specifically, or serialize the PTY suites.
|
||||
|
||||
### Still owned by this lane, not yet done
|
||||
|
||||
- **The macOS `crdt` leg.** Deliberately ubuntu-only at first, "decide
|
||||
|
|
@ -311,82 +342,6 @@ them) and why `dired`/`listview` were the correct first two families.
|
|||
Whichever starts second integrates first.
|
||||
|
||||
|
||||
## Bottom-panel lane (Arc 7) — STAGE 3 COMPLETE; ARC DONE, pending PR
|
||||
|
||||
**Arc 7 is finished.** Stage 1 (#155), the Stage 2 framing (#175),
|
||||
Stages 2A (#177), 2B-1 (#184), 2B-2 (#187) and 2B-3 (#198) are on
|
||||
`main`; **Stage 3 — the adopter default flip — is implemented on
|
||||
`bottom-panel-stage3`** and is the arc's last step. Framing
|
||||
`docs/bottom-panel-stage3-framing.md` revision 3, approved with
|
||||
amendments after three review rounds.
|
||||
|
||||
**This lane is removed once Stage 3 merges and its facts are in
|
||||
`docs/agent-handoff.md` §1** (rule 4). It is retained now only because
|
||||
the PR has not landed.
|
||||
|
||||
- **Branch `bottom-panel-stage3`** off `githubsucks/main` @ `21de0b2`,
|
||||
pushed, upstream tracking set. Six commits: `fa12095` framing,
|
||||
`0224c68` census, `41d37fc` shared resolver, `8d14e6a` lane/portability,
|
||||
`c0eb16b` the flip + test revisions, `5f01ede` the fallback pin.
|
||||
- **Verification:** full serialized sweep **3449 passed / 0 failed**
|
||||
against a 3447 baseline (+2 new pins); fmt, diff-check, clippy with and
|
||||
without `crdt`, `--lib` 1896, `--lib --features crdt` 2081,
|
||||
pmacs-protocol 19, m4 149, required GPU 221, and
|
||||
`bottom_panel_stage1_acceptance` 47/47 under both Lua flavors.
|
||||
|
||||
### What Stage 3 changed
|
||||
|
||||
Omitting `display` resolves to the **panel** for listview, compile and
|
||||
terminal. **Dired keeps `"current"`** — `pmacs.path.directory_handler`
|
||||
calls it with no `display`, so a flipped default would open `pmacs .` in
|
||||
a bottom panel. Per-adopter `select`: listview `true`, compile `false`,
|
||||
terminal `true`.
|
||||
|
||||
Four hand-written copies of the `display` validator collapsed into one
|
||||
shared `resolve_adopter_display(operation, raw, default)`; the default is
|
||||
a **parameter**, which is what makes dired's exemption visible at its
|
||||
call site rather than hidden in a divergent copy.
|
||||
|
||||
### Three defects the flip exposed, each fixed rather than tested around
|
||||
|
||||
- **The outline panel's `on_visit` used the RAW switch**
|
||||
(`pmacs.window.switch_buffer`), which replaces the buffer in the ACTIVE
|
||||
window. Harmless while the outline opened into a document window;
|
||||
once the panel became the default, RET **clobbered the panel with the
|
||||
source**. The references panel was migrated to `display_file` when the
|
||||
arc landed — the outline was missed because nothing exercised it from a
|
||||
panel until the flip. Q#BP11c names this exact corruption.
|
||||
- **`compile._last` stored only `{cmdline, cwd}`**, so `g` reached
|
||||
`start_run` with no `display` and took the new default: an explicit
|
||||
`display = "current"` silently reverted on the next recompile. **An
|
||||
opt-out that reverts is not an opt-out.**
|
||||
- **`opts.display` on a nil `opts`** — a regression introduced by the
|
||||
fix above and caught by `journey_acceptance`, which is what that
|
||||
ratchet is for.
|
||||
|
||||
### Two contracts now pinned, not merely observed
|
||||
|
||||
- **Compile's chords are PANEL-LOCAL.** All are bound
|
||||
`scope = "buffer"`, so with `select = false` none dispatch from the
|
||||
document — `C-c C-k` included. `M-x compile.kill` still reaches the
|
||||
running slot anywhere via its `or compile_slot()` fallback. A global
|
||||
chord is a command-surface decision and belongs in its own framing.
|
||||
- **The two `q` mechanisms are complementary, not competing.**
|
||||
Presentation history chains in the side slot (`C → B → A → delete`,
|
||||
Q#BP2c); `p.prev` prevents raw-switch and capability-fallback listview
|
||||
loops. `s1_12` pins the second with explicit `display = "current"`;
|
||||
the new `s3_1` pins the first.
|
||||
|
||||
### The census lesson worth carrying past this arc
|
||||
|
||||
**It counted failures, not causes.** Thirteen listview failures had ONE
|
||||
root cause — a panel is derived-hidden while frame geometry is unknown,
|
||||
and that suite never declared any because it never needed to. The same
|
||||
applied to `m4_acceptance` and `vterm_stage2_acceptance`. And
|
||||
**`--no-fail-fast` is mandatory**: the first sweep reported 2 failures in
|
||||
1 suite because `cargo test` halts after a failing binary; the real
|
||||
figure was 37 across 5.
|
||||
|
||||
## Reap-ledger silent failures — MERGED (#202); kept for its parked follow-ons
|
||||
|
||||
- **Branch `reap-ledger-silent-failures`**, worktree
|
||||
|
|
|
|||
|
|
@ -1,9 +1,12 @@
|
|||
# Agent handoff — cross-machine continuity
|
||||
|
||||
**Last updated: 2026-08-01, as Distribution Stage 1 #211 — released as
|
||||
v1.1.0, the first pmacs release with prebuilt binaries, which makes
|
||||
journey step 1 reachable without cloning the repository. Beneath it the
|
||||
docs absorption #210 and the CI CRDT coverage lane #209 — the
|
||||
**Last updated: 2026-08-04, as bottom-panel Stage 3 #213 — the adopter
|
||||
default flip, which COMPLETES ARC 7: omitting `display` now means the
|
||||
panel, and the workbench's panel half is done on both frontends. Beneath
|
||||
it the post-release accuracy pass #212 and Distribution Stage 1 #211 —
|
||||
released as v1.1.0, the first pmacs release with prebuilt binaries,
|
||||
which makes journey step 1 reachable without cloning the repository —
|
||||
and the CI CRDT coverage lane #209, the
|
||||
first time CI has ever compiled and run the `crdt` half of the test
|
||||
corpus, closing a gap that left 279 tests (including a REQUIRED
|
||||
`CLAUDE.md` gate) unexecuted for the project's whole life. Development
|
||||
|
|
@ -68,7 +71,9 @@ commands, read `docs/active-work.md` immediately after this file.
|
|||
|
||||
## 1. Where the project stands (2026-08-01)
|
||||
|
||||
- **`main` @ `000b6cd`, released as v1.1.0.** Distribution Stage 1 #211
|
||||
- **`main` @ `f186253`.** Bottom-panel Stage 3 **#213** completes Arc 7,
|
||||
atop the post-release accuracy pass #212 and `000b6cd` / **v1.1.0**.
|
||||
Beneath that, Distribution Stage 1 #211
|
||||
lands atop the docs absorption #210, the CI CRDT coverage lane #209,
|
||||
the absorption #208 and `cfc1710`. Beneath that, nine PRs landed in
|
||||
this order: the ledger absorption #199, the process-signal diagnostic
|
||||
|
|
@ -77,7 +82,8 @@ commands, read `docs/active-work.md` immediately after this file.
|
|||
#204 and **1b-3** #205, the ambient-root isolation **implementation**
|
||||
#206, and discovery Stage 1 #207. Each has its own bullet below; this
|
||||
line is the head-of-`main` anchor and nothing else.
|
||||
- **Bottom panel Arc 7 COMPLETE — Stage 3, the adopter default flip.**
|
||||
- **Bottom panel Arc 7 COMPLETE — Stage 3 (#213), the adopter default
|
||||
flip.**
|
||||
Omitting `display` now means the panel for listview, compile and
|
||||
terminal; **dired keeps `"current"`** because
|
||||
`pmacs.path.directory_handler` calls it with no `display` and a flipped
|
||||
|
|
@ -216,7 +222,7 @@ anchor, so every item is startable.
|
|||
| 2 | Workspace + location | Missing; model gap | The long-lead arc. Start before a fifth subsystem grows its own root convention — four have already diverged (§7) |
|
||||
| 3 | Extension ownership | Missing; prerequisite-shaped | **`pmacs.hook.remove` does not exist.** That one bug-sized gap blocks §13's disable/uninstall, §10's trust classes, and package-scoped cancellation |
|
||||
| 4 | **Discovery** | **Stage 1 MERGED (#207)** | Stage 2 candidates, in rough dependency order: richer M-x rows (**protocol change** — `MinibufferPrompt.candidates` is `Vec<String>`; `CompletionPopupRow` already proves the pattern), `Command` gaining title/category/aliases/flags/arg-schema (~147 definition sites), predicate evaluation, help-layer unification, and the help-prefix decision |
|
||||
| 5 | Workbench convergence | Partial; **Arc 7 COMPLETE** (Stage 3 implemented) | The bottom panel is finished on both frontends and the adopter default is flipped. **The tree primitive is now the arc's successor** — `COHERENCE.md` §14 grades Tree ✗, and DAP's variables view is its next would-be inventor. Build it *before* dired's `i` and the worker tree invent two |
|
||||
| 5 | Workbench convergence | Partial; **Arc 7 COMPLETE** (Stage 3 merged, #213) | The bottom panel is finished on both frontends and the adopter default is flipped. **The tree primitive is now the arc's successor** — `COHERENCE.md` §14 grades Tree ✗, and DAP's variables view is its next would-be inventor. Build it *before* dired's `i` and the worker tree invent two |
|
||||
| 6 | Config productization | Foundation only | Value provenance, then layering, then adoption migration (**table-valued settings are the hard prerequisite** — `ConfigValue` is four scalars) |
|
||||
| 7 | Package lifecycle | Not started | Correctly sequenced after P3 |
|
||||
| 8 | **Distribution** | **Stage 1 SHIPPED (v1.1.0, #211)** | Binaries on tag, checksums, machine-checked glibc floor. **Journey step 1 now works and the "invisible until this exists" blocker is lifted.** Next is a *decision* about channels / update / signing, not a queued plan |
|
||||
|
|
@ -297,6 +303,21 @@ someone forgot.
|
|||
`gpu_invocation_acceptance` tests fail on a missing `pmacs-gpu`
|
||||
binary. `cargo build --workspace --no-default-features --features
|
||||
luajit,crdt` is the invocation that produces both binaries.
|
||||
- **A local sweep is blind to whichever feature configuration it does
|
||||
not build.** Stage 3's census and every verification sweep ran
|
||||
`--features luajit` WITHOUT `crdt`, so no crdt-gated suite was
|
||||
exercised and `compile_mode_crdt_acceptance` reached CI broken. Sweep
|
||||
BOTH configurations before claiming a corpus is green — the crdt job
|
||||
exists precisely because that blindness is easy.
|
||||
- **"My change made this fragile" is a different finding from "this was
|
||||
always flaky", and only one of them is yours to fix.** Stage 3 saw two
|
||||
CI runs on one commit fail DIFFERENT PTY/GPU suites — the
|
||||
load-sensitivity signature, on suites the flake list already names.
|
||||
The tell that it was neither: the failures kept landing on GPU
|
||||
*terminal* tests, and terminal placement was what the PR changed.
|
||||
Those fixtures opened with no `display`, so the flip shrank the very
|
||||
window whose rendered frames they assert against. **Ask which tests
|
||||
and why those, before reaching for a rerun.**
|
||||
- **Never hand-roll the dark-test census — use
|
||||
`scripts/feature-census`.** libtest prints `name: test` with **no
|
||||
space before the colon**, so a filter written `/ : test$/` matches
|
||||
|
|
|
|||
Loading…
Reference in New Issue