docs(active-work): give the two open PRs the lanes they never had

Neither #174 nor #171 had any entry in this ledger. An open PR is
exactly the volatile work the file exists to record, so its absence is a
defect rather than a tidy omission — #171 drifted 153 commits while
invisible here, and its still-green old CI run describes a tree nobody
has looked at since.

#174 — M4 config-sink race, revived and regated. Records the predicate
fix, the gate numbers on the integrated head 302c21c, and two things
verified rather than inherited: the "one writeln! is the only writer"
argument re-checked against a fake_lsp that DID change upstream, and the
wait bitten two ways (unsatisfiable predicate fails on the pump deadline;
the old predicate still passes locally, confirming a green local run
cannot tell them apart).

#171 — dired Stage 2 framing, stale, do not merge as-is. Measured 4
ahead / 153 behind with merge base c8ec8f3, which is itself #165's merge
— so dired Stage 1 and find-file are its base, not new arrivals. Names
the three landed changes that move ground under it: #178's
generated-buffer write invariant (dired is a non-adopting writer),
#182's demotion of dired to a replaceable directory-handler slot, and
#179/#181's typed-edit consumer chain. Restates the five-path-owner
rename transaction the framing still has to answer.

Also records that three review rounds in a commit history is not the
same as approval, and that dired 2a's file overlap with Journey 1b needs
assigning before either runs.
This commit is contained in:
Levi Neuwirth 2026-07-28 16:42:00 -04:00
parent e05ac819b5
commit a159200756
1 changed files with 113 additions and 0 deletions

View File

@ -20,6 +20,13 @@ would stop re-conflicting in this file.
number appears in `git log --first-parent githubsucks/main`, it has
landed regardless of what a lane says.
**Two open PRs had no lane here at all before this snapshot** — #174 and
#171 — and both now have one. An open PR is exactly the volatile work
this file exists to record, so its absence is a ledger defect rather
than a tidy omission: #171 drifted **153 commits** while invisible here,
and its still-green old CI run describes a tree nobody has looked at
since. When a PR is opened, give it a lane.
## Repository authority
- Canonical development URL:
@ -439,6 +446,112 @@ has **no branch and no framing yet**.
`FrontendView.fold_projection` to `true` for semantic frontends, which
Stage 2 deliberately left `false` (Q#FD21).
## M4 config-sink race lane — PR #174 OPEN, REVIVED AND REGATED
> **This ledger had no lane for #174 at all until this snapshot, and
> that is the defect worth naming.** An open PR is precisely the
> volatile work this file exists to record; two of them were invisible
> here (see the dired framing lane below), which is how one of them
> drifted 153 commits without anyone noticing.
- Portable branch: `githubsucks/fix-m4-sink-races`; worktree
`../pmacs-m4-sink-race`. **PR #174**, base `main`.
- **Revived 2026-07-28**: it was 130 commits behind, so canonical `main`
@ `6bee09d` was merged in at `302c21c` and the whole gate suite rerun.
The diff against `main` is unchanged at **25 lines in one file**
(`tests/m4_acceptance.rs`).
- **The fix is one predicate.**
`m4_5_initial_config_pushed_via_did_change_configuration` waited for
`contains("probe")` and then asserted `"probe":true` — six bytes
further on. The sink is JSONL written by a *separate process*, so the
test could read a half-written line; Linux wins that race reliably and
macOS/lua54 did not, reporting `{"rust":{"probe":`. It now waits for a
trailing newline, which is true only once a whole record has landed.
**Any "wait until the file mentions X, then assert Y about the file"
shape races whenever Y is stricter than X.**
- **The structural claim was re-verified against current `main`, not
inherited from the original scout.** `src/bin/pmacs_fake_lsp.rs` *did*
change upstream (Lean 4 stages 3b, `1e1be67` / `cdaea66`), so the "one
`writeln!` is the only writer" argument could have rotted. It has not:
the config sink is still a single `writeln!` at `:433` on a
`create+append` handle. `tests/m4_acceptance.rs` itself has **zero**
upstream commits since the merge base `ccf29e3`, which is why the
merge was clean.
- **The race cannot be falsified locally, but the wait can be — and was,
two ways.** Replacing the predicate with an unsatisfiable one fails
the test at `m4_acceptance.rs:317` with "async pump deadline
exceeded", proving `pump_async` asserts rather than falling through
and that the new predicate genuinely has to become true. Restoring the
*old* predicate leaves the test passing locally, which confirms rather
than assumes that a green local run cannot tell the two apart. Treat
the local suite as a regression check and the structural argument as
the reason.
- **The sibling weak predicate is deliberately left alone.** `m4_26`
(`:5487`) has the same shape, and the obvious fix makes it *worse*
waiting for the expected value turns a genuine `rootUri` regression
into a five-second timeout with a misleading message, trading a
precise diff for a vague hang. Closing it properly means giving that
sink a record terminator in the fake server, and it has never been
observed failing. The reasoning is a comment at the call site so the
next person does not repeat the first instinct.
- Gates on `302c21c`: fmt; strict workspace Clippy; library **1,849 + 3
ignored** default and **2,034 + 4 ignored** CRDT; m4 **121 passed + 3
ignored + 1 filtered** with basedpyright skipped; the two touched
tests run explicitly **2/2**; required GPU **202/202**;
`git diff --check`.
- **No ledger entry was added on the PR branch itself** — this file was
owned by the landed-state sync while #174 was revived, and a
drive-by lane there would have re-conflicted it for no benefit. This
is that entry.
## dired Stage 2 framing lane — PR #171 OPEN, STALE, DO NOT MERGE AS-IS
- Portable branch: `githubsucks/dired-stage2-framing` (head `ab42a79`,
four framing commits); worktree `../pmacs-dired-stage1`. **PR #171**,
base `main`. Framing only — `docs/dired-stage2-framing.md`, 1,570
lines, no runtime code.
- **Measured 2026-07-28: 4 commits ahead of `main`, 153 behind**, merge
base `c8ec8f3`. GitHub reports it mergeable, and its old CI run is
green — **both facts are about a tree nobody has looked at in 153
commits**, and the document still says PROPOSED.
- **The commit history embodies three review rounds. That is not the
same as approval**, and GitHub records no formal review or comment on
it. Do not read the round count as a green light.
- **Its dependencies moved materially underneath it**, which is the real
reason not to merge. Note that dired Stage 1 (#165) and find-file
(#162) are its *base*, not new arrivals — the merge base `c8ec8f3`
**is** #165's merge commit. Eighteen PRs landed after it, and at least
three change ground the framing stands on:
- **#178 gave generated buffers a write invariant**
(`Buffer::set_generated_contents`). Dired's listing is a generated
buffer, and dired is named in the handoff as one of the writer
mechanisms that has **not** adopted it. Stage 2's marks and
operations write that buffer constantly.
- **#182 (Journey Stage 1a) made `resolve_target_buffer` the single
directory-open path**, with dired demoted to a *replaceable slot*
(`pmacs.path.directory_handler`) rather than a hook subscriber. Any
Stage 2 claim about how a directory reaches dired is now describing
a mechanism that no longer exists in that form.
- **#179/#181 landed the typed-edit consumer chain**, which is the
fan-out a rename transaction has to survive.
Re-scout against `6bee09d`, publish a new revision, and get explicit
framing approval before any implementation.
- **The rename problem the framing must still answer**, restated because
it is the hard part: a rename is a transaction across **five** path
owners — the buffer path, the buffer name, the URI-keyed LSP stores
plus `DiagnosticView` (whose URI is set once at construction), dired's
pathless handles, and a captured Lua local that no transaction can
reach.
- Intended serial implementation once approved: **2a** rename/delete
reconciliation substrate with no dired UI, **2b** marks and
operations, **2c** mkdir/copy/recursive-delete primitives, then Stage
3 wdired.
- **Ownership warning:** dired 2a overlaps `src/editor_core.rs`,
`builtin/runtime/lsp.lua`, and the URI-keyed LSP state with other
coherence work. Do not run it concurrently with Journey Stage 1b
without assigning those files to one lane first.
## Parked lane: kill-ring browser + persistence
- Portable branch: `githubsucks/kill-ring-browser`