From c2b613c28dc66316d5cf47a087ecec92f99507fd Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Tue, 11 Aug 2026 21:15:23 +0200 Subject: [PATCH] docs: Stage 0 --- a total grading rule, honest counts, and the recovery floor The recovery authority contradicted itself in the direction that matters: the floor said `9a26ac8` while the operative check said `e67ad07`, so the stated floor would have ACCEPTED a tree missing everything since 2026-08-08. Floor and check are now both `e67ad07`. The exercise claim is corrected rather than quietly inherited. That paragraph argued its own value --- advancing the base is exactly when the procedure must be re-run --- and then presented a 2026-08-08 run at `9a26ac8` as if it covered today's base. It is now marked as the LAST exercise, with the advance to `e67ad07` recorded as an OUTSTANDING obligation. What is unverified is the procedure against the new base, not the SHA. The grading rule was not total. `Weak` required a non-empty blocker list and `Partial` named blockers, which left a real state ungraded: criterion 1 passing, blockers empty, criterion 3 failing or unassessed. The rule now turns on criterion 1 alone --- pass is `Partial`, fail is `Weak`, all-pass is `Strong` --- so every usable state is covered by exactly one grade. Criterion 1 is the right discriminator because it is the only one measuring the GPU AGAINST THE TUI; the others measure it against its own goals. Today's grade is unchanged and now derives. The listview counts were wrong because I used `grep -c`, which counts comment mentions. Four executable calls in `lsp.lua`, one in `git.lua` --- not five and four. The claim those numbers support is untouched: listview is no longer LSP-only. Two status claims corrected: the lane understated its own commits (15, actually 16), now stated AS OF a SHA so it cannot rot on the next commit; and the handoff said "Stage 0 in PR" when no PR exists --- "ready for PR (not yet opened)". The inference ruling is recorded where the flags live: they do not block this docs PR, they must be closed before the table is first enforced as a gate, 3(c) and 9 can change the deficit set, and 6(c) cannot change step 6 today but still owes evidentiary closure. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai --- COHERENCE.md | 31 +++++++++++++++++++++++++------ docs/active-work.md | 19 +++++++++++++------ docs/agent-handoff.md | 2 +- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/COHERENCE.md b/COHERENCE.md index 6b1f344..3c131d2 100644 --- a/COHERENCE.md +++ b/COHERENCE.md @@ -107,7 +107,7 @@ remain open to them. | 11 | Config layering + provenance | **Partial (foundation only)** | Typed registry is right; 5 settings live in it; no value provenance | | 12 | Profiles | **Missing** | One hardcoded default keymap; not a named concept | | 13 | Package lifecycle UX | **Resolution without lifecycle** | Mature resolver/lockfile; init-only install; no uninstall/disable/search | -| 14 | Workbench primitives | **Partial (best trajectory)** | Listview is a real primitive with call sites in **two** modules — `lsp.lua` (5) and **`git.lua` (4, `*git-status*`, #227)** — so it is **no longer LSP-only**; buffer-list and search re-implement it; **the bottom panel is COMPLETE — both frontends, and Stage 3 flipped the adopter default so omission means the panel**. **Tree is implemented (◐) with the LSP outline as its one adopter; the remaining consumers, including dired's `i`, have not adopted** | +| 14 | Workbench primitives | **Partial (best trajectory)** | Listview is a real primitive with executable call sites in **two** modules — `lsp.lua` (**4**) and **`git.lua` (1, `*git-status*`, #227)** — so it is **no longer LSP-only**; *(counted excluding comment mentions, which an earlier `grep -c` included)*; buffer-list and search re-implement it; **the bottom panel is COMPLETE — both frontends, and Stage 3 flipped the adopter default so omission means the panel**. **Tree is implemented (◐) with the LSP outline as its one adopter; the remaining consumers, including dired's `i`, have not adopted** | | 15 | Contextual affordances | **Weak** | Right-click menu only; code actions apply first-blindly; **Git integration reaches status and diff (#227, Stage 1) and no further** — §15's ground truth is authoritative, and this row previously said "no git integration at all" | | 16 | Semantic frontend | **Architectural: Strong · Product: Weak** | v6..=v23 schema support; production attach remains v20 during the dark panel slice; degradation practiced. **The two subgrades and the product criteria live in §16** — the row points there rather than carrying a grade of its own, so the GUI-as-a-product half cannot hide inside an architectural `Strong` | | 17 | Distribution | **Partial** | **v1.1.0 ships prebuilt Linux/macOS binaries on tag** (#211) with checksums and a stated glibc floor. No channels, in-place update, rollback, signing, or package-manager distribution | @@ -507,7 +507,15 @@ fails on GPU *alone*, so it is **frontend-local** — Stage 1d's IME work closes it. A single merged TUI column would have shown two identical red cells and no way to tell those apart. -**Inference flags.** GPU 3(c) is inferred **in both halves** — +**Inference flags — and when they must be closed (user ruling, +2026-08-11).** These do **not** block the Stage 0 docs PR. They **must** +be verified **before this table is first enforced as a release gate**. +**3(c) and 9 can change the deficit set**; **6(c) cannot change step 6's +grade today** — 6(e) already floors it at `Missing` on all three +frontends — but still needs evidentiary closure rather than standing +indefinitely as an assumption. + +GPU 3(c) is inferred **in both halves** — rendering and browsing interaction — as are GPU 9 (compile output renders like any other daemon buffer) and GPU 6(c) (hover reaches the echo area as on the grid). All must be verified before this table is @@ -1754,12 +1762,23 @@ grade. The product subgrade reads: | grade | condition | |---|---| | **Strong** | all three criteria pass | -| **Partial** | criterion 1 passes — the GPU is nowhere *behind* the TUI — while blockers remain open | -| **Weak** | criterion 1 fails at one or more steps **and** the blocker list is non-empty | +| **Partial** | usable, criterion 1 **passes**, and not all three criteria pass | +| **Weak** | usable and criterion 1 **fails** at one or more steps | | **Missing** | no usable graphical frontend | -**Current: Weak** — criterion 1 fails at two known steps, and nine -blockers are open including the one-window ceiling. The distinction that +**The rule is TOTAL by construction** — every usable state is covered by +exactly one of `Partial`/`Weak`/`Strong`, since criterion 1 either +passes or fails and `Strong` is the all-pass case. An earlier draft +required a non-empty blocker list for `Weak` and named blockers in +`Partial`, which left a real state ungraded: criterion 1 passing with an +empty blocker list but criterion 3 failing or unassessed. Criterion 1 is +the discriminator because it is the only one that measures the GPU +*against the TUI*; the others measure it against its own goals. + +**Current: Weak** — criterion 1 fails at two known steps. (Nine +blockers are open including the one-window ceiling; under the total rule +they no longer *derive* the grade, but they are why it is not close to +`Strong`.) The distinction that matters is between `Weak` and `Partial`: the GPU is not merely *unfinished*, it is **behind a frontend that ships in the same binary**, and that is what the ceiling and the two failing steps say. diff --git a/docs/active-work.md b/docs/active-work.md index b04f365..8759b9c 100644 --- a/docs/active-work.md +++ b/docs/active-work.md @@ -173,7 +173,7 @@ lesson, §1 for the two framings). where they describe a stage as it landed** — only this current-state paragraph tracks the live range. **The recovery floor advances with the base**, so the check below - now requires `9a26ac8` or newer; a tree at `db1bbe9` no longer + now requires **`e67ad07`** or newer; a tree at `db1bbe9` no longer passes — it would lack the entire QoL arc, which this file and the handoff both describe as complete. That is deliberate — a check accepting an older commit than the declared base passes on a tree the rest of this file does not @@ -220,9 +220,14 @@ declares canonical will pass on a tree the rest of this file does not describe. If it does not, stop and repair the remote/fetch configuration. -**This path was exercised, not asserted, at this snapshot** — re-run -from an empty directory on 2026-08-08 when the base advanced to -`9a26ac8`, rather than having its SHA swapped. That distinction is the +**LAST EXERCISED AT `9a26ac8`, 2026-08-08** — re-run from an empty +directory rather than having its SHA swapped. **The advance to +`e67ad07` (2026-08-11) has NOT been re-exercised**, and by this +paragraph's own argument that is exactly when the exercise matters, so +it is recorded as an outstanding obligation rather than left to read as +though it had been done. The floor above and the check below are in +step at `e67ad07`; what is unverified is the *procedure* against that +base, not the SHA. That distinction is the whole point of this paragraph: advancing the base is exactly when the recovery commands are most likely to have rotted, and a swapped SHA reads identically to a verified one. `git clone` the canonical URL, add @@ -278,8 +283,10 @@ is listed at the commit that does it, not promised here. its first commit until #227 merged, because #227 was 72 `main` commits behind and touched the three files Stage 0's absorption rewrites. #227 merged (`b867f64`), #233's arc closed (#234, #235), this branch - rebased onto `e67ad07`, and the absorption ran. **15 commits above the - base; ready for its PR.** + rebased onto `e67ad07`, and the absorption ran. **Sixteen commits + above the base as of `30e2209`; ready for its PR.** *(Anchored to a + SHA deliberately: a bare running count goes stale on the next commit, + which is the staleness class this lane exists to retire.)* - **What landed (docs only, no `src/`):** the absorption pass enumerated in the framing's §5 — five stale lanes, the authority/recovery anchor, `COHERENCE.md`'s `v6..=v21` → `v6..=v23`, diff --git a/docs/agent-handoff.md b/docs/agent-handoff.md index 8e381cf..14b67e0 100644 --- a/docs/agent-handoff.md +++ b/docs/agent-handoff.md @@ -3195,7 +3195,7 @@ servers. ## 6. Named deferrals (the standing backlog, consolidated) -**The GUI arc — OPEN, framing approved 2026-08-10, Stage 0 in PR.** +**The GUI arc — OPEN, framing approved 2026-08-10, Stage 0 READY FOR PR (not yet opened).** `docs/gui-arc-framing.md` is the arc-level frame and is also Stage 0's own framing; Stages 1–10 each need their own before their branch. It opened from a daily-driver report: the TUI is daily-drivable, the GUI is