[PROPOSAL] PENDING-119 + PENDING-120: (e) is built, its wiring is not placed

119 — REVIEWED-101 condition 6 sends (e)'s consumer to ~/dotfiles/scripts/ on
cross-repo reasoning, while the same ruling's If-AUTHORIZED line says (e) needs no
cross-repo enumeration. The tension only became live because (e) was built as a
delegation to the gate that already enforced §1.1; a fresh sha-comparing script
would have made condition 6 straightforwardly right. Carries the finding that no
fleet suite validates live binding.

120 — the trigger's pathspec is corpus/ only, so engine/ and tests/ changes run no
suite. Demonstrated by the commit that built (e), which is also the first real
non-probe commit since the trigger landed: the hook ran and no declared check fired.

Both filed rather than fixed, on the steward's direction. PENDING-117 gains a
pointer-only AMENDMENT 2 so the thread is navigable from the ruled item.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A35wiD55yRHj5U1ECZAX4t
This commit is contained in:
David F Glidden
2026-08-08 16:44:41 +02:00
co-authored by Claude Opus 5
parent ac4745b599
commit 02c6875def
2 changed files with 104 additions and 1 deletions
+72
View File
@@ -1632,6 +1632,20 @@ This is harmless today only because voice ⟺ source: measured, **max distinct v
---
### AMENDMENT 2 — 2026-08-08, after REVIEWED-101 was placed and (e) was built
*A pointer only. Nothing above is altered: the ruling stands as placed, and this records where the thread continued so a reader arriving here is not left at a dead end.*
**(e)'s engine half is BUILT and standing** — studium-engine `eecc8bb`, `engine/ingest_gate.py --check-only`, suite 24 → 41 checks, fleet 221/221. It **delegates** to the gate that already enforced §1.1 rather than reimplementing it, which is what raised the placement question below.
**(e)'s WIRING is unplaced and is now PENDING-119.** Condition 6 sends the consumer to `~/dotfiles/scripts/` on cross-repo reasoning; this ruling's own If-AUTHORIZED line says (e) *"needs no cross-repo enumeration."* Filed rather than resolved, on the steward's direction.
**One finding here belongs to the record even if 119 is rejected:** **no fleet suite validates live binding** — all six gate invocations in `tests/test_ingest_gate.py` are synthetic `tmp` corpora, and `test_navigate.py:95` checks that a span *carries* `source_sha256`, not that it matches. The fleet's green was never evidence the corpus was bound. That is larger than this item described and is the gap (e) actually closes.
**A separate gap surfaced by building this: PENDING-120** — the `.precommit-triggers` pathspec is `corpus/` only, so `engine/` and `tests/` changes run no suite. Demonstrated by `eecc8bb` itself.
---
## PENDING-118 — The deferred-decision checker is structurally blind to every archived deferral
**Date:** 2026-08-08
@@ -1662,3 +1676,61 @@ This is harmless today only because voice ⟺ source: measured, **max distinct v
**Awaiting:** Steward authorization.
---
## PENDING-119 — REVIEWED-101 condition 6 placed (e)'s consumer in dotfiles, on reasoning the same ruling says (e) does not engage
**Date:** 2026-08-08
**Tag:** [PROPOSAL]
**Related:** REVIEWED-101 conditions 4 + 6 · PENDING-117 §D/§E · REVIEWED-100 (the repo-blind global hook) · studium-engine `eecc8bb` (the engine-side half, built and green).
**Summary.** (e)'s engine half is built, tested both directions, and standing; its **wiring** is deliberately unplaced, because condition 6's stated reasoning is about a cross-repo invariant and the same ruling says (e) is not one.
**The tension, both texts quoted rather than paraphrased.** Condition 6: *"Placement: ~/dotfiles/scripts/. A cross-repo invariant is owned by neither repo; putting it in either makes that repo the authority over a relationship it is only one half of."* The If-AUTHORIZED line, four lines later: *"The spec amendment gates (a), not (e): (e) reads the engine's own manifest and sidecars and needs no cross-repo enumeration."* Both were placed in one ruling. Read flat, condition 6 covers the whole item; read against the second sentence, its reasoning reaches (a) and (c) — which genuinely span two repos — and not (e), which does not.
**New evidence, unavailable when the ruling was written.** `engine/ingest_gate.py` **already enforces §1.1 on both surfaces (e) names** — manifest `sha256` at L128–131, sidecar `source_sha256` at L150–153. So (e) was built as a **delegation, not a reimplementation** (`eecc8bb`), and its consumer is now a single command rather than an algorithm. A dotfiles wrapper around one command is therefore either a no-op hop, or it plants engine knowledge (`engine/ingest_gate.py`, `--check-only`) in exactly the global layer REVIEWED-100 worked to keep repo-blind. Had (e) been written as a fresh sha-comparing script, condition 6 would have been straightforwardly right — the placement question only became live *because* the duplication was avoided.
**A second measured finding, filed here because it is why the delegation matters.** **No fleet suite validates live binding.** Censused all seven: only `tests/test_ingest_gate.py` invokes the gate, and all six invocations build a synthetic corpus under `tmp`; `tests/test_navigate.py:95` asserts a span *carries* `source_sha256`, which is **presence, not correctness**. The fleet's green has never been evidence that the corpus is bound — it is evidence that the gate works on fixtures. This is the gap (e) closes, and it is larger than PENDING-117 described.
**Options.**
- **(i) One line in the engine's `.precommit-triggers`:** `. | python3 engine/ingest_gate.py --check-only`. Zero new files; the global hook stays repo-blind; the repo declares its own check — the declared-data-plus-thin-consumer pattern condition 6 itself cites approvingly. Reads condition 6 as scoped to (a) and (c).
- **(ii) `~/dotfiles/scripts/check-source-binding.sh`,** invoked from `.precommit-triggers`. Honours condition 6's letter; pays for it in repo-blindness, and the script's body is one `exec`.
- **(iii) Defer (e)'s wiring until (a) is built,** then give both one shared consumer. ⚠ That consumer would have to name the surface list **before** the spec amendment defines it — hardcoding the enumeration in a consumer, which is precisely what condition 1 forbids.
**Recommendation: (i)**, on the ruling's own distinction rather than on convenience. The steward has instead directed that it be filed, which is why this exists rather than a commit.
**⚠ What this does not establish.** Nothing here argues (a) or (c) should leave `~/dotfiles/scripts/` — condition 6's reasoning holds for them exactly as written, and (a) is the cross-repo invariant it was written about. This asks only whether **(e)**, which the ruling itself sets apart, falls inside its scope. It also does not establish that (i) is safe to run unconditionally on every commit at scale: measured today at **0.218 s over 14 sources**, which is a burst-sized corpus, not a lifetime one.
**Files affected:** `~/_Dev/studium-engine/.precommit-triggers` (one line) **or** a new `~/dotfiles/scripts/check-source-binding.sh`. The built engine mode is unaffected either way.
**Awaiting:** Steward authorization.
---
## PENDING-120 — The fleet trigger covers `corpus/` but not the engine code the fleet exists to test
**Date:** 2026-08-08
**Tag:** [HARDENING]
**Related:** REVIEWED-100 / PENDING-116 · `~/_Dev/studium-engine/.precommit-triggers` · studium-engine `eecc8bb` (the demonstrating instance).
**Summary.** `.precommit-triggers` declares `corpus/ | scripts/run-fleet.sh`. A commit touching `engine/` or `tests/` runs **no suite**, so the fleet is not run on a large class of changes able to redden it.
**Demonstrated, not reasoned.** Commit `eecc8bb` changed `engine/ingest_gate.py` and `tests/test_ingest_gate.py` — the gate and its own test floor — and the hook printed only *"Running pre-commit checks…"*, with **no** *"Staged change touches […] — running declared check"* line. That is the **first real, non-probe commit since the trigger landed**, and it ran nothing. (It also answers this session's inherited literal question in the negative for this class: the gate has still never fired outside its own acceptance probes.)
**Rationale.** PENDING-116's whole argument was that *naming* a risk is not *mechanizing* a check on it. The mechanism then landed against the **instance** that had occurred — a sidecar re-split breaking a hardcoded node id, which lives under `corpus/` — rather than against its **class**: *a staged change that can turn the fleet red*. `engine/` is the code the fleet exists to test; `tests/` is the fleet itself. Both are at least as capable of reddening it as `corpus/` is, and neither is watched. ⚠ **Scope honesty:** REVIEWED-100 authorized the *mechanism* (option (b), repo-declared trigger); it did **not** rule the pathspec, which was my implementation choice. So this is arguably in-scope repair rather than an amendment — it is filed rather than fixed because the steward directed it be filed separately.
**Options.**
- **(a) Widen to the code the fleet tests:** `corpus/ engine/ tests/ scripts/run-fleet.sh | scripts/run-fleet.sh`. Cost: ~2 s on engine and test commits.
- **(b) Widen to everything** (`.`). Simplest to state, but it runs the fleet on documentation-only commits and so destroys the *"a docs-only commit ran nothing"* half of REVIEWED-100's acceptance — the half that proves the trigger discriminates.
- **(c) Leave it; rely on discipline.** Refuted by PENDING-116's own evidence, and now by `eecc8bb`.
**Recommendation: (a).** It restores the pathspec to the class the mechanism was authorized for, and it preserves both halves of the existing acceptance test.
**Check that it worked — both directions required.** A staged `engine/` change that reddens a suite must refuse the commit; a docs-only commit must still run nothing. Neither may be a synthetic probe if a real one is available — an induced-red in `engine/` is available cheaply and is the honest fixture.
**⚠ What this does not establish.** `--no-verify` still steps over it: tripwire, not boundary. And widening the pathspec does **not** make the suites better at seeing binding drift — PENDING-119 records that none of them check it at all, so a widened trigger would run seven green suites over a corpus whose bindings nothing verified.
**Files affected:** `~/_Dev/studium-engine/.precommit-triggers` (one line).
**Awaiting:** Steward authorization.
---