diff --git a/claude/memory/MEMORY-reference.md b/claude/memory/MEMORY-reference.md index 9aca172..055b741 100644 --- a/claude/memory/MEMORY-reference.md +++ b/claude/memory/MEMORY-reference.md @@ -1,3 +1,4 @@ +- [Session 2026-08-09 — the fixture was an empty file](session-2026-08-09-the-fixture-was-an-empty-file.md) — the day's full record: premise-check, PENDING-129/130 → REVIEWED-113/114, the `KeyError` that corrected its own ruling, two artifacts preserved with three-part provenance, four documents corrected (`20f8958`), and the marking sheet. ⚠ **The placed record contradicted the relay for the third consecutive time.** **LITERAL Q: Mauss serves the Ranaipiri testimony and a Havámál strophe as citable Mauss with no `role: quotation` — two-source accident, or a class?** *(Demoted on promote at the 2026-08-13 wrap.)* - [Session 2026-08-08 late — eleven items, and the charter had the map](session-2026-08-08-late-the-charter-had-the-map.md) — **Built the binding mechanisms all day, then found in the last twenty minutes that the founding charter had already answered the strategic question.** (e) built as a **delegation** (`eecc8bb`) and exposed that **no fleet suite had ever validated live binding**. Hook sequence landed in the ruled order (`448ce37`, `2534dfb`); R0 §4 three-valued (`ccc4d6c`); fleet third verdict + preflight crash-class closure (`8ff5a9f`, `d21a43b`); Mauss corrected (`8231bce`). ⚠ **Leopold Mozart is ALREADY in the library as an EPUB** (Knocker translation, born-digital) — the violin problem may be **sourcing, not conversion**. **LITERAL Q: does re-running `pattern_finder`'s Station-I pass still come back PASS-BUT-FALSELY now that V0/V1 exist?** *(Demoted on promote at the 2026-08-09 wrap.)* - [Session 2026-08-08 — `voice:` is the convocation key](session-2026-08-08-voice-is-the-convocation-key.md) — **The disposition that landed is not the one any single party drafted.** Grounded first, then read the twelve blocks *from the source* rather than their sidecar titles — which produced nearly every finding: **Surah LXIV not CXIV** (already propagated into two governance records, and it voided the jurist's worked note, built on a formula absent from the passage); **`quotation-poet-jurist` reclassified** by one footnote; the naming evidence for six of nine blocks sits **inside the fenced apparatus**, engine-unreachable. Option C **refuted by measurement** (omission → host voice). The steward's correction on language sent me back to `[^101]` and thence to **L850 — Mauss's own prose fenced inside the Havámál block**, missed by a check using **length as a proxy for authorship**. Corrected the jurist upward: their category pair belonged **out** of the convocation key (`glidden` spans 5 sources, `weil` 2 — measured). Caught `REVIEWED-113` before it entered the register (PENDING-110 rules the sequences independent). **REVIEWED-97 placed + verified clean · PENDING-114 authorized (b)+(c) · PENDING-115 filed · `824139d`.** 🔑 **Corrections ran in all three directions in one day** — and the fleet was still red the whole time. *(Demoted on promote at the 2026-08-08 night wrap.)* - [Session 2026-08-07 evening — retrieval is set by home](session-2026-08-07-evening-retrieval-is-set-by-home.md) — **The skill-harvest bite taken whole, at the cost of V2.** Register censused before compacting: claimed 177, **real 154** (55 rows were scraped table-headers; 123 of 129 cut mid-word) — but **lossless**, 124 = 124, so my drafted "nine are invisible" and "59% misattributed" were both **refuted by the count**. Rebuilt from the archive with exact `archive:L###` pointers; restored the verbatim four-stroke ruling my own rebuild had replaced with a paraphrase. **Skills pruned 63 → 12** after measuring **53 never invoked in 5 months** (plus a dir named from a **404 error body** and ten with **newlines in their names**); 51 quarantined reversibly. The finding under both: **retrieval is set by home, 0%–83%**. **PENDING-112 → jurist ruling → steward concurrence → REVIEWED-95 drafted in one session**; filing gate + ladder trial sentence landed, **falsifier wired not intended** (`transcripts 84`) — which exposed two defects in the deferral checker itself, incl. that it **never looked at `claude/governance/`**. Package passed containment **20/20, 10/10 controls absent**, after the checker caught my own **elision-as-contiguous** and **fabricated join**. 🔑 **8 of 8 fresh instruments at fault; the elegant symlink discriminator was 97% right and would have destroyed the 2 that mattered.** *(Demoted on promote at the 2026-08-07 night wrap.)* diff --git a/claude/memory/MEMORY.md b/claude/memory/MEMORY.md index 0cdc585..1cc68f4 100644 --- a/claude/memory/MEMORY.md +++ b/claude/memory/MEMORY.md @@ -51,7 +51,7 @@ permalink: claude-memory/memory ## Canonical Workstream Trackers *Read the tracker for any active workstream at /wake-up before composing the briefing. Append substantive moves at /wrap-up — to the **chronological log**, not only "current state". Per `feedback-canonical-workstream-tracker-discipline.md`.* - **[Chamber as versioned releases](project-chamber-versioned-releases.md) — THE GOVERNING FRAME for all library work.** The 2000-year Chamber as versioned releases with soft borders, each serving a PURPOSE; scope every library bite through this. **Open decision: which purpose anchors V1.** Read the file, not this line — it holds the reframe that resolved the purpose/scope paralysis. -- [Studium Engine](project-studium-engine.md) — canonical engine tracker. **N0–N2 + R0 built** (2026-08-07); corpus **14 sources, trilingual** (en/fr/de), 5785 drawers, gate 14/14, fleet 202/202. `fidelity_equivalence@3` GOVERNING, **corrected in place** under PENDING-111. **N2: entry-finding 15/22 (from 0/22) — ⚠ and 5/5 false positives, untuned.** **NEXT: V2** — all three preconditions resolved, thresholds jurist-ratified, design fully specified. +- [Studium Engine](project-studium-engine.md) — canonical engine tracker. **N0–N2 + R0 + `voice_stamp` built**; corpus **14 sources, trilingual**, fleet **9 suites / 285**. **fr cell all but closed** — 8 grounded (1 A + 7 B), `ratio_A_to_B` **VOID** until PENDING-134 lands. ⚠ **PENDING-131 (c) never bound the engine** (`chunker.py` has `char_range` since Cluster A). **NEXT: rule PENDING-134 — last blocker is a steward MCP restart.** - [Studium engine telos — the chamber of voices](project-studium-engine-telos-chamber-of-voices.md) — **the ultimate goal, above the build plan**: the childhood chamber of hero-voices, rebuilt so the counsel is *accountably* theirs. Why verbatim fidelity is load-bearing. - [The Chamber touchstone — the *why*](~/_Dev/studium-engine/docs/the-chamber-touchstone.md) — seven questions to test work against when lost in the trees. **Read at Step 0 of any chamber work.** Holds no state; does not decay. - [The Chamber vision is NOT in one place](project-chamber-vision-is-not-in-one-place.md) — it lives in **seven** sources across two repos + memory. A single home would become an eighth unless it supersedes or points. @@ -67,15 +67,14 @@ permalink: claude-memory/memory - Chamber-typography — *tracker not yet established*; moves live in per-session memories (2026-05-11 →) + `project-chamber-cruft-restoration.md` + `project-chamber-typography-mining-plan-2026-05-15.md`. ## Active Session -> ⚠ **THE "PRESERVED" V4 FIXTURE WAS A 0-BYTE FILE** (`38de1a9`, 2026-06-26, never written, unreproducible). Three docs carried *"do not delete or regenerate it"* for **seven weeks**; no currency pass ever opened it. Found by **checking the inherited question's premise before answering it**. -> 🔑 **PULLING THREAD — V2's ENGLISH GOLD: narrow the March anchors DIVISIONS → SPANS.** The ONE act unblocking three of P7's four findings (EN `taggable:false` · **29×** cell asymmetry · §7.3 negatives near-unconstructible). It is an **authoring act** ⇒ propose-and-mark-`unverified`; ⚠ do **NOT** shortlist with `retrieve.py`/`ground.py` — the instruments under test. **START: the Alexander eight**; Harrison's fourteen are ~350k chars, their own session. -> ⚠ **P7 ALREADY RAN (2026-08-07, `corpus/v2-stratum-tags.yaml`) — READ IT BEFORE DERIVING.** Asymmetry measured (EN divisions median 27,833 vs FR spans 969). Also: the **fr authoring plan inverts** — inherited 1A:9B, §6.3 lands ~1:27 vs §6.2's 1:1 ⇒ **~8 stratum-A pairs needed that nothing asks anyone to write.** -> 📋 **TOMORROW (steward-directed): PROMOTE THE LINK-RESOLUTION CANARY TO A SCRIPT.** Already on the ladder AND in a `/wake-up` step, yet typed inline twice on the record (2026-08-08, 2026-08-09) — ⚠ **the gap is neither knowledge nor home but the absence of an EXECUTABLE.** → `~/dotfiles/scripts/`, **invoked** not described; `](file.md)` + `[[wikilink]]` over both memory indexes; pre-existing vs newly-broken; **carry a positive control.** ⚠ **EARNED 2026-08-09, before the script exists: STRIP INLINE CODE SPANS BEFORE MATCHING.** The inline version flagged one dead pointer — which was the link pattern *inside this very line's own specification*. Uncorrected, the canary flags its own documentation forever and the real signal drowns. With code spans excluded: **48 pointers, 0 dead.** (Third self-reference defect of the day, after the preservation header and the neutrality check.) -> ✅ **REVIEWED-113 + 114 placed.** Re-run **still PASS-BUT-FALSELY** — **V0/V1 could never have changed it**: 36 verbatim, correctly-located citations ⇒ V1 passes all; the defect is **V3/V4's**. **Abstention 0/12** beside N2's **0/5**. 129 built (`6f6bac5`) + the organ's first suite; fleet **8 suites / 263 checks**. -> 🔒 **STANDING CONDITION — REVIEWED-114 §3–4: NO DOCUMENT CALLS EITHER RE-RUN "V4's FIXTURE" AND V4 IS NOT BUILT UNTIL THE STEWARD'S DATED KEY EXISTS.** Item stays **OPEN**. ⚠ Ruled **(a)** — only the condition is outstanding; do not re-open it as a question. ✅ **Sheet BUILT and waiting**: `corpus/answer-key-2026-08-09-UNMARKED.md` (`92a97d0`) — 36 items, spans pulled from source (36/36 verified), **nothing pre-filled**; the steward is **judging, not confirming**. ⚠ Not blind: the executor stated a coarse per-primitive reading in conversation beforehand; a disclosure line was offered and **declined (2026-08-09)**. -> ⚠ **All my errors today were in CHECKS, not writes** — a round-trip that tripped on its own instruction · an induced-red that deleted the symbol (traceback, not a named failure) · an exit code read through a pipe · a neutrality check that matched its own legend. And **steward-caught: I twice wrote PENDING-130 was UNRULED** — *ruled ≠ placed ≠ condition-discharged.* +> 🔑 **PULLING THREAD — RULE PENDING-134. ITS LAST PRECONDITION IS NOT A BUILD:** H1 holds the doctrine until the four V0-lane keys are **served**, and `governance-mcp.py` builds its map at import ⇒ the running client keeps the old eight-key map **until the steward restarts it**. Executor half discharged (selftest 54/54; two stale key descriptions refreshed, `92d5ad2`). Then jurist reads §6.2 + §5's F4/F10 **verbatim**; rule per **H2** (narrow — nested-voice case only) and **H3** (amendment disclosed; steward's lean (i)). +> ✅ **The identification pass makes it a ONE-SPAN decision.** Reported speech in **1 of 9** fr grounded spans (L1551); the other eight are Mauss's own terminology, three self-marked. ⚠ **It CORRECTS REVIEWED-116 pt 6's worry** — the 73 inline ≥120-char spans are a *different population*; **within the grounded set P7's F4 tagging was correct and complete.** Gold-fixture exposure 2 spans · citation-safety 73 in Mauss / **532 corpus-wide (floor)**. +> ⚠ **MOVE 1 WAS NEVER BLOCKED — `voice_stamp` built** (`d411034`, fleet **9 suites / 285**). PENDING-131 (c) is real for the **sidecar** and never bound the engine: `chunker.py` has recorded `char_range` document offsets since Cluster A. **The ceiling was where the fence was being WRITTEN, not what the engine can SEE.** Reporter, **not** wired to abstention (unruled semantics). +> ⚠ **A CONTROL SET DRAWN FROM ONE SOURCE ESTABLISHES NOTHING ABOUT A CORPUS.** The census carried **five** defects; **four escaped its own controls** (all lived in Mauss ⇒ one convention, one line structure). The steward found the worst — a **clean zero** structurally guaranteed on hard-wrapped text. Only the 5th, a **regression in a covered case**, was caught by the controls. +> ⚠ **I committed PENDING-136's own error while executing it** (`bound_instances_grounded` 12 by *subtraction*, ignoring instance 17; correct **10**) — and swept the steward's REVIEWED-119/120 into an executor commit with `git add -A` (§6.5 forbids it; amended pre-push). +> 📋 **fr cell now:** 11 listed / **8 grounded** (1 A + 7 B) / 2 reclassified / 1 retracted / 10 grounded instances. **`ratio_A_to_B` VOID** — re-derived **ONCE** after 134 lands. ⚠ **H3's standing consequence must become a FIELD or CHECK, not a memory:** any recall figure carries a note that stratum membership was amended post-hoc 2026-08-10. -- [Session 2026-08-09 — the fixture was an empty file](session-2026-08-09-the-fixture-was-an-empty-file.md) — the day's full record: premise-check, PENDING-129/130 → REVIEWED-113/114, the `KeyError` that corrected its own ruling, two artifacts preserved with three-part provenance, four documents corrected (`20f8958`), and the marking sheet. ⚠ **The placed record contradicted the relay for the third consecutive time.** **LITERAL Q: Mauss serves the Ranaipiri testimony and a Havámál strophe as citable Mauss with no `role: quotation` — two-source accident, or a class?** +- [Session 2026-08-13 — the fence was never blocked](session-2026-08-13-the-fence-was-never-blocked.md) — REVIEWED-118 executed (authorized-but-unexecuted, found by substrate-checking a disposition clause) · the (b1) identification pass · PENDING-135/136 → REVIEWED-119/120 · `voice_stamp` built · Addendum 4 with the steward's seam observation. **LITERAL Q: four of five instrument defects escaped the tool's own controls and the one they caught was a regression — is that the general pattern? Census the last ~10 sessions: are control sets a REGRESSION net and not a DISCOVERY net?** ## Historical reference → MEMORY-reference.md Older archived-session pointers and the stable reference layer (steward profile · project-state detail · L1/L2/Chamber inventories · legacy pending-work · reference-file list) live in [MEMORY-reference.md](MEMORY-reference.md) — consult on demand; not loaded at wake. Recent cross-session trajectory comes from the Active Session entry above + the recent `session-*.md` files (wake §2.b.1). diff --git a/claude/memory/knowledge-graph.jsonl b/claude/memory/knowledge-graph.jsonl index 7d1b4a4..4aba070 100644 --- a/claude/memory/knowledge-graph.jsonl +++ b/claude/memory/knowledge-graph.jsonl @@ -641,3 +641,13 @@ {"subject": "reading the PLACED record instead of the relayed message", "predicate": "prevention", "object": "REVERSED A DECISION I HAD ALREADY MADE AND LOGGED AS A COST — third consecutive instance. I froze four documents on the relayed condition 'no document may call the artifact V4's fixture', and recorded in the ledger that 'deliberately unedited' was also 'preserving a falsehood' (CLAUDE.md L61 asserted an empty file was the designated fixture). The PLACED condition 4 reads '…may be corrected to name existing material; they may not assert a fixture that is half-done' — the opposite of my reading, resolving the exact tension I had flagged. The banked rule (quote from the FILE, never the relayed message) fired and changed the action, not merely the citation.", "valid_from": "2026-08-09", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-09-the-fixture-was-an-empty-file.md", "extracted_at": "2026-08-09"} {"subject": "resurfacing the banked artifact before deriving", "predicate": "prevention", "object": "STOPPED A FULL RE-DERIVATION OF MEASURED GROUND. The inherited resumption point said to 'settle the baseline asymmetry BEFORE the chavruta re-run'. P7 had already run on 2026-08-07 and committed corpus/v2-stratum-tags.yaml, which measures it exactly: EN divisions median 27,833 chars vs FR spans median 969 (29x, max 198,258). It also holds three further findings the wrap never mentioned — including that the fr authoring plan INVERTS (inherited 1A:9B; §6.3 would land ~1:27 against §6.2's 1:1). Checking the artifact first converted a session of re-measurement into one act: narrow the EN anchors.", "valid_from": "2026-08-09", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-09-the-fixture-was-an-empty-file.md", "extracted_at": "2026-08-09"} {"subject": "driving a degraded state rather than reasoning about it", "predicate": "prevention", "object": "CORRECTED THE RULING THAT AUTHORIZED THE WORK. REVIEWED-113's design gate inferred the (manifested, not-probed) cell would collapse into `silence`, flagged that as 'inference, not reading' and invited the check. Driving it raised KeyError: 'arendt' — a crash in ENGINE code, the class PENDING-126(c) had closed suite-side only, and the second engine-side instance after retrieve.py:134. The correction ran executor→ruling, which the differently-biased-checkers doctrine predicts; recorded as an instance, proving nothing general.", "valid_from": "2026-08-09", "valid_to": null, "confidence": 0.9, "source_file": "session-2026-08-09-the-fixture-was-an-empty-file.md", "extracted_at": "2026-08-09"} +{"subject": "claude-code", "predicate": "drift-pattern", "object": "control-set-drawn-from-one-source: every positive control for the nested-voice census lived in Mauss — one quotation convention (guillemets), one line structure (paragraph-per-line). The instrument was therefore blind to ASCII quotes (3 sources, incl. the two largest EN texts) and to hard-wrapped text (2 sources), and reported a CLEAN ZERO for both rather than an error. Five defects total; four escaped the controls entirely. Coverage is the whole of a control set's strength.", "valid_from": "2026-08-13", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-13-the-fence-was-never-blocked.md", "extracted_at": "2026-08-13"} +{"subject": "claude-code", "predicate": "drift-pattern", "object": "count-by-subtraction-not-enumeration: wrote bound_instances_grounded as 12 by computing 15 bound - 3 retracted, silently ignoring that instance 17 had already left the grounded set at P7. Correct is 10. Committed the SAME error PENDING-136 was filed about, inside the session that filed it — and P7's original error entered the same way. Enumerate against the actual rows; subtraction is how the error enters.", "valid_from": "2026-08-13", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-13-the-fence-was-never-blocked.md", "extracted_at": "2026-08-13"} +{"subject": "claude-code", "predicate": "drift-pattern", "object": "one-marker-over-two-dispositions, recurring: voice_stamp's first verdict vocabulary returned `boundary-crossing` for BOTH fragments of instance 8 — whose differing dispositions are the entire reason the instance is before the steward. PENDING-133's exact finding, reproduced inside the instrument built to address it. Split into crosses-opening / crosses-closing / spans-quotation. Caught only by the suite's load-bearing negative.", "valid_from": "2026-08-13", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-13-the-fence-was-never-blocked.md", "extracted_at": "2026-08-13"} +{"subject": "claude-code", "predicate": "drift-pattern", "object": "unscoped-git-add-in-dotfiles: used `git add -A` in a dotfiles commit, sweeping the steward's freshly-placed REVIEWED-119/120 and a sysupdate Brewfile line under an executor message about MCP key descriptions. /wrap-up §6.5 forbids exactly this and states why — the steward's in-progress changes belong to the steward's sweep. Amended before push. NOTE the routing gap: the rule is stated only in §6.5, which fires at WRAP, while dotfiles commits happen throughout a session.", "valid_from": "2026-08-13", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-13-the-fence-was-never-blocked.md", "extracted_at": "2026-08-13"} +{"subject": "substrate-checking a disposition clause instead of reading it as status", "predicate": "prevention", "object": "CAUGHT AN AUTHORIZED-BUT-UNEXECUTED RULING THAT HAD SAT THREE DAYS. REVIEWED-118's `**If AUTHORIZED:**` line reads like a completed act; grepping for `REVIEWED-118` in corpus/ and docs/ returned nothing and the L926 instances still stood. The /wake-up step's own rule (a disposition clause is not a status) fired and changed the wake's report from 'done' to 'the unblocked next act' — which became the session's first work.", "valid_from": "2026-08-13", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-13-the-fence-was-never-blocked.md", "extracted_at": "2026-08-13"} +{"subject": "checking a suspicious ZERO rather than accepting it", "predicate": "prevention", "object": "CONVERTED A FABRICATED MEASUREMENT INTO A REAL ONE, TWICE. The census reported 0 inline quoted spans for harrison/alexander/after-the-reply; checking found 2005 and 1348 ASCII quotes the matcher could not see (43% undercount). Then the steward's challenge to a dismissive aside about musil found the same shape structurally — musil is hard-wrapped, so a within-line matcher guaranteed ~0 before the file was opened. A clean zero is the most dangerous output an instrument can produce, because it reads as a finding.", "valid_from": "2026-08-13", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-13-the-fence-was-never-blocked.md", "extracted_at": "2026-08-13"} +{"subject": "reading the ratified schema before repeating a blocking claim", "predicate": "prevention", "object": "STOPPED A REVIEWED ENTRY FROM CARRYING A FALSE BLOCKER. PENDING-135 stated option (d) was blocked on PENDING-131 (c) — the chamber-locked studium/meta@1. Opening v2-harness §14.2 before drafting REVIEWED-119 showed the real constraint is studium/v2-gold@1's `lines: [a, b]`, which is ENGINE-SIDE and D-1. Had it gone unchecked, an authorization would have stood on a false blocking claim — the trap REVIEWED-115 pt 1 voided an authorization over.", "valid_from": "2026-08-13", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-13-the-fence-was-never-blocked.md", "extracted_at": "2026-08-13"} +{"subject": "PENDING-134", "predicate": "blocked-by", "object": "H1 — the four V0-lane governance_read keys are registered on disk (4c3758e) but NOT SERVED: governance-mcp.py builds FILES at import, so the running client holds the old eight-key map until the STEWARD restarts it. Executor half discharged 2026-08-13 (selftest 54/54; two stale key descriptions refreshed at 92d5ad2). The remaining step is a client restart, not a build.", "valid_from": "2026-08-13", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-13-the-fence-was-never-blocked.md", "extracted_at": "2026-08-13"} +{"subject": "PENDING-131 (c) sub-line addressing", "predicate": "does-not-block", "object": "the engine's citation path. chunker.py has recorded `char_range: [cstart, cend]` document offsets since Cluster A, so voice_stamp addresses sub-line extents with no schema change and no cross-repo consent. The line-granularity ceiling was an artifact of where the fence was being WRITTEN (the sidecar), not of what the engine can SEE. (c) remains real for the sidecar.", "valid_from": "2026-08-13", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-13-the-fence-was-never-blocked.md", "extracted_at": "2026-08-13"} +{"subject": "free indirect discourse", "predicate": "is-not", "object": "a provenance failure. Steward-argued 2026-08-13 and accepted: in FID there is NO second author to join to — the words are the novelist's, composed in the narrative voice. A PROVENANCE failure has a second author who can be named; a STANCE question has one author and an interpretive judgment about endorsement. Irony shows it is not a fiction matter: Arendt reporting a view to demolish it raises the identical question in non-fiction. Consequence: PENDING-131 (c) stays ONE capability, not two; the residue belongs to PENDING-134 and the synthesized tier's NLI.", "valid_from": "2026-08-13", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-13-the-fence-was-never-blocked.md", "extracted_at": "2026-08-13"} diff --git a/claude/memory/project-studium-engine.md b/claude/memory/project-studium-engine.md index 1e093ff..b29986d 100644 --- a/claude/memory/project-studium-engine.md +++ b/claude/memory/project-studium-engine.md @@ -121,6 +121,56 @@ both still **needing dates, not "later."** ## Chronological log +### 2026-08-13 — the fence was never blocked; the fr cell all but closed + +**REVIEWED-118 EXECUTED** (`e51e30d`) — authorized 2026-08-10, unexecuted for three days, found by +substrate-checking the `**If AUTHORIZED:**` clause rather than reading it as status. L926's +instances 6/12/16 retracted. Two decisions not implied by the ruling: `mauss-phase2-spans.yaml` is +**generated**, so the record went into `scripts/bind_mauss_spans.py` too (a retraction in the +emitted YAML alone is erased by the next run, with no diff); and that file measures **binding**, so +the binding facts stayed and a cross-reference carries the retraction. + +**THE (b1) IDENTIFICATION PASS RAN** (`docs/fr-reported-speech-identification-pass-2026-08-13.md`), +authorized at REVIEWED-116 pt 5 on 08-10 and never executed. **Reported speech in exactly 1 of 9 fr +grounded spans** (L1551). The other eight are Mauss's own terminology, three self-marked +(*"comme nous proposons de les appeler"*). ⚠ **Corrects REVIEWED-116 pt 6 rather than confirming +it**: Mauss's 73 inline ≥120-char spans are a different population from the grounded set, of which +only L926 and L1551 were ever members — **within the grounded set P7's F4 tagging was correct and +complete.** ⇒ **PENDING-134's blast radius on inherited fr gold is ONE span.** + +**PENDING-135 (c) → REVIEWED-119 · PENDING-136 (c) → REVIEWED-120** (`de1c34b`, both placed by the +steward). Instance 8 reclassified negative-candidate, marked in place; ⚠ **sub-type name OPEN** — +§7.4(i) addresses the nested voice served *as* the host's, this **fuses** both. Count fields now +carry their populations; bare `distinct_spans` retired. ⚠ **REVIEWED-119 pt 4 corrects PENDING-135's +own blocking claim**: option (d) is constrained by `studium/v2-gold@1` §14.2 (`lines: [a,b]`) — +**engine-side, D-1** — not by the chamber-locked `studium/meta@1`. Materially cheaper route. +⚠ **I committed 136's own error while executing it**: `bound_instances_grounded` 12 by subtraction, +ignoring instance 17. Correct **10**; all counts now verified by enumeration. + +**`voice_stamp` BUILT** (`d411034`; `engine/voice_stamp.py`, suite 22; fleet **9 suites / 285**). +⚠ **AND MOVE 1 WAS NEVER BLOCKED.** PENDING-131 (c) is real for the **sidecar** and never bound the +engine — `chunker.py` has recorded `char_range` document offsets since Cluster A. **The +line-granularity ceiling was an artifact of where the fence was being WRITTEN, not of what the +engine can SEE.** Paragraph-scoped pairing (not line-scoped) is what makes it work on hard-wrapped +sources. **Reporter, deliberately NOT wired to abstention** — verdict semantics are unruled. + +**fr cell as of this wrap:** 11 listed spans / **8 grounded** (1 A + 7 B) / 2 reclassified / 1 +retracted / **10** grounded bound instances. **`ratio_A_to_B` VOID** — re-derived ONCE after +PENDING-134 lands and all dispositions are recorded (REVIEWED-116 pt 5). + +⚠ **INSTRUMENT LESSON, and it is the day's most transferable:** the nested-voice census carried +**five defects** and **four escaped its own controls** — every control was drawn from Mauss, so they +exercised one quotation convention and one line structure, and could not see blindness to ASCII +quotes (3 sources) or to hard-wrapped text (2 sources), both of which produced **clean zeros**. +Only the fifth — a regression in an already-covered case — was caught by the controls. **A control +set drawn from one source establishes nothing about a corpus.** + +⚠ **PENDING-134's remaining blocker is a STEWARD CLIENT RESTART, not a build.** `governance-mcp.py` +builds `FILES` at import, so the four V0-lane keys registered at `4c3758e` are not yet served. +Executor half discharged: selftest 54/54, and two key descriptions that had gone stale the same day +were refreshed (`92d5ad2`) so the jurist's first read is not of a stale index. + + *Append substantive moves here at `/wrap-up` — not only to "Current state" above. A tracker with two update surfaces drifts between them (skill-harvest #183).* diff --git a/claude/memory/session-2026-08-13-the-fence-was-never-blocked.md b/claude/memory/session-2026-08-13-the-fence-was-never-blocked.md new file mode 100644 index 0000000..d702510 --- /dev/null +++ b/claude/memory/session-2026-08-13-the-fence-was-never-blocked.md @@ -0,0 +1,173 @@ +--- +name: session-2026-08-13-the-fence-was-never-blocked +description: "Woke into a four-day gap with two unwrapped sessions behind it; found REVIEWED-118 authorized-but-unexecuted and executed it, ran the never-run fr identification pass (reported speech in exactly 1 of 9 grounded spans, so PENDING-134's blast radius is ONE span), and built voice_stamp — discovering that PENDING-131 (c)'s cross-repo block never bound the engine at all, because chunker.py has recorded document char offsets since Cluster A. PULLING THREAD: rule PENDING-134, whose last precondition is a steward client-restart, not a build." +metadata: + node_type: memory + type: project + modified: 2026-08-13T19:26:02.092Z + originSessionId: 1524bae7-44b3-4ba9-8c36-24f53bc8acae +--- + +# Session 2026-08-13 — the fence was never blocked + +Woke into the longest gap of this arc: four days since the last *wrap*, but only three since +the last *work*. The 08-10 session — the biggest day of the whole nested-voice arc — never wrote +a wrap record. That absence is what made the return feel shapeless, and it is the day's first +lesson about what a missing link costs. + +## PAST — what moved, and why + +**REVIEWED-118 was authorized and unexecuted, found by substrate-checking a disposition clause.** +The `**If AUTHORIZED:**` line reads like a completed act. It was not: `REVIEWED-118` appeared +nowhere in `corpus/` or `docs/`. Executed as `e51e30d`. Two decisions inside it that do not follow +from the ruling's text: (1) `mauss-phase2-spans.yaml` is **generated** by +`scripts/bind_mauss_spans.py`, so a retraction recorded only in the emitted YAML would be erased +by the next regeneration with no diff to read — the block went into the generator too; (2) that +file measures **binding**, and its header disclaims establishing grounding, so the binding facts +stayed (instances 6/12/16 *do* locate to L926) and a cross-reference carries the retraction. +Deleting a true measurement to express a judgment about a different property is how a file stops +meaning what its header says. + +**The (b1) identification pass ran** — authorized at REVIEWED-116 pt 5 on 08-10 as *"a pass that +writes nothing"*, never executed until now. `docs/fr-reported-speech-identification-pass-2026-08-13.md`. +**Of the nine fr grounded spans, reported speech is present in EXACTLY ONE** (L1551, instance 8). +The other eight carry only terminological guillemets in Mauss's own voice, three self-marked +(*"comme nous proposons de les appeler"* L866, *"ce que nous appelons … « potlatch »"* L934). + +⚠ **It CORRECTS a worry rather than confirming one.** REVIEWED-116 pt 6 recorded that PENDING-133's +bound assumed P7's F4 tagging was complete, unchecked and against contrary evidence. That evidence +is about a **different population**: Mauss carries 73 inline spans ≥120 chars, of which exactly two +were ever in the grounded set. **Within the grounded set, P7's tagging was correct and complete.** +⇒ **PENDING-134's blast radius on inherited fr gold is ONE span**, which is what makes it a bounded +decision rather than a hostage-taking one. + +**Instance 8 reclassified** (PENDING-135 (c) → REVIEWED-119) and **the count fields renamed** +(PENDING-136 (c) → REVIEWED-120), both in `de1c34b`. L1551 carries three voices in sequence; the +citation's two fragments have **opposite** dispositions — fragment 1 opens on the attributing +clause, fragment 2 opens inside the speech and ends inside Mauss's conclusion. It neither retains +nor retracts whole. + +**`voice_stamp` BUILT** (`d411034`, `engine/voice_stamp.py` + 22-check suite; fleet **9 suites / +285 checks**). ⚠ **AND THE FINDING IS THAT MOVE 1 WAS NEVER BLOCKED.** PENDING-131 (c) asks the +chamber for sub-line addressing because `studium/meta@1` marks by LINE RANGE. That block is real +for the **sidecar** and never bound the engine: `chunker.py` has recorded `char_range` document +offsets since Cluster A. **The line-granularity ceiling was an artifact of where the fence was +being WRITTEN, not of what the engine can SEE.** Pairing is paragraph-scoped, not line-scoped, +which is what makes it work on hard-wrapped sources. + +**Corrections placed:** PENDING-131 Addendum 4's defect tally fixed in place, steward-directed +(four → five, and it had dropped the only datum favouring its own controls). REVIEWED-119 pt 4 +corrects PENDING-135's own claim that option (d) was blocked cross-repo — the real constraint is +`studium/v2-gold@1` §14.2, **engine-side and D-1**, a materially cheaper route. + +## PRESENT — how it stood + +**This was a day of instruments failing and being caught by everything except themselves.** + +The nested-voice census carried **five defects**: blind to ASCII quotes (43% undercount, 3 sources +invisible including the two largest EN texts) · a negative control passing for the wrong reason · +a control aimed one layer below its gate · blind to hard-wrapped text · and the **fix** for that +last one misclassified Mauss and failed both positive controls. **Only the fifth was caught by the +instrument's own controls.** Three by my own re-checking. **One by the steward**, and it was the +worst, because it produced a clean zero rather than an error. + +⚠ **The lesson that generalizes: a control set drawn from one source establishes nothing about a +corpus.** Every positive control lived in Mauss — one quotation convention, one line structure — so +they could not see either blindness. Coverage is the whole of a control set's strength. + +**Two defects were earned INSIDE the fix**, and both are this arc's own lessons recurring: +`boundary-crossing` was **one marker over two dispositions** (PENDING-133's exact finding, inside +the instrument built to address it — caught only by the suite's load-bearing negative), and a bare +`except Exception` reported a `TypeError` as *"corpus unreachable — CANNOT ASSESS"*, turning exit 3 +into the silent net it exists to prevent. + +**And I committed PENDING-136's own error while executing PENDING-136** — `bound_instances_grounded` +written 12 by computing 15−3, ignoring that instance 17 had already left at P7. Correct is 10. The +error entered by **subtraction** both times, P7's and mine; every count is now verified by +enumeration. + +⚠ **Executor error at the wrap itself:** `git add -A` in a dotfiles commit swept the steward's +freshly-placed REVIEWED-119/120 and a `sysupdate` Brewfile line under an executor message about MCP +key descriptions. §6.5 forbids exactly this. Amended before push (`92d5ad2`); no shared history +rewritten. + +**The mood: productive and repeatedly humbled.** Everything shipped, verified and pushed — but the +day's two largest findings both came from being challenged rather than from my own review. The +steward's *"fiction can be very valuable too"* found the census's worst defect; their FID argument +refuted an entire section I had built. + +⚠ **The FID refutation, because it simplifies the architecture:** I argued fiction needed a *second +fence mechanism* since free indirect discourse carries no delimiter. Refuted — in FID a reader takes +the words to be Musil's, **rightly**, because there is no second author to join to. **A PROVENANCE +failure has a second author who can be named; a STANCE question has one author and an interpretive +judgment about endorsement.** Irony proves it is not a fiction matter at all: Arendt reporting a view +to demolish it raises the identical question in non-fiction. ⇒ **(c) stays ONE capability, not two.** + +## FUTURE — what pulls + +> **PULLING THREAD — RULE PENDING-134, AND ITS LAST PRECONDITION IS NOT A BUILD.** +> H1 holds the doctrine until the four V0-lane keys are actually SERVED, and +> `governance-mcp.py` builds its key map at import — so the running client holds the old eight-key +> map until **the steward restarts it**. The executor half is discharged: selftest 54/54, and two +> stale key descriptions refreshed (`92d5ad2`) so the jurist's first read is not of a stale index. +> Everything in the fr cell is behind this ruling, and the identification pass has made it a +> **one-span** decision. + +**ACTIONABLE RESUMPTION POINT (as of wrap — re-judge against what changed):** +``` +0. Clean everywhere. studium-engine pushed through d411034, fleet 9 suites / 285 checks green. + dotfiles 92d5ad2 (amended, pushed at wrap). REVIEWED-119/120 placed by the steward. +1. START HERE — SESSION 1, short, steward-and-jurist: the steward restarts the MCP client so the + four keys serve. Then the jurist reads §6.2's enumeration and §5's F4/F10 rows VERBATIM — + currently the executor's testimony, and H1 is explicit that the counter-argument being + overruled is the one needing verbatim check by the party overruling it. Then rule per + H2 (narrow: nested-voice case only; general principle as ARGUMENT, never ratified doctrine) + and H3 (amendment disclosed on its face; steward's lean is (i), one dated amendment). + Executor prep: pre-draft the REVIEWED entry carrying H3's disclosure language. +2. SESSION 2, executor, one bite all the way: close the fr cell. Record dispositions, then + re-derive the ratio ONCE. ⚠ The thing most likely to be lost is H3's STANDING CONSEQUENCE — + any recall figure from this fixture carries a note that stratum membership was amended + post-hoc on 2026-08-10. Land it as a FIELD or a CHECK, not as something remembered; H3 says + it is far harder to add retroactively. +3. SESSION 3, independent, slot anywhere: Move 2 — the 25 blockquote runs. Line-addressable, + no schema change, no cross-repo consent. Needs a steward disposition, then execution. +``` + +**Other open horizons, ranked:** +- **[load-bearing, needs a ruling]** Wire `voice_stamp` to V0's abstention gate — what each verdict + should DO is unruled semantics; wiring it would settle by construction what belongs in a ruling. +- **[load-bearing, owed before negatives are generated]** The **fused-voice sub-type name**. §7.4(i) + addresses the nested voice served *as* the host's; instance 8 fuses both. Recorded as + `negative_sub_type_OPEN` in the corpus file itself. +- **[load-bearing, newly cheap]** The **gold-schema question** (REVIEWED-119 pt 4): can + `studium/v2-gold@1` express sub-line extents? D-1, steward-direct. Decides whether option (d) — + the faithful split of instance 8 — becomes available. +- **[open]** The `en` cell's parallel denominator: `reachable_items: 22` beside + `distinct_divisions: 12`, correctly named, but §6.6's power arithmetic is stated in `n`. + REVIEWED-120 explicitly does NOT establish it clean. +- **[open]** V2 assembly: P2's remaining ~50 lines of EPUB residue (chamber-side cleaning). +- **[owed]** No wrap record exists for **2026-08-10** — the arc's biggest day survives as a mid-day + ledger written before any of its afternoon commits. +- **[owed]** 41 `S2` skill-harvest rows authorized 2026-07-19, still unexecuted. +- **[watch]** The wake digest's `wrap_inside` alarm: a two-valued detector over three cases + (wrapped · wrapped-then-continued · never-wrapped). Named 08-10 as a false alarm; fired again + today, correctly. A detector that cried wolf once and is right the next time is in the worst + position. **Third instance of that shape today** — the fleet's three-valued exits fixed it once + already (REVIEWED-104/108), and the census's hard-wrap detector reproduced it. + +**PAUSE STATEMENT:** I am putting this down at a genuine close — everything committed, verified and +pushed; four governance items filed, two ruled and placed by the steward; nothing mid-arc. What I +want to find still pulling is **PENDING-134**, because its last blocker is a client restart rather +than any work, and because the identification pass has already shrunk it to a one-span decision. +⚠ What I do **not** want to find is another session that did real work and left no wrap record — +that absence, twice over, is most of why today's wake had to be reconstructed from git rather than +inherited. + +**LITERAL QUESTION for next-Claude** *(checkable — the record answers it, not introspection)*: +**Today five instrument defects were found; four escaped the instrument's own controls, and the one +the controls DID catch was a regression introduced by a fix. Is that the general pattern?** Census +the instruments across the last ~10 sessions: for each defect found in one of our own tools, record +whether it was caught by (a) the tool's own controls, (b) the executor re-checking a suspicious +result, or (c) a human challenge. If (a) only ever catches regressions in already-covered cases and +never a coverage gap, then **control sets are a regression net and not a discovery net** — and every +"controls PASS" line we have ever written means something narrower than it reads. diff --git a/claude/memory/skill-harvest-register.md b/claude/memory/skill-harvest-register.md index 8bc5f9a..2bf8318 100644 --- a/claude/memory/skill-harvest-register.md +++ b/claude/memory/skill-harvest-register.md @@ -362,3 +362,89 @@ earn its own entry or should be folded into the existing one as an example. **Deliberately NOT proposed.** The preservation-header self-match (a strip instruction that quotes the marker it tells you to strip to, so `index()` matches inside the header) is a **one-shot** defect in a one-shot artifact, caught by the round-trip that was already there. Per `feedback-one-shot-instruments-are-proportionate`, its counterfactual is an assertion, not a durable instrument — filing it would be documentation dressed as diligence. The generalisable half is already banked: **compare against a fresh emit, not against a recorded sha**, which is what caught it. **No FIX-lane changes were applied this session.** + +--- + +## 2026-08-13 — three proposals from the nested-voice / voice_stamp session + +### HS-2026-08-13-a — a dotfiles pre-commit guard against unscoped staging of governance files + +**Earned:** the executor ran `git add -A` in `~/dotfiles` mid-session and swept the steward's +freshly-placed **REVIEWED-119/120** and a `sysupdate` **Brewfile** line into a commit whose message +described only a `governance-mcp.py` change. Amended before push (`92d5ad2`), so no shared history +was rewritten — but the dotfiles log is explicitly meant to double as a legible session record, and +for one commit it attributed a steward governance act to an executor `[FIX]`. + +**The routing finding, which is the point:** `/wrap-up` §6.5 already states the rule — *"Scoped add +only — never `git add .` or `-A`"* — and states why. **But §6.5 fires at WRAP, and dotfiles commits +happen throughout a session.** The rule is correct and lives at the wrong moment. This is the +register's own diagnosis applied to itself: a capability is worth what a protocol exercises, and +this one is exercised at a juncture the violation routinely precedes. + +**Firing moment: mechanically, and it should always fire** — the strongest row in the routing table. +A `~/dotfiles` pre-commit hook that inspects the *staged set*: if `REVIEWED.md` or `CLAUDE.md` is +staged alongside files outside `claude/`, `PENDING.md`, refuse with the §6.5 text and require an +explicit override. Detects the actual failure (mixed staging of steward-authored governance) rather +than the proxy (`-A` in the command line, which is unobservable from a hook). +⚠ Must NOT block a legitimate steward commit — the hook lives in the executor's path only, and the +override must be one flag, documented in its own refusal message. + +**Classification: `[PROPOSAL]`** — it changes what the executor may do without asking (it adds a +refusal), and it touches the path by which `REVIEWED.md` reaches the remote. Hard-floor adjacent: +`REVIEWED.md` is Constitutional Constraint 1 material, so the guard must only ever *refuse*, never +*edit*. **Status: PROPOSED.** + +### HS-2026-08-13-b — `wake-digest.py`'s `wrap_inside` is two-valued over a three-case state + +**Earned:** the digest announced **"PREVIOUS SESSION DID NOT WRAP"** at this session's wake. It was +right this time. It was **wrong on 2026-08-10**, where the 08-09 session had wrapped at 19:48 and +then kept working until 21:54 — and the 08-10 ledger already named the defect: *"a two-valued +detector over a state that has three cases (wrapped · wrapped-then-continued · never-wrapped)."* +Named, not fixed, and it has now fired twice with opposite truth values. **A detector that cried +wolf once and is right the next time is in the worst position available** — the reader has already +learned to discount it. + +⚠ **Third instance of this exact shape in one day**, which is the argument for fixing it rather than +re-noting it: the fleet's three-valued exit codes fixed this shape once already +(REVIEWED-104/108), and the nested-voice census's hard-wrap detector reproduced it again the same +afternoon. + +**Firing moment: mechanically, and it already runs** — `wake-digest.py` fires at SessionStart. This +is a patch to an existing always-firing instrument, not a new capability needing a home. +Report three states: `wrapped` · `wrapped-then-continued` (with the post-wrap span) · `never-wrapped`. + +**Classification: `[PROPOSAL]`** — it changes what a governed artifact *asserts* (the wake digest's +claim about session continuity, which the wake briefing then relays to the steward). +**Status: PROPOSED.** + +### HS-2026-08-13-c — "a control set drawn from one source establishes nothing about a corpus" + +**Earned:** the nested-voice census carried **five defects**; **four escaped its own controls**. +Every positive control was drawn from Mauss — one quotation convention (guillemets), one line +structure (paragraph-per-line) — so the controls could exercise neither the ASCII-quote convention +(3 sources, incl. the two largest EN texts) nor hard-wrapped text (2 sources). Both blindnesses +produced **clean zeros**, which read as findings. Only the fifth defect — a regression in an +already-covered case — was caught by the controls, and that asymmetry is the finding: **the controls +could not see what they were never drawn to cover, and did see a regression in what they did.** + +**Distinct from what is already banked.** Symmetria §3 carries *frame-inheritance* — reusing an +**instrument** across a tier it was not demonstrated on. This is the complementary failure: the +instrument was **new**, and its **control set** was the thing drawn from too narrow a population. The +existing flag would not have caught it. + +**Proposed wording, for §3:** *A control set drawn from one source, one format, or one convention — +however many controls it contains. Coverage is the whole of a control set's strength; controls prove +what they were drawn to cover and nothing else. Enumerate the structural classes present in the +subject BEFORE writing controls, and report `NOT ESTABLISHED` for a class with no control rather +than reporting zero for it.* + +**Firing moment: at a ritual juncture that already exists** — Symmetria `check` fires before any +build or write with blast radius, which is exactly when a control set is being written. Stronger +than a bare ladder entry (measured 14%) and stronger than a skill (measured 0%). + +**Classification: `[PROPOSAL]`** — §3 flags shape what the executor must notice before acting, and +this one imposes a precondition on building an instrument. Borderline against the FIX lane's +two-clause test; **proposed rather than applied, per "when in doubt, propose."** +**Status: PROPOSED.** + +**No FIX-lane changes were applied this session.**