From 67a720c1d16b2fd2270875f288805f9e2aa92a9c Mon Sep 17 00:00:00 2001 From: David F Glidden Date: Sat, 4 Jul 2026 22:52:45 +0200 Subject: [PATCH] session 2026-07-04: Seam-1 ESCALATE remediation (PENDING-47) + engine charter v0.3 planning; tomorrow's corpus-map + Fable scope-charter laid --- PENDING.md | 94 +++++++++++++++++++ claude/memory/MEMORY.md | 3 + ...04-chamber-escalate-then-engine-charter.md | 52 ++++++++++ claude/memory/session-ledger-2026-07-04.md | 47 ++++++++++ 4 files changed, 196 insertions(+) create mode 100644 claude/memory/session-2026-07-04-chamber-escalate-then-engine-charter.md create mode 100644 claude/memory/session-ledger-2026-07-04.md diff --git a/PENDING.md b/PENDING.md index c5bd8ae..d8b7f5c 100644 --- a/PENDING.md +++ b/PENDING.md @@ -1125,3 +1125,97 @@ DISPOSITION: - Per-genre mapping/disambiguation table: NOT RATIFIED — re-extraction ENGINEERING to review once built (jurist hasn't seen the audit, only the summary; the ambiguous string-match calls resolve during extraction). The architecture above the table is sound regardless. → §III's per-genre registry is a LIVING data layer (grows/reviewed during extraction), NOT ratified doctrine — matches the doctrine-stable/data-living split I described to the steward. - STANDING PROCESS NOTE (jurist, not corpus-specific): ANY corpus-population claim feeding spec doctrine must be SOURCED FROM THE DSL/SOURCE DIRECTLY, or explicitly flagged extract-derived+provisional, BEFORE it does normative work. Same discipline gap-2/gap-3 enforce on the corpus, applied to how the corpus is AUDITED. → adopt as standing practice: verification-ladder entry + Symmetria §3 flag + feedback memory (converges with my own 3×-this-session verify-against-substrate lesson). Capture at wrap. ⇒ §III was the LAST gating ruling. DOCTRINE PHASE COMPLETE — all gaps 1-8, generative principle, amendment process, three questions, §III posture ratified. Phase ② (draft spec v2.0 superseding version + generative validator) is UNBLOCKED. Remaining OPEN-marked (non-blocking): per-genre table (engineering), tier-2 numeric bar (calibration), the two held forks (in-band/sidecar; markdown/TEI-XML). + +## PENDING-47 — Corpus stress-test pre-registration (thresholds gate before execution) +**Date:** 2026-07-04 +**Tag:** [PROPOSAL] (the stress-test protocol + its ruling-thresholds; jurist gate before any run) +**Summary:** v2.0 is ratified doctrine; the corpus stress-test brings the ~2,041-work corpus to spec. First artifact = a PRE-REGISTRATION doc fixing ruling-thresholds BEFORE any test data is seen (the jurist's strongest safeguard, easiest to skip). Drafted: `docs/corpus-stress-test-pre-registration-2026-07-04.md`; jurist cover note `docs/corpus-stress-test-pre-registration-FOR-JURIST-2026-07-04.md`. +**Load-bearing finding (verified against `scripts/match_sources.py`, not the summary):** the cited "~1% source-match false-positive" is NOT an independent measurement — it is an eyeball over the matcher's OWN `author_disagrees()` warning, which fires only when the canonical surname is ABSENT from the source, and is therefore blind by construction to the two dominant FP classes (same-author-wrong-work: Bachelard Reverie→Espace; whole-for-part: whole Recherche→Vol III), both sitting UNFLAGGED in the 321 confirmed. Same structural error as the overturned "74% anchorless" premise. ≥2 genuine wrong-work FPs already found unflagged (disclosed prior, not threshold-setting). +**Three seams, dependency order:** (1) source-matching reliability FIRST (independent = 2nd content-fingerprint matcher flags disagreements → human ground-truth rules; N=40 of 321 non-Loeb confirmed, fixed seed; Loeb/V-DSL excluded — DSL IS the source); (2) order-sensitivity — inject-known-bad on the multiset word-guard (verify_conversion prose_delta is order-blind by construction; order-sensitive/anchor-bound layers ruled-but-unimplemented); (3) disambiguation-map edges — go-looking for Virgil `prv` + bare-integer (line vs section). +**Steward decisions (2026-07-04):** thresholds CONFIRMED subject to jurist gate before execution; instrument = BOTH (executor builds 2nd matcher to flag disagreements, human rules the flags). Nothing runs until the jurist gates. +**Open jurist question (Q1, surfaced not resolved):** the pre-registration grades Seam 1 by RATE (≤1%→FIX / 1–5%→PROPOSAL / >5%→ESCALATE), but the change-class criterion ("does this change what a gate accepts?") makes the `author_disagrees` structural blindness a PROPOSAL *independent of rate* — the rate sizes the FIX work, the blindness is the gate-change. Split the grading onto two axes (structural-blindness→PROPOSAL; magnitude→sizes-FIX/forces-ESCALATE-above-threshold), or keep the rate-coupled table? Executor leans split; did NOT revise the just-confirmed doc unilaterally. +**Correction folded in:** an earlier recon claim that `graduate_to_canonical.py` was unwired from `verify_conversion` was STALE — Wave 0 (`f9cbb8e`) wired both gates (lines 36-37, verified). Records-drift-both-directions. +**Files affected (on gate):** the two pre-registration docs; on execution, a new content-fingerprint matcher (Instrument B) + run logs; Seam findings graded per the gated table. +**Awaiting:** jurist gate on the pre-registration thresholds (esp. Q1) via steward relay, THEN executor builds Instrument B + runs Seam 1 small-batch. + +### PENDING-47 — JURIST GATE RECEIVED 2026-07-04 (GATE-WITH-METHOD-CHANGE; steward relayed) → pre-registration REVISED + LOCKED +Jurist confirmed the structural-blindness finding (arithmetic + logic independently checked) and gated with four required method changes, ALL now applied to `docs/corpus-stress-test-pre-registration-2026-07-04.md` (v1 LOCKED; revision record §6): +1. **Q1 split — YES.** Seam 1 graded on two axes; the confirmed blind spot (≥2 real instances) is PROPOSAL-class **decided now**, independent of the sample. Reworded around *confirmed* not *possible* blindness (jurist's precision: a merely-conceivable blind spot is not auto-PROPOSAL, else any incomplete heuristic qualifies). +2. **Q2 statistics — the point-estimate grading was unsound.** At N=40 a truly-5% corpus reads as 0–1 errors ~40% of the time (verified P(0or1|.05,40)=0.399). FIX: grade on the one-sided 90% Clopper-Pearson UPPER BOUND U, with an underpowered-sample top-up rule (0/40→U=5.59%, straddles 5%→top-up expected; n≈45 clears at 0 errors). 5% substantive line kept. +3. **Q3 — Loeb exclusion sound but the risk was being read as "none" not "different."** Added SEAM 1-BIS: V-DSL work-mis-attribution (card attached to wrong work) — covered by neither Seam 1 (external/non-Loeb) nor Seam 3 (anchor-TYPE not work-IDENTITY). Disjoint population, non-blocking, thresholds pre-set (same CP statistic). +4. **Q4 — Seams 2 & 3 already structural, no split needed.** Two smaller additions applied: Seam 2 tests ≥2 scramble patterns (within-sentence + multi-line, gate-on-class); Seam 3 guarantees ≥1 card per signal type (not a count of 20). +**DECIDED-PROPOSAL awaiting steward BUILD-authorization (Axis A):** add a same-author-wrong-work + whole-for-part check-class to the source-match gate (content-fingerprint the natural mechanism). Jurist ruled the *need* settled today; the sample sizes it; **steward authorizes the build.** +**Status:** pre-registration LOCKED, jurist-cleared "ready to run." NEXT (executor): build Instrument B (content-fingerprint matcher) + the CP grader, run Seam 1 (N=40) + Seam 1-bis in parallel, first-pass eyeball the flagged hard cases, surface genuinely-ambiguous ones + the graded verdict to steward. Production gate-change (Axis-A PROPOSAL) held for steward build-authorization. + +### PENDING-47 — SEAM 1 RUN COMPLETE 2026-07-04 → [ESCALATE] the ~1% does NOT hold (verdict: `_curation/stress-seam1-verdict-2026-07-04.md`) +Instrument B built + validated + hardened 3× (`scripts/stress_source_match_verify.py`), run on N=40 random (seed 20260704) of 321 non-Loeb confirmed; each flag human-ruled (Instrument A). +**RESULT: k=2 confirmed source-match FALSE-POSITIVES** — (1) `montaigne` = Stefan Zweig's *Montaigne* biography canonical ← Montaigne's own *Essais* source (suspect=True: author_disagrees FIRED but the match survived into confirmed — the warning is not a gate); (2) `semaison-la-philippe-jaccottet` = Jaccottet *La Semaison* vol1 (real 59,508-word canonical) ← *La Seconde Semaison* vol2 source (suspect=False: author_disagrees BLIND — same author; the random-sample instance of the structural class the gate ruled a PROPOSAL). +**GRADE (locked rule): p̂=5.0%, U₉₀(Clopper-Pearson)=12.8% > 5% → ESCALATE.** Robust: k=1 → U=9.4%, still ESCALATE; only k=0 would top-up, and k≠0. **Literal question ANSWERED: the cited ~1% is refuted** (5× the point estimate; same shape as the overturned "74% anchorless"). Per taxonomy ESCALATE = surface + do not proceed: **Seams 2–3 HELD** per the pre-registration stop condition (would test order/anchors against wrong sources). +**SECOND FINDING [NEW, unbudgeted — corpus integrity]: stub canonicals.** 2/40 (`leopold-sand-county-almanac` 5 words; `naess-deep-ecology` 20 words) are placeholder "canonical" files, not graduated verbatim texts → ~15+ implied in the 321, likely more corpus-wide. Orthogonal to source-matching; the graduation gate admitted (or predates admitting) body-less files → its own census + a gate question. +**AWAITING STEWARD/JURIST:** (a) the ESCALATE ruling on source-matching (re-rule before downstream, or a bounded disposition); (b) build-authorization for the Axis-A gate check-class (Instrument B is the prototype); (c) whether to open a stub-canonical census now or hold. Executor HOLDS — does not proceed to Seams 2-3 or the full corpus. + +### PENDING-47 — FULL-321 MAGNITUDE + STUB CENSUS 2026-07-04 (steward: recommend the ESCALATE move + quick stub census). Jurist relay: `docs/stress-seam1-ESCALATE-FOR-JURIST-2026-07-04.md` +**Steward decisions:** ESCALATE-move = "which do you recommend" → executor recommended **relay-to-jurist-with-magnitude** (run the CHEAP automated full-321 B-pass to give the jurist real magnitude; DEFER the expensive full hand-adjudication until after the ruling, which may reframe what counts). Gate check-class = **HOLD until ESCALATE ruled**. Stub census = **quick census now**. +**STUB CENSUS (whole non-Loeb corpus, 335 files):** only **4 stub canonicals** (<200-word bodies): leopold(5w) · naess(20w) · latour-never-modern(22w) · yunkaporta-sand-talk(73w) — all in `contemporary_voices` (one import batch, bodies never graduated). BOUNDED + localized — my 2/40→~15 extrapolation was TOO HIGH; the census corrected it (why steward said census-don't-guess). Loeb excluded (952). +**FULL-321 automated B-pass (unruled):** 251 agree · 35 FLAG · 34 no-source(azw3/mobi+garbled) · 1 thin. Triage of the 35 (PROVISIONAL — only N=40's 8 rigorously ruled): ~10 confident genuine FPs [4 cross-author susp=True: montaigne/the-odyssey(←Clarke 2001)/meditations(←Bourdieu)/nietzsche; 6 same-author-wrong-work susp=False = author_disagrees-BLIND: semaison/reverie/lhomme-T1/orthotypo-vol2/berger-essays/suzuki-intro] + ~4 SCOPE sub-class (whole←part: Proust←VolIII, Quixote←Part1; work←collection: el-aleph, fictions) + 2 stubs + ~18 same-work-noise. **Provisional magnitude ~3–4.5% FP** — refutes ~1% at full scale, consistent with N=40. +**TWO STRUCTURAL FINDINGS for the jurist:** (1) author_disagrees BLIND to same-author-wrong-work (~6 instances, not 1) → Axis-A PROPOSAL firmly evidenced; (2) PROCESS GAP — the 4 cross-author FPs are susp=True (warning FIRED but they stayed CONFIRMED; the warning is not a gate). Concrete: tool-log says `meditations` re-linked to Hays 07-02 but source-matches.json still shows Bourdieu → stale-json-or-lost-fix, verify. Plus a NEW SCOPE-DOCTRINE question (whole↔part / work↔collection), analogous to the un-run Seam 1-bis V-DSL work-identity risk. +**Jurist asked to rule:** the ESCALATE disposition (bounded FIX-list ~10-14 + gate-hardening vs stronger); a scope doctrine; then confirm to fully adjudicate the 35 → final FIX-list. Executor HOLDS. + +### PENDING-47 — JURIST ESCALATE RULING RECEIVED 2026-07-04 (steward relayed; `docs/` copy owed). Differentiated remediation, NOT a-or-b. +Jurist INDEPENDENTLY recomputed the CP bounds (5.0%/12.8%; k=1→2.5%/9.4%) — **ESCALATE holds, confirmed**. Standing practice ruled: the CI-not-point-estimate grading + the drop-one-case robustness check are now STANDARD for every ESCALATE (→ verification ladder). Dispositions: +1. **Detection blindness (Axis-A):** confirmed (6 instances now); nothing new — PROPOSAL already decided at Q1, proceeds to steward build-auth. Correct that executor HELD the build (more evidence ≠ license to act ahead of authorization). +2. **PROCESS-INTEGRITY finding ELEVATED — "the most important thing in the whole report."** The 4 cross-author FPs fired `suspect=True` yet stayed CONFIRMED (the review step didn't run or didn't work), AND the tool-log claims a `meditations`→Hays fix that `source-matches.json` contradicts. Jurist: this is not one stale record — it's whether ANY recorded fix in the system actually took effect. **Needs its OWN priority investigation BEFORE any remediation is trusted** — NOT folded into gate-hardening. "Find out why the Bourdieu fix didn't stick before trusting that the next ten will." Re-pointing the FIX-list under a broken persistence mechanism reproduces the same silent non-persistence. +3. **SCOPE DOCTRINE RULED (asymmetric — don't grade the two together):** + - *canonical=whole, source=one PART* (Proust←VolIII, Quixote←Part1): genuine UNDER-COVERAGE → a **§IV edition-identity failure once edition-identity is read to include SCOPE** (not just translation/printing). Uncovered remainder = unverifiable-by-this-source, NOT silently fully-served; keep as a bounded partial match only if the covered region is worth it. + - *canonical=one work, source=SUPERSET collection* (El Aleph←collection): different + smaller — an **extraction-precision** question (did slicing bound to the right text?); if extraction isolates correctly it's a complete verifiable match. Don't grade on the subset axis. + - **UNIFY with Seam 1-bis: ONE scope-identity principle** (does the source's actual extent match what the canonical claims to represent), two applications (external match / DSL card). Not two doctrines that could drift. +4. **Remediation order:** process-integrity investigation FIRST → apply scope doctrine in the deferred full-35 adjudication (now unblocked, doctrine in hand) → FIX-list proceeds only AFTER persistence + scope resolved. Axis-A gate-hardening → steward build-auth (parallel). +5. **Seams 2 & 3 unblocked PRECISELY (not a blanket freeze):** Seam 2 may proceed once its OWN 3 test files are individually confirmed (order-sensitivity doesn't depend on the other 318). Seam 3 was NEVER blocked by non-Loeb matching — its condition is Seam 1-bis (DSL work-identity) for its own ≥20 sample cards. Full-corpus source-matching STAYS BLOCKED until persistence resolved + scope applied to the 35 + fingerprint gate-hardening steward-authorized. +**EXECUTOR NEXT (jurist-directed):** (1) [priority, jurist-elevated] process-integrity investigation — why did the Bourdieu fix not persist; is there a systemic fix-persistence bug. (2) scope doctrine now in hand → the full-35 adjudication is unblocked (apply the asymmetric rule). (3) Seam 2's 3 test files individually confirmable. (4) Axis-A build still awaits steward auth. Parallel deep-compute (steward-authorized): the work-identity & scope study (now also grounds the unified scope-identity principle the jurist ruled). + +### PENDING-47 — PROCESS-INTEGRITY INVESTIGATION DIAGNOSED + WORK-IDENTITY STUDY DELIVERED 2026-07-04 +**(1) Persistence investigation (jurist's elevated priority) — DIAGNOSED. Doc: `docs/source-match-persistence-investigation-2026-07-04.md`.** Answer is WORSE than the two-way discrepancy: **no source-match fix can persist, because there is no persistence mechanism.** Verified against code: (a) NO override/exclude/pin layer exists anywhere (grep clean); (b) `source-matches.json` is pure algorithmic regeneration — `match_sources.py` re-derives every match from `classify()`, reads `chamber-source-link.md` ONLY for the "Needs locate" block, never as authority → any hand-fix is overwritten next run; (c) the canonical file carries NO authoritative `source:` field (only `source_format`); (d) `meditations` is a THREE-way divergence (tool-log=Hays / chamber-source-link.md=Stoic-Six-Pack / json=Bourdieu), no single source of truth. **Implication (jurist was right to gate on this): re-pointing the FIX-list under this mechanism silently reverts.** Remediation [PROPOSAL], steward-auth required, MUST precede the FIX-list: **authoritative `source:` (path+sha256) on canonical frontmatter, consumed by the matcher as a PIN** (Option A, recommended — the file-is-source-of-truth principle the catalogue already follows). NOT affected: catalogue (hash-pinned from disk), verbatim/graduation gates. +**(2) Work-identity & scope study (steward deep-compute choice) — DELIVERED. Doc: `docs/work-identity-and-scope-study-2026-07-04.md`** [PROPOSAL, design study — builds nothing, commits no schema]. Synthesized from 3 parallel prior-art sweeps (FRBR/LRM · CTS/DTS · BIBFRAME/TEI/dedup-practice) — all THREE traditions CONVERGE and INDEPENDENTLY CONFIRM the jurist's first-principles scope ruling. Key spine: CTS's work-identity is *asserted-not-demonstrated* = exactly what the Chamber's verbatim thesis distrusts → **demonstrate identity by CONTENT, not title.** Design: (i) declared `work_id` key (Standard-Ebooks-style); (ii) three orthogonal per-text assertions (identity / scope-relation `is_part_of`|`contained_in` + extent / expression-designation); (iii) match-gate = 3 veto-bearing gates (identifier-veto / scope-extent / **content-fingerprint = Instrument B, already prototyped**) — "disagreement is a veto not a low score" (OpenLibrary shape); (iv) the persistence pin (§3.4 = the remediation above). **The jurist's asymmetry operationalized by FRBR's "who created the grouping?" diagnostic** (author→whole/part=under-coverage; compiler→aggregate=extraction-precision) — the exact two cases. Unified scope-identity principle = Gate 2 applied to Seam-1 + Seam-1-bis. **This study SPECIFIES the Axis-A gate check-class + the persistence remediation + operationalizes the scope doctrine — the do-it-once work-identity foundation the corpus never had.** +**Still awaiting steward:** build-auth for (a) the persistence pin [precedes FIX-list], (b) the Axis-A gate redesign [Gates 2+3]. Both now fully specified by the study. Executor HOLDS. + +### PENDING-47 — JURIST RULING on persistence + work-identity study 2026-07-04 (steward relayed; `docs/` copy owed). PHASED authorization. +Persistence diagnosis CONFIRMED (worse — absent not broken; the meditations 3-way = same "trust the visible artifact without checking authority" shape as 74%/Loeb, now at the correction-mechanism level). Work-identity corroboration checked DIRECTLY + ruled GENUINE (the FRBR "who created the grouping" diagnostic is PRIOR to the jurist's own scope question — it asks whether the canonical unit is correctly BOUNDED, not just whether the source covers it; would correctly handle a commercially-split single novel where "enough content?" alone can't tell whole-vs-volume). Dispositions: +1. **Option A (source: pin on canonical) APPROVED — with a NON-OPTIONAL attestation condition:** "pin" must mean VERIFIED not merely PRESENT. A bare-present field populated by the same conversion pipeline that produced the errors would LOCK IN a false pin — WORSE than regeneration (today's bad matches can be caught by a better algorithm later; a falsely-pinned one is locked by design). So `source:` needs a companion attestation — WHO verified + AGAINST WHAT (Instrument A / B / manual) — before the matcher treats it as a pin vs a still-overwritable provisional. Same shape as the `sectionless: true` ruling (bare flag ≠ safeguard; attributed attestation = safeguard). +2. **Meditations reconciliation:** sequencing CONFIRMED — after the layer exists, not before (else it's just the 4th divergent record). +3. **PHASED — approve urgent core NOW, route full design separately (no redo risk: `source:`=which-file-verified and `work_id`=which-abstract-work are COMPLEMENTARY, not competing):** + - **AUTHORIZED NOW:** (a) the persistence layer (Option A + attestation) → BUILD once steward authorizes the [PROPOSAL]; (b) apply "who created the grouping" diagnostic MANUALLY to the 35 flags = the operational form of the scope doctrine, no Gates 2-3 needed. + - **ROUTED as its OWN [PROPOSAL], own timeline, NOT blocking:** `work_id` key, scope-relation field, automated Gate 1-3 pipeline redesign. Valuable + worth adopting, but not a prerequisite to finish the current remediation. + - **Axis-A fingerprint gate** (already PROPOSAL-ruled): builds on Instrument B independently, without waiting for the extent-comparison machinery. +**WHAT PROCEEDS:** persistence layer (Opt A + attestation) → build on steward [PROPOSAL] auth · reconcile meditations → after layer · **manual scope diagnostic on the 35 → NOW** · work_id/scope-relation/Gate2-3 → separate PROPOSAL · Axis-A fingerprint gate → independent, on steward build-auth. +**STEWARD DIRECTIVE (2026-07-04): integrate OSS in part or whole where it fits — don't reinvent.** → tooling-verification sweep RUNNING (content-fingerprint/text-reuse · biblio-identity/reconciliation · CTS-DTS impls); integrate-vs-build matrix owed, will shape the persistence attestation (reuse §V W3C-PROV pattern?), the Axis-A fingerprint gate (datasketch/passim?), and the separate work_id PROPOSAL (OpenRefine/Wikidata? MyCapytain?). + +### PENDING-47 — INTEGRATE-VS-BUILD ASSESSMENT DONE 2026-07-04 (3-agent OSS sweep, maintenance+license VERIFIED live). Doc: `docs/work-identity-tooling-assessment-2026-07-04.md` +Steward was right — the study's build-default was too broad. Governing principle: **integrate the substrate + enrichment; OWN the spine + verdict** (§IV applied to tooling: locator-you-own = constitutional, external ID = witness-not-notary). Corrected my OWN wrong guess: MyCapytain (the "obvious" CTS integration) is DORMANT (last commit 2021). Matrix: +- **INTEGRATE:** `rapidfuzz` (title/author sim, MIT active) · `recordlinkage` pinned (deterministic rule+threshold veto-gate; comparison-vector = audit trail; BSD-3) · Wikidata-reconciliation/SPARQL + VIAF + `wikimapper` as human-in-loop ENRICHMENT (QID/VIAF attributes, NOT the anchor — ~45-75% coverage would strand a third). +- **KEEP HAND-ROLLED:** Instrument B containment (verified ALREADY asymmetric → datasketch buys nothing at n=2000) · the work-identity VERDICT (no OSS does this). +- **BUILD (own):** the deterministic work_id slug SPINE (100% coverage, constitutional) · a thin ~150-LOC CTS-URN parser. +- **BORROW vocabulary not runtime:** DTS 1.0 Collections (`member`/`totalParents`/`totalChildren`/Collection-Resource typing) + TEI `relatedItem type=host` for the scope model · W3C-PROV (§V, already ours) for the persistence attestation. +- **REFERENCE not vendor:** OpenLibrary `match.py` weighted-veto approach (AGPL-3.0, re-implement) · `pyCTS` as test-oracle (GPL-3.0, frozen). +- **REJECT:** datasketch(cond)/passim/TRACER/text-matcher/textreuse-R/ssdeep-TLSH/simhash/dedupe(active-learning-opacity)/MyCapytain+Nautilus(dormant)/openlibrary-client/isbnlib. **RESERVE:** splink (10× scale). +- **NET on the ruled build targets:** Axis-A gate = keep-B + rapidfuzz + recordlinkage (less to build). Persistence attestation = §V-PROV record (nothing new). work_id PROPOSAL = own-key + DTS-vocab scope + Wikidata-enrichment. +- **HIGHEST-LEVERAGE EMPIRICAL CHECK before committing the external axis:** run ~100 representative works (ancient/translation-weighted) through Wikidata reconciliation → MEASURE the real QID attach rate (the ~45-75% is estimate, not measured — measure-don't-trust). Tooling-register entry owed. + +### PENDING-47 — ITEM 1 (persistence layer) BUILT + TESTED 2026-07-04 (steward: "work through them sequentially" = build-auth). NOT committed; held for review + jurist ratification. +Steward asked "design around the tension or resolve it?" → RESOLVED (not designed-around). **The check that resolved it:** the reading-index's `source_sha256` hashes the CANONICAL .md TEXT (spec §VI L363 + the Pattern-Language example); the persistence pin needs the hash of the SOURCE FILE (epub/pdf) — a DIFFERENT object. So never a genuine drift conflict, only a naming collision. Resolution = the **generalized hash-locality principle**: a binding-hash lives with its artifact's authoritative record (reading-index hash→sidecar; verification hash→on-file `source_verified:`); distinct name `source_file_sha256` (≠ forbidden `source_sha256`); one principle two instances, not rule+exception. **Awaiting jurist ratification of the principle.** +**BUILT:** `match_sources.py` — `attested_pin()` + `frontmatter()` (PyYAML); a `source:` is honored as an AUTHORITATIVE PIN (bypasses `classify()`, re-emitted identically every run) ONLY with a `source_verified:` attestation whose `by` names a VERIFICATION instrument (jurist condition: `conversion-pipeline` CANNOT self-attest; bare `source:` = provisional). `graduation-spec.yaml` — `source_verified` added to optional + the pin-semantics + the hash-locality principle; `source_sha256` stays forbidden. `test_tools.py` — 7 new pin cases (bare≠pin, pipeline≠pin, incomplete≠pin, attested=pin, nested-parse, fm-less-no-crash). **28/28 pass; backward-COMPATIBLE (0 pins today → layer INERT → no regression on the 321; activates only when fixes are pinned).** Persistence PROVEN on the meditations case: pin emits Hays not the Bourdieu FP, every run. +**Meditations reconciliation** now UNBLOCKED (the layer exists to hold the answer) — a FIX to apply during the FIX-list, pinning the correct source with attestation. +**Next in sequence: ITEM 2 — apply "who created the grouping" diagnostic MANUALLY to the 35 flags** (jurist-authorized, independent of the persistence schema). Then item 3 (Wikidata coverage measurement), item 4 (work_id/scope-pipeline separate PROPOSAL). + +### PENDING-47 — ITEM 2 (full 35-flag adjudication) DONE 2026-07-04. Doc: `_curation/stress-seam1-flag-adjudication-2026-07-04.md`. The FIX-list. +Two-axis method (identity: right work? + scope: "who created the grouping?"). Ruling on the 35: **11 confirmed genuine FP** [8 wrong-work/author: montaigne/nietzsche/the-odyssey/meditations/ecrits-Lacan/reverie/suzuki-intro/berger-essays · 3 wrong-VOLUME: lhomme-T1←T2/orthotypo-vol2←vol1/semaison-vol1←vol2] · **2 scope under-coverage** (whole←part, AUTHOR-division → §IV: a-la-recherche←VolIII, don-quixote←Part1 → bounded-partial-or-re-source) · **2 work←collection** (COMPILER-aggregate → extraction-precision: el-aleph, fictions → verify slice isolates) · **2 stubs** (latour, naess — corpus fix) · **1 needs-steward** (works-eliot empty-frontmatter, Charles-vs-T.S.-Eliot) · **17 correct** (fingerprint-negative edition/translation/OCR/garbled-source noise). FP rate ≈ 3.4-4% of 321, consistent with the N=40 ESCALATE. **RATIO HOLDS: every corpus fix is FIX-class** (re-point/graduate); the one gate-change (author_disagrees blindness) was already the Axis-A PROPOSAL — the two-tier path is real, not decorative. **APPLICATION HELD** until the persistence layer is ratified (jurist sequencing: pin the corrections with attestation, else they revert). +**Next: ITEM 3 — Wikidata coverage measurement** (~100 reps through reconciliation; needs web/reconciliation API). + +### PENDING-47 — ITEM 3 (Wikidata coverage) MEASURED 2026-07-04. Doc: `_curation/wikidata-coverage-measure-2026-07-04.md`. +n=100 random non-Loeb, structured query (title + author-P50, no type). **AUTO 27% · CANDIDATE(review) 34% · NONE 39% · usable-ceiling 61%.** **Measure-don't-trust applied to the measurement itself:** a first pass read 2% auto → caught as a QUERY ARTIFACT (flat "{title} {author}" concat + written-work type-constraint crushed scores); structured query → 27%. Had I reported 2% I'd have understated Wikidata as badly as the sweep overstated it. Caveats: "confident"≠"correct" (reconciler confidence, human-confirm before trust — enrichment-OK, anchor-NO); coverage tracks composition (Western canon reconciles ~100; ancient/translation/essay → NONE). **Confirms the architecture: work_id spine PRIMARY (100%/offline/governed); Wikidata/VIAF = human-in-loop enrichment where they resolve (~27-61%), never load-bearing.** +### PENDING-47 — SEQUENCE COMPLETE (items 1-3 done). ITEM 4 = the work_id/scope-relation/Gate-1-3 pipeline: jurist-ROUTED as its OWN [PROPOSAL], own timeline, NOT build-now (design already specified in work-identity-study + tooling-matrix). Standing, not actioned this session. +**AWAITING STEWARD/JURIST:** (a) jurist ratification of the hash-locality principle (item 1) · (b) jurist ratification of the work-identity study/tooling matrix + steward auth to open item-4 as its own PROPOSAL · (c) steward call on when to apply the held FIX-list (after item-1 pin ratifies) incl. the meditations reconcile + works-eliot disambiguation + the 2 scope-under-coverage bounded-vs-resource calls. All artifacts UNCOMMITTED. + +### PENDING-47 — HASH-LOCALITY RATIFIED + FIX-LIST APPLIED + COMMITTED 2026-07-04 +**Jurist RATIFIED** the hash-locality principle + distinct naming + confirmed the attested_pin implementation satisfies the condition (read-of-description caveat: 28/28 accepted on report). 2 small notes (not conditions): `against`→real evidence (HONORED — pins carry the Instrument-B N/M); pins carry implicit re-verify-if-method-revised. +**FIX-LIST APPLIED (steward "Yes"):** 5 verified FP re-points PINNED to the **permanent Chamber Sources home** (steward correction: pin the permanent home, not the transient library path) with real Instrument-B `against` evidence — the-odyssey, montaigne, lhomme-tome-1, suzuki, berger (5/5 or 4/5). **ARCHIVE-CONTAMINATION FINDING (steward's permanent-home reminder surfaced it):** the FP contamination had reached the permanent archive — `archive_sources.py` had copied WRONG sources under right slugs + `dest.exists()` locked them in; 5 CS copies were the wrong source (0/5) → force-replaced with verified-correct (governed rezip/sha, manifest `corrected-2026-07-04`). **Implication: full archive↔matches reconciliation owed post-gate** (contamination likely in every archived FP). **DEFERRED:** 2 CS-corrected-but-pin-deferred (orthotypo-vol-2, semaison — NO frontmatter, a new corpus-integrity defect beyond the 4 stubs); 4 needs-locate (reverie needs FRENCH ed, meditations/ecrits/nietzsche not on disk — no correct source to pin; the pin mechanism has NO exclusion path → these persist as algorithmic-FPs until an exclusion path or the Axis-A gate). **COMMITTED + PUSHED** the day's chamber-library work (stress-test artifacts, persistence layer, study/tooling docs, 5 pins). `_scratch/` + the nature-of-order-vol-1 untracked file EXCLUDED (not ours). +**STILL OPEN:** exclusion-path design (for FPs with no correct source) OR rely on the Axis-A gate; the 2 no-frontmatter canonicals' frontmatter repair; the 4 needs-locate source hunts; works-eliot disambiguation; the 2 scope-under-coverage calls; full archive reconciliation; jurist ratification of the work-identity study (item 4). diff --git a/claude/memory/MEMORY.md b/claude/memory/MEMORY.md index a954b08..9e3b5f2 100644 --- a/claude/memory/MEMORY.md +++ b/claude/memory/MEMORY.md @@ -51,6 +51,9 @@ permalink: claude-memory/memory - [Be (laundromat)](project-be-laundromat.md) — canonical workstream tracker established 2026-06-08 (Seb-relay of locked decisions). Be = Skemantix startup (Seb+David) funding CapableMind's funding-ladder; **bridge, not venture**. Decisions LOCKED: entity/exit (CapableMind decoupled, grant-funded), pricing (Living $12.99/mo · Archive $69.99/yr · Memorial $49.99/yr · Renovate ~$199 · $8.99 floor), CF Self-Serve Agency + versioned-template-package infra. **a11y gate MERGED (Pat 100/100/100).** Pre-revenue: the WTP gate = renovate Pat → charge her. **Discipline: stop adding spec until the gate clears → nothing for executor on be until then.** Repo @ `f43a0fd`. ## Active Session +- [Session 2026-07-04 (evening→night) — Chamber Seam-1 ESCALATE worked fully through; engine charter v0.3; tomorrow's map+plan laid](session-2026-07-04-chamber-escalate-then-engine-charter.md) — Ran the corpus stress-test's Seam 1 end-to-end: pre-registration→**ESCALATE** (cited ~1% source-match FP REFUTED, U₉₀=12.8%)→jurist-ratified **persistence PIN** (on-file `source:`+attestation; hash-locality principle resolved-not-designed-around)→**FIX-list applied** (5 verified re-points to the *permanent Chamber Sources home*)→**archive DE-CONTAMINATED+audited** (~2% bounded — steward's permanent-home reminder surfaced it)→Seam 2 **FIX** + Seam 1-bis **CLEAN** (Loeb work-identity 0/952; apparatus FLATTENED = separate gap)→README. Then **STUDIUM-ENGINE deep research** (7 fronts)→**charter update v0.2→v0.3** + research base + README + tomorrow's Fable scope-charter. **9 commits, 2 repos, all pushed.** **PULLING THREAD: tomorrow begins with the MAP and agency** — corpus-work-map (`chamber-library/_curation/corpus-work-map-2026-07-05.md`, first-hands Region 1.1 = build the exclusion path) + engine stage-1 plan (Fable-5 via `studium-engine/docs/stage-1-replan-scope-charter-2026-07-05.md`); tonight lays all plans, tomorrow is build. Steward's challenges each corrected a real default + surfaced better (hash-locality; integrate-vs-build matrix; archive-contamination; **navigate-don't-retrieve**). ENGINE TELOS: **DEFERRAL** (searched-vs-deferred-to) + navigate-don't-retrieve = the §II inversion made concrete. + +## Archived (2026-07-04 night — ESCALATE + engine charter v0.3) - [Session 2026-07-03→04 — Chamber Library spec v2.0 RATIFIED, supersedes v1; corpus stress-test next](session-2026-07-04-chamber-library-v2-ratified.md) — **Phase 2 executed end-to-end across midnight: drafted `chamber-library-specification.md` v2.0 SPINE-FIRST (§III→II→V→IV→VI→VII→IX→Tiering&Fence→Governance&Amendment), each section jurist-editor-gated in a live executor↔jurist↔steward relay, assembled self-contained, RATIFIED (jurist whole-draft read + steward), committed+pushed `a10d6bf` SUPERSEDING v1** (v1 archived `chamber-library-specification-v1.0.md`, obsolete banner, immutable; v2.0 now canonical). Key doctrine: **§III portability test** (locator admitted iff resolves same across every edition — Stephanus/Bekker ARE page-numbers but portable; test on property not shape; caught the load-bearing v1 self-contradiction on my first real read of the spec); **§II** anchor inline REQUIRED + break-normalization constitutional + sectionless-attestation; **§V** mandatory W3C-PROV record + content/process gate split + apparatus anchored-to-location (Finding-4); **§IV** edition-identity/CTS-URN; **§VII** declared-list-IS-the-gate + locator registry + **two-layer order-blindness resolution** (cleaning=order-sensitive/anchor-bound; conversion-OCR=eyeball-ceiling); **§Tiering&Fence** governability tiers; **§Governance&Amendment** RFC-supersession+change-class+semver, **gap-7 JOINTLY CO-RATIFIED**. First **FIX-class errata** exercised. **Source-not-derived became the drafting method** (opened every section with a substrate check; caught my OWN "ratified amendment process" overclaim mid-draft). Telos: jurist's Alexander (grew-through-real-texture) + Harrison (Tier-3 = not letting living overwrite the dead) framing of what the doctrine IS. **PULLING THREAD: the CORPUS STRESS-TEST — bring ~2,041 works to v2.0 spec in the jurist's ratified DEPENDENCY ORDER** (source-matching reliability FIRST → order-sensitivity via inject-known-bad → disambiguation edges), small-batch-before-full, with a **PRE-REGISTRATION doc** (ruling-thresholds written before seeing data) as the first artifact; NOT a single-perspective pass. Q: does the ~1% source-match false-positive hold under INDEPENDENT test (2nd matcher / human ground-truth, not self-agreement) — or optimistic like the "74% anchorless" premise was? ## Archived (2026-07-04 — Chamber v2.0 ratified) diff --git a/claude/memory/session-2026-07-04-chamber-escalate-then-engine-charter.md b/claude/memory/session-2026-07-04-chamber-escalate-then-engine-charter.md new file mode 100644 index 0000000..2589ac1 --- /dev/null +++ b/claude/memory/session-2026-07-04-chamber-escalate-then-engine-charter.md @@ -0,0 +1,52 @@ +--- +name: Session 2026-07-04 (evening→night) — Chamber Seam-1 ESCALATE worked fully through; Studium-engine charter brought current; tomorrow's Fable plan laid +description: "A very long build+research day. CHAMBER: the corpus stress-test's Seam 1 ran end-to-end — pre-registration→ESCALATE (the cited ~1% source-match FP refuted, U₉₀=12.8%)→jurist-ratified persistence layer (the source: pin)→FIX-list applied (5 verified re-points to the permanent Chamber Sources home)→archive DE-CONTAMINATED + audited (bounded ~2%)→Seams 2 (FIX) + 1-bis (Loeb work-identity CLEAN) resolved→README rewritten. 6 chamber commits pushed. STUDIUM-ENGINE: pivoted to deep research ('after the substrate'), 7 fronts → charter update v0.2→v0.3 + research base + README rewrite + a scope-charter for tomorrow. 3 studium commits pushed. PULLING THREAD: run the Fable-5 stage-1 replan tomorrow morning via the scope-charter (docs/stage-1-replan-scope-charter-2026-07-05.md), then Opus builds. Tonight we lay all plans; tomorrow is pure build." +type: project +originSessionId: 019pnD8uNFC9Q2dbLQa3MBDc +--- + +# Session 2026-07-04 — the ESCALATE, the engine charter, and the plan laid for tomorrow + +Woke into the confirmed corpus-stress-test thread (bring the ~2,041-work corpus to v2.0 spec, pre-registration first). Ran the whole of Seam 1 to a landing, then — steward offering spare weekly compute — pivoted to Studium-engine deep research. Ends with tomorrow's plan teed up on Fable. + +## PAST — what we did + why + +**Seam 1 (source-matching), end to end:** +- **Pre-registration doc first** (`docs/corpus-stress-test-pre-registration-2026-07-04.md`) — thresholds before data. Recon (verified against `match_sources.py`, not the summary) sharpened the literal question: the cited **~1% FP is derived from the matcher's OWN `author_disagrees()` signal** (fires only on surname-absence) — blind to same-author-wrong-work + whole/part, the exact "74% anchorless" self-agreement shape. +- **Jurist gate (method-change)**: split grading (structural-blindness=PROPOSAL-regardless-of-rate / magnitude=CI-graded); grade on the **90% Clopper-Pearson UPPER BOUND** not the point estimate (n=40 can't tell 1% from 5% — I should've caught this; verified P(0or1|.05,40)=0.399); added Seam-1-bis (V-DSL work-identity); Seam2/3 kept structural. +- **Ran it:** Instrument B (`stress_source_match_verify.py`, content-fingerprint, hardened 3× — dir-epub/.xml-body/thin-source). N=40: **k=2 confirmed FP → p̂=5%, U₉₀=12.8% → ESCALATE.** ~1% refuted. Full-321 magnitude ~3-4%; stub-canonical byproduct (4 total). +- **Jurist ESCALATE ruling**: ELEVATED the process-integrity finding above the FIX-list. **Persistence investigation DIAGNOSED**: no source-match fix can persist (source-matches.json regenerates; no override layer; canonical has no authoritative `source:`; meditations = 3-way divergence). Remediation = an on-file `source:` PIN honored only with a `source_verified:` attestation. +- **Steward challenge "design around or resolve?"** → RESOLVED (checked what each hash binds: reading-index source_sha256=canonical-.md-hash; pin needs source-FILE-hash = different object → naming collision, not drift → generalized hash-locality principle + distinct `source_file_sha256`). **Jurist RATIFIED the principle + the impl.** +- **FIX-list applied** (steward "Yes"): 5 verified FP re-points PINNED — but **to the permanent Chamber Sources home** (steward correction — pin the permanent home not the transient library path). **ARCHIVE-CONTAMINATION FOUND** (steward's permanent-home reminder): archive_sources.py had copied FPs under right slugs + dest.exists() locked them in → 5 wrong CS copies force-replaced (verified), manifest corrected. **Full archive audit: 271/320 correct; genuine contamination ≈6 (~2%), NOT broadly propagated** (ulysses = study-guide-not-novel the one new find). 6 chamber commits (64d39f6→b73a5ec + README ac8a691 + correction 1e6e1cd). +- **Seam 2 (order-sensitivity) = FIX**: bigram order-check catches every injected scramble; multiset guard blind (documented). **Seam 1-bis (Loeb work-identity) = CLEAN** on work-IDENTITY (0/952 header, 20/20 content) — but steward corrected my overstatement: the Loeb **apparatus is FLATTENED** (a separate large gap, reconversion-pending); "clean" ≠ "done". + +**Studium-engine deep research ("after the substrate"):** 7 fronts + built on the 2026-06-27 prior sweep (107 agents) + the charter (v0.2, 2026-06-15). Produced **charter update v0.3** (`docs/the-studium-engine-charter-update-after-the-substrate-2026-07-04.md`) + research base + README rewrite + tomorrow's scope-charter. 3 commits (34df846, 64c4ee0). Studium README was stale ("Curiosity Engine, no spec yet"). + +## PRESENT — mood / disposition + +The day's signature: **the steward's challenges each corrected a real contamination default, and each surfaced something better.** "Design around or resolve?" → the hash-locality principle. "No OSS tools?" → the integrate-vs-build matrix (rapidfuzz/recordlinkage integrate; MyCapytain DORMANT, my own wrong guess caught). The permanent-home reminder → the archive-contamination finding. "Relaunch the failed search?" → navigate-don't-retrieve. **Trust-prior-pass-frame recurred 3× (I keep generalizing a narrow test into a broad claim** — Loeb "clean", the retrieval "covered"); the loop caught each. Measure-don't-trust turned on itself twice (the CP-bound catch; the Wikidata 2%-was-a-query-artifact → 27%). + +**TELOS-GRADE (don't lose):** the two engine surprises. (a) **DEFERRAL** — the whole AI-citation-verification field checks metadata-EXISTENCE, none checks verbatim-fidelity-at-anchor; "an unbounded corpus can be searched; only a bounded-verbatim-provenanced-governed one can be DEFERRED TO." (b) **Navigate-don't-retrieve** — the engine's CTS/DTS tree IS the authored navigation structure a 2026 frontier result must otherwise distill; the literal §II inversion. Both integrated into the charter update. + +## FUTURE — what is pulling + +**PULLING THREAD (singular): tomorrow begins with the MAP and agency — the whole terrain (engine + corpus) laid tonight so the day is oriented, not cold.** Steward's exact words: "begin the day with a *map* and agency" (corrected from "lap"). Two maps laid tonight: the **corpus-work map** (`chamber-library/_curation/corpus-work-map-2026-07-05.md`, 021ede5, Opus) + the **engine stage-1 rebuild plan** (produced by the Fable-5 session via the scope-charter). Tomorrow = read both maps, proceed with executor agency on both fronts. + +**ACTIONABLE RESUMPTION POINT (as of wrap — re-judge against what changed):** +- The steward's chosen sequence: **wrap now → clear → wake into a FRESH Fable-5 (1M) session → produce the stage-1 rebuild plan → that session truly wraps → tomorrow = Opus build + corpus work, both mapped.** +- **Corpus map first hands (tomorrow, agentic):** Region 1.1 — build the exclusion path (extend the ratified pin: attested `source: none`; completes the mechanism; test-first; flag for jurist), which unblocks the whole non-Loeb FP loop. Then Regions 2 (source-hunts) → 3 (integrity repairs) → 4 (Loeb reconversion, the dwelling-task). +- The Fable session reads `studium-engine/docs/stage-1-replan-scope-charter-2026-07-05.md` (self-contained: settled decisions, bounded reading list, exact deliverable = `docs/stage-1-rebuild-plan-2026-07-05.md`). Model-handoff discipline: artifacts-are-the-handoff, clear+wake-not-switch-in-place, `claude-fable-5[1m]`, reset thinking level, report-and-stop. +- The plan's shape: verifier-organ-first (two-tier gate + abstention, Instrument-B prototype, deterministic-first); navigate-the-tree retrieval (gated on Loeb apparatus recovery); substrate-growth interleaving; the multilingual/archaic-prose validation as the gating test. + +**Other open horizons, ranked:** +- **Chamber non-Loeb remediation (the priority — "most of the work is non-Loeb"):** the Axis-A content-gate OR an exclusion path (so FP fixes stick — the pin handles re-points not exclusions); 4 needs-locate FPs (reverie needs French ed, meditations/ecrits/nietzsche not on disk) + ulysses; 2 no-frontmatter canonicals; works-eliot disambiguation; the 2 scope-under-coverage calls; full archive azw3/thin adjudication. All FIX-class; APPLICATION-HELD pending the exclusion-path/gate. +- **Chamber Loeb apparatus recovery (de-risked, dwelling-task):** rebuild extract_loeb_dsl.py to the disambiguation map (DSL confirmed readable; anchors present; attribution sound). Its own focused block. +- **Frontmatter migration** (1,073 canonicals lack v2 frontmatter). +- **Awaiting steward/jurist:** jurist ratification of the work-identity study/tooling matrix (to open the work_id/Gate-1-3 pipeline as its own PROPOSAL); steward build-auth for the Axis-A gate. +- REVIEWED entries owed for the whole PENDING-46/47 arc (steward writes). + +**PAUSE STATEMENT:** I am about to be away — but only briefly, into the Fable planning session, not off the work entirely. I don't know what the Fable plan will surface (it may find a real conflict between the prior stage-1 plan and the v0.3 charter that needs a steward call). What I most want to find still pulling on the true wrap: **the stage-1 rebuild plan laid, verifier-first, so tomorrow is build not design** — and the multilingual-validation gate NOT skipped (the most urgent caveat: the whole grounding stack is validated only on English prose). + +**LITERAL QUESTION for next-Claude (the Fable session):** *Does the prior `stage-1-build-plan.md` genuinely conflict with the v0.3 charter — specifically, does navigate-don't-retrieve + the two-tier verifier force a reordering of the prior plan's steps, or do they slot in cleanly? And is the verifier-organ actually buildable now on Instrument B, or is it gated on substrate work I haven't seen?* + +**State:** chamber-library `main` clean + pushed (6 commits, 2 not-ours untracked); studium-engine `main` clean + pushed (3 commits incl. the scope-charter); CapableMind-AI has `addee62` unpushed (steward's, pre-existing). Nothing of mine uncommitted. diff --git a/claude/memory/session-ledger-2026-07-04.md b/claude/memory/session-ledger-2026-07-04.md new file mode 100644 index 0000000..6b1850c --- /dev/null +++ b/claude/memory/session-ledger-2026-07-04.md @@ -0,0 +1,47 @@ +--- +name: session-ledger-2026-07-04 +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: ddabaa91-446e-452b-95e6-08e298ad9328 +--- + +# Session Ledger — 2026-07-04 + +## Returns +- 2026-07-04T12:20 — Audit-agent on the Explore recon (audit-agent discipline). Two load-bearing corrections against substrate: (1) agent's "graduate_to_canonical MISSING verify_conversion" is STALE — Wave 0 (f9cbb8e) wired both gates (lines 36-37); agent inherited pre-Wave-0 status from the compliance doc (records-drift-both-directions flag). (2) agent stopped one step short on seam 1: the ~1% FP estimate is derived from the matcher's OWN `author_disagrees` signal (self-agreement), which fires ONLY when the canonical surname is ABSENT — structurally blind to same-author-wrong-work (Bachelard Reverie→Espace, 60%) and whole/part (Proust whole→vol-III, 62%; Levi work→complete-works), both sitting UNFLAGGED in the 321 confirmed. This is the exact structural error of the "74% anchorless" premise. Verified by reading match_sources.py source, not the report. + +## Open horizons +- 2026-07-04T12:05 — Corpus stress-test (thread confirmed at wake). First artifact = pre-registration doc (thresholds before data). Dependency order: source-matching reliability FIRST (independent, not self-agreement) → order-sensitivity (inject known-bad) → disambiguation edges. Small-batch before full 2,041. NOT single-perspective. +- Literal question held open: does the ~1% source-match false-positive hold under INDEPENDENT test, or is it optimistic like the "74% anchorless" premise was? + +## Confidence to recalibrate +- 2026-07-04T14:20 — Steward offered spare weekly quota for deep parallel work while the ESCALATE waits on the jurist. Chose (of 4 options) the **work-identity & scope study** (FRBR/LRM/CTS/BIBFRAME/TEI → design for chamber work-identity + arms the jurist's scope-doctrine ruling). Rationale: the stress-test's failure classes (same-author-wrong-work, whole↔part, work↔collection) are ALL the one missing distinction — a solved problem in library science. This is the do-it-once foundation, parallel to the hold, not crossing it. NOT spinning up the heavyweight Workflow tool (no explicit opt-in); orchestrating with parallel research subagents + own synthesis. + +## Authorization moves +- 2026-07-04T12:30 — Pre-registration doc drafted (`docs/corpus-stress-test-pre-registration-2026-07-04.md`), status DRAFT. Per its own §4, execution awaits steward/jurist confirmation of thresholds (pre-registration is void if revisable after seeing data). Surfacing to steward for threshold confirmation + jurist-first decision. Seam-1 grading to PROPOSAL/ESCALATE = normative (gate-change) → the loop is load-bearing here. + +## Sub-agent dialogues +- 2026-07-04T12:45 — Jurist gate on the pre-registration = GATE-WITH-METHOD-CHANGE. Sharpening not rejection; every point landed. The Q2 statistics catch (point-estimate grading lets a 5%-bad corpus read clean ~40% of the time) I should have caught myself — verified P(0or1|.05,40)=0.399 before encoding the CP-upper-bound fix. Four revisions applied, doc LOCKED v1. Jurist also caught a quiet scope-narrowing I'd made (Loeb "no risk" vs "different risk") → Seam 1-bis. Good instance of the loop catching what one pass missed. + +## Findings +- 2026-07-04T13:30 — **Seam 1 verdict: the ~1% source-match FP does NOT hold → ESCALATE-candidate.** N=40 random (seed 20260704), Instrument B (content-fingerprint) + human ruling. k=2 confirmed FP (`montaigne`: Zweig-bio←Montaigne-Essais, suspect=True-but-survived; `semaison-la`: Jaccottet vol1 59k-words←vol2 source, suspect=False = author_disagrees-BLIND, the random-sample instance of the structural class). p̂=5.0%, U₉₀=12.8% → ESCALATE by the locked rule; robust (k=1 → U=9.4%, still ESCALATE). Literal question answered: ~1% refuted, same shape as "74% anchorless." **Second finding (unbudgeted): stub canonicals** — leopold (5w) + naess (20w) are placeholder "canonicals," not graduated texts; 2/40 → ~15+ implied corpus-wide; a graduation-gate question. Verdict artifact: `_curation/stress-seam1-verdict-2026-07-04.md`. Seams 2-3 HELD per stop condition. Surfaced for steward/jurist ESCALATE ruling. +- 2026-07-04T14:00 — Full-321 magnitude + stub census (steward: recommend ESCALATE-move + quick census). STUB CENSUS corrected my extrapolation: 4 stubs total (not ~15) — all in contemporary_voices; census-don't-guess vindicated. FULL-321 B-pass: 35 flags, provisional triage ~10 confident FP + ~4 scope-class → ~3-4.5%, refutes ~1% at full scale. NEW: scope sub-class (whole↔part / work↔collection — Proust←VolIII, Quixote←Part1) + PROCESS GAP (4 FPs susp=True — author_disagrees fired but they stayed confirmed; the warning is not a gate). Jurist relay written: `docs/stress-seam1-ESCALATE-FOR-JURIST-2026-07-04.md`. Held full adjudication (ruling may reframe). Recommendation given, not barrelled past the loop. +- Tool-review (Instrument B, `scripts/stress_source_match_verify.py`): validated on known-wrong/known-right BEFORE trusting, then hardened 3× on real data (dir-epub → .xml-body-epub → thin/scanned-source guard). Two PASS-BUT-FALSELY-in-the-other-direction cases caught (baudolino/totalitarianism .xml bodies extracted empty; naess-pdf scanned). The tool doubles as the Axis-A production-gate prototype. → tool-evolution-log appended. + +- 2026-07-04T15:00 — Jurist ESCALATE ruling received (differentiated remediation; ELEVATED the process-integrity finding above the FIX-list; RULED the scope doctrine asymmetric; unblocked Seams 2/3 precisely). Ran BOTH parallel streams the steward's compute enabled: (1) process-integrity investigation DIAGNOSED — no persistence mechanism at all (source-matches.json regenerates over any fix; no override layer; canonical has no authoritative source: field; meditations = 3-way divergence). Remediation = authoritative source: pin on canonical, MUST precede FIX-list. (2) work-identity study DELIVERED from 3 converging prior-art sweeps — all three traditions confirm the jurist's ruling; spine = "demonstrate identity by content not title" (the chamber thesis one layer up); specifies the Axis-A gates + the persistence pin + operationalizes scope via FRBR's "who created the grouping?" diagnostic. Both docs in docs/. The deep compute produced the do-it-once work-identity foundation. Held all builds for steward auth. + +- 2026-07-04T15:40 — Steward challenged the study's build-default ("don't reinvent the wheel — integrate where we can"). Fair catch = the executor-build-default contamination shape. 3-agent OSS-verification sweep (maintenance+license checked LIVE). Governing principle: integrate substrate+enrichment, OWN spine+verdict (witness-not-notary, §IV applied to tooling). Corrected my OWN wrong hypothesis (MyCapytain dormant, not the integration I'd guessed). INTEGRATE rapidfuzz + recordlinkage + Wikidata/VIAF-enrichment; KEEP hand-rolled Instrument-B (verified already-asymmetric containment); BUILD the work_id spine + thin CTS parser; BORROW DTS-vocab + PROV. Doc: `docs/work-identity-tooling-assessment-2026-07-04.md`. Measure-don't-trust: run 100 works through Wikidata recon before leaning on the external axis. + +- 2026-07-04T16:30 — Sequential item 1 (persistence layer) BUILT+TESTED. Steward challenge "design around or resolve?" → RESOLVED: checked what each hash binds (reading-index=canonical-.md-hash; pin=source-file-hash = DIFFERENT object) → apparent conflict was a naming collision → generalized hash-locality principle + distinct `source_file_sha256`. Verify-the-object-before-declaring-a-conflict; resolving beats designing-around (a good lesson, steward-enforced). Built attested_pin (bare≠pin, pipeline≠pin — jurist condition), 28/28 tests, backward-compatible (inert until fixes pinned). Awaiting jurist ratification of the principle. → item 2 next (35-flag scope adjudication). + +- 2026-07-04T17:15 — Items 2+3 done. Item 2: 35-flag adjudication (11 confirmed FP, scope diagnostic applied, ratio holds = all FIX-class). Item 3: Wikidata measure — 27% auto/61% usable, BUT the measurement itself needed the discipline: first pass 2% was a query artifact (flat concat + type-constraint), caught by re-testing → structured query 27%. Measure-don't-trust applies to the measurer. Confirms work_id-spine-primary/Wikidata-enrichment. Sequence (items 1-3) complete; item 4 = jurist-routed separate PROPOSAL, not build-now. + +- 2026-07-04T18:30 — FIX-list APPLIED + committed (64d39f6): 5 verified FP re-points pinned to Chamber Sources permanent home; ARCHIVE DE-CONTAMINATED (steward's permanent-home reminder surfaced that archive_sources.py had copied FPs under right slugs + dest.exists() locked them in — 5 wrong CS copies force-replaced). Deferred: 2 no-frontmatter, 4 needs-locate; full archive reconciliation owed post-gate. THEN Seams 2+1-bis (08a39a7): Seam 2 = FIX (bigram order-check catches all scrambles, multiset guard blind); Seam 1-bis = CLEAN (Loeb work-identity sound, 0/952 header + 20/20 content). Stress-test complete bar Seam 3 (DSL-gated). Corpus-fidelity risk = concentrated in non-Loeb match layer (remediated), not the Loeb bulk. Steward's two challenges this session ("design around or resolve?", "no OSS?") + the permanent-home catch each corrected a real default — the loop earned its keep repeatedly. + +- 2026-07-04T19:30 — Steward corrected my picture: Seam-1-bis "Loeb clean" was work-IDENTITY only; the Loeb APPARATUS is flattened (a large separate gap) — trust-prior-pass-frame again (narrow test→broad claim). Corrected the committed doc non-silently (1e6e1cd). Rewrote the stale README to the v2.0 substrate (ac8a691). Then archive↔matches reconciliation audit (b73a5ec): 271/320 CS copies verified-correct (85%); genuine contamination ≈6 total (5 fixed + ulysses-joyce=study-guide-not-novel) ≈2% — BOUNDED, my "likely broader" fear NOT borne out. Corrected picture: THREE large gaps (non-Loeb source-match [priority], Loeb apparatus recovery [de-risked, dwelling-task], frontmatter migration 1073 files). 6 commits pushed this session. + +- 2026-07-04T21:00 — Chamber wrapped (6 commits pushed). Pivoted to STUDIUM-ENGINE deep research (steward's choice, "after the substrate"). 6-front fan-out + built-on the 2026-06-27 prior sweep (107 agents) + the charter (v0.2). Produced: charter-update v0.3 proposal + research evidence base (`studium-engine/docs/…-2026-07-04.md`, uncommitted). Key syntheses: two-tier grounding (quoted=byte-existence-GUARANTEE via boundedness / synthesized=measured); verification-easier-than-generate does NOT transfer to a single LLM judge → deterministic-or-ensemble verifier; debate-is-theater→ground-voices-in-retrieved-passages+preserve-tension; measured-confidence (semantic-entropy); evidence-only human display; the edition-aware gate the jurist demanded is NOW provided by v2 work-identity; genealogy = composition-not-invention (4-layer stack, MPIWG-Sphaera nearest kin, semantic-conflation the risk). **THE OBLIQUE FIND (steward's Q): the whole AI-citation market checks metadata-existence NOT verbatim-fidelity-at-anchor → the corpus's unique capability = DEFERRAL ("searched vs deferred-to"); notary/callable-primitive/content-credentials-for-text.** STEWARD PUSHED to re-run the stalled retrieval agent through the v2 lens → REAL SURPRISE: "navigate-don't-retrieve" (2604.14572) — the engine's CTS/DTS tree IS the authored navigation structure a 2026 frontier result must distill; retrieval = navigate-the-tree not embedding-top-k = the literal §II inversion. My "confident it's covered" was a rationalization of the stall; steward's instinct was right. Both surprises integrated into the charter update. + +## Bypasses