fb02605735e5071c77f6ac9e49558236f1d47bf3
13
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
12ca031217 |
[FIX] RE_ID mangles a parenthetical ruling header, and the register check raised a false replacement
The same parenthetical header shape that broke ruled_pendings in wake-digest.py on
2026-09-05, in a second instrument, found the next day. Taken as one act with that
widening, per the jurist.
RE_ID was ^((?:PENDING|REVIEWED|COMPLETED)\S*)\s*[—–-]\s*(.*)$. On
`## REVIEWED-131 (PENDING-172) — …` the greedy \S* backtracked until the hyphen INSIDE
`REVIEWED-131` served as the separator, yielding ident `REVIEWED`. No un-amended
`REVIEWED-131` original was then found, so the register check reported that
REVIEWED-131's amendment had replaced the record it amends. It had not — the record is
intact and the reader could not see it.
[FIX] against existing specification: the check's stated subject is detecting an
amendment that replaced its record, and reporting a replacement that did not occur
fails that specification. Taken now rather than queued because a false alarm standing
in the register is the disarmed-tripwire hazard PENDING-139 measured — red-on-absent
trains the reader to discount red.
ENUMERATED BEFORE LANDING, per REVIEWED-132 condition 3 — enumerate, do not count.
All 549 headers across REVIEWED.md, PENDING.md and PENDING-archive.md classified under
both patterns: exactly THREE change, all parenthetical rulings recovering their true
ident (REVIEWED-131, -132, -133). Nothing else in the record moves.
Controls are paired, and the mangled-ident case is stated as its own control because
"ident is wrong" and "header is unseen" fail identically downstream. 59 -> 65 controls,
all passing; the false finding is gone and no new finding replaced it.
PENDING-139 RE-MEASURED, not repaired, and it needs re-reading before it is ruled:
leg (A) — REPAIRED. RE_HEAD_LINE is ^#{2,3}, so a ###-level amendment heading is seen
and classifies id+marker, identically to ##. The item still reads as live on this leg.
leg (B) — STILL LIVE. RE_BUILT is r"\bBUILT\b" and fires on "NOT BUILT", "NOT YET
BUILT" and "the mechanism is NOT BUILT". Untouched here; it is not this fix's subject.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X3L79vgAnt1x2kxvf23Qt7
|
||
|
|
cb8cab58a8 |
[FIX] REVIEWED-132: widen the register-integrity control to the record
Option (a) on conditions 1-4. The check read only REVIEWED.md, only `##`, and only headers starting with the literal word AMENDMENT. It now reads all three registers at `##` and `###`, recognises ADDENDUM, and computes `originals` across registers because a parent may be archived while its amendment stays open. Condition 1's default is inverted: a header is an ORIGINAL only if it carries an identifier and no marker. Compound headers are excluded from originals, not admitted to them, so an ADDENDUM can no longer satisfy "an un-amended entry exists" on behalf of a record that was replaced. Condition 3 did its job on my own code. Enumerating rather than counting returned 89 against the item's 82; the surplus was six prose titles — "Citation amendment (#2)", "Dream amendment" — matched by an upper-cased containment test and struck off `originals`, which is the mirror of the bug being fixed and would have raised false "the record was replaced" findings. Markers are now uppercase standalone tokens, with controls in both directions. The enumeration then agrees with the item's method at 82; the remaining +1 against the filed table is this session's own later filing, reported rather than reconciled away. ⚠ The widening is the floor, not the fix: 48 of the blocks carry no item number and are reported NOT ESTABLISHED, never passed. The prospective-convention question belongs to PENDING-146 and is deliberately not decided here (cond. 5). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Wn9mxsFjHJkzYjuDdrtxwp |
||
|
|
46aa3d15a2 |
[FIX] REVIEWED-131: build PENDING-165 (d) as an allowlist, then (b) narrowly
(d) — governance-drift-check.py now DECLARES the contents of ~/dotfiles/git/hooks
(README.md, pre-commit) and reports anything unexpected or declared-but-missing.
Tracked-ness is never consulted, and that is the correction: the filed form tested
"neither tracked nor pre-commit", and
|
||
|
|
063eccfd80 |
[HARDENING] STATE-CLAIM + the resolution state, built together (REVIEWED-127)
Both halves of the schema, shipped in one change because the ruling said half a schema
invites a third patch and a third patch is how a vocabulary accretes instead of being
designed.
157 — resolution state. `resolved:` on any block; a resolved block is no longer due but
is NOT dropped: it prints as a closed ledger, because a discharge that vanishes from the
report is its own decay. The pointer must RESOLVE — a real path or a real git object —
so an undocumented discharge is impossible to express rather than merely discouraged. A
dangling pointer reports in the register-integrity lane, the same lane as an amendment
that replaced the record it amends; both are a record closing over its own history.
The 25th's hand-rename is MIGRATED back to DEFERRED-DECISION with resolved: set. That
block was the per-instance workaround 157 was filed against, and it is now the
migration's own test case.
158 — STATE-CLAIM. Reuses trigger_fired() verbatim and inverts only what firing MEANS:
for a deferral, fired = the decision is due; for a state-claim, fired = THE CLAIM IS
FALSE. Two new trigger kinds earned directly from today's instances: text-present (the
trial-09 hold, falsified by REVIEWED-124's existence) and file-changed-since ("the filed
rule not edited", false one hour after writing).
16 new controls, each with its discriminating half — fires on met, silent on unmet,
manual listed-never-fired, resolved excluded from due-ness, the SAME block unresolved
still due, a real pointer resolves, "yes, done" does not.
Proven on the LIVE blocks, not only fixtures: pointing the state-claim at an older
commit made it report FALSIFIED by name; replacing the resolution with "yes done" made
register-integrity report it; both restored and both returned to quiet.
⚠ One control failed before shipping and the failure was the useful part. The negative
control for file-changed-since pointed at FOOL-SEED-RULE.md, which this same session then
edited — so "unchanged since HEAD" broke, correctly. A control whose subject is "did this
file change" must not point at a file the session is changing. Re-pointed at a frozen
2026-08-02 trial artifact, with the reason recorded at the fixture. Caught because the
controls run on every invocation rather than in a separate suite.
First two real state-claims filed, deliberately one of each kind: ~/CLAUDE.md untouched
under PENDING-150, mechanically watched and [ESCALATE]-grade the moment it goes false;
and §9's channel unbuilt, marked `manual` because it has no filename yet and inventing a
proxy falsifier is the error the schema's own comment warns against.
⚠ The zero-state prints a WARNING, not a tick: "0 marked, NOT none-stale" with the ~57
unmarked candidates named as a grep. An instrument that reads nothing reports exactly
like one that finds nothing, and that is the failure this item exists to end.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J6hZXNYSxEfZseBGTni4sf
|
||
|
|
d04c875054 |
[FIX] The deferral checker silently skipped the governance register (REVIEWED-123)
Executing REVIEWED-123 conditions 2 and 3 surfaced a defect in the instrument that was supposed to carry them. PENDING.md had grown to 546,944 bytes, past the scanner's 400 KB guard, so EVERY structured DEFERRED-DECISION block in the governance register was skipped — silently — by the checker built to stop deferred conditions from being silently missed. The 30-day review point placed under condition 2 was inert on arrival. Worse than silent. The prose-deferral loop has no size guard, so PENDING.md's prose count (70) still appeared in the report, making the file look examined while its structured blocks were never read. Found only by placing a block and noticing the tracked count did not move. Both halves fixed: - The two named governance files are exempt from the guard. The guard exists to bound the unbounded **/*.md globs; it was never meant for the files the scan reaches outside docs/ specifically to include. - A size-skip is now REPORTED, not swallowed: "NOT SCANNED for structured blocks", named, with byte counts, and stated as "could not assess" rather than "nothing there" — REVIEWED-104's third outcome, applied to the instrument whose entire subject is conditions nobody is watching. Two legitimate skips now visible (Carruthers 1.6 MB, Yates 1.0 MB — scholarly texts, correctly out of scope). Three controls added, derived from the PROPERTY rather than the guard's own vocabulary: is the register actually scanned; is a real block in it parsed (the live instance, not a fixture); and does the guard still apply to non-governance files, so the exemption cannot quietly become "scan everything". A control asking "does the guard work" would have passed throughout. Result: 32/32 controls (was 29/29); deferred decisions 3 tracked (was 2), all checkable. The ladder-freeze-30day-review trigger is live at date 2026-09-16. Also under REVIEWED-123: N-now recorded (60 transcripts of 84, 24 remaining); freeze scope stated as GENERAL per condition 1 and ladder file verified untouched; owed-entries list ratified with each row naming its authorizing ruling per condition 3 — OWED-1 under REVIEWED-122 cond. 9, OWED-2 explicitly NONE, queued but not authorized and needing its own ruling before it joins the ladder. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Y6t6qx7cpaCu5xGdD36u4 |
||
|
|
90dc0f7373 |
[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 |
||
|
|
bfd0f45293 |
[HARDENING] drift-check gains built-vs-ruled (REVIEWED-108 family)
Earned 2026-08-08: PENDING-125, -126 and -127 were authorized verbally in the D-1 lane, built, pushed, and recorded BUILT in their own amendments while no REVIEWED entry named any of them. Nothing was crossed — D-1 is steward-direct and the authorizations were real — but the register did not show them, the commits could not carry the REVIEWED-N tag the commit format prescribes because no number existed, and the gap surfaced only because the steward asked. It was not reconstructible from memory; it had to be enumerated mechanically. Same family as the amendment-link and deferred-decision checks: the registers own instruments not reaching parts of the register. This one watches the seam between the work happening and the record showing why it was allowed to. Three-valued per REVIEWED-106, ruled hours earlier: it reads two files, either of which can be absent, so cannot-assess is reported distinctly and never as clean. The BUILT vocabulary is stated with the result — caps only, because lower-case prose "built" would flag every item that describes building. Six controls including a REAL known-bad rather than only fixtures: the register at git HEAD, before the steward placed 107-109, names 125/126/127; the working register names none. It discriminates on real artifacts. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A35wiD55yRHj5U1ECZAX4t |
||
|
|
33c11fff87 |
session 2026-08-07 evening: PENDING-112 + REVIEWED-95 (route harvested capabilities by firing moment)
Register censused and rebuilt from the archive: 177 claimed -> 154 real live proposals, legible, with exact archive:L### pointers. The 2026-08-01 compaction was lossless but illegible (55 scraped header rows; 95% of cells cut mid-word); completeness verified 124 = 124, so nothing had been dropped. Skills pruned 63 -> 12 after measuring that 53 had never been invoked across 64 sessions / ~5 months. The finding underneath: retrieval is set by a capability's HOME, not its importance -- MEMORY.md 83%, register 77% (named in a wake step), ladder 14%, 'THE GOVERNING FRAME' 12%, 'Read at Step 0' 9%, recall-bound skills 0%. PENDING-112 filed, jurist design-gated, steward concurred; REVIEWED-95 drafted. Landed: the /wrap-up 1.6 filing gate (prospective) and the /wake-up ladder sentence (a pre-registered trial intervention, landed alone). The 20-session falsifier is WIRED, not intended -- DEFERRED-DECISION ladder-ritual-trial, trigger: transcripts 84. Wiring it exposed two defects in the deferral checker: no way to express a session count except as a date proxy, and a scan that never looked at claude/governance/. Controls 16 -> 19. Stroke 2's 41-entry ladder append deliberately NOT done: REVIEWED-95 Q3 sequences it after the ladder trigger, which now exists. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NEWjLBP4quXbDPDL2byEzZ |
||
|
|
97ae59a0d3 |
[FIX] deferred decisions: check the trigger instead of remembering it
The 2026-05-16 jurist settlement deferred TEI-native authoring "until
Cluster A's MD-with-sidecar form is operational". Cluster A became
operational, the condition was met, and nobody looked — it surfaced months
later by accident, while reading an unrelated document for another purpose.
The steward's stated reason for settling it today was not the format question
at all: "I abhor deferring so many things and then forgetting them."
A deferral is a claim — "not yet". When its trigger fires the substrate
contradicts that claim, which is exactly what this instrument detects, so
check 8 belongs here rather than in a new register. A deferred decision now
declares a machine-checkable trigger in a comment block:
<!-- DEFERRED-DECISION: <slug>
since: YYYY-MM-DD
owner: steward | jurist | executor
trigger: glob <pat> | path-exists <p> | date <YYYY-MM-DD> | manual
discriminator: <where the deciding evidence is written down> -->
`manual` never auto-fires and is listed rather than checked — an honest way
to record a deferral whose condition cannot be mechanised, instead of
inventing a proxy. Proxies are the failure being fixed: the old trigger stood
in for "behavioural evidence on high-fidelity sources" and came true without
producing any, because neither named test case was ever manifested.
Scans */docs/**/*.md under ~/_Dev and ~/dotfiles; glob and path-exists
resolve against the containing repo's root. First and only entry today is
D-5 (tei-native), correctly reported as not due — no protocol spec exists yet.
Controls, five, per the standing epistemic standard. The load-bearing one is
the discriminating half: the evaluator must NOT fire on an unmet condition,
because a checker that fires on everything reports nothing. Red-witnessed
end-to-end by temporarily pointing D-5's trigger at a path that does exist:
reported COME DUE with slug, owner, deferral date, trigger and file; restored
after, and the spec's working tree verified clean.
Also fixed in passing: this file's own report block was briefly duplicated
and misplaced by a `str.replace` without a count, which substituted both
`sys.exit(0)` occurrences including the early-exit branch. Caught by reading
the output — the deferred-decisions line printed twice.
Wake-up §2.c updated to describe all three of the script's reports, and to
require that a COME DUE item be surfaced in the briefing under "What's
unresolved". That is a change to the wake protocol, not only to a
description: a mechanism nobody reads is not a mechanism.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NEWjLBP4quXbDPDL2byEzZ
|
||
|
|
bcc02ada3d |
[FIX] register integrity: an amendment must never replace the record it amends
REVIEWED-87's original entry (PENDING-99, the fidelity_equivalence@3 design-gate ruling of 2026-08-05) was replaced this afternoon by the PENDING-111 amendment block placed at the same heading. The amendment's own "**Amends:** REVIEWED-87" line then pointed at a record no longer in the file, and the register could no longer answer what was ruled under 87 — the register's whole job. Recoverable, and recovered: the entry was intact in git HEAD and the underlying jurist ruling is separately filed at studium-engine/docs/quoted-tier-acceptance-JURIST-RULING-2026-08-05.md. But the register entry uniquely held Q2's reframing (the route to PENDING-100), Q3 REJECTED and its strengthened basis, Q5 CONCUR D-1, and the finding that "the decisive sentence was one the executor had read and not surfaced, which a verbatim-containment check passes every time." CAUSE, and it is the executor's. The handoff draft was headed "## REVIEWED-87 — AMENDMENT 2026-08-07" and described as "the block to place", with no instruction that it join rather than replace. That reads as a replacement heading, and the steward's reading of it was reasonable. The copy-paste-clean discipline exists so a placement cannot be ambiguous, and this draft was ambiguous. NOTHING DETECTED IT. It surfaced because a diff was read by hand and the tell was a deletion count on what should have been a pure append. This is `removing-a-claim-is-not-removing-the-reliance` at the governance layer: the amendment's dependency on the original survived the original's removal and became invisible. Check 7 added to governance-drift-check.py, which already runs at every wake: every `## REVIEWED-N — AMENDMENT` requires an un-amended `## REVIEWED-N` entry, and every `**Amends:** REVIEWED-N` must resolve. Reported separately from the CLAUDE.md findings so that report's own claim stays true. Controls per the standing epistemic standard, and the third is the lesson of the day — a check that has never fired on a known-bad input is unestablished, so the instrument is run against a synthetic reproduction of the actual failure. Red-witnessed on a copy of the live file with the deletion replayed: fires both findings. 11/11 controls pass. Detection only. REVIEWED.md is [ESCALATE], the steward's hand (Constitutional Constraint #1); the restoration above was placed by the steward, not by the executor. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NEWjLBP4quXbDPDL2byEzZ |
||
|
|
8abfe8835a | session 2026-07-28: governance block closed — CLAUDE.md drift 9→0 (REVIEWED-76/77/79/80), PENDING.md split 1848→430 + archive, wake-digest SessionStart hook, doctrine ids live, PENDING-79/80/81 | ||
|
|
e8cd376741 |
fix(drift-check): handle SIGPIPE so | head does not traceback
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xefg5EXwcpd9RMAr63dWrD |
||
|
|
e8b6ce06a3 |
session 2026-07-27 evening: PENDING-76/77/78 placed; governance drift-check built + wired into /wake-up
PENDING-76 remanded by jurist — required count returned 0 of 11 (the package's own IV.2 refinement proved its target category empty); executor recommends withdrawal. PENDING-77 (5 structural defects) and PENDING-78 (.app preferences) released by the ruling from needing it. Drift check reports contradicted state claims at every wake and corrects nothing — detection needs no authorization, correction does. MEMORY.md compacted 20.5KB -> 17.1KB (budget hook); prior Active Session demoted to MEMORY-reference.md. CLAUDE.md and REVIEWED.md untouched. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Xefg5EXwcpd9RMAr63dWrD |