3cddc8cf29ba3728a9f536cfbd9cbe1fb8086dca
35
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
5a350c7059 |
[FIX] The wake digest read an anchor case its producer was never told to emit
The digest read `PULLING THREAD` and `LITERAL QUESTION` with a case-sensitive `str.find`. /wrap-up names these fields in prose — "The pulling thread", "**Pulling thread:**" — and has never mandated a case. The reader was demanding a shape its own producer had no instruction to write, so the wrap wrote correctly and the digest reported DEGRADED. Censused by running the real function over all 195 wrap files rather than by grep: 102 threads and 103 questions unreadable, of which 86 and 84 were present in the body in the wrong case. The remaining 16 and 19 are wraps that never wrote the field. After the fix: 16 and 19. Predicted and achieved agree. Second defect, distinct and found only because the first was traced to its class: the label terminator was "first colon within 40 characters", a proxy for "same line". When an aside pushed the colon past the window the function returned THE LABEL, and with the paragraph cut assuming label and content share a paragraph, a question written below its heading was invisible. The 2026-08-22 wrap hit both defects at once. The terminator is now the first colon on the anchor's own line, and a label that ends its line takes the paragraph below. Case-insensitivity alone would have let a narrative "…as the pulling thread showed…" outrank the field it describes, so a match in label position now wins over an earlier mention. Four checks added (71 -> 75), including that negative control and a positive control proving it cannot pass vacuously. Not changed: file selection (ledgers were already excluded correctly, line 124), frontmatter stripping, and the verbatim-never-summarised contract. The ladder's "61 checks" is stale — it was 71 before this commit — and stays stale: the ladder is frozen under REVIEWED-123 and this is not an exemption. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JQKeKY9T9d95KpvHwwok8T |
||
|
|
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 |
||
|
|
fb7bd6849f |
[FIX] REVIEWED-122 conditions 6, 7, 11 — and a fifth defect class found by the ruling's own placement (REVIEWED-122)
Executes the three legs REVIEWED-122 severed from the gated mechanism. COND. 6 (second requirement, which the earlier docstring commit did NOT discharge): checked what else relies on the discarded reading. Two sites. (1) The selftest asserts `ruled_pendings ignores a ruling that names no PENDING` using REVIEWED-82 as its fixture — a real AUTHORIZED ruling on PENDING-82, presented as an example of correct ignoring. The assertion is mechanically true and stays true; what is wrong is the fixture and what the name implies. Annotated, NOT repaired: the repair sits inside the gated mechanism. (2) governance-mcp.py asserts `governance_state item count == sec_pending()` — a count-based agreement check, the exact shape finding 9 names, which passes regardless of whether the classification is right. Reported, not changed. COND. 7: PENDING-121 restored to the open list by hand as PENDING-143, a disclosed CARRIER. Direct restoration was impossible without one of three acts the executor may not take — editing REVIEWED.md (Constraint #1, and cond. 5), inducing a Class-A header (trading hidden for unclosable), or changing the gated parser. The carrier is labelled as a proxy, not as the item. -124 and -128 deliberately not carried: cond. 7 preserves their UNDETERMINED status. COND. 11: filed separately as PENDING-144 rather than folded — script-resident substrate claims are checked by nothing, including the drift-check. One confirmed occupant; population explicitly unmeasured. AND A FIFTH DEFECT CLASS, found by watching this ruling land. A ruling claims a NUMBER, not a record. REVIEWED-122 named PENDING-142 and hid all four of its records at once — fine here, since its conditions do dispose of them, but the mechanism never checked that. Where it is not fine: REVIEWED-115 (2026-08-10) claimed `131`, so all five PENDING-131 records are hidden — including ADDENDUM 4, dated 2026-08-13 and therefore SUPPRESSED ON ARRIVAL, three days after the ruling that silenced it, while awaiting steward direction. PENDING-131 (c) is the unbuilt fence: the pulling thread of every session since 08-10, made a CONDITION by REVIEWED-121, and it has never once appeared in the list of items awaiting authorization. The work was not lost only because MEMORY.md and the session records were carrying it by hand. The same item fails the other way too: REVIEWED-116's header `PENDING-131/132/133/134` parses to one token matching no id, so a four-item design-gate ruling suppresses nothing. Filed as PENDING-145 — a new item, not a PENDING-142 addendum, because an addendum would have been hidden on arrival, which is the defect. None of PENDING-142's options (a)/(b)/(d) covers this: all three still resolve id -> ruled. Flagged as something the pre-registered answer key must encode BEFORE implementation, or the key will certify this behaviour as correct. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Y6t6qx7cpaCu5xGdD36u4 |
||
|
|
aa745bcfb0 |
[FIX] ruled_pendings' docstring asserted the opposite of the record
Jurist-ruled 2026-08-17 to correct independently of the mechanism, since it is a false claim whichever remedy wins. The docstring described REVIEWED-78/-81/-82 as "like-numbered rulings … concerning other matters" that had "falsely hidden" three items. Both halves are false. They are the AUTHORIZED rulings on PENDING-78/-81/-82 — same date, titles verbatim identical, and REVIEWED-81 names "PENDING-81" twice in its own body. They are like-numbered on purpose: REVIEWED-78's Notes say it was filed separately "for a mechanical reason: the closure rule in wake-digest.py matches a PENDING item to REVIEWED-<same number>." So the number→subject fix broke the three entries deliberately authored to satisfy the rule it replaced, then recorded their compliance as coincidence. Surfacing them was a regression; they have read open since 2026-07-28. The change proof could not see it because it measured a count (18→19) while the claim was each item's disposition — and the counts stay equal either way: removing 3 false-opens and restoring 3 false-closeds both leave 29. Superseded wording retained in the note rather than overwritten. Also filed as PENDING-142 ADDENDUM 3: the jurist ruling with its condition that (b)'s closing-verb enumeration must default to NOT CLOSED on unrecognized verbs; and the verified finding that governance-drift-check.py's subject is exactly one file (~/CLAUDE.md), so the scripts implementing governance checks make substrate claims nothing checks — one confirmed occupant, population unmeasured. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Y6t6qx7cpaCu5xGdD36u4 |
||
|
|
c2df868104 |
[FIX] Repair 39 files' frontmatter — including 3 I damaged an hour earlier
The 2026-06-06 normalization sweep ( |
||
|
|
b6e1b5e470 |
[FIX] The unwrapped-session detector compared two different clocks
The wake digest's `PREVIOUS SESSION DID NOT WRAP` alarm fired falsely at three consecutive wakes and was overridden by hand at two of them. It was scoped as a two-valued-detector problem. Diagnosing the class first found four defects, and the scoped one was not the cause: 1. TIME BASE (the cause). Transcript timestamps are UTC (`...Z`); the code dropped the suffix and called `time.mktime`, which reads a struct_time as LOCAL, then compared the result against `os.path.getmtime`, a true epoch. Measured: +7201 s skew against a 900 s tolerance. Because the skew exceeds the tolerance, a wrap written at the end of a session could NEVER land inside the window — the alarm was systematic, not intermittent. 2. SELECTION. "Newest transcript quiet for >60 s" excluded the previous session at exactly the moment it mattered: on 2026-08-17 it had ended 12 s before the wake, was skipped, and the session from four days earlier was reported instead. The defect is time-dependent and disappears ~60 s later, which is why re-running the digest afterwards showed nothing wrong. 3. EVIDENCE. Wrap records were dated by mtime, which any later edit moves — the 08-14 record read 08-17 because a CODA was appended to it. Now dated by git add-time, which cannot move once committed; mtime is a labelled fallback. 4. ARITY. `verdict is None` (could not assess) was folded into silence with "wrapped fine". Now four outcomes, per REVIEWED-104: wrapped · unwrapped · unassessable-subject (environment) · unassessable-check (defect). Acceptance is old-vs-new on the real case, not a unit pass. At the reconstructed wake instant the old code selects the wrong transcript AND returns a false alarm on the right one; the new code selects correctly and returns `wrapped`. Both defects independently produced the alarm, so fixing only the arity — the scoped task — would have shipped a fix that left it firing. The selftest gains a control derived from the property rather than from the check: a transcript's last inner timestamp and its file mtime are two readings of one moment, so their MEDIAN skew detects a systematic clock mismatch (1 s now, ~7200 s before). Max is printed too, because one transcript legitimately skews 31 h — the same mutable-mtime problem, on the transcript side. The old real-substrate gate demanded both verdicts occur across live sessions and PASSED while the detector was broken: it established that outcomes were spread, never that any was correct. Demoted to a printed note with its limit stated beside it. Filed as PENDING-142 ADDENDUM 1. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Y6t6qx7cpaCu5xGdD36u4 |
||
|
|
92d5ad2547 |
session 2026-08-13: REVIEWED-119/120 placed; MCP key descriptions refreshed
⚠ THIS COMMIT'S CONTENTS ARE MIXED, BY EXECUTOR ERROR, AND THE MESSAGE NOW SAYS SO RATHER THAN DESCRIBING ONLY ONE PART. The original message named only the governance-mcp.py change; `git add -A` had swept four other files. Amended before push, so no shared history is rewritten. What is actually here: 1. REVIEWED-119 and REVIEWED-120 (REVIEWED.md, +38) — STEWARD acts, placed during this session. 119 authorizes PENDING-135 option (c), instance 8 reclassified as a negative-candidate with the sub-type name held open, and corrects the item's own claim that option (d) was blocked cross-repo (the constraint is studium/v2-gold@1 §14.2, engine-side and D-1, not the chamber-locked studium/meta@1). 120 authorizes PENDING-136 option (c), retiring bare `distinct_spans`. 2. PENDING-135, PENDING-136 and the PENDING-131 Addendum 4 defect-count fix (PENDING.md, +212) — executor filings, and the ones that legitimately belong to a session wrap. 3. The session ledger (claude/memory/session-ledger-2026-08-13.md) — likewise. 4. governance-mcp.py (+24) — the [FIX] the original message described: two V0-lane key descriptions had gone stale the same day the dispositions landed. PENDING-134's H1 holds the doctrine ruling until those keys are actually SERVED (the running client keeps the old eight-key map until restart, which is steward action and still pending). The descriptions are what the jurist reads to decide which key to OPEN, so a stale index served at first contact would mislead on first contact — the class this whole arc is about. Selftest 54 checks, 0 failures. 5. Brewfile (+1, `mas "NordVPN"`) — NOT this session's work. It belongs to sysupdate's sweep and was swept in by the same error. Left in place rather than surgically removed: extracting it would rewrite more than it repairs, and the line is already accurate. Recorded so the next reader is not misled about which process authored it. The wrap protocol's §6.5 requires a scoped add for exactly this reason — the steward's in-progress changes belong to the steward's sweep, and a governance act placed by the steward must not be recorded under an executor's message. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G38S6gU6G7akko9syvB7nu |
||
|
|
4c3758e559 |
[PROPOSAL] PENDING-134 (whose-proposition as doctrine); 132 split+re-grounded; 133 rescoped; MCP opens the V0-lane texts
Jurist ruling accepted in full on all six questions. Q1: the variable is right, the derivation is not. §6.2 is PRE-REGISTERED, and a test that changes stratum-B membership, derived after reading the spans it reclassifies and entering by interpretation, voids that guarantee whether or not the test is right. Filed as PENDING-134 — new doctrine, dated, with §7.4(ii) as SUPPORTING ARGUMENT rather than derivation and §6.2's double omission recorded as the counter-argument heard and overruled. The decisive form of that objection is the jurist's: §6.2 admits F5 as 'qualified span (F5)', a construction that would have admitted 'reported-speech span (F4)' and was in use one item away. Q3: ran the fused-claim test on instance 8's fragments. It goes against retention — fragment 2 opens on the tail of the carpenter's speech with NO attributing clause before reaching Mauss's conclusion. The B4 shape. PENDING-132 amended: the retention is split out, and the retraction re-grounded on two convergent bases so it is authorizable regardless of how 134 resolves. 133: rescoped from two F4-carrying spans to every fr grounded span, because the bound assumed P7's tagging was complete and the item's own diagnosis says it had no claim-side step at all. And the access gap the ruling opened with: governance_read gains v2-harness-design, v2-stratum-tags, mauss-fixture-spans, mauss-fixture-citations — PENDING-86's fourth instance, same shape and same remedy as chamber-spec. The jurist can now verify Part I rather than take it as testimony. Eight controls including that the served text actually carries §6.2's pre-registration clause, §5's F4 row and the L926 citation strings. Self-test 54 checks, 0 failures. |
||
|
|
32b0c9dfc6 |
[FIX] The link canary was blind to code spans, to wikilinks, and to its own class
The steward's 2026-08-09 to-do read "the gap is neither knowledge nor home but
the absence of an EXECUTABLE." The premise was false: classify_pointers has
existed since
|
||
|
|
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 |
||
|
|
1cf79b0f86 |
[PROPOSAL] PENDING-124 gate passed; five conditions discharged, and the gate found a tenth instance
Q1 is applied, not extended: Constraint 4 has two clauses and my contrary reading engaged only the second. Limits, not failures — and "I could not look" is a limit. I had overstated my own uncertainty on the question I withdrew a recommendation over. The condition that cost most: my quote-verification pass reported verified on a reconstruction of REVIEWED-104 — contractions, re-punctuation, two blocks spliced, and the closing sentence dropped. A two-valued verifier inside a package arguing verifiers must be three-valued. Rebuilt at ~/dotfiles/scripts/verify-quotes.py. The first rebuild had three tiers and cried wolf on every correctly-copied quote, since a record stored with hard wraps is byte-different from the same text quoted as one line; splitting re-wrapped from normalized is the same two-strengths lesson the fleet learned. Both directions proven: corrected package exit 0, original reconstruction not-found exit 1. The dropped sentence answered my own Q2. It was in the record the package quoted. Both citation errors in that package had one cause, which the script cannot diagnose: I quoted the ADVISORY message and attributed it to the PLACED record. Different documents; placement adds and cuts, so quoting the advisory loses exactly what placement contributed. My "five instances, same shape" was wrong — two are the shape, three belong to the attested-absence family whose parent is already ratified (REVIEWED-47, 2026-07-05). I searched for a doctrinal parent among R0 and Constraint 4 and missed the ratified sibling closest in content. The ladder entry now joins that lineage. Filed as a watch-item, with an operative memory note: third package running where the grounding pass was incomplete and every substantive omission cut against my own argument. It optimises for finding my errors, not my support. 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 |
||
|
|
4785d02b7d |
scripts: track drain-hook-queue.mjs (written 2026-08-05, never committed)
The hook-queue drainer built during the BMF investigation. Its never-delete-on-failure rule and 10-failure halt are what surfaced the entity-pipeline finding; it was left untracked in the working tree. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AB3Kryoy6b1pm2Nz1DYdLh |
||
|
|
673823961c |
[HARDENING] governance-mcp: keyword search — the jurist can discover an item whose id it does not know (PENDING-86 d)
Steward-authorized 2026-08-05, completing the (a)+(d) pair the jurist asked for.
The failure this closes is NOT "cannot read item X" — (a) fixed that. It is
"cannot DISCOVER item X whose id it does not already know": the 2026-07-29 case
where a ruling demanded an outcome REVIEWED-74 had settled four days earlier, in
a file the jurist could read but had no reason to open. Keyed retrieval cannot
serve that; only search can.
`governance_search(query, limit)` over PENDING / PENDING-archive / REVIEWED.
Result unit is the ITEM, boundaries from wd.item_spans — no second definition of
"an item" (the 2026-07-28 bug that hid twenty). Results name ids to hand to
governance_item, so the two tools compose.
Three deliberate properties:
- Terms are ANDed, and that is DISCLOSED on every result. A silently
conjunctive matcher is exactly how recall dies as a question lengthens —
found in the engine yesterday (PENDING-97, "what does levi mean by the gray
zone" -> 0 over ten real matches). The same shape is not being rebuilt here
unannounced.
- A miss is a legible empty: it states the corpus, the item count scanned, the
terms, and the match mode, and says outright that a longer query narrows
fast. Silence discloses its own blindness (PENDING-96's discipline, applied
to a new instrument on the day it was ruled).
- Ranked by exact-phrase then raw term-count, labelled as a term COUNT and not
a relevance score — it is a field this code actually computes.
Plus a query-INDEPENDENT structural pass: an item header hidden by leading
whitespace is invisible to item_spans, so it can never appear in results and its
absence reads as a genuine miss. Such headers are now reported beside the
results. An earlier draft flagged any uncovered matching line and drowned the
signal in each file's preamble — which is how a warning stops being read.
That pass earned itself immediately: REVIEWED-11, REVIEWED-12 and REVIEWED-74
were all indented and therefore unreachable by governance_item. REVIEWED-74 is
precisely the ruling the jurist could not find, so its failure was
over-determined — it did not know the id, AND the id would not have worked.
Steward unindented all three (REVIEWED.md is his file, not the executor's, per
Constitutional Constraint 1); items visible 78 -> 81, hidden headers now zero.
Selftest 35 -> 44 controls, 0 fail, including a negative control that goes red
if a header is ever hidden again. Live stdio round-trip confirms six tools and a
correct search result.
⚠ Requires a Claude.app restart to expose the new tool.
Refs PENDING-86 (d), PENDING-82, PENDING-96, PENDING-97.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AB3Kryoy6b1pm2Nz1DYdLh
|
||
|
|
5cd5faf66e |
[HARDENING] governance-mcp: the jurist can now read the constitution it design-gates (PENDING-86 a)
Steward-authorized 2026-08-05, on the jurist's own request while unable to close
PENDING-99's Q2 — a question that turns on the chamber constitution's vocabulary
(§II.3's "inline anchor marker", §V's marker exclusion), which governance_read
did not expose. Third recorded instance on PENDING-86: the constitution, the
skill files, contamination-problem.md.
Adds two keys to the existing enum: `chamber-spec`, `graduation-spec`. No new
tool, no path argument, no traversal surface — the domain stays enumerable and
every refusal control still passes.
⚠ THE NON-OBVIOUS PART. Reachability of the KEY is not reachability of the
CLAUSE. This file's operative sections begin around line 354; the ~330 lines
above them are SUPERSEDED version headers kept as the amendment trail. A jurist
reading with the default limit=400 would land squarely in obsoleted text and
could rule on superseded clauses — the new access CAUSING the misruling it
exists to prevent. So the trap is disclosed on the key's own description, at the
point of use, and two controls pin it:
- the §V inline-anchor clause and the §II.3 marker constraint are both
reachable in ONE paged call (offset=350, limit=2000) — the actual Q2 text
- NEGATIVE CONTROL: a first-page read does land in the "(obsoleted)" region,
proving the trap is real rather than hypothetical
Selftest 29 → 35 controls, 0 fail. Live stdio round-trip confirms the §V clause
arrives verbatim through governance_read.
⚠ Requires a Claude.app restart: the running server process carries the old
code and will not show the new keys until respawned.
Option (d) — keyword search across PENDING/PENDING-archive/REVIEWED — is NOT in
this change and remains open on PENDING-86. It is a new tool surface, not two
enum entries, and the jurist asked for (a)+(d) together.
Refs PENDING-86, PENDING-99 Q2, PENDING-82.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AB3Kryoy6b1pm2Nz1DYdLh
|
||
|
|
9c2a7c985c |
session 2026-08-04: PENDING-92/93/94 + the replay-never-resumed finding + l1-replay-sampler
Filed PENDING-92 [HARDENING] idle ladder (cool/deep unreachable, spec §9A.1 divergence), PENDING-93 [PROPOSAL] event_seqs normalisation, PENDING-94 [ESCALATE] the resume floor — minCursor pinned at 0 by two non-participating modules, so 13/13 restarts rebuilt from seq 0 and the catch-up branch has never executed. Recall never worked either (retrieval_count = 0 across the whole April-June graph); same fact from the other end. Adds scripts/l1-replay-sampler.py (external read-only sampler, four positive controls, refuses to run blind). Note to Seb pushed separately as CapableMind-AI@ad285df. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WuMjg3ipEVa3n8CoSzoyvc |
||
|
|
0a48e6934d |
[FIX] L1 pin root-caused and cleared; S-series closed; instrument census
mindfabric-00 had been event-loop-pinned for 6+ days (100% CPU, /health silent).
Profile + CDP inspector named two hot paths, both from runTemporalPipeline:
checkForCycle -> getCausalEdgesFromSqlite 99.8% of samples
tryExtendChains -> getChainsContainingSeq now dominant (json_each scan)
Cause of the first: ANALYZE had never been run, so SQLite preferred a boolean
index (idx_caused_tombstoned, matching ~all 836k edges) over idx_caused_from.
ANALYZE across 15 module DBs flipped the plan; 6.4x on a microbenchmark and
99.8% -> 6.0% in the live profile. /health went from silent to 200 in 0.13s.
B1.1's fan-out cap is IMPLEMENTED AND WORKING (today: max in-degree exactly 20,
zero violations; pre-23-June: max 629, avg 67.6). The defect is data, not code —
836k edges / 813k chains minted under ungoverned fan-out before the fix landed.
Repair run: derived stores wiped, logchain preserved, replay in flight.
S-series closed (jurist had already ruled all of Q1-Q5 on 2026-05-18):
S6/S7/S9 implemented (Symmetria §3 flags, `suspend` outcome, wrap-up §8 tenses)
S2 rebuilt as [FIX] — wake-digest unwrapped-session detector, discrimination-
gated on real sessions (11 wrapped / 2 unwrapped)
S4/S5 withdrawn with MemPalace (steward ruling)
Dormant legacy dispositioned: PENDING-4/5/11/12, CD-03, ICP-19 duplicate.
Open authorization items 22 -> 10.
Census 01: which instruments have no real negative instance. Finding — the
governance drift-check has 3 of 5 families inert against the current CLAUDE.md,
and 71 of 75 verification-ladder entries are cited nowhere outside the ladder.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WuMjg3ipEVa3n8CoSzoyvc
|
||
|
|
4dc38e69b9 |
[FIX] wake-digest: resolve rulings by subject, not by number
sec_pending() suppressed any PENDING-N whose number appeared as a REVIEWED-N, never checking the ruling was about that item. The two sequences have drifted: REVIEWED-84 rules on PENDING-87. So PENDING-84 was invisible at wake on the very morning the steward's pulling thread pointed at it, and closing it later produced no visible count change because it had never been counted. Found 2026-08-01 at wake, surfaced not fixed; register row 179. Resolution now reads the PENDING each ruling names in its header. Rulings that name none (REVIEWED-78, -81, -82) suppress nothing. Extracted as ruled_pendings() so it is testable at all -- the logic was buried in a file-reading routine with no way to exercise it. Five self-tests added, including the 2026-08-01 bug as a regression control and an empty-input positive control. Bounded-change proof against the live files: 18 -> 19 visible. Three items surfaced that were falsely hidden (PENDING-78, -81, -82); two stopped being shown that are genuinely ruled (PENDING-87 by REVIEWED-84, PENDING-88 by REVIEWED-85 -- no REVIEWED-87 or -88 exists, so number-matching had never suppressed them). That proof also caught an overclaim in this fix's own docstring, which asserted the correction could only ever surface more items and never fewer. It corrects in both directions. Comment repaired to say what the code does; the false version would have been a comment promising behaviour the code does not deliver, in a file whose purpose is to stop governance hiding from the steward. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WuMjg3ipEVa3n8CoSzoyvc |
||
|
|
19bddd5ecb |
[FIX] A home for steward-facing maps; memory pointers made portable and self-diagnosing
Two loose ends closed before the Harrison re-gate, both surfaced by the steward. Memory pointers. Six links in MEMORY.md / MEMORY-reference.md pointed at files that all existed, via hand-counted relative depths that resolved from neither of the memory dir's two addresses (it is ~/dotfiles/claude/memory, symlinked from ~/.claude/projects/…). The wake canary detected this correctly FOUR times over two days and the banked remedy was to change the canary's path resolution — i.e. to silence a true positive. The defect was never the pointers: the alarm emitted one undifferentiated word, MISSING, so every firing had to be re-diagnosed by hand and the cheapest re-diagnosis is always "known bug". wake-digest.py now reports four outcomes (ok / mis-authored / dead / non-portable), hands back the exact replacement, and carries a regression control replaying this bug's shape. Pointers are home-anchored (~/…), not absolute — steward's correction; absolute hardcodes this machine into the repo whose purpose is surviving a machine change. Maps. With the noise gone, one genuine dead pointer surfaced: arc-current-state-2026-05-07.md, a live ARC dashboard the steward read to orient. It lived only on the Desktop and went with a tidy-up. A census found four more in the same condition, zero copies anywhere — including the Making-Sequence architecture and reading list, load-bearing for current corpus work. The cause is structural: code, session records and memories are durable; the one artifact class addressed to the steward had no home. All five now live in maps/ and are symlinked back to their exact Desktop paths (Desktop view unchanged), moved under a checksum gate with a positive control. wake-digest.py reports stray Desktop maps; it never moves them — the Desktop is the steward's. How to verify: python3 scripts/wake-digest.py --selftest # 28 controls, PASS python3 scripts/wake-digest.py | grep -A3 'MEMORY POINTERS' cd ~/Desktop && shasum -a 256 *.md # reads through the symlinks What was not changed: ~/CLAUDE.md and REVIEWED.md untouched (Constraint #1). No Desktop file was deleted or renamed. MEMORY-reference.md's May entry is marked superseded, not rewritten. Known limitation: maps/ has no successor for the ARC map's FUNCTION — the open-work register carries the content, but nothing exists that the steward can open and orient by. Named in the entry rather than quietly closed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WuMjg3ipEVa3n8CoSzoyvc |
||
|
|
3df09228c0 |
[PROPOSAL] governance-mcp: read-only substrate access for the jurist (PENDING-82)
The three-party model asks Claude.app to rule on items it cannot read. Steward
confirmed 2026-07-28 that local MCP servers are exposed to the app's *chat*
surface — and always have been, predating Cowork by about a year. My earlier
framing ("chat, not only Cowork") had the relationship backwards: it is "chat,
always; Cowork, only while its loop still runs locally," and local Cowork is the
mode being phased out as default. The jurist chat is therefore the sturdy target.
Five read-only tools. The one a pasted cache can never provide is
governance_item(id): the verbatim body of any item or ruling, across PENDING.md,
PENDING-archive.md and REVIEWED.md. Four refusals are designed in, each with a
control proving the refusal is detectable — no writes (AST-audited), no path
arguments (keys from a fixed enum, so there is no traversal to defend), no second
parser (item_spans is imported, not reimplemented), and not an agent (tools
return data; an agent would return testimony about the substrate instead).
[FIX] to the shared definition while here: item_spans() is now fence-aware. A
'## ' header inside a fenced block is neither an item nor a boundary. Zero such
headers exist today — 17 open items before and after — but governance drafts are
written as fenced markdown carrying '## REVIEWED-N' headers, which is the
steward's own practice, so the next draft would have created a phantom item and
truncated the item containing it. PENDING-82's own fenced JSON block confirms the
fix within the hour.
Not installed. The mcpServers key edits the steward's desktop-app config; the
snippet is in PENDING-82 and the server is inert until someone loads it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WuMjg3ipEVa3n8CoSzoyvc
|
||
|
|
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 |
||
|
|
f83aae27c5 | 🔧 Auto-commit from sysupdate on 2026-05-19 21:49 | ||
|
|
066a47a26b |
Audit and optimize for CapableMind development
Brewfile: stripped to essential tools (~600MB freed), removed boost, cmake, aerc, newsboat, fontforge, starship, and 24 auto-dependencies. Added caffeine, ollama, fastfetch, ocrmypdf, tea, sshpass, vitetris. Dropped 1password, iterm2, github-desktop, hazel, swiftbar, oversight. Shell: fixed all stale references (fzf, zoxide, starship, old paths, Homebrew node aliases). Updated project paths to ~/_Dev/. Added CapableMind aliases (cm, bmf, bmf-health, bmf-status, bmf-logs). Configs: removed iterm2, neofetch, swiftbar configs. Added capablemind (launchd plists, MCP example, bmf-start script). Updated SSH config with git.skemantix.com. Added CLAUDE.md to dotfiles. Scripts: consolidated 3 backup scripts into 1 (backup-all-secrets.sh), added pass store backup. Added setup-capablemind.sh for full environment reconstruction. Updated symlinks.sh for new config structure. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
389febb161 |
🚀 Complete machine migration setup with encrypted backups
- Added comprehensive configuration files for seamless migration - SSH, GPG, Karabiner, iTerm2, Neofetch, SwiftBar configs - Pass license management system with templates and documentation - Enhanced shell functions with MAS updates and moon phase tracking - Comprehensive encrypted backup system (GPG AES256) - Included encrypted backups of all sensitive data - BBEdit as default editor with proper configuration - Fixed shell compatibility issues - Merged existing .zsh configs with improvements Security: - All sensitive data is GPG encrypted (.gpg files) - Private keys excluded from version control - Only configs and encrypted backups are tracked Following prime directive: durable, thoughtful solutions 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
a0e34f78ae |
Recover missing Brewfile and enhance system updates
- Add missing Brewfile (found in home directory) - Add bashrc and FZF configurations to dotfiles - Install mas CLI for Mac App Store management - Enhance sysupdate() with moon phase and MAS updates - Update symlinks script for all shell configs 🖖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
1f543d195b |
Add comprehensive system enhancements and shell configurations
Following the μέτρον principle of durable, thoughtful solutions: Shell Configuration: - Add refined .zshrc with modular architecture - Include .p10k.zsh for Powerlevel10k prompt - Add .zprofile for login shell configuration - Update aliases with new dotfiles management tools System Management Tools: - safe-update.sh: System updates with rollback protection - detect-drift.sh: Configuration drift detection - system-health.sh: Comprehensive health monitoring - generate-lockfile.sh: Version tracking for reproducibility Documentation: - ARCHITECTURE.md: Philosophy and design rationale - USAGE.md: Practical guide and troubleshooting Other Updates: - Update symlinks.sh to manage all config files - Add .vimrc configuration - Create Brewfile.lock for version pinning These enhancements provide visibility, safety, and maintainability while following the prime directive of prioritizing durability. 🖖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
92b0ead991 |
Add completion cleanup script and deploy refined shell config
🧹 Completion system maintenance: - Remove old Mullvad VPN completion files - Clear completion cache for fresh start - Check for NordVPN completion availability 🚀 Deployment successful: - Backed up original .zshrc - Symlinked refined modular configuration - Git hooks configured globally - All scripts and configs linked System now running with enhanced durability principles! 🎯 🤖 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
546e43fc64 |
Refactor shell configuration following prime directive principles
🎯 Comprehensive refinement addressing durability and maintainability: **Modular Architecture:** - environment.zsh: Centralized environment variables with XDG compliance - paths.zsh: Intelligent PATH management with existence checking - aliases.zsh: Enhanced aliases with tool fallbacks and context awareness - functions.zsh: Sophisticated functions with error handling and recovery - .zshrc: Clean main config with graceful degradation **Key Improvements:** - ✅ Fixed PATH duplication and made portable - ✅ Added graceful dependency handling throughout - ✅ Enhanced vault/chamber/work context integration - ✅ Comprehensive error recovery in sysupdate() - ✅ Intelligent tool detection and fallbacks - ✅ Performance optimizations for different shell modes **Philosophy Applied:** - μέτρον (measure): Right amount of features without bloat - συμμετρία (proportion): Balanced modular structure - πρόσφορον (fitting): Portable, maintainable, testable **Testing:** - Syntax validation for all modules - Function loading verification - Isolated test environment - Ready for production deployment 🤖 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
8bddc004a7 |
Add SSH key backup script and fix git config
- Copy actual .gitconfig instead of placeholder - Create encrypted SSH key backup script with GPG - Add SSH-based remote setup script - Include restore instructions and security notes 🤖 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|
|
0838f1cf8c |
Initial commit: Complete macOS dotfiles system
🖖 Features: - Master 'engage' script for one-command setup - 120+ CLI tools via Homebrew - 40+ Applications (casks + MAS apps) - Complete macOS system configuration - Security hardening and privacy settings - Obsidian knowledge vault setup - Comprehensive backup strategies - Automated symlink management Live long and prosper\! 🚀 🤖 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> |