governance: steward places REVIEWED-130; record the snapshot instruction for tomorrow

REVIEWED.md carries the steward's own placement of REVIEWED-130 (81 insertions,
additive; the single deletion is a trailing-newline adjustment on REVIEWED-129).
Committed, not authored — the executor does not write that file (Constitutional
Constraint #1). Verified content-faithful against the staged draft before
placement: 5,889 chars both, whitespace-normalised identical.

Also records the steward's in-session instruction about the pre-LFS snapshot,
verbatim, so it survives the session boundary: it is no longer needed in place and
moves tomorrow to the drive holding the decommissioned MemPalace material.

Written with the three conditions that are easy to lose and expensive to discover
later: move rather than migrate export (rewriting commits destroys the exact-copy
property that is the snapshot's only purpose); the move must carry .git/lfs/objects,
552 objects and 975 MB, or 399 files arrive as unreadable pointers; and verify by
reading back at the destination rather than by the copy succeeding — the rule
learned on MemPalace, whose decommissioned material is the destination.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NvZAKSf9aqratbqHbU9LK5
This commit is contained in:
David F Glidden
2026-08-26 19:16:18 +02:00
co-authored by Claude Opus 5
parent b28cc03737
commit 374285bb4e
2 changed files with 102 additions and 1 deletions
+21
View File
@@ -6110,3 +6110,24 @@ Neither number is a census result — both are haystacks. The specification has
⚠ **The read-only guarantee was extended, and doing so found a pre-existing hole.** `governance-mcp.py` proves read-only-ness by AST **over itself**; adding a delegate put code outside that proof. Extending it to delegates surfaced (a) a **false-positive class** — bare `.replace` flagged `str.replace()`, which is why the guarantee had never been extended past one file — and (b) that `wake-digest.py`, a delegate **since before today**, was never covered. Its only real mutation is `emit_brief()`, its SessionStart-hook role, unreachable from any tool. Now handled by **declared exemption per delegate**, so a new mutating function fails until someone names it and says why — the same shape as PENDING-165's allowlist, and for the same reason. ⚠ **The read-only guarantee was extended, and doing so found a pre-existing hole.** `governance-mcp.py` proves read-only-ness by AST **over itself**; adding a delegate put code outside that proof. Extending it to delegates surfaced (a) a **false-positive class** — bare `.replace` flagged `str.replace()`, which is why the guarantee had never been extended past one file — and (b) that `wake-digest.py`, a delegate **since before today**, was never covered. Its only real mutation is `emit_brief()`, its SessionStart-hook role, unreachable from any tool. Now handled by **declared exemption per delegate**, so a new mutating function fails until someone names it and says why — the same shape as PENDING-165's allowlist, and for the same reason.
**Awaiting:** nothing on (c)/(d). The 270-candidate classification pass is unscheduled and unclaimed. **Awaiting:** nothing on (c)/(d). The 270-candidate classification pass is unscheduled and unclaimed.
### PENDING-165 — STEWARD INSTRUCTION, 2026-08-26, deferred to 2026-08-27
**Recorded verbatim so it is not lost to the session boundary:**
> *"as for the snapshot, let's deal with that tomorrow and move it to the same drive i have the decommissioned mempalace stuff on"*
and, earlier in the same exchange:
> *"I no longer need the snapshot, the repo has been behaving normally and we've been working with it with no problems."*
**What this settles:** option **(c)** — removing `git-lfs` and with it the vector entirely — is no longer gated on preserving `~/_Dev/chamber-library.pre-lfs-export-20260605` in place. The snapshot moves to the external drive holding the decommissioned MemPalace material.
**What it does NOT settle, and what must be checked before the move:**
- ⚠ **Move, do not `migrate export`.** Rewriting commits destroys the exact-preservation property that is the snapshot's only reason to exist (jurist, 2026-08-26).
- ⚠ **The move must carry `.git/lfs/objects` — 552 objects, 975 MB.** A copy that takes the working tree and not the LFS store leaves 399 unreadable pointer files. **Verified 2026-08-26: all 399 tracked files resolve from local objects, 0 remote-only**, so a whole-directory copy is complete — and only a whole-directory copy is.
- ⚠ **Verify by reading back at the destination**, not by the copy returning success. The same rule that governs the transcript archive and that was learned on MemPalace — whose decommissioned material is, fittingly, the destination.
- ⚠ **`git-lfs` must still be installed at the moment of any future restore.** Removing it under (c) is safe only because reinstalling is a `brew install`; that fact belongs with the archive, not only here.
**Sequence, for tomorrow:** move + read-back verify → then (c) is free → then `Brewfile:40` and the PENDING-165 (b)/(d) guards become belt-and-braces rather than the only defence.
**Awaiting:** the steward, 2026-08-27. Nothing for the executor tonight.
+80
View File
@@ -2350,3 +2350,83 @@ figure on 2026-08-01 and repeated it for three weeks; anyone citing 55 is citing
directly, not implementing UNREAD.** directly, not implementing UNREAD.**
**If REJECTED:** Nothing is built and nothing is to be built. *"If anything gets built for this, the ruling has been reversed by construction."* No script, no field, no counter, no status line. PENDING-159 closes. **Tarbuckle reaches the steward and stops, and what the steward carries is his own.** **If REJECTED:** Nothing is built and nothing is to be built. *"If anything gets built for this, the ruling has been reversed by construction."* No script, no field, no counter, no status line. PENDING-159 closes. **Tarbuckle reaches the steward and stops, and what the steward carries is his own.**
## REVIEWED-130 — PENDING-163 — The pre-commit size guard's printed remedy
**Date:** 2026-08-26
**Decision:** AUTHORIZED — option (i), reworded per two jurist edits. Option (ii) REJECTED on the
merits. Option (iii) withdrawn as already built.
**Notes:**
1. RETROSPECTIVE IN PART, and recorded as such. The message change landed at 2408032 on the
steward's in-session 'go', before this block was drafted. This ruling records that authorization;
it does not precede it. The line-45 whitespace [FIX] (ecee76b) landed earlier under executor
authority and required no ruling.
2. WHAT WAS WITHDRAWN, and it is the reason the item reached the steward at all. The item's claim
that option (ii) 'widens what may be committed everywhere' is false by a category:
`git cat-file -s :"$file"` reads the staged blob, so an LFS-tracked file measures ~133 bytes and a
plain file still measures its full size and is still refused. (ii) admits exactly what someone
deliberately declared. Withdrawn by the executor as false (Amendment 2). The error made (i) look
safer and (ii) costlier than either was, and that mis-sizing is what constituted the 'policy
question'.
3. OPTION (ii) REJECTED ON THE MERITS, NOT DEFERRED ON THE ENDPOINT. Two grounds exist and they
have different lifespans. The contingent one — git.skemantix.com serves no LFS endpoint — would
support only a DEFERRAL, since a repo pointing elsewhere changes it. The merits ground does not:
LFS stores a full opaque blob per version and cannot delta, measured today at 6 MB versus 18 MB in
`.git` after eight commits of the same file. For append-only text LFS is the wrong storage model,
and the JSONL transcripts that surfaced this item are its worst case, not a marginal one. This was
already the steward's finding at chamber-library 0677e8a (2026-06-05), where LFS was retired and
seventeen commits of history rewritten to undo it. REJECTED rather than DEFERRED deliberately: a
deferral would invite re-litigation on the weaker of the two reasons.
4. OPTION (iii) WITHDRAWN, dead twice over. Its appeal to REVIEWED-100 inverted that ruling's
polarity — a `.precommit-triggers` declaration causes checks to RUN, and (iii) would have used the
same file to make a global check NOT run — and the parser rejects any line lacking `|` as
malformed, so an exemption line is not awkward but refused. It is also already built: 400c054 gives
chamber-library a repo-local hook exempting corpus text by path. Per-repo, in-repo, versioned, no
new parser.
5. THE CENSUS, required by this ruling before the ecee76b [FIX]'s permission change could be called
harmless. 87 commit-eligible files over 5 MB across 37 repos (positive control: the scan sees large
files); 10 of those carry whitespace in the name; 0 currently modified or staged. Traced rather
than assumed: chamber-library runs its own core.hooksPath, and the vault mirror commits with
`--no-verify` at obsidian_vault_sync.sh:64. Reachable surface is two quiescent corpus files. The
10 are themselves evidence the hole was load-bearing — they could only have entered through it.
The executor's claim that ecee76b 'narrows nothing, widens nothing' is withdrawn (Amendment 2): it
is true against the specification and false against practice, and it is the kind of sentence that
later reads as a licence.
6. THE CENSUS'S OWN FIRST RUN returned a clean zero having measured nothing — a zsh loop that does
not word-split on newlines, iterating once over the concatenated string, the same failure class as
the bug under measurement. Caught by an echoed error, not by design. The re-run carries the
positive control so that a zero cannot again mean 'did not look'. Third instance in this thread of
an instrument failing in the class it was measuring; routed to PENDING-139 and PENDING-160 as a
datum, not re-filed.
7. THE TWO MESSAGE EDITS, and why each was required. (a) The draft hardcoded `git.skemantix.com
serves no LFS endpoint` — a present-tense substrate claim, inside a script, in a hook global to 37
repos, unverifiable by the hook that prints it and checked by nothing. That is PENDING-144's open
class. Replaced with a dated historical reference to chamber-library 0677e8a, which does not go
stale. (b) The draft led its remedy with `git config --local core.hooksPath .githooks`, which does
not exempt large files — it stops the global hook running in that repo entirely, taking the secrets
check and the declared-checks machinery with it. Advertising that as the standard response to a
routine refusal reproduces REVIEWED-105's failure mode: someone runs the config line without
copying the hook and holds an unguarded repo that looks governed. Reordered to copy the hook
(400c054), add the exemption there, config line last.
8. JURIST ERROR, recorded rather than smoothed. Two. The claim that `wc -c` runs on staged
deletions was false — line 46 carries `[ -f "$file" ]`, and the inference reasoned about lines the
item had not quoted as though absence from a quotation were absence from the file. The whitespace
bug the executor then found at line 45 is the executor's finding, not a vindicated instinct. And
the recommendation of (ii) was placed ahead of a check whose answer voided it; the condition was
correctly identified, the ordering was wrong.
9. CARRIED FORWARD. The finding that outranks this ruling is filed separately as PENDING-164: the
decision at 0677e8a is absent from the entire authorization record, so no instrument available to
the jurist could have reached it. Also carried forward, unfiled at time of writing: git-lfs
re-installs shims into the global hooks directory, observed recurring twice on 2026-08-26.
**If AUTHORIZED:** Message change already at 2408032; controls run (whitespace 6 MB refused and
printing the new text, plain 6 MB refused, small file committed). No further executor action on
PENDING-163. Close PENDING-163. Tag nothing new with REVIEWED-130.