[HARDENING] Close PENDING-82 and -118; mark 119/120/123 BUILT
82 is discharged by events. Its 2026-07-28 substrate check said there was no mcpServers key; today the config carries mcpServers: governance, and the jurist used the tools in three consecutive rulings — opening graduation-spec directly and refusing to rule from my summary, which is the capability the item existed to create. Two residuals carried, not buried: the read enum reaches neither the runbook nor the R0 contract, and the installed surface has 8 keys and a search tool the description does not name. 118 is built, and building it REFUTED the option I had recommended. I wrote that the checker already parses the archive format. It does not — the marker is an HTML comment and there are zero in either register file; their deferrals are prose, 53 and 26. Widening alone would have scanned two more files, found nothing and reported clean: a silent net built to close a blind spot, which is the failure the item was filed to describe. So the widening ships with its limit in its own output — prose deferrals counted and reported un-machine-readable, never as absent, with counting explicitly not classifying. The census stays owed. 119/120/123 marked BUILT with their commits so the built-vs-ruled checker sees them; all three were already ruled, so this closes a reporting gap, not an authorization one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A35wiD55yRHj5U1ECZAX4t
This commit is contained in:
co-authored by
Claude Opus 5
parent
d78c14dd0a
commit
90dc0f7373
+40
-5
@@ -496,7 +496,19 @@ Merge that `mcpServers` key into `~/Library/Application Support/Claude/claude_de
|
||||
Delete the Cowork party entry and every reference to `COWORK.md`. Grounds, now two: a third executor costs a third doctrine copy of a document that is `CLAUDE.md` with the nouns changed; and Cowork could not have served as the jurist's filesystem eyes even in principle, since `coworkUserFilesPath` points at `~/Claude`, which does not exist, and remote Cowork — the incoming default — runs no local MCP at all.
|
||||
|
||||
**Files affected:** new `~/dotfiles/scripts/governance-mcp.py`; `~/dotfiles/scripts/wake-digest.py` (`item_spans()` fence-awareness + 3 controls). Awaiting steward hand: `claude_desktop_config.json`, Claude.app §Your Role and §Standing Context.
|
||||
**Awaiting:** Steward authorization to install the `mcpServers` key. The server itself is inert until then — nothing loads it.
|
||||
**Awaiting:** ~~Steward authorization to install~~ → **INSTALLED AND IN USE. CLOSED 2026-08-08.**
|
||||
|
||||
---
|
||||
|
||||
### AMENDMENT 1 — 2026-08-08, discharged by events; the item's substrate check is stale
|
||||
|
||||
**§A — INSTALLED.** The item's 2026-07-28 substrate check recorded *"`claude_desktop_config.json` has **no `mcpServers` key**"*. Verified today: top-level keys are **`mcpServers`, `coworkUserFilesPath`, `preferences`**, and `mcpServers` contains **`governance`**. The gate this item waited on has been passed.
|
||||
|
||||
**§B — And it is not merely installed, it is LOAD-BEARING.** Empirically, in a single day: the jurist used `governance_read`, `governance_item`, `governance_search` and `governance_state` across **three consecutive rulings**, opened `graduation-spec.yaml` L1–60 directly, and **refused to rule from the executor's summary** — *"ruling from the executor's summary of its own mandate is exactly the shape I should refuse."* That refusal is the capability this item existed to create, exercised. It also caught, from substrate the executor had quoted, an adverse ratified ruling the executor had missed (REVIEWED-53).
|
||||
|
||||
**§C — ⚠ Two residuals, carried not buried.** (1) **The `governance_read` enum does not reach everything a ruling may rest on** — `conversion-runbook.yaml` and the R0 contract are reachable by **no key**, and one ruling had a leg in executor testimony until the steward relayed the files by hand. The remedy is its own extension mechanism: **the server takes keys from a list, so extending the list is the fix.** Recorded in this item's earlier amendment; it survives this closure as a **named follow-on**, not a reason to hold the item open. (2) The installed surface differs from the description above — **8 keys, not "six enumerated documents"**, and a `governance_search` tool the five-tool list does not name. The description is stale; the substrate is authoritative.
|
||||
|
||||
**Closed:** the proposal was to build and install a read-only substrate interface for the jurist. It is built, installed, used, and has demonstrably changed rulings. What remains is a **bounded extension of an existing, working thing**, which is a different item.
|
||||
|
||||
### AMENDMENT — 2026-08-08, a concrete enum, from a ruling that hit the wall
|
||||
|
||||
@@ -1683,7 +1695,30 @@ This is harmless today only because voice ⟺ source: measured, **max distinct v
|
||||
|
||||
**Files affected:** `~/dotfiles/scripts/governance-drift-check.py`; a one-time census artifact (home to be decided with the ruling).
|
||||
|
||||
**Awaiting:** Steward authorization.
|
||||
**Awaiting:** ~~Steward authorization.~~ → **BUILT 2026-08-08, `see dotfiles HEAD`. ⚠ AND THE ITEM'S OWN OPTION (1) IS REFUTED BY BUILDING IT.**
|
||||
|
||||
---
|
||||
|
||||
### AMENDMENT 1 — 2026-08-08, built — and option (1) rested on a false premise about the format
|
||||
|
||||
**§A — ⚠ MY OPTION (1) WAS WRONG, and building it is what showed that.** I wrote: *"Widen the scan to `~/PENDING-archive.md`. Smallest change; **the checker already parses that exact format.**"* **It does not.** The structured marker is an HTML comment — `<!-- DEFERRED-DECISION: slug … -->` — and there are **ZERO** of those in `PENDING.md` **or** in `PENDING-archive.md`. Measured 2026-08-08. Their deferrals are **prose**: **53** occurrences of `defer*` in `PENDING.md`, **26** in the archive.
|
||||
|
||||
**⇒ Widening alone would have scanned two more files, found nothing, and reported clean** — *a silent net, built to close a blind spot.* That is precisely the failure class this item was filed to describe, and I had specified it as the remedy.
|
||||
|
||||
**§B — So the widening ships WITH its own limit stated in the output.** Structured blocks are now found anywhere in the register; prose deferrals are **counted and reported as un-machine-readable, never as absent**:
|
||||
|
||||
```
|
||||
✓ deferred decisions: 2 tracked, none due (2 checkable, 0 manual-only)
|
||||
⚠ plus 79 PROSE deferral mention(s) in the register (PENDING.md 53, PENDING-archive.md 26) — these carry no
|
||||
DEFERRED-DECISION block, so NO trigger is machine-checkable for any of them.
|
||||
Counted, not classified. Whether any condition has fired is unestablished.
|
||||
```
|
||||
|
||||
⚠ **Counting is not classifying.** 79 is an upper bound on candidates, not a count of deferrals — the regex matches any use of the word. **How many carry a condition, and how many of those have fired, is a READING task** and is reported as unestablished rather than skipped. That is the honest version of what option (2)'s census asked for, and the census itself remains **owed**.
|
||||
|
||||
**§C — Three controls added**, per the script's standard: the prose counter fires on a known-present phrase, stays silent on unrelated text, and the register files are provably inside the widened scan.
|
||||
|
||||
**§D — What this closes, and what it does not.** **Closes:** the checker no longer reads only `docs/**` — a structured deferral filed anywhere in the register is now seen, and the register's prose deferrals are **visible as a named unknown** instead of invisible. **Does not close:** the classification. The item's own ⚠ said *"size unmeasured, deliberately"*; it is now **bounded and still unclassified**, which is a better state and not the finished one.
|
||||
|
||||
---
|
||||
|
||||
@@ -1730,7 +1765,7 @@ This is harmless today only because voice ⟺ source: measured, **max distinct v
|
||||
|
||||
**§D — CONDITION ON (i): declare the cost threshold now, with its action.** `0.218 s over 14 sources` is honest about being burst-sized; (e) is unconditional and scales with sources × file size. **When it exceeds ~1 s, (e) re-scopes or hands off to (a)'s scheduled job.** Stated now because *a per-commit cost that grows unremarked converts a tripwire into a `--no-verify` habit* — this thread's own failure class arriving by the back door.
|
||||
|
||||
**Awaiting:** placement of the ruling. Build on placement: one line in `.precommit-triggers`, the §D threshold recorded beside it, tagged REVIEWED-N.
|
||||
**Awaiting:** ~~placement of the ruling~~ → **BUILT 2026-08-08, `2534dfb`** under REVIEWED-102. One line in `.precommit-triggers` (`. | python3 engine/ingest_gate.py --check-only`), unconditional, with the §D cost threshold recorded beside it. Acceptance: both rules fire in declared order, cheapest first.
|
||||
|
||||
---
|
||||
|
||||
@@ -1782,7 +1817,7 @@ So the pathspec was **not silence — it was a cost commitment inside the author
|
||||
|
||||
**§D — Interaction with PENDING-119, if both land.** `.precommit-triggers` would carry two lines with overlapping paths; an engine commit pays ~2 s (fleet) + 0.218 s (binding). **Declare the order in the file** so a red is attributable to one check without reading both.
|
||||
|
||||
**Awaiting:** placement of the ruling.
|
||||
**Awaiting:** ~~placement of the ruling~~ → **BUILT 2026-08-08, `2534dfb`** under REVIEWED-103. Pathspec widened to `corpus/ engine/ tests/ scripts/run-fleet.sh`. Acceptance decomposed per condition 2: `eecc8bb` replayed (both files match); red direction refuses — **fixture SYNTHETIC and labelled**, no real red `engine/` commit exists in 24 candidates; docs-only runs no suite.
|
||||
|
||||
---
|
||||
|
||||
@@ -2043,7 +2078,7 @@ Three cases, all discriminated: a rule ran → existing output already says so,
|
||||
|
||||
**§E — Related doctrine, filed as PENDING-124.** This item's *"needs a third state, not a pass or a fail"* and PENDING-122's `cannot-assess` are one finding reached twice in one day.
|
||||
|
||||
**Awaiting:** placement of the ruling. **Build order on placement: 123 → 119(i) → 120(a).**
|
||||
**Awaiting:** ~~placement of the ruling~~ → **BUILT 2026-08-08, `448ce37`** under REVIEWED-105, first in the ruled order. (b)+(e): malformed declarations refuse with file/line/fault/`--no-verify`; a triggers file declaring nothing reports itself unguarded; the per-rule line prints in exactly the ambiguous case. Matched-rule output byte-identical. All seven table rows non-silent.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user