diff --git a/PENDING.md b/PENDING.md index c0ebfb2..20a48bb 100644 --- a/PENDING.md +++ b/PENDING.md @@ -2432,3 +2432,117 @@ else echo "INCOMPLETE — $old residual occurrence(s) of an old name"; fi **§K — Recommended:** the jurist's offer to draft these as three lines under **REVIEWED-110 point 10** should be taken. They are conditions on a **placed** ruling, and per the REVIEWED-87 lesson an amendment **joins its record** rather than living as prose beside it. Steward's call; `~/REVIEWED.md` is their hand. --- + +## PENDING-129 — `pattern_finder` silently discards a probed voice that has left the corpus, and its denominator hides the loss + +**Date:** 2026-08-09 +**Tag:** [HARDENING] — engine-side, D-1 +**Related:** REVIEWED-104 / the ladder's **"Checks whose subject can be absent"** (the ratified three-outcome doctrine) · PENDING-124 (same collapse, *cross-repo*; this is the **same-repo** instance) · PENDING-122 (an aggregate that reports clean over an unassessed member) · Constitutional Constraint 4. +**Found by:** re-running the June Station-I pass on the steward's instruction, and reading the spec's probe keys against the harness's own voice list — not by reading the code. + +**Summary.** `ground_primitive` iterates `sorted(station_voices(station))`, which is derived from **`corpus/manifest.yaml`**. The probes it runs come from the **spec JSON**. A voice the spec probes that is *not in the manifest* is therefore never iterated: it yields no citations, no silence, and **no mention anywhere in the output**. The report's spread line — `f"Instantiated in {voice_count} of {voice_count + len(silent)} voices"` — builds **both** halves of the fraction from the manifest, so the denominator cannot express the loss either. + +**Measured, 2026-08-09, on the real spec and the live corpus.** `corpus/pattern-finder-station-i-pass1.json` probes **camus** in all three primitives (**19 distinct probes**). `camus-la-chute` has a sidecar but **no manifest entry**. The re-run printed **"Instantiated in 4 of 4 voices"** three times. The honest line is *4 of 5, fifth **not in corpus***. Nineteen probes were asked and the record shows no trace that they were asked. + +**Why this is the ratified class and not a cosmetic gap.** The harness already models absence — it has a first-class `silence` with a `warranted` flag, and the charter (§VI) makes a warranted silence a *finding*. So the vocabulary exists; what is missing is that **`silence` means "the voice was searched and yielded nothing"** while this case is **"the voice was never searched."** Those are the two states REVIEWED-104 forbids merging, and merging them here is worse than the ordinary version: the missing voice does not even reach the aggregate as a member, so it cannot be counted as unassessed. ⚠ **Direction of the error is the dangerous one** — dropping a voice can only *raise* the apparent instantiation rate. A primitive that would have been silent in Camus reads as universally instantiated. + +**Options.** +- **(a) Iterate the UNION of manifest voices and spec-probed voices; emit a third state `not-in-corpus` for the difference, excluded from the "of N" denominator and named on its own line.** The spec's probe list becomes evidence of what was *asked*, which is the only place that record exists. +- **(b) Refuse to run a spec naming an unmanifested voice** (fail-loud at load). ⚠ This makes every historical spec unrunnable the moment the corpus moves — destroying exactly the re-run capability that produced this finding. +- **(c) Warn at load, run anyway.** ⚠ A warning on stderr does not reach the report the steward reads; the false "4 of 4" still prints. + +**Recommendation: (a).** A primitives spec is a **dated historical artifact** — this one is from June and the corpus has changed under it four times since. The harness's value is precisely that an old spec can be re-run against a new corpus; (b) trades that away to fix a reporting defect. (a) also puts the disclosure **in the artifact the human reads**, which (c) does not. + +**Check that it worked — both directions.** Run the **unmodified June spec**: `camus` must appear as `not-in-corpus`, the spread line must read *4 of 5* (or equivalent) with the fifth named, and the four manifested voices' numbers must be **byte-identical to today's run**. Then run a spec naming **only manifested voices**: no `not-in-corpus` line may appear. ⚠ **A control built only from manifested voices cannot detect this defect** — it is the "control must sit at the layer the defect lives in" case, and the discriminating pair is the June spec against a manifest-only one, both real. + +**⚠ What this does not establish.** Naming the dropped voice does nothing about whether the *remaining* grounding is true — see PENDING-130. It also does not check the inverse case (a manifested voice the spec never probes), which is silently untested today and is **not** proposed here. + +**Files affected:** `~/_Dev/studium-engine/engine/pattern_finder.py` (`ground_primitive`, `render_report`); a suite — **`pattern_finder.py` has no test file at all**, which is itself the finding's context. + +**Awaiting:** ~~Steward authorization (D-1 lane).~~ → **AUTHORIZED (a) by steward relay 2026-08-09; BUILT `6f6bac5`.** ⚠ **The corresponding `~/REVIEWED.md` entry is NOT placed** — the ruling exists as a relayed message only, and no `REVIEWED-N` is cited in the commit. Placement is owed and is the steward's hand. + +--- + +### AMENDMENT 1 — 2026-08-09, built; and the fourth cell was a crash, not a collapse + +**§A — The ruling's three refinements, all taken.** (1) Implemented as the **cross** — `voice_cross()` returns `assessed` / `not_in_corpus` / `not_probed` from (in manifest?) × (probed by spec?) — so closing the fourth cell later is a line, not a rewrite. (2) `not_assessed` is a **sibling of `by_voice`**, per REVIEWED-47 §1a quoted from the **placed** record: *"attested absence lives in its own honest top-level key … (not a verdict inside `source_verified:`)"* — stronger than the relay's *"named on its own line."* (3) Both cells carry `kind: environment`, and the fraction now reads *"of N voices **searched**"* so a reader who skips the block still cannot read it as coverage. + +**§B — ⚠ THE FOURTH CELL DOES NOT COLLAPSE INTO `silence`. IT RAISES `KeyError`.** The ruling flagged its own table as *"inference, not reading"* and invited the check. Driven: `v_probes = probes[v] if isinstance(probes, dict) else probes` — a **manifested** voice absent from a dict-form probes block raised `KeyError: 'arendt'`, reproduced on the live corpus. So the cell is **a crash in engine code**, the class PENDING-126(c) closed **suite-side only**, and this is its second engine-side instance after `retrieve.py:134 _work_map`. The point did not dissolve; it moved. **Scope honoured anyway:** the cell is made *representable and non-crashing*, and what a report should DO with it stays unruled. + +**§C — The control the ruling required, and what it bought.** The four assessed voices' `by_voice` is **byte-identical** to the pre-fix run at `ec6fa0b` — so the ordering argument held exactly: only the spread line moved and one key appeared, and **all 36 citations are invariant under the fix.** Landing 129 first cost nothing in fixture content. + +**§D — Four directions, not two.** (1) June spec → camus attested in all three primitives, 7/6/6 probes asked. (2) Manifest-only spec → the key does **not** appear, and the report omits the block entirely (a warning that fires on the safe case is discarded with the dangerous one). (3) Fourth cell → attested, no crash. (4) Flat probe list → runs against every manifested voice, neither cell fires. + +**§E — `pattern_finder.py` had no suite at all.** `tests/test_pattern_finder.py`, **22 checks**, fleet **7 → 8 suites, 263 checks**. ⚠ **Witnessed red BEHAVIOURALLY**, not by deleting the function: names left in place, behaviour reverted. Exit **1**, **six named failures**, camus by name and the `KeyError` resurfacing. My first probe deleted `voice_cross` instead and produced a **traceback, not a named failure** — an absent symbol is not the defect — and I read its exit code **through a pipe**, so the `0` reported was `tail`'s. Both corrected before the result was used; recorded because it is yesterday's *checks-are-the-weak-link* class inside the remedy for it. + +**§F — ⚠ What this does not establish.** Nothing about whether any finding is **true**. The suite says so in its own output. The organ remains PASS-BUT-FALSELY; relevance is V3/V4's claim. + +--- + +## PENDING-130 — V4's designated adversarial fixture is an empty file, and a Stage-1 completion criterion has no subject + +**Date:** 2026-08-09 +**Tag:** [PROPOSAL] — engine-side, D-1; asks the steward to *choose* a fixture, not to approve a fix +**Related:** `docs/stage-1-rebuild-plan-2026-07-05.md` §2.3 (V4) and §"Stage-1-rebuilt is done when" criterion 1 · `docs/tool-evolution-log.md` (the back-filled pass-1 entry) · `~/_Dev/studium-engine/CLAUDE.md` L61 · the KG drift-pattern *"cited a derived label instead of the substrate."* +**Found by:** checking the premise of the wrap's own literal question before acting on it. + +**Summary.** Three documents instruct that the Station-I pass-1 **output** be preserved as V4's first adversarial fixture — *"the known-bad output is **V4's designated adversarial fixture** — do not delete or regenerate it."* **`corpus/pattern-finder-station-i-pass1.md` is 0 bytes.** It was committed empty at `38de1a9` (2026-06-26), is touched by **exactly one commit** in the repository's history, and has never been written. The **input spec** (`corpus/pattern-finder-station-i-pass1.json`, 3,879 B, 3 primitives) *is* preserved; the output is not. + +**What depends on it.** The rebuild plan §2.3: *"Retro-gate the existing Station-I pattern-finder pass-1 output as the first live test — the known PASS-BUT-FALSELY run is the perfect adversarial fixture."* And criterion 1 of Stage-1-done: *"the retro-gated pattern-finder run has its false grounding caught."* **Both name an artifact that does not exist**, so criterion 1 is currently unsatisfiable — not failing, unsatisfiable. + +**⚠ And the June run is unrecoverable, not merely missing.** It is not in git under any path. It also **cannot be reproduced by re-running**: since June the corpus has changed under the spec at least four times — `camus-la-chute` left the manifest, Musil is now the **EN** Wilkins/Pike (the spec's Musil probes are French), `weil-gravity-and-grace` was re-partitioned 2026-08-07, and `handke` was added. Any run today is a **different pass**, not a recovery. + +**How the instruction survived seven weeks.** The sentence was carried forward through repeated doc-currency passes — it is in `CLAUDE.md`, the rebuild plan and the tool-evolution log — and **no pass ever opened the file**. This is the *cited-a-derived-label-instead-of-the-substrate* shape, and it is a fourth instance: a description of the artifact was read in place of the artifact, three times over, by an instruction whose entire content was *protect this artifact*. + +**Options.** +- **(a) Designate the 2026-08-09 re-run as V4's adversarial fixture**, committed with its provenance stated in the file — a *2026-08-09 run of a June spec against a changed corpus*, explicitly **not** the June run — and correct the three documents' claims. +- **(b) Leave V4 without a fixture** and rewrite §2.3 and criterion 1 to name material that exists, deferring the fixture to whenever one is next produced. +- **(c) Record the loss and stop there** — remove the "do not regenerate" instruction, since it protects nothing. + +**Recommendation: (a), with one condition the executor cannot discharge.** The re-run **has the property V4 needs**, demonstrably and by mechanical evidence, not by taste: 36 citations, **zero abstentions**, *"instantiated in 4 of 4 voices"* on every primitive, and **three passages grounding two different primitives each** (Eichmann L738 stands as evidence for both *threshold-without-decision* and *gray-zone-depletes*, via the same token `obedience`; Musil L31702 for both *attrition-erodes-attention* and *gray-zone*). Every citation is verbatim and correctly located — which is precisely why **V1 passes all 36** and why this fixture tests V3/V4 rather than V1. + +⚠ **The condition, and it is the whole risk.** A fixture needs an **answer key** — *which* citations are the false ones. If the executor supplies both the known-bad run and its answer key, then the same hand writes the fixture and (later) the gate, which is the *"controls derived from the check, not from the property"* failure the discrimination gate exists to forbid. **The answer key must be marked by a differently-formed reader — the steward — before V4 is built.** The rendered report is written for exactly that reading. Until that marking exists, (a) is **half-done and must not be called a fixture.** + +**Check that it worked.** The committed artifact's header states its own provenance and the fact that it is not the June run; the three documents no longer assert a preserved June output; and the steward's marked answer key exists as a separate, dated file. ⚠ **No mechanical control is available for the marking step** — its correctness is the steward's judgment, and saying so is the honest report of this item's limit. + +**⚠ What this does not establish.** Nothing here recovers the June run, and nothing here establishes that the *June* pass and the *August* pass fail in the same way — only that both fail. It also does not touch PENDING-129: the August run's "4 of 4" is itself inflated by the silently dropped voice, so **the fixture and the defect are entangled**, and the order in which they are fixed changes the fixture's contents. + +**Files affected:** `~/_Dev/studium-engine/corpus/pattern-finder-station-i-pass1.md` (currently 0 B); `docs/stage-1-rebuild-plan-2026-07-05.md` §2.3 + criterion 1; `docs/tool-evolution-log.md`; `~/_Dev/studium-engine/CLAUDE.md` L61. + +**Awaiting:** Steward authorization — **and, under (a), the steward's marked answer key**, which no authorization can substitute for. + +--- + +### AMENDMENT 1 — 2026-08-09, ruled (a) with four additions; ordering executed; figures restated + +**§A — The ordering was the decision, and it was executed.** PENDING-129 landed first (`6f6bac5`), then the post-fix re-run was preserved (`8746dcf`). The ruling's mechanical argument held: because 129's own control requires the assessed voices to be byte-identical to the pre-fix run, **all 36 citations are invariant under the fix** — only the spread line moved. The pre-fix run at `ec6fa0b` is therefore **retained, not superseded wholesale**: it is 129's byte-identity control *and* the dated record of the defect. That reframes what `ec6fa0b` is for — committed for 130, load-bearing for 129. + +**§B — ⚠ FIGURES RESTATED, because this item's evidence paragraph cited a now-superseded output.** The recommendation's grounds were measured on the **pre-fix** run. Re-measured on the post-fix run (`8746dcf`), the load-bearing numbers are **unchanged**: 36 citations · **zero abstentions** · three passages grounding two primitives each (Eichmann L738 for both *threshold-without-decision* and *gray-zone*, via `obedience`; Musil L31702 for both *attrition* and *gray-zone*; Levi L140 likewise). **What changed:** the fraction now reads *"4 of 4 voices searched"* and camus is attested as `not-in-corpus`, 19 probes asked. The false **denominator** is gone; the false **grounding** is not, which is the point of the fixture. + +**§C — (1) The answer key cannot be delegated to the jurist, and that is now on the record.** The efficiency is foreclosed by the ratified doctrine's own text — jurist and executor *do not differ from each other in formation*, so their separation is of the weaker kind. Of the three parties, **only the steward is differently formed**. Naming it here so it is not proposed later as a convenience. + +**§D — (2) Mark against the corpus, not against the report — 130's instrument run back over 130.** The report's claim that its citations are verbatim and correctly located **is the executor's claim about them**; marking the key by reading the rendered report reproduces the very shape this item records (a description read in place of the thing, three times over). **Answering which:** the report does **not** carry enough surrounding context to make the check possible from the file alone — it emits a 320-character snippet per citation (`_snip`) with `work` + `section_id` + line range. So the key must be marked **with the corpus open beside it**, opening the cited lines. The preserved header now says exactly that. + +**§E — (3) Three moving parts, pinned.** The June run became unreproducible because spec date and corpus state were tracked and **the engine was not** — and 129 has just moved the engine, which would have done it again within hours. The post-fix header pins **spec sha · manifest sha + index `as_of` · engine commit `6f6bac5` + `pattern_finder.py` sha**, plus the emitted-bytes sha, with a stated round-trip: split on `END-PRESERVATION-HEADER` and the remainder is byte-identical to a fresh emit (**proven, not asserted**, both times). + +**§F — (4) 'Retro-gated' is the word to strike.** Criterion 1 reads *"the **retro-gated** pattern-finder run has its false grounding caught."* Under (a) there is no retro-gated run — there is a **contemporaneously generated** one. Repairing only the artifact reference would preserve the false provenance inside the criterion that was unsatisfiable because of it. ⚠ **Not yet executed** — see §G. + +**§G — THE STANDING CONDITION, AND WHY NO DOCUMENT WAS TOUCHED.** *No document may call the artifact V4's fixture until the marked key exists as a dated file.* Accordingly `docs/stage-1-rebuild-plan-2026-07-05.md` §2.3, its criterion 1, `docs/tool-evolution-log.md` and `CLAUDE.md` L61 are **deliberately unedited**. Updating them now would assert a fixture that is still half-done and **rebuild the seven-week gap under a fresh filename** — in the item that exists to establish nobody re-opens those files. The two artifacts are committed as **preservation**, and both headers say so in their first line. + +**Files added:** `corpus/pattern-finder-station-i-rerun-2026-08-09.{md,json}` (`ec6fa0b`, pre-fix, 129's control) · `corpus/pattern-finder-station-i-rerun-2026-08-09-postfix.{md,json}` (`8746dcf`, the fixture candidate). + +**Still awaiting:** the steward's **dated answer key, marked against the corpus**. Until it exists, (a) is half-done and the four documents stay as they are. + +**§H — ⚠ CORRECTION, steward-caught 2026-08-09: THIS ITEM IS RULED, AND I TWICE WROTE THAT IT WAS NOT.** The steward's ruling reads *"PENDING-130 — (a) is right; the condition is the whole ruling"* and refers to *"the 130 authorization."* That is a **ruling with an unmet condition**, which is not the same fact as an **unruled item** — and conflating them is precisely the *disposition-clause-is-not-a-status* class this session has been working in. It appeared in two places: `8746dcf`'s commit message (*"PENDING-130 is unruled"*) and the post-fix artifact's preservation header (*"PENDING-130 proposes that it become one"*). **The header is corrected in place** (`fdc2a01`); the commit message is left standing, because a filed record records what was said when, and rewriting it would destroy the trail — this §H is the correction that joins it, per the REVIEWED-87 amendment lesson. + +⚠ **Consequence worth stating, because it cuts against my own caution:** reading the artifact as *proposed-but-unruled* makes the delay look like an open question about whether it should be the fixture. It is not. **The decision is made; only the condition is outstanding.** Being over-cautious in the wrong direction is still a false statement of the record. + +⚠ **A third, still-live distinction:** ruled-in-relay is not **placed**. Three states, three names: **ruled · placed · condition discharged.** None implies another. + +**§I — PLACED 2026-08-09 as REVIEWED-114; conditions 1, 2, 4, 5 discharged.** `governance-drift-check.py` built-vs-ruled cleared (10 → 12 checked). **⚠ Reading the PLACED text changed what was done:** condition 4 reads *"§2.3, criterion 1 and `CLAUDE.md` L61 **may be corrected to name existing material**; they may not assert a fixture that is half-done."* The relay had been read as *leave all four untouched*, and §G recorded that reading. It was wrong, and it was preserving a live false claim (`CLAUDE.md` L61 asserted an empty file was the designated fixture). All four corrected `20f8958`, verified: no document asserts an existing artifact **is** a fixture — every surviving mention is a negation, a quotation of the struck words, or unrelated. **Third consecutive instance of the placed record answering a question the relay left open** — the standing finding, firing again. + +**§J — Two residues in the placed entry, recorded so a later reader does not trip on them.** Raised once, and the steward has since amended the entry (the `If AUTHORIZED` tag line, which had read `REVIEWED-113`, now reads `REVIEWED-114`). Two remain and are **deliberately not re-raised**: (1) the Notes read *"**two** passages grounding two primitives each"*; the grounded JSON measures **three** — Eichmann L738, Musil L31702, Levi L140, each standing for two different primitives. The substrate figure is the one any later work should use. (2) The Decision line says *"five conditions"* over **seven** numbered items; 6 and 7 read as notes rather than conditions, so five is likely right and the numbering simply continues. Neither affects the disposition. + +**Still open on this item: condition 3 — the steward's dated answer key, marked against the corpus.** Until it exists the item is **not archived**, no document names a fixture, and **V4 is not built.** + +--- diff --git a/REVIEWED.md b/REVIEWED.md index 180ea98..b71a77f 100644 --- a/REVIEWED.md +++ b/REVIEWED.md @@ -1572,3 +1572,96 @@ classification. Size was "unmeasured, deliberately"; it is now bounded and still **If AUTHORIZED:** Tag with REVIEWED-112. +## REVIEWED-113 — PENDING-129 — The pattern-finder's voice cross: attest what was not searched + +**Date:** 2026-08-09 +**Decision:** **(a) AUTHORIZED**, with three refinements: derive the states from the cross +(in manifest?) × (probed by spec?) rather than the difference, so closing the fourth cell later +is a line and not a rewrite; `not-in-corpus` is a top-level key per REVIEWED-47 §1a, not a +parenthetical on the spread line; and carry REVIEWED-104's two strengths, so an absence that is +environment cannot read as defect and become furniture. +**Provenance:** steward, 2026-08-09, on the executor's PENDING-129. Placed after the fact — +the ruling was relayed and built the same day, and `governance-drift-check.py` flagged the gap. + +**Ground.** Not a judgment call: the ratified three-outcome doctrine applied to a check whose +subject can be absent, and the direction of the error — dropping a voice can only raise the +apparent instantiation rate — puts it on the wrong side of Constitutional Constraint 4. + +**⚠ The fourth cell was mis-inferred in this ruling, and building it corrected the ruling.** +The design gate reasoned the cell would collapse into `silence`, flagged that as inference +rather than reading, and invited the check. Driven against the live corpus it raised +`KeyError` — a crash in engine code, the class PENDING-126(c) closed suite-side only. The +scope decision stands (the cell is representable and non-crashing; its reporting semantics +stay unruled), but the record should show the correction ran executor→ruling, which the +differently-biased-checkers doctrine predicts and is worth logging as an instance. + +**If AUTHORIZED:** ~~Proceed.~~ Already built at `6f6bac5` (fix + `tests/test_pattern_finder.py`, +22 checks, witnessed red behaviourally; fleet 8 suites / 263 checks). Tag any follow-on with +REVIEWED-113. + +## REVIEWED-114 — PENDING-130 — V4's designated adversarial fixture is an empty file, and a Stage-1 completion criterion has no subject +**Date:** 2026-08-09 +**Decision:** AUTHORIZED — option (a), ordered behind PENDING-129, with five conditions. The item does NOT close on this ruling. + +**Notes:** The recommendation is right and the item's own condition is the ruling. (b) and (c) both +concede that V4 ships without an adversarial fixture in order to fix a documentation defect, and the +re-run demonstrably has the property V4 needs — 36 citations, zero abstentions, two passages grounding +two primitives each. What (a) does not have, and cannot acquire from the executor, is an answer key. +Everything below protects that one step, because it is the only step in the item with no mechanical +control and the item says so. + +Recorded first, because it bears on condition 1: `ec6fa0b` (studium-engine, local, unpushed) is +scoped 'preservation only'. Read from the branch state alone it looks like (a) executed ahead of this +ruling; read from the commit subject it is the correct act — an artifact protected against the loss +this item exists to record. The distinction is the whole of it, and the executor made it explicitly. + +1. CONDITION — ORDER: PENDING-129 lands first, and the fixture is the POST-fix re-run. The fixture's + grounding content is invariant under 129: 129's own two-directional check REQUIRES the four + manifested voices' numbers to be byte-identical, so the 36 citations, the zero abstentions and the + two double-groundings survive the fix unchanged. Only the spread line moves. Committing the pre-fix + run as the fixture would place a SECOND and unrelated falsehood — a denominator inflated by the + silently dropped voice — inside an artifact preserved to teach V4 ONE falsehood class. A + differently-formed reader handed both has no way to know which they are being asked to mark, and + the contamination lands on the one step no control covers. Retain `ec6fa0b` as the pre-fix run: it + is now load-bearing for 129's byte-identity comparison, which is not what it was committed for. + +2. CONDITION — PROVENANCE NAMES THREE MOVING PARTS: spec path and hash, corpus/manifest state, and + ENGINE COMMIT. Option (a) named the first two. 129 moves the third, and an engine version omitted + from the header makes the August fixture unreproducible in precisely the manner that made the June + run unrecoverable. + +3. CONDITION — THE KEY IS MARKED AGAINST THE CORPUS, NOT AGAINST THE REPORT. This item's own + diagnosis is 'cited a derived label instead of the substrate' — a description of the artifact read + in place of the artifact, three times over, by an instruction whose entire content was 'protect + this artifact'. Marking the key by reading the rendered report repeats that shape inside the + remedy: the report's claim that its citations are verbatim and correctly located is the executor's + claim about them, and the key exists to be independent of the executor. The marking is done against + the passages at the cited locations. The executor states in the header whether the report carries + sufficient surrounding context for that, or whether the corpus must be open beside it. + +4. CONDITION — NO DOCUMENT CALLS IT A FIXTURE UNTIL THE MARKED KEY EXISTS as a separate dated file. + §2.3, criterion 1 and `CLAUDE.md` L61 may be corrected to name existing material; they may not + assert a fixture that is half-done. This item is the evidence that an assertion about an artifact + survives seven weeks and three currency passes without anyone opening the file. Asserting a + fixture before its key is marked rebuilds that gap under a fresh filename. + +5. CONDITION — 'RETRO-GATED' IS STRUCK FROM CRITERION 1, not repointed. Under (a) there is no + retro-gated run; the word encodes a provenance claim the August pass cannot satisfy. Repairing the + artifact reference while leaving the verb preserves the false claim in the criterion that was + unsatisfiable because of it. + +6. The jurist cannot discharge condition 3 in the steward's place. Raised here so it is not proposed + later as an efficiency: PENDING-124 Amendment 2 Q4 is ratified on exactly this point — jurist and + executor 'do not differ from each other in formation'. One party to this collaboration is + differently formed, and the key is theirs. + +7. The item's evidence figures were measured on the pre-fix run. After the re-run under condition 1 + they cite a superseded output and must be restated in PENDING-130 — not re-argued, restated. + Flagged because this is the class of cost that goes unrecorded. + +**If AUTHORIZED:** Hold until PENDING-129 lands. Then re-run the unmodified June spec, commit the +output with the three-part provenance header, and correct §2.3, criterion 1, `docs/tool-evolution-log.md` +and `CLAUDE.md` L61 to name existing material without the word 'retro-gated' and without the word +'fixture'. Tag commits with REVIEWED-114. **The item remains OPEN and is not archived** until the +steward's marked answer key exists as a dated file; only then may V4 be built against it and the +fixture named as such. diff --git a/claude/memory/MEMORY-reference.md b/claude/memory/MEMORY-reference.md index a1a20ff..e7d89ce 100644 --- a/claude/memory/MEMORY-reference.md +++ b/claude/memory/MEMORY-reference.md @@ -1,3 +1,4 @@ +- [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.)* - [Session 2026-08-07 — the count found what the read did not](session-2026-08-07-the-count-found-what-the-read-did-not.md) — **Twelve commits, three repos.** MEMORY.md trimmed 19.9→16.7 KB · **N1** (tree, 4 primitives) · **R0** (one reading-index loader — the adapters had already diverged on 3 of 253 patterns with *neither* right) · **N2** (`0/22` was the wrong search space: gold anchors are DIVISIONS → **top-1 15/22**, ⚠ **and 5/5 false positives**, untuned) · **@3 corrected in place** under the PENDING-111 ruling, with **three measured findings refuting the package's own premises** · **D-5** (TEI deferred, proxy trigger retired, discriminator pre-registered) · two governance checkers (register-integrity + deferred-decision triggers) · three corpus voice-defects fixed (Alexander re-anchor + "Using this book" partition; **Thibon's introduction had been served as citable Weil**) · **V2's German blocker dissolved — the source was graduated 2026-07-09 and nobody looked for a month.** 🔑 **Every defect was found by a COUNT, none by a read; 3 of 3 new checkers were themselves at fault.** *(Demoted on promote at the 2026-08-07 evening wrap.)* diff --git a/claude/memory/MEMORY.md b/claude/memory/MEMORY.md index 10004af..cefb30e 100644 --- a/claude/memory/MEMORY.md +++ b/claude/memory/MEMORY.md @@ -6,7 +6,7 @@ metadata: type: note permalink: claude-memory/memory originSessionId: 22915403-bc5d-4796-9c7d-196b7c30d2f9 - modified: 2026-08-07T17:08:24.523Z + modified: 2026-08-09T19:26:33.382Z permalink: claude-memory/memory --- @@ -67,13 +67,15 @@ 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 CHARTER HAD THE MAP, and I was navigating by the wrong layer.** §X: **L0 corpus (built) · L1 primitives (mostly built) · L2 aggregation & discovery — the pattern-finder — *Next* · L3 orchestration — voices, CHAVRUTA, larger debate — *the frontier*.** The chavruta is **L3**. §X also names the steward's use case by name: interfaces should emerge from *"the Making, then the violin."* And §IV calls **migration/genealogy the engine's SIGNATURE capability** — ⚠ whose stated consequence is half-built: `drawers` lacks a **`period`** column every manifest entry declares. -> 🔑 **PULLING THREAD — V2, calibrating abstention: the SHARED floor, not a chavruta prerequisite.** 15/22 top-1, **abstention 0/5, 5 false positives** ⇒ a chavruta baseline today would **flatter itself**. The same calibration is what `pattern_finder`'s PASS-BUT-FALSELY needs. Preconditions resolved; thresholds **jurist-ratified (V0 §5) — do not re-derive**. -> ✅ **Eleven rulings placed (REVIEWED-102…112), ten items filed (119–128).** Built: hook validator · both trigger rules · R0 §4 three-valued (`emit` was **unary**, 261/261 fingerprinted) · fleet third verdict + crash class closed at the preflight (**8 sites**) · built-vs-ruled in drift-check · `verify-quotes.py`. **82 discharged by events · 118 built, and building it REFUTED its own option (1).** -> ⚠ **The day's shape was being corrected, and it was earned every time** — three citation defects with ONE cause (quoting the **advisory** as the **placed record**); "five instances, same shape" → two; recommendation (d) withdrawn by me; "nothing breaks" → touches ratified text; and **the fix reproduced the defect it was fixing** (a permanent NOT-A-CLEAN-PASS). Standing finding accepted: my grounding pass **finds my errors and never my support**. -> 📌 **At the gate:** 121 + 128 as ONE declared-data commit. **Owed:** relay Addendum 2's redraft TEXT · chamber tool-fleet census (REVIEWED-106) · `quotation-in` × `translation-of`, third day untouched — ⚠ now with a new instance, since citing Leopold Mozart in English cites **Knocker**. +> ⚠ **THE "PRESERVED" FIXTURE WAS A 0-BYTE FILE.** `corpus/pattern-finder-station-i-pass1.md` — committed empty at `38de1a9` (2026-06-26), one commit, never written, **unreproducible**. Three documents carried *"do not delete or regenerate it"* for **seven weeks** and 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 from DIVISIONS to SPANS.** The ONE act unblocking **three of P7's four findings** (EN `taggable:false` · the **29×** cell asymmetry · §7.3 negatives near-unconstructible in EN). ⚠ It is an **authoring act** → route is **propose-and-mark-`unverified`**; do **NOT** shortlist with `retrieve.py`/`ground.py`, which are the instruments under test. **START: the Alexander eight** (short); Harrison's fourteen are ~350k chars and their own session. +> ⚠ **P7 ALREADY RAN (2026-08-07, `corpus/v2-stratum-tags.yaml`) — read it before deriving anything.** The "baseline asymmetry" is **measured**: EN divisions median **27,833** chars vs FR spans **969**. Also: the fr authoring plan **inverts** (inherited 1 A : 9 B; §6.3 would land ~1:27, not 1:1 — **~8 stratum-A pairs needed that nothing asks anyone to write**). +> ✅ **REVIEWED-113 + 114 placed.** `pattern_finder` re-run **still PASS-BUT-FALSELY** — and **V0/V1 could never have changed it**: all 36 citations verbatim + correctly located, so V1 passes every one; the defect is **V3/V4's tier**. **Abstention 0/12**, beside N2's **0/5**. 129 built (`6f6bac5`) + the organ's first suite; fleet **8 suites / 263 checks**. +> ⚠ **My errors were all 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. And **steward-caught: I twice wrote PENDING-130 was UNRULED.** *Ruled ≠ placed ≠ condition-discharged.* +> 🔒 **STANDING CONDITION — REVIEWED-114 conditions 3–4 (placed 2026-08-09). NO DOCUMENT MAY CALL EITHER PRESERVED RE-RUN "V4's FIXTURE", AND V4 MAY NOT BE BUILT AGAINST ONE, UNTIL THE STEWARD'S DATED ANSWER KEY EXISTS.** The item stays **OPEN and unarchived** until then. ⚠ Ruled **(a)** — the artifact *is* to become the fixture; only the condition is outstanding, so do not re-open it as a question. The key is marked **against the corpus, not the report** (only a 320-char `_snip` per citation), and **only the steward is differently formed** — condition 6 forecloses delegating it to the jurist. The four documents **were** corrected (`20f8958`, no "fixture", no "retro-gated"); it is the *assertion* that is barred, not editing. Artifacts: `ec6fa0b` (pre-fix = REVIEWED-113's byte-identity control) · `8746dcf`+`07727dd` (post-fix candidate). **Retire this line only when the dated key exists.** + +- [Session 2026-08-09 — the fixture was an empty file](session-2026-08-09-the-fixture-was-an-empty-file.md) — **Checked the inherited question's premise before answering it, and the premise was false.** The re-run is **still PASS-BUT-FALSELY**, and V0/V1 could never have changed it (36 verbatim citations ⇒ V1 passes all; the defect is V3/V4's). **PENDING-129/130 filed, ruled and placed as REVIEWED-113/114**; 129 built (`6f6bac5`) with the organ's first suite — ⚠ and the ruling's own fourth cell turned out to be a **`KeyError` crash**, not the inferred silent collapse. Two artifacts preserved with three-part provenance; four documents corrected (`20f8958`). ⚠ **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-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?** ## 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 a1f6e1a..7d1b4a4 100644 --- a/claude/memory/knowledge-graph.jsonl +++ b/claude/memory/knowledge-graph.jsonl @@ -635,3 +635,9 @@ {"subject": "the studium engine build order", "predicate": "has-charter-ruling", "object": "CHARTER §X FOUR LAYERS: L0 corpus (built) · L1 retrieval primitives (mostly built, the shared floor) · L2 aggregation & discovery — the pattern-finder, whole-corpus topical query its lighter sibling — NEXT · L3 orchestration — voices, CHAVRUTA, larger debate — THE FRONTIER. The chavruta is L3, not the near-term goal. L2 was built first DELIBERATELY ('the hardest mode... because proving it de-risks everything above it') and its interfaces are to emerge from lived use — 'the Making, then the violin', naming the steward's own treatise. §IV separately calls migration/genealogy the engine's SIGNATURE capability, not a late extra.", "valid_from": "2026-08-08", "valid_to": null, "confidence": 1.0, "source_file": "docs/the-studium-engine-architectural-charter.md", "extracted_at": "2026-08-08"} {"subject": "corpus/index.db drawers table", "predicate": "has-unbuilt-consequence", "object": "CHARTER §IV states 'every drawer carries its source, location, date, and language as queryable axes... genealogy, migration-mapping and temporal evolution are first-class operations'. Measured 2026-08-08: drawers carries source_id, voice, lang, line_start/end — but PERIOD IS ABSENT, though every manifest entry declares it (catalog.period). The temporal axis the charter calls first-class is declared in the corpus and not carried into the store. One column, feedable from data already present.", "valid_from": "2026-08-08", "valid_to": null, "confidence": 1.0, "source_file": "session-2026-08-08-late-the-charter-had-the-map.md", "extracted_at": "2026-08-08"} {"subject": "the violin treatise corpus", "predicate": "has-sourcing-finding", "object": "LEOPOLD MOZART IS ALREADY IN THE LIBRARY AS AN EPUB — 'Treatise On The Fundamentals Of Violin Playing / Leopold Mozart (664)', the Knocker English translation of the 1756 Versuch. Born-digital, V-TEXT tier, no OCR and no Fraktur. The steward named it as a case with no digital edition they were aware of. So the violin problem is partly SOURCING rather than conversion. ⚠ But it is a TRANSLATION: a treatise citing it in English cites Knocker, not Mozart — a new instance of the unruled quotation-in x translation-of composition. Separately: V-SCAN ABSTAINS by design (no ground truth), so the real conversion question is what tier a scanned canonical can ever reach, not OCR quality.", "valid_from": "2026-08-08", "valid_to": null, "confidence": 0.9, "source_file": "session-2026-08-08-late-the-charter-had-the-map.md", "extracted_at": "2026-08-08"} +{"subject": "claude-code", "predicate": "drift-pattern", "object": "PROTECTED AN ARTIFACT NOBODY EVER OPENED — and the instruction's entire content was 'protect this artifact'. Three documents (rebuild plan §2.3, tool-evolution-log, CLAUDE.md L61) carried 'that known-bad output is V4's designated adversarial fixture — do not delete or regenerate it' for SEVEN WEEKS across repeated doc-currency passes. The file is 0 bytes: committed empty at 38de1a9 (2026-06-26), one commit, never written, unrecoverable. Fourth instance of cited-a-derived-label-instead-of-the-substrate, and the sharpest, because the label WAS the protection. Test: an instruction to preserve X is not discharged until someone has opened X.", "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": "claude-code", "predicate": "drift-pattern", "object": "CONFLATED A RULING WITH ITS UNMET CONDITION — twice in one session, steward-caught. PENDING-130 was ruled (a) with five conditions; I wrote 'PENDING-130 is unruled' in a commit message and had an artifact header say it 'proposes'. Ruled / placed / condition-discharged are THREE states and none implies another. ⚠ The direction cut AGAINST my own caution: reading it as unruled makes the delay look like an open question about WHETHER the artifact should be the fixture, when the decision was made and only the key was outstanding. Over-caution that misstates the record is still a misstatement. Same family as disposition-clause-is-not-a-status.", "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": "an induced-red probe that DELETES a symbol", "predicate": "drift-pattern", "object": "TESTS ABSENCE, NOT THE DEFECT — it produces a TRACEBACK, not a named failure, so it cannot show the suite would NAME the real regression. My first witness-red for test_pattern_finder removed voice_cross() and got AttributeError; the honest probe left every name in place and reverted the BEHAVIOUR (monkeypatched the cross to the pre-fix semantics), which produced exit 1 with six named failures including camus by name. Compounding error in the same command: I read the exit code through a pipe, so the reported 0 was tail's. Both are the checks-are-the-weak-link class, one day after it was banked.", "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": "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"} diff --git a/claude/memory/session-2026-08-09-the-fixture-was-an-empty-file.md b/claude/memory/session-2026-08-09-the-fixture-was-an-empty-file.md new file mode 100644 index 0000000..c84757c --- /dev/null +++ b/claude/memory/session-2026-08-09-the-fixture-was-an-empty-file.md @@ -0,0 +1,173 @@ +--- +name: session-2026-08-09-the-fixture-was-an-empty-file +description: "Re-ran pattern_finder's Station-I pass to answer the inherited question and found the question's own premise false — V4's 'preserved' adversarial fixture is a 0-byte file that three documents had protected for seven weeks without anyone opening it. Two items filed, ruled and placed (REVIEWED-113/114); 129 built with the engine's first pattern-finder suite. PULLING THREAD: V2's EN gold — narrowing the March anchors from divisions to spans is the ONE act unblocking three of P7's four findings, and P7 already ran on 2026-08-07 with the baseline asymmetry measured at 29x." +metadata: + node_type: memory + type: project + originSessionId: d5f5c224-f249-41a3-87ce-cb2d50c6e1f4 + modified: 2026-08-09T19:24:55.864Z +--- + +# Session 2026-08-09 — the fixture was an empty file + +Woke into an inherited question about whether the verifier had closed a gap. Checked the +question's premise before answering it, and the premise was false — which turned out to be +the day's largest finding and set everything after it. + +## PAST — what moved, and why + +**The literal question, answered: YES, still PASS-BUT-FALSELY — and V0/V1 could never have +changed it.** Re-ran the June spec: **36 citations, every one verbatim and correctly located**, +so **V1 passes all 36** — byte-existence was never the failing tier. The defect is *relevance*, +which is V3/V4. Mechanical evidence needing no judgment: **zero abstentions**, and **three +passages ground two different primitives each** (Eichmann L738 — the pirate-exception passage — +stands for both *threshold-without-decision* and *gray-zone*, via the same token `obedience`; +Musil L31702 and Levi L140 likewise). Abstention **0/12** sits beside N2's **0/5**: two +independent organs, same direction, a day apart. So the wrap's two branches were both wrong and +the third is better news — **the gap was always V3/V4's**, which *confirms* the thread rather +than re-pricing it. + +**⚠ THE PREMISE WAS FALSE, AND THAT IS THE BIGGER FINDING.** The wrap said *"the known-bad +output is preserved as V4's designated adversarial fixture, so the comparison is available."* +`corpus/pattern-finder-station-i-pass1.md` is **0 bytes** — committed empty at `38de1a9` +(2026-06-26), touched by **exactly one commit**, never written, **not in git under any path**, +and **unreproducible** (the corpus has moved under the spec four times: camus left the manifest, +Musil is now EN Wilkins/Pike against French probes, G&G was re-partitioned, handke was added). +**Three documents carried *"do not delete or regenerate it"* for seven weeks and no currency +pass ever opened the file** — a description read in place of the thing, by an instruction whose +entire content was *protect this thing*. + +**Two items filed, both ruled, both placed.** +- **PENDING-129 → REVIEWED-113** `[HARDENING]`: `ground_primitive` iterated the *manifest* while + probes came from the *spec*, so a probed voice absent from the manifest yielded no citations, + no silence, **no mention**. Measured: camus probed in all three primitives (**19 probes**), + report printed *"4 of 4 voices"* three times. Direction is the dangerous one — dropping a voice + can only **raise** the apparent rate. +- **PENDING-130 → REVIEWED-114** `[PROPOSAL]`, ruled **(a) with five conditions**; **the item + does NOT close** until the steward's dated answer key exists. + +**129 built (`6f6bac5`).** `voice_cross()` implements the **cross**, not the difference; +`not_assessed` is a **sibling of `by_voice`** (REVIEWED-47 §1a, quoted from the *placed* record: +*"attested absence lives in its own honest top-level key … not a verdict inside"*); both cells +marked `kind: environment`; the fraction now reads *"of N voices **searched**"*. First suite the +organ has ever had — `tests/test_pattern_finder.py`, **22 checks**; fleet **7 → 8 suites, 263 +checks**. + +**⚠ The fourth cell was a CRASH, not a collapse — building it corrected the ruling.** The design +gate inferred the (manifested, not-probed) cell would fold into `silence`, flagged that as +inference rather than reading, and invited the check. Driven: `KeyError: 'arendt'` — a crash in +**engine** code, the class PENDING-126(c) closed **suite-side only**, second engine-side instance +after `retrieve.py:134`. Scope honoured anyway: made representable and non-crashing, reporting +semantics left unruled. + +**Two artifacts preserved, deliberately as preservation and not designation.** `ec6fa0b` +(pre-fix — now **load-bearing for 113's byte-identity control**, which is not what it was +committed for) and `8746dcf`+`07727dd` (post-fix, **three-part provenance**: spec sha · manifest +sha + index `as_of` · **engine commit**, because tracking two parts and not the engine is exactly +how the June run became unrecoverable). Both round-trips proven against a **fresh emit**, not +against a recorded sha. + +**Four documents corrected (`20f8958`)** per REVIEWED-114 conditions 4–5 — *"retro-gated"* struck +(it encodes a provenance claim the August run cannot satisfy), no document asserts a fixture. +Plus the contemporaneous `tool-evolution-log.md` entry the standing discipline was owed. + +**V2 orientation — and the ground was already mapped.** **P7 ran on 2026-08-07** +(`corpus/v2-stratum-tags.yaml`). The "baseline asymmetry" the wrap said to settle first is not +open, it is **measured**: EN divisions median **27,833** chars vs FR spans median **969** — +**29×**, max **198,258** (Harrison Ch. 9). Four findings; three collapse into **one act**. + +## PRESENT — how it stood + +**This was a day when every one of my errors was in a CHECK, not a write**, which is yesterday's +lesson arriving again with a day's delay: + +- My round-trip verification **tripped on its own instruction** — the preservation header quoted + the marker it told you to strip to, so `index()` matched inside the header. Caught only because + I compared against a **fresh emit** rather than the sha I'd recorded ten minutes earlier. +- My induced-red probe **deleted the function** instead of reverting the behaviour: an absent + symbol produces a **traceback**, not a named failure. And I read its exit code **through a + pipe**, so the `0` was `tail`'s. +- A throwaway assertion referenced the wrong key and crashed a control whose real checks had + already passed. + +**⚠ Steward-caught, and it cut against my own caution: I twice wrote that PENDING-130 was +UNRULED.** It was ruled — (a), five conditions. *Ruled ≠ placed ≠ condition-discharged*: three +states, none implying another. Reading it as unruled makes the delay look like an open question +about **whether** the artifact should be the fixture. It is not; only the key is outstanding. +**Over-caution in the wrong direction is still a misstatement of the record.** + +**⚠ And the standing finding fired a THIRD consecutive time.** I froze four documents on the +*relayed* condition. 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, and +in the direction I had already flagged as a cost in the ledger (*"deliberately unedited" was also +"preserving a falsehood"*). **The placed record answered my own gate question, again**, and I +would have missed it by quoting the relay. + +**The mood: steady and slightly chastened.** The work was good — a real defect found, filed, +ruled, built, tested, and its artifacts protected. But the single most valuable act of the day +was *checking a premise before executing a task*, and nearly every correction came from a person +or from running the thing, never from my own review. + +## FUTURE — what pulls + +> **PULLING THREAD — V2's ENGLISH GOLD: narrow the March anchors from DIVISIONS to SPANS.** +> It is the one act that unblocks **three of P7's four findings** at once — EN stratum-tagging +> (`taggable: false` today), the **29× cell asymmetry**, and §7.3's right-work-wrong-span +> negatives, currently *near-unconstructible* in EN because a 198k-char span contains support for +> almost anything. P7 names it exactly: it *"converts the fixture from retrieval-shaped to +> gold-shaped."* ⚠ It is an **authoring act**, so the route chosen is **propose-and-mark- +> `unverified`** (the R0 pattern) — nothing sealed by the executor's hand alone. + +**ACTIONABLE RESUMPTION POINT (as of wrap — re-judge against what changed):** +``` +0. Clean everywhere. studium-engine ahead 5, UNPUSHED (ec6fa0b, 6f6bac5, 8746dcf, 07727dd, + 20f8958). Fleet 8 suites / 263 checks green. drift-check clean, built-vs-ruled 12/12. + REVIEWED-113 + 114 placed. Nothing half-finished. +1. START HERE: the ALEXANDER EIGHT — B2/B9/B12 (pattern 112), B3 (8), B4 (26), B6/B13 (79), + B7 (24). Patterns are short, so this half is closable in one sitting; Harrison's fourteen + mean ~350k chars of division text and are their own session. Read + `corpus/v2-stratum-tags.yaml` FIRST — P7 already measured this ground on 2026-08-07. +2. Emit each narrowed span as a PROPOSAL carrying its evidence, marked `unverified`, with the + shortlisting mechanism DISCLOSED. ⚠ Do NOT shortlist with retrieve.py/ground.py — those are + the instruments under test; using them makes the gold shaped by what it grades. +3. ⚠ OWED, and only the steward can do it: the DATED ANSWER KEY for the post-fix re-run, + marked AGAINST THE CORPUS (the report emits only a 320-char `_snip` per citation, so it + cannot be marked from the file alone). Until it exists REVIEWED-114 stays OPEN, no document + names a fixture, and V4 is not built. +``` + +**Other open horizons, ranked:** +- **[load-bearing, blocked — named dependency]** P7 finding 3: **§7.4(i)'s nested-voice negative + class has no mechanism on its own exemplar.** Inside Mauss's `body`, neither the Ranaipiri + testimony (L926) nor the Havámál strophe (L852–860) carries a `role: quotation` region — both + served as **citable Mauss**. Same shape as the Weil/Thibon defect fixed 2026-08-07. Its remedy + is blocked on the **`quotation-in` × `translation-of` composition** (REVIEWED-96 Q3, + undispositioned) — now **five days** open and with a **third** instance. +- **[load-bearing]** P7 finding 4: **the authoring plan inverts.** fr inherited gold is **1 A : 9 + B**, and §6.3's French method produces stratum-B by construction → following it lands fr near + **1:27**, not §6.2's 1:1. The fr cell needs **~8 stratum-A pairs** that no instruction asks + anyone to write. Discovering this at grading would read as a recall failure rather than a + composition one. +- **[load-bearing]** P7 finding 1: inherited counts **collapse** — fr 15 instances → **11 + distinct spans**; en 22 items → **12 distinct divisions**. §6.6's power arithmetic is stated in + n, not in distinct spans. +- **[owed]** relay Addendum 2's redraft TEXT · chamber tool-fleet census (REVIEWED-106) · + PENDING-121+128's declared-data commit. +- **[open]** the missing `period` column on `drawers`, which every manifest entry declares and + which the charter calls the engine's *signature capability*. + +**PAUSE STATEMENT:** I am putting this down at a genuine close — everything committed and +verified, two governance items ruled and placed, nothing mid-arc. What I want to find still +pulling is **V2's English gold**, because it is the one act that moves three blocked things at +once and is blocked by none of them. ⚠ What I do **not** want to find is the answer key still +unmarked, because it is the only step in the whole item that no mechanism can cover, and it is +the step the day's central lesson is about. + +**LITERAL QUESTION for next-Claude** *(checkable — the corpus answers it, not introspection)*: +**P7 found that Mauss serves the Ranaipiri testimony and a Havámál strophe as citable Mauss, +with no `role: quotation` region — the same shape as the Weil/Thibon defect fixed two days +earlier. Is that a two-source accident, or a class?** Census every manifested multi-voice source +for spans of another voice served as the host's own citable text. If it is a class, then +§7.4(i)'s negative class has no mechanism anywhere, the live citation-safety exposure is wider +than two sources, and the `quotation-in` × `translation-of` ruling stops being a five-day-old +edge case and becomes the blocker on V2's negative population. diff --git a/claude/memory/session-ledger-2026-08-09.md b/claude/memory/session-ledger-2026-08-09.md new file mode 100644 index 0000000..9be14a1 --- /dev/null +++ b/claude/memory/session-ledger-2026-08-09.md @@ -0,0 +1,161 @@ +--- +name: session-ledger-2026-08-09 +description: "Practice-of-return ledger maintained by /symmetria — returns, open horizons, recalibrations, authorization moves, sub-agent dialogues, bypasses." +metadata: + node_type: memory + type: feedback + originSessionId: d5f5c224-f249-41a3-87ce-cb2d50c6e1f4 + modified: 2026-08-09T19:25:22.534Z +--- + +# Session Ledger — 2026-08-09 + +## Returns + +- **09:00 — `init`.** Wake completed; Symmetria active before any action with blast radius. +- **The question's own premise was false, and checking it first is what caught it.** The wrap + said *"the known-bad output is preserved as V4's designated adversarial fixture, so the + comparison is available."* `corpus/pattern-finder-station-i-pass1.md` is **0 bytes** — + committed empty at `38de1a9` (2026-06-26), touched by exactly one commit, never written. + What is preserved is the **input spec** (`.json`, 3,879 B, 3 primitives). Had I re-run and + compared without looking, I would have compared against nothing and called it a result. +- **Ran to stdout, never over the fixture.** All three modes print; nothing writes. Verified + after the run: tree clean, fixture still 0 bytes. The "do not regenerate" instruction was + honoured — while turning out to protect an empty file. + +## What held + +- **The wake's substrate-check clause fired and changed a claim.** The prior wrap listed + PENDING-121 + 128 as "at the placement gate." Substrate says otherwise: REVIEWED-110/111/112 + are **placed** in `~/REVIEWED.md`, and the un-wrapped 19:37–21:46 session already discharged + REVIEWED-110 pt 13 (`a596420`, supersession header). The gate has *returned*; the item is + unblocked, not waiting. Reading the register rather than the tracker is what caught it. +- **The declared-data commit is verified unbuilt, not assumed unbuilt.** `canonical_binding` + appears in exactly two `docs/` proposal files and nowhere in the runbook — checked, not + inferred from the ruling's "If AUTHORIZED" line. + +## Open horizons + +- **[verified unbuilt, unblocked]** PENDING-121 + 128 — the one declared-data commit to the + `layers:` block. Completion control already specified (one invocation; resolves-at-new-names + as the positive control). +- **[unverified — owed]** Addendum 2 redraft **text** to the jurist; chamber tool-fleet census + (REVIEWED-106); `quotation-in` × `translation-of`, fourth day unruled. +- **[thread]** V2 abstention calibration. Thresholds jurist-ratified (V0 §5) — **do not + re-derive**. Before any chavruta re-run, the baseline asymmetry (engine-over-253 vs + human-over-32) must be settled *first*, not after the numbers exist. +- **[open, awaiting steward]** skill-harvest #190, #191, #192 (+extension), #193, #195, and the + degraded-state-shape-census candidate. Separately: the **41-row S2 ladder batch-append is + already authorized** (2026-07-19) — execution, not a ruling. + +## Confidence to recalibrate + +- **Verified this wake:** REVIEWED-110/111/112 placed (grep of the register) · the two + post-wrap commits and their diffstats · both chamber/studium trees clean · drift-check + 29/29 controls, 0 deferrals due · 377 memory pointers, 0 dead · `canonical_binding` absent + from the runbook. +- **Inherited, NOT re-verified:** every number in the pulling thread — 15/22 top-1, + abstention 0/5, 5 false positives, fleet 202/202, corpus 14 sources / 5785 drawers. These + were measured on 2026-08-07/08, not today. +- ⚠ **An absence is the weaker evidence**, and the un-wrapped session's record is exactly + that: two commits prove *some* work; nothing proves what else it considered or decided. + Treat any claim sourced to that window as unestablished until checked. +- ⚠ **The drift-check's clean is scoped.** 88 prose deferrals in the registers carry no + machine-checkable trigger — "0 due" covers 2 tracked items, not the 88. Counted, not + classified. + +## Authorization moves + +- **PENDING-129 filed** `[HARDENING]`, D-1 — `pattern_finder` silently discards a probed voice + that has left the corpus (camus: 19 probes asked, 0 assessed, report prints "4 of 4"). Placed + at `~/dotfiles/PENDING.md` L2436; header unique, four structural parts present, symlink intact, + drift-check clean after. +- **PENDING-130 filed** `[PROPOSAL]`, D-1 — V4's designated adversarial fixture is 0 bytes and + Stage-1 criterion 1 is unsatisfiable. Placed L2466, same checks. ⚠ Its recommendation carries a + condition the executor **cannot** discharge: the answer key must be marked by the steward, or + the same hand writes both fixture and gate. + +- **SUPERSEDED below (steward: "keep the artifact, just in case").** The re-run is now committed + at `ec6fa0b` as `corpus/pattern-finder-station-i-rerun-2026-08-09.{md,json}` — **preservation, + not the designation PENDING-130 proposes**, and no answer key is marked. The empty `pass1.md` is + deliberately left at 0 bytes: it is the evidence, and overwriting it would destroy the finding. + Both declared pre-commit checks fired; fleet 7 suites green (241 checks, 1 unassessed). + The sha table below stands as recorded — the `.md` carries a provenance header above an + `END-PRESERVATION-HEADER` sentinel, and splitting on it returns bytes identical to a fresh + emit (proven, not asserted). + +~~**⚠ The re-run artifact lives only in the session scratchpad**~~, which was the exact fragility +PENDING-130 describes, one layer along. Regeneration is deterministic *only while the corpus is +unchanged*, so the identity is pinned here instead of trusted: + +| artifact | sha256 | +|---|---| +| rendered report | `9ac1244b29b4c6bd6cdd372464d7d3e6d93efa9e8cf8fdf33eb5a0d39289757f` | +| grounded JSON | `16a08a35a07ebb36276fb84f6cc5b3d6f21e518afdf8a4f3e5fd2fac3b8561c6` | +| input spec (committed) | `a0b3c96259aebb06b0e474a277e2f6fadc5702e5ea34a4d87092bb57ea139723` | +| `corpus/manifest.yaml` | `408ea190150b06633021ad6ca27c3a5b32ed49d1184939561b5ca5f3dc698e3e` | +| index `as_of` | `2026-08-07T19:09:36+00:00` | + +Regenerate: `python3 engine/pattern_finder.py report corpus/pattern-finder-station-i-pass1.json`. +**A differing report sha proves the corpus moved** — which is the check nobody had in June. + +## Standing conditions (carry to /wrap-up — do NOT let this rotate out) + +- 🔒 **No document may call the preserved re-run "V4's fixture" until the steward's dated + answer key exists** (steward, 2026-08-09; PENDING-130 §G). Four documents deliberately + unedited: rebuild-plan §2.3 + criterion 1 · `tool-evolution-log.md` · engine `CLAUDE.md` L61. + Now carried in **three** places, deliberately: PENDING-130 §G (the record) · both artifact + headers (fires at the file) · `MEMORY.md` Active Session (fires at wake). ⚠ Marked **against + the corpus**, not the report; **steward only** — the delegation to the jurist is foreclosed + by formation, not by workload. + ⚠ **Open, surfaced not taken:** engine `CLAUDE.md` L61 currently asserts the known-bad output + IS the designated fixture and must not be regenerated — a **false claim about an empty file**, + live right now. Correcting it is inside PENDING-130's unruled remedy, so it was left alone; + but "deliberately unedited" is preserving a falsehood, and that tension is real rather than + resolved. Steward's call. + +## Returns (later session — closing the gap yesterday's ledger left) + +*Written at wrap, and flagged as such: the entries above were live, these are reconstructed from +the commits and the conversation at the end of the session. Yesterday's ledger stopped at 16:45 +while the day ran to 21:46; this section exists so today does not repeat it.* + +- **REVIEWED-113 + 114 placed by the steward; I read the PLACED text, not the relay — and it + changed what I did.** Condition 4 reads *"§2.3, criterion 1 and `CLAUDE.md` L61 **may be + corrected to name existing material**"* — the opposite of my relay-based reading, which had + frozen all four documents. **Third consecutive instance** of the placed record answering a gate + question I had left open, and it resolved the exact tension logged above under *Standing + conditions* (that "deliberately unedited" was also "preserving a falsehood"). Four documents + corrected `20f8958`; verified no document asserts an existing artifact **is** a fixture. +- **⚠ Steward-caught: I twice wrote PENDING-130 was UNRULED.** It was ruled (a) with five + conditions. *Ruled ≠ placed ≠ condition-discharged.* Corrected in the artifact header + (`07727dd`) and PENDING-130 §H; `8746dcf`'s commit message left standing, because a filed + record records what was said when. **The direction cuts against me** — over-caution that + misstates the record is still a misstatement. +- **V2 orientation: I nearly re-walked mapped ground.** P7 ran **2026-08-07** + (`corpus/v2-stratum-tags.yaml`) and the "baseline asymmetry" I was told to settle first is + already measured (EN divisions median 27,833 vs FR spans 969 — **29×**). Caught by reading the + banked artifact before deriving. The banked-note discipline working, for once, before the fact. +- **AskUserQuestion denied.** I asked which route to take on the EN narrowing when I already had + a safe, reversible recommendation. Took it instead. Recorded as a signal, not yet a rule — one + denial with no stated reason is thin evidence, and I would rather see it twice than write a + preference memory from a guess. + +## Sub-agent dialogues + +## Bypasses (continued) + +- **My own round-trip check tripped on its own instruction.** The preservation header first read + *"strip everything above the `# The pattern-finder` line"* — so `index()` matched the marker + **inside the header that quotes it**, and the round-trip reported `False`. Fixed with an + explicit `END-PRESERVATION-HEADER` sentinel, asserted to occur **exactly once**. The check + caught it because it compared against a **fresh emit** rather than against a remembered sha — + a reduction (sha-only) would have shown a plausible mismatch and invited me to explain it away. + Same family as yesterday's five: *the checks are the weak link, not the writes.* + +## Bypasses + +- **Noted, not a bypass by me:** yesterday's ledger stops at **16:45**, while the day ran to + **21:46** across two further work blocks (the wrap session and the un-wrapped one). The + ledger is not a record of yesterday's last five hours. Naming it now rather than at "a good + moment." diff --git a/claude/memory/skill-harvest-register.md b/claude/memory/skill-harvest-register.md index bfeabbe..8bc5f9a 100644 --- a/claude/memory/skill-harvest-register.md +++ b/claude/memory/skill-harvest-register.md @@ -348,3 +348,17 @@ honest proposal is that the steward decide whether the degraded-state form is di earn its own entry or should be folded into the existing one as an example. **Awaiting:** steward authorization. + +### 2026-08-09 wrap — two proposals; firing moments declared per the REVIEWED-95 gate + +**#196 — `governance-drift-check.py`: assert that any text calling a governance item *unruled* or *unplaced* agrees with the register.** Earned twice in one session, steward-caught both times: I wrote *"PENDING-130 is unruled"* in a commit message and had an artifact header say the item *"proposes"* — while REVIEWED-114 had ruled it (a) with five conditions. **Ruled · placed · condition-discharged are three states and none implies another**; the existing built-vs-ruled check covers only *built-with-no-ruling*, which is the opposite direction and did not fire. Proposed: for every `PENDING-N`/`REVIEWED-N` in the memory files, registers and repo docs asserted to be *unruled / unplaced / not yet ruled / awaiting*, assert the register agrees. +**Firing moment: mechanical, should always fire → `governance-drift-check.py`** — already named in a `/wake-up` step (the measured 83% home class) and already performing register-integrity checks. **Real positives available, not synthetic:** today's two, both preserved in git (`8746dcf`'s message; `07727dd`'s parent state). +**Classification:** detection-only; asserts nothing, expands no latitude → reads FIX-lane. **Filed as `[PROPOSAL]` anyway**, on the same ground as #192: the check is unbuilt and untested, and this session's own lesson is that my checks are weaker than my writes. **Status: PROPOSED**, to be ruled with #192/#195 if convenient — all three are drift-checker extensions. + +**#197 — ladder entry (gate-design family): an induced-red probe must revert BEHAVIOUR, not delete the symbol.** Removing the function under test produces an **`AttributeError` traceback**, which proves the suite *crashes* when the code is absent — not that it would **name** the regression when the code is present and wrong. The honest probe leaves every name in place and monkeypatches the pre-defect semantics; mine then produced exit **1 with six named failures**, camus by name and the `KeyError` resurfacing. ⚠ **Companion, same command:** the exit code was read **through a pipe** (`… | tail`), so the reported `0` was `tail`'s — the *reduction-before-looking* class, already banked as #195 and firing again the next day. +**Firing moment: on a condition the executor must first notice** — *"I am about to witness this suite red."* The weakest routing row, **declared as such rather than dressed up**; no mechanical detector exists for it. Routed to `reference-verification-ladder.md` §Gate design, beside *"a control must sit at the layer the defect lives in"*, which it is a special case of: deleting the symbol puts the control at the wrong layer. **Recorded estimate: ~10–14% retrieval pending the ladder-ritual trial.** +**Classification: `[PROPOSAL]`** — changes what the executor must do before trusting a witness-red. **Status: PROPOSED.** + +**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.**