Two jobs: absorb the CI CRDT coverage lane now that #209 has merged, and clear documentation drift that predates it and was found while reading in on a new machine. ABSORPTION. docs/active-work.md's lane is REWRITTEN, not removed — rule 4 removes a lane when its ARC is done, and three named follow-ons remain. It shrinks from 10,441 to 3,037 characters because rule 3 puts durable architecture in the handoff and leaves only volatile state here. The follow-ons, each with its reason: * the macOS crdt leg, deferred pending first-run evidence that NOW EXISTS and is favourable — the non-crdt macOS legs pass at 3,474, thirteen fewer than ubuntu's 3,487 purely from cfg-compilation of the Linux-gated process tests, and no crdt-specific failure appeared anywhere; * the --lib --features crdt flake, which did NOT reproduce in #209's runs — but every run was --test-threads=1 and the trigger was seen under PARALLEL load, so that is consistent with the drain_until hypothesis rather than evidence against it. Its own PR: a product-defect hypothesis, where all of #209 was configuration; * the crdt_replica serde default, a third default mechanism that disagrees with the Default impl in non-CRDT builds, untestable without a self-describing format this crate does not depend on. Five durable facts move to the handoff §1, each of which contradicted something previously recorded: gpu-render runs a DIFFERENT PACKAGE than the suites the old fix-shape wanted moved there; PMACS_REQUIRE_GPU is absent from two of the four GPU suites; m10_10_perf is a CI-default tripwire rather than a bench; --keep-going is what makes a clippy run an inventory instead of a lower bound; and a feature can matter to a crate a per-test census scores as unaffected. DRIFT, all of it predating this lane and all found while reading in: * COHERENCE.md §20's Priority 1 still read "runs to step 5; thin from step 6" and called Stage 1b-3 "in flight", while §0's scorecard said step 10 and 1b-3 had landed. §20 is a REQUIRED FRAMING INPUT per CLAUDE.md, so a stale priority annotation there does not just sit wrong — it misdirects the next framing doc written against it. Its arc-cuts list carried the same two errors. * docs/agent-handoff.md §1 described Discovery Stage 1 and Journey 1b-3 as "IMPLEMENTED, PR open" while §1a, twenty lines above, correctly recorded both as merged. A file that contradicts itself is worse than one that is merely behind. * docs/side-quest-backlog.md, compiled 2026-07-14, listed #123 as an open PR (merged 2026-07-21), #137 as "in review" (merged), and HTML/CSS as an unshipped grammar (#146 shipped it AND its injection consumers). It is the cross-cutting index, so a stale entry sends someone to build something that already exists. Its north-star section now says plainly that every original item has shipped and that the file no longer sets direction — COHERENCE.md §20 and the handoff §1a do, and both postdate it. * docs/json-yaml-framing.md's status line advertised "PR #123 open and awaiting review" for six weeks after that PR merged. Corrected in the status line only; the revision-4 body is the as-reviewed text and is left unedited. No code, no workflow, no protocol change. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
c5f750105c
commit
3fade5411b
44
COHERENCE.md
44
COHERENCE.md
|
|
@ -1609,23 +1609,24 @@ missing runtime entity — a real arc).
|
|||
### Priority 1: Protect the golden product journey
|
||||
|
||||
Establish the end-to-end workflow; treat regressions as release
|
||||
blockers. **State: runs to step 5; thin from step 6 (§2). Mostly wiring,
|
||||
and unusually cheap:** directory-argument handling (**done**: Journey
|
||||
Stage 1a); a find-file surface (**done**: #162 open-by-path, #165
|
||||
browsing); surfacing the LSP spawn failure with guidance (**done**: Journey Stage
|
||||
1b-2, #204, §1.2); a compile keybinding + `cargo build`/`test` default
|
||||
(**done**: Journey Stage 1b-1, #203, from the existing
|
||||
blockers. **State: Stage 1 COMPLETE — the journey runs to step 10 (§2,
|
||||
§0).** Every item this priority originally named is done:
|
||||
directory-argument handling (Journey Stage 1a, #182/#183); a find-file
|
||||
surface (#162 open-by-path, #165 browsing); surfacing the LSP spawn
|
||||
failure with guidance (Stage 1b-2, #204, §1.2); a compile keybinding +
|
||||
`cargo build`/`test` default (Stage 1b-1, #203, from the existing
|
||||
`ProjectKind::Rust` — **not** `Cargo`, see §24); a terminal keybinding
|
||||
(**done**: `C-c t`, #173); a welcome buffer (**in flight**: Journey
|
||||
Stage 1b-3). The journey acceptance
|
||||
suite (§19) is the ratchet that keeps it fixed — it **exists now**
|
||||
(`tests/journey_acceptance.rs`, Stage 1a), seeded with steps 2, 3 and 5,
|
||||
and carrying step 9 since #203.
|
||||
(`C-c t`, #173); and a welcome buffer (Stage 1b-3, #205). The journey
|
||||
acceptance suite (§19) is the ratchet that keeps it fixed —
|
||||
`tests/journey_acceptance.rs` carries 45 pins over steps 2, 3, 4, 5, 6
|
||||
and 9, and **stages add rows to it, none removes them**.
|
||||
|
||||
Journey Stage 1b is the named remainder, and it splits: **1b-1** (the
|
||||
compile binding + project-kind defaults) landed as #203 and **1b-2**
|
||||
(LSP spawn guidance, step 6) as #204; **1b-3**, the welcome buffer
|
||||
(step 4), is in flight and completes the split.
|
||||
**The remaining thin end is no longer inside this priority.** Step 1 is
|
||||
install, which is **P8**; step 11 is background-work ownership, which is
|
||||
§9; step 12 is session restore, where desktop-save is opt-in *and* a
|
||||
documented no-op under a daemon. Journey Stage 1 closing is what moves
|
||||
this priority's own work to done — what is left is other priorities'
|
||||
work showing up in the journey.
|
||||
|
||||
### Priority 2: Make workspace and location explicit
|
||||
|
||||
|
|
@ -1699,10 +1700,15 @@ implementation — this list is direction, not commitment):
|
|||
**Stage 1b-1 — landed (#203)**: the compile binding and project-kind
|
||||
defaults, with the prompt capturing its directory rather than
|
||||
re-resolving it at accept time. **Stage 1b-2 — landed (#204)**:
|
||||
LSP-failure surfacing. **Stage 1b-3 — in flight**: the welcome
|
||||
buffer and `M-x help`. With it the 1b split is complete.
|
||||
2. **Discovery surface** (P4): the describe/list/where-is command
|
||||
family, M-x rich rows, help unification, help prefix.
|
||||
LSP-failure surfacing. **Stage 1b-3 — landed (#205)**: the welcome
|
||||
buffer and `M-x help`. **The 1b split, and with it Journey Stage 1,
|
||||
is COMPLETE.**
|
||||
2. **Discovery surface** (P4): **Stage 1 landed (#207)** — the
|
||||
describe/list/where-is family, eleven `help.*` commands indexed by
|
||||
`M-x help`. Remaining: M-x rich rows (a protocol change),
|
||||
title/category on `Command` (~147 sites), predicate evaluation, help
|
||||
unification, and the help prefix — where **`C-h` is not free**, see
|
||||
§18.
|
||||
3. **Transient keymap layer** (§6): the overlay scope + lifetime
|
||||
handle + derived `dispatch_idle`, then migrate shadows one per PR.
|
||||
4. **Extension ownership** (P3): `hook.remove`, owner-carrying
|
||||
|
|
|
|||
|
|
@ -148,181 +148,62 @@ form. All four steps ran clean. **The two-argument form still does not
|
|||
work** for a remote-only branch (`fatal: invalid reference`), which is
|
||||
why every lane below spells out the `-b` form.
|
||||
|
||||
## CI CRDT coverage lane — **PR #209 OPEN, all 14 checks green**
|
||||
## CI CRDT coverage — MERGED (#209); kept for its three follow-ons
|
||||
|
||||
**This lane had no branch and no owner from #166 until 2026-08-01.** It
|
||||
now has both, and a PR. Framing:
|
||||
`docs/ci-crdt-coverage-framing.md` revision 4 (approved at revision 2).
|
||||
Branch `ci-crdt-coverage` off `githubsucks/main` @ `4223dd3`, developed
|
||||
in the primary checkout on the laptop, not a worktree.
|
||||
**Rewritten, not removed.** Rule 4 removes a lane when its ARC is done;
|
||||
the coverage itself has landed but three named follow-ons have not.
|
||||
Durable facts — the corrections, the traps, the census tool — are in
|
||||
`docs/agent-handoff.md` §§1/5 per rule 3, so they are not repeated here.
|
||||
|
||||
- **PR: <https://github.com/levineuwirth/pmacs/pull/209>**, opened
|
||||
2026-08-01, awaiting user review. Six commits: `7a9cf5b` clippy,
|
||||
`06abbac` m10-perf-gates, `7a8746d` crdt-test, `a776bc3`
|
||||
feature-census, `57abcd9` docs, plus a review-round commit for the
|
||||
pmacs-protocol gap below.
|
||||
- **First CI run: all 14 checks green** (run `30705124856`), including
|
||||
both new jobs — `Test (crdt)` 12m20s and `M10 Perf Gates (crdt)`
|
||||
5m40s — and the macOS/luajit leg that is the usual flake surface.
|
||||
**This was the first time in the project's history that any of these
|
||||
tests executed in CI.**
|
||||
- **Acceptance criterion 8 — the count reconciliation — HOLDS against
|
||||
the real run.** `Test (crdt)` reported **3,717 passed / 0 failed / 30
|
||||
ignored**. That is 3,746 (the `--all-targets` census, with
|
||||
`basedpyright` not skipped as it is locally) plus 1 doc test, minus
|
||||
the 30 ignored: 3,716 + 1 = 3,717. The job demonstrably compiled and
|
||||
ran the crdt corpus rather than reporting green over nothing.
|
||||
- **Do not compare the two jobs' raw totals.** In the first run
|
||||
`Test (ubuntu/luajit)` reported 3,485 and `Test (crdt)` 3,747 — a
|
||||
difference of 262, not 279, because the jobs ran different *sets*:
|
||||
3,467 + 1 doc + 17 protocol = 3,485, against 3,746 + 1 doc = 3,747.
|
||||
**The dark count is the all-targets comparison, 3,746 − 3,467 = 279.**
|
||||
A reviewer who subtracts job totals gets a wrong number that looks
|
||||
entirely plausible.
|
||||
- **Those two figures are superseded** and are kept only to explain
|
||||
the trap. Round 1 added a pmacs-protocol step to `crdt-test` and
|
||||
round 2 added two capability tests to that crate. The current
|
||||
totals were **predicted from the census and then confirmed exactly**
|
||||
by run `30706324644` @ `71a1ebd`: `Test (crdt)` **3,766**
|
||||
(3,746 + 1 doc + 19 protocol) and `Test (ubuntu/luajit)` **3,487**
|
||||
(3,467 + 1 + 19). Predicting the count *before* the run and matching
|
||||
it is a stronger reading of acceptance 8 than reconciling afterwards.
|
||||
- The root-package census is untouched at 3,467 / 3,746 — the new
|
||||
tests live in a sibling crate, exactly the region
|
||||
`scripts/feature-census` cannot see.
|
||||
- **The macOS legs report 3,474, thirteen fewer than ubuntu's 3,487**,
|
||||
and that is expected: the Linux-gated process tests
|
||||
(`setsid`, the `bash -m` job-control corroboration) are
|
||||
`cfg`-compiled out rather than skipped. Do not read it as macOS
|
||||
coverage loss.
|
||||
- **Verify CI by `head_sha`, never by the check summary — it bit again
|
||||
here.** Round 1's run (`30705916037` @ `6519bc3`) was **cancelled**,
|
||||
not green: round 2's push superseded it, which is the concurrency
|
||||
group working as designed. A `gh pr checks` summary polled around that
|
||||
moment reported the *previous* run's results, with plausible timings,
|
||||
and was briefly reported as round 1 passing. The ledger already
|
||||
carried this lesson from #178 ("twelve checks green on head `1b44c69`
|
||||
— verified by `head_sha`, not by the check summary"); it recurs
|
||||
because the wrong answer looks exactly like the right one.
|
||||
|
||||
- **Root cause, unchanged:** `.github/workflows/ci.yml` never enabled
|
||||
the `crdt` feature anywhere. Every `#[cfg(feature = "crdt")]` test was
|
||||
therefore **not compiled** in CI, not merely skipped — including the
|
||||
186 library tests behind `cargo test --lib --features crdt`, which
|
||||
`CLAUDE.md` lists as a REQUIRED pre-PR gate. CI had never run a
|
||||
required gate.
|
||||
- **Re-measured at `4223dd3`: 3,467 vs 3,746 — 279 dark**, up from the
|
||||
273 recorded at `74301d1`. **Do not quote this number either.** It
|
||||
moves with every merge, and there is now a tool: `scripts/feature-census
|
||||
luajit luajit,crdt` reproduces the whole per-target table, the ignored
|
||||
split, and the zero-test-target count in one command.
|
||||
- **The 279 are fully dispositioned; 275 are recovered.** 268 by the new
|
||||
`crdt-test` job, 7 by the new `m10-perf-gates` job, and 4 deliberately
|
||||
excluded: `m10_11_acceptance`'s three PTY-doubled tests (marked
|
||||
operator-invoked before tagging) and the #157 CRDT undo repro, an
|
||||
`#[ignore]`d known-defect marker whose arming belongs to that defect's
|
||||
lane.
|
||||
- **The deliberate/accidental classification the old lane text called
|
||||
"the lane's first task" is finished**, and it found THREE dispositions
|
||||
rather than two: benches awaiting a job (`m10_2_perf`,
|
||||
`m10_11_perf`), deliberately-manual operator tests
|
||||
(`m10_11_acceptance`), and known-defect markers. Collapsing the second
|
||||
into the first would have given a CI job to tests whose `#[ignore]`
|
||||
reason says not to.
|
||||
- **`m10_10_perf` is NOT a perf gate**, and the framing got this wrong
|
||||
first. Its header says its bounds are "generous ... to catch
|
||||
catastrophic regressions, not to verify a tight perf claim," so its
|
||||
lack of `#[ignore]` is the design. Adding one to give it a job would
|
||||
have shipped a coverage reduction inside a coverage lane. It stays
|
||||
untouched and rides the plain leg.
|
||||
- **The clippy obstacle is cleared, and the old inventory was stale in
|
||||
both directions.** `cargo clippy --workspace --all-targets --features
|
||||
crdt` had never passed. The previous seven-item list was correctly
|
||||
labelled "a lower bound, not an inventory" — `--keep-going` is what
|
||||
converts it. The real set was eight findings across four files; the
|
||||
`unneeded mut` at `daemon.rs:4965` had been fixed incidentally, a
|
||||
finding in `bottom_panel_stage2b_gpu_acceptance.rs` was new, and every
|
||||
`daemon.rs` line number had moved.
|
||||
- **One job, not two.** The fix-shape recorded here previously put the
|
||||
GPU-requiring suites onto `gpu-render` "which already has lavapipe and
|
||||
PMACS_REQUIRE_GPU". **That job runs `cargo test -p pmacs-gpu` — a
|
||||
different package** from the four root-package suites, so co-locating
|
||||
them means a new invocation rather than an extension. Splitting also
|
||||
requires classifying every future suite as GPU-requiring or not, and a
|
||||
misclassified one skips forever. `crdt-test` installs lavapipe and
|
||||
sets `PMACS_REQUIRE_GPU=1` for the whole corpus instead.
|
||||
- **`PMACS_REQUIRE_GPU` is not uniform and cannot serve as blanket
|
||||
proof**: it appears in `vterm_stage3_acceptance` (twice) and
|
||||
`bottom_panel_stage2b_gpu_acceptance` (once), and **not at all** in
|
||||
`gpu_invocation_acceptance` or `gpu_initial_target_acceptance`.
|
||||
- **The external-tool install block is deliberately not duplicated.**
|
||||
Measured: it gates `m4_acceptance`, `m6_5_repl_acceptance` and
|
||||
`m6_8_multi_repl_acceptance`, none of which has a single dark test.
|
||||
The only tool-gated code in the dark set is `src/process.rs`, whose
|
||||
two variables need no install.
|
||||
- **Crdt clippy runs in `crdt-test`, not the `clippy` job.** The `clippy`
|
||||
job matrixes over Lua flavor and never enables `crdt`, so clearing
|
||||
those lints once would let them drift straight back and the next job
|
||||
to compile them would be red on arrival — the exact state this lane
|
||||
found.
|
||||
- **Verification on the laptop (integrated Radeon, 16 threads), all at
|
||||
the exact commands CI runs:** clippy green with and without `crdt`;
|
||||
fmt; diff-check; `--lib` 1,896; `--lib --features crdt` 2,081; doc
|
||||
tests; `m10_2_perf` 6/6 in 79s and `m10_11_perf` 1/1 in 5s under
|
||||
release; and the full serialized sweep with `PMACS_REQUIRE_GPU=1` at
|
||||
**3,715 passed / 0 failed / 30 ignored in 366s**, reconciling exactly
|
||||
to the 3,746 census (3,715 + 30 + 1 basedpyright-skipped). The
|
||||
reconciliation is the point: a sweep that does not reconcile is the
|
||||
a37 vacuum at corpus scale.
|
||||
- **What is NOT established, and it is the lane's whole remaining risk:**
|
||||
the sweep is green *serialized on a developer machine*. The failures
|
||||
this lane expects are hosted-runner timing and concurrency — real PTY
|
||||
on CI runners, wgpu under lavapipe, daemon sockets at unfamiliar
|
||||
concurrency. A green local run removes the "tests are wrong"
|
||||
explanation and leaves the expected one untested. **Do not quote it as
|
||||
evidence the CI leg will be green.**
|
||||
- **Red-first-run policy, decided:** fix in-lane by default, with one
|
||||
escape hatch keyed on cause class. Lane-configuration failures and
|
||||
locally-reproducing failures are fixed here; an environment-only
|
||||
failure (green locally and on Universum, red only on a hosted runner)
|
||||
becomes a named follow-on rather than an unbounded investigation
|
||||
inside a workflow-config PR. The local green makes that third class
|
||||
the most likely red, which is why the hatch exists.
|
||||
- **Universum (7900 XTX, remote) is where the GPU ambiguity settles.**
|
||||
The laptop renders the GPU suites but is thermally constrained, which
|
||||
is the documented condition for a37's "all spaces with nonzero
|
||||
rendered_nonuniform_frames" signature. Universum can establish the
|
||||
tests are sound; it cannot establish that the lavapipe CI job passes.
|
||||
|
||||
Recovery from a clean checkout:
|
||||
|
||||
```sh
|
||||
git fetch githubsucks
|
||||
git worktree add ../pmacs-ci-crdt \
|
||||
-b ci-crdt-coverage \
|
||||
githubsucks/ci-crdt-coverage
|
||||
```
|
||||
- **MERGED as #209** (`main` @ `c5f7501`, 2026-08-01, two review rounds),
|
||||
framing `docs/ci-crdt-coverage-framing.md` revision 5. The lane had sat
|
||||
under "NEEDS A LANE" with no branch and no owner since #166.
|
||||
- **CI compiles and runs the CRDT corpus for the first time.**
|
||||
`Test (crdt)` runs **3,766** tests where none ran before;
|
||||
`M10 Perf Gates (crdt)` covers two suites no workflow had ever named;
|
||||
`cargo clippy --features crdt` is enforced going forward rather than
|
||||
being a required local gate that rots in CI. **275 of 279 dark tests
|
||||
recovered**, the other four excluded with stated reasons.
|
||||
- Branch `ci-crdt-coverage` retained; it carries nothing unmerged.
|
||||
|
||||
### Still owned by this lane, not yet done
|
||||
|
||||
- **The macOS `crdt` leg.** Deliberately ubuntu-only at first, "decide
|
||||
about macOS from evidence." **That evidence now exists** and is
|
||||
favourable: the non-crdt macOS legs pass at 3,474 (thirteen fewer than
|
||||
ubuntu's 3,487 — `cfg`-compilation of the Linux-gated process tests,
|
||||
not lost coverage), and no crdt-specific failure appeared anywhere.
|
||||
This is now a small, decidable addition rather than an open question.
|
||||
- **The `--lib --features crdt` flake.**
|
||||
`process::tests::setsid_escapee_is_not_reaped_and_teardown_reclaims_readers`
|
||||
failed ~1 run in 5 with `active_reader_probe` returning `None`. **It
|
||||
did not reproduce in this lane's runs** — `--lib --features crdt` was
|
||||
2,081/2,081 and the full serialized sweep was clean — but a
|
||||
non-reproduction under serial execution is consistent with the
|
||||
leading hypothesis rather than evidence against it: the trigger was
|
||||
observed under *parallel* full-suite load, and every run here was
|
||||
`--test-threads=1`. The `drain_until` explanation (draining for
|
||||
`Started` also ticks, and a tick can reap the leader before the
|
||||
following probe) remains an inference from control flow, not a
|
||||
falsified root cause. Discriminating it is its own PR — it is a
|
||||
product-defect hypothesis and everything else here is workflow
|
||||
configuration.
|
||||
failed ~1 run in 5 with `active_reader_probe` returning `None`.
|
||||
**It did not reproduce in #209's runs** — `--lib --features crdt` was
|
||||
2,081/2,081 and the full serialized sweep clean — but that is *not*
|
||||
evidence against the hypothesis: every run was `--test-threads=1` and
|
||||
the trigger was observed under **parallel** full-suite load. The
|
||||
`drain_until` explanation (draining for `Started` also ticks, and a
|
||||
tick can reap the leader before the following probe) remains an
|
||||
inference from control flow, not a falsified root cause. **Its own
|
||||
PR** — a product-defect hypothesis, where everything in #209 was
|
||||
workflow configuration.
|
||||
- **`InstanceCapabilities::crdt_replica`'s serde default.**
|
||||
`#[serde(default = "default_true")]` is a *third* default mechanism,
|
||||
unconditional, and therefore disagrees with the `Default` impl in a
|
||||
non-CRDT build. Exercising it needs a self-describing format and
|
||||
`pmacs-protocol`'s only serde dependency is postcard, which is not
|
||||
one. Adding `serde_json` as a dev-dependency to test a divergence
|
||||
#209 did not introduce was refused as scope creep. Parked, not
|
||||
forgotten.
|
||||
- **The two unattributed CRDT failures from #178's round-2 gating.** No
|
||||
test names were captured, so there is nothing to reproduce.
|
||||
- **macOS.** Ubuntu-only first, deliberately; a macOS `crdt` leg is a
|
||||
follow-on decided from the first run's evidence.
|
||||
|
||||
Recovery, only if a follow-on needs the branch:
|
||||
|
||||
```sh
|
||||
git worktree add ../pmacs-ci-crdt \
|
||||
-b ci-crdt-coverage-followup \
|
||||
githubsucks/ci-crdt-coverage
|
||||
```
|
||||
|
||||
## Discovery lane (P4) — STAGE 1 MERGED (#207); STAGE 2 IS NEXT
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,11 @@
|
|||
# Agent handoff — cross-machine continuity
|
||||
|
||||
**Last updated: 2026-08-01 (CI CRDT coverage lane opened on `ci-crdt-coverage`; development moved to the laptop). Previously 2026-07-29, as bottom-panel Stage 2B-3 — the GPU panel
|
||||
**Last updated: 2026-08-01, as 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
|
||||
moved to the laptop in the same session; the docs absorption #208 sits
|
||||
beneath it. Previously 2026-07-29, as bottom-panel Stage 2B-3 — the GPU panel
|
||||
band, compatible protocol-v21 activation, and the negotiated
|
||||
`panel_capable` flip, completing Arc 7 Stage 2 — opens atop `e003b81`.
|
||||
Beneath it, bottom-panel Stage 2B-2 (#187) — the
|
||||
|
|
@ -60,13 +65,58 @@ commands, read `docs/active-work.md` immediately after this file.
|
|||
|
||||
## 1. Where the project stands (2026-08-01)
|
||||
|
||||
- **`main` @ `cfc1710`.** Nine PRs landed since the previous anchor, in
|
||||
- **`main` @ `c5f7501`.** The CI CRDT coverage lane #209 lands atop the
|
||||
docs absorption #208 and `cfc1710`. Beneath that, nine PRs landed in
|
||||
this order: the ledger absorption #199, the process-signal diagnostic
|
||||
#200, the test ambient-root isolation **framing** #201, the
|
||||
reap-ledger diagnostic #202, Journey Stage **1b-1** #203, **1b-2**
|
||||
#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.
|
||||
- **CI runs the CRDT half of the corpus for the first time — #209.**
|
||||
`.github/workflows/ci.yml` had never enabled the `crdt` feature, so
|
||||
every `#[cfg(feature = "crdt")]` test was **not compiled** — not
|
||||
skipped, not filtered, not reported. **279 tests had never executed in
|
||||
CI, 186 of them in the library**, behind the
|
||||
`cargo test --lib --features crdt` invocation `CLAUDE.md` lists as a
|
||||
**required** pre-PR gate: a required gate CI had never run. `Test
|
||||
(crdt)` now runs 3,766 tests, `M10 Perf Gates (crdt)` covers two
|
||||
suites no workflow had named, and `clippy --features crdt` is
|
||||
enforced. **275 of 279 recovered**; the other four are excluded with
|
||||
stated reasons. Five durable facts, each of which contradicted
|
||||
something previously recorded:
|
||||
- **`gpu-render` runs a DIFFERENT PACKAGE** (`cargo test -p
|
||||
pmacs-gpu`) from the root-package GPU suites. The long-recorded fix
|
||||
shape — "move the GPU-requiring crdt suites onto `gpu-render`, it
|
||||
already has lavapipe" — does not work as written. One job covers the
|
||||
whole corpus instead, which also cannot develop the hole splitting
|
||||
invites: a suite added later would otherwise land in the job needing
|
||||
no GPU and skip there forever.
|
||||
- **`PMACS_REQUIRE_GPU` is not uniform.** Present in
|
||||
`vterm_stage3_acceptance` (×2) and `bottom_panel_stage2b_gpu_
|
||||
acceptance` (×1), **absent entirely** from `gpu_invocation_
|
||||
acceptance` and `gpu_initial_target_acceptance`. It cannot serve as
|
||||
blanket proof the GPU suites ran.
|
||||
- **`m10_10_perf` is a CI-default regression tripwire, not a bench.**
|
||||
Its header says its bounds are "generous … to catch catastrophic
|
||||
regressions, not to verify a tight perf claim", so the *absence* of
|
||||
`#[ignore]` is the design. Giving it a perf job would have shipped a
|
||||
coverage reduction inside a coverage lane. Classifying the three
|
||||
`_perf` suites by filename and marker counts got the one whose name
|
||||
disagreed with its purpose exactly backwards.
|
||||
- **`--keep-going` is what turns a clippy run into an inventory.**
|
||||
Clippy abandons remaining targets at the first failure, so any
|
||||
un-`--keep-going` list is a lower bound. The recorded seven-item
|
||||
list was stale in *both* directions: one finding had been fixed
|
||||
incidentally, one was new, and every line number had moved.
|
||||
- **A feature can matter to a crate a per-test census scores as
|
||||
unaffected.** `pmacs-protocol`'s `crdt` feature gates no tests — 17
|
||||
either way — but changes `cfg!(feature = "crdt")` *expressions*
|
||||
inside the capability defaults, so the same tests exercise different
|
||||
runtime values. Worse, the crate's only use of those defaults was a
|
||||
**transport round-trip, which is invariant to the values**: an
|
||||
all-false default passes identically. Running code is not testing
|
||||
it, and that gap survived the first review round.
|
||||
- **Two arcs completed in that run, and their lanes are gone from
|
||||
`docs/active-work.md` accordingly** (rule 4 removes a lane once its
|
||||
arc is done *and* its facts are here): **Journey Stage 1** — 1a plus
|
||||
|
|
@ -94,14 +144,10 @@ anchor, so every item is startable.
|
|||
|
||||
#### Open lanes (branch exists, work not finished)
|
||||
|
||||
- **CRDT half of the corpus is dark in CI — PR #209 OPEN, all 14 checks
|
||||
green** (`ci-crdt-coverage`, `docs/ci-crdt-coverage-framing.md` rev 4;
|
||||
opened 2026-08-01, awaiting user review). CI never enabled `crdt`, so
|
||||
those tests were *not compiled*, not merely skipped — including 186
|
||||
library tests behind a **required** `CLAUDE.md` gate CI had never run.
|
||||
The first run reported **3,717 passed / 0 failed / 30 ignored** in
|
||||
`Test (crdt)`, reconciling exactly to the census, so the job is
|
||||
demonstrably not vacuous.
|
||||
- **CRDT half of the corpus is dark in CI — FIXED, merged as #209.**
|
||||
Now a lane kept only for three follow-ons (macOS leg, the `--lib
|
||||
--features crdt` flake, the `crdt_replica` serde divergence). See the
|
||||
arc bullet in §1.
|
||||
**Re-measure before quoting a number**, and there is now a tool:
|
||||
`scripts/feature-census luajit luajit,crdt`. Measured 279 dark at
|
||||
`4223dd3`; 275 recovered, 4 excluded with stated reasons. Two
|
||||
|
|
@ -422,7 +468,7 @@ someone forgot.
|
|||
disagree — and it still establishes no identity, because it is read
|
||||
inside the same read-then-act window and no portable mechanism closes
|
||||
that for a *group* (`pidfd` covers a process; macOS has neither).
|
||||
- **Discovery arc (P4) — Stage 1 IMPLEMENTED, PR open**
|
||||
- **Discovery arc (P4) — Stage 1 LANDED (#207)**
|
||||
(`docs/discovery-stage1-command-family-framing.md`, rev 6, three
|
||||
review rounds). Eleven `help.*` commands over the existing registries,
|
||||
indexed by `M-x help`. **§5 moves substrate-without-surface →
|
||||
|
|
@ -453,7 +499,7 @@ someone forgot.
|
|||
`src/help.rs:76` and one test. A preservation pin registers a
|
||||
*raising* predicate and asserts the command still runs, so a stage
|
||||
that starts evaluating must change that pin knowingly.
|
||||
- **Journey arc (P1) — Stage 1b-3 IMPLEMENTED, PR open**
|
||||
- **Journey arc (P1) — Stage 1b-3 LANDED (#205)**
|
||||
(`docs/journey-stage1b3-welcome-framing.md`, rev 4, three review
|
||||
rounds). The last of the 1b split. An unconfigured launch greets in
|
||||
`*scratch*`; `M-x help` renders a cheat sheet. **§18 and the scorecard
|
||||
|
|
|
|||
|
|
@ -1,8 +1,11 @@
|
|||
# JSON + YAML grammars — framing (side quest, highlight family)
|
||||
|
||||
**Revision 4 — 2026-07-21. Status: PR #123 open and awaiting review;
|
||||
the public and checkpoint branches are at fully gated `5c202c5`, rebased
|
||||
onto `main` `f8096ff`.**
|
||||
**Revision 4 — 2026-07-21. Status: MERGED as #123 on 2026-07-21.**
|
||||
*(Status line corrected 2026-08-01: it read "PR #123 open and awaiting
|
||||
review" for six weeks after the PR merged. The revision-4 body below is
|
||||
the as-reviewed text and is left unedited.)* At review the public and
|
||||
checkpoint branches were at fully gated `5c202c5`, rebased onto `main`
|
||||
`f8096ff`.
|
||||
The JSON provider and Red Hat YAML 1.24.0 have each passed their
|
||||
PATH-gated pmacs acceptance, in addition to the deterministic fake-server
|
||||
config-push proof and the YAML standalone protocol smoke.
|
||||
|
|
|
|||
|
|
@ -4,8 +4,15 @@
|
|||
"Deferred (named)" section, the handoff §6 consolidated list, the
|
||||
`docs/roadmap-2026-07.md` arcs, and a code-level marker sweep
|
||||
(src/, builtin/, pmacs-gpu/, pmacs-protocol/). **Updated 2026-07-15:**
|
||||
multi-language injections shipped (#122) — item pruned to its remaining
|
||||
follow-ups; north star and Jupyter gate revised.
|
||||
multi-language injections shipped (#122).
|
||||
|
||||
**Pruned 2026-08-01.** This file had drifted six weeks and was listing
|
||||
landed work as open — #123 as "PR open" (merged 2026-07-21), #137 as
|
||||
"in review" (merged), and HTML/CSS as an unshipped grammar (#146). It is
|
||||
the cross-cutting index, so a stale entry here sends someone to build
|
||||
something that exists. **`docs/agent-handoff.md` §1a is the authority
|
||||
for arc state; this file is the long tail.** Re-check an item here
|
||||
against the handoff before starting it.
|
||||
|
||||
**Scope.** This is the *side-quest* backlog: self-contained,
|
||||
frontend-agnostic-ish work that does **not** belong to the **themes /
|
||||
|
|
@ -42,13 +49,14 @@ The direct continuation of the #114–#118 grammar/detection stack.
|
|||
(`<script>`/`<style>`, template literals, doc-comment code).
|
||||
- ~~**Modeline detection**~~ — **SHIPPED as #132.** Bounded Emacs/Vim
|
||||
metadata now precedes extension → filetype → filename → shebang inference.
|
||||
- **JSON + YAML — PR #123 open.** Grammars and LSP configs exist on the
|
||||
feature line; review fixes are preserved on
|
||||
`json-yaml-handoff-2026-07-20`. A real YAML-through-pmacs smoke,
|
||||
rebase, and full gates remain before review resumes. JSON is also the
|
||||
prerequisite for the notebook path; see `docs/active-work.md`.
|
||||
- ~~**JSON + YAML**~~ — **SHIPPED as #123** (merged 2026-07-21).
|
||||
Grammars and LSP configs for both. JSON was the notebook path's
|
||||
prerequisite, so Jupyter is now gated only on its own arc.
|
||||
- ~~**HTML + CSS grammars**~~ — **SHIPPED as #146.** They also lit up
|
||||
HTML's `INJECTIONS_QUERY` (`<script>` → js, `<style>` → css), so the
|
||||
injection-consumer follow-up below is partly discharged.
|
||||
- **More grammars for languages with neither grammar nor LSP** — ruby,
|
||||
php, html, css, sql, etc.
|
||||
php, sql, etc. (html and css are done; see above).
|
||||
- **Grapheme / combining-mark awareness** in the text view
|
||||
(`text_view.rs` skips zero-width marks).
|
||||
- **Byte-accurate multibyte cursor placement** — `move_active_cursor_to`
|
||||
|
|
@ -120,7 +128,7 @@ The direct continuation of the #114–#118 grammar/detection stack.
|
|||
language-aware indent, per-language comment padding, and per-project
|
||||
compile commands — the last three are now ordinary work, expressed as
|
||||
a `buffer.after-load` hook calling `set_local`, not blocked work.
|
||||
- ~~**Tab-width rendering parity**~~ — **IMPLEMENTED, IN REVIEW AS #137.** One fixed
|
||||
- ~~**Tab-width rendering parity**~~ — **SHIPPED as #137.** One fixed
|
||||
8-column constant now drives the core/TUI display-column paths, GPU rich-text
|
||||
projection, and minimap widths. GPU expansion retains source-tab provenance,
|
||||
so caret, hit, selection, and diagnostic geometry remain byte-correct through
|
||||
|
|
@ -235,14 +243,14 @@ guides (visual, not color).
|
|||
|
||||
## North star (highest-leverage first)
|
||||
|
||||
**The original north-star items have shipped or reached review** —
|
||||
multi-language injections (#122), the config registry (#127), JSON + YAML
|
||||
(#123), mode-system wiring (#129), locals queries (#134), and tab-width
|
||||
rendering parity (PR #137, review pending). The remaining board now
|
||||
starts with the broader ranked arcs below rather than another unresolved
|
||||
cross-frontend rendering invariant.
|
||||
**Every original north-star item has now SHIPPED** — multi-language
|
||||
injections (#122), the config registry (#127), JSON + YAML (#123),
|
||||
mode-system wiring (#129), locals queries (#134), tab-width rendering
|
||||
parity (#137), modeline detection (#132), and the HTML/CSS grammars
|
||||
(#146) that were named here as the cleanest remaining one-shot.
|
||||
|
||||
Beyond those, the cleanest remaining one-shots in the highlight family are the
|
||||
HTML/CSS grammars that light up more injection *consumers*; modeline detection
|
||||
shipped in #132. The most-missed editing table-stakes remain **word-kills +
|
||||
`C-SPC` set-mark**.
|
||||
**This file no longer sets direction.** `COHERENCE.md` §20 carries the
|
||||
priority order and `docs/agent-handoff.md` §1a carries the board; both
|
||||
postdate this document and are audited. What remains here is the long
|
||||
tail — genuinely useful, genuinely optional. The most-missed editing
|
||||
table-stakes are still **word-kills + `C-SPC` set-mark**.
|
||||
|
|
|
|||
Loading…
Reference in New Issue