diff --git a/claude/memory/MEMORY.md b/claude/memory/MEMORY.md index 39b2964..3829eed 100644 --- a/claude/memory/MEMORY.md +++ b/claude/memory/MEMORY.md @@ -38,7 +38,10 @@ 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-06-12 — Studium Engine Stage-1 planning charter; ready for Fable[1m]](session-2026-06-12-studium-engine-planning-charter-fable-handoff.md) — Read both core engine docs (bridge doc + seed brief — reconciled, they agree); steward ruled **governance** (steward-direct now, Jurist later for scholarly Qs only), **§10.3** (Markdown body + `.meta.json` sidecar canonical; TEI optional later tier, not Stage 1), **method** (middle path — thin Cluster-A spec now, then just-in-time slice). Decided **cost-aware model routing** (Fable[1m] for the bounded planning phase, Opus for the build; grounded in the verified Fable-5 2× burn) + wrote a scope **CHARTER** `~/_Dev/studium-engine/docs/stage-1-planning-brief-2026-06-12.md` on Opus to bound the Fable session (read §3 list → produce **Cluster-A spec** + **Stage-1 build plan** → stop). Rejected "query the graph not files" (= the index-as-source-of-truth shape the engine refuses). Also diagnosed the **ARC §VII.f running-head mobile-Safari gap** (parked, option i): `@supports(animation-timeline:view())` is a **leaky gate** — `true` on iOS Safari 26 but WebKit won't drive the scroll reveal on a `fixed`+`timeline-scope` consumer (display:block, opacity 0); desktop Safari works; the spec's "no-support shows nothing" fallback is **false on mobile WebKit** → ~5-min spec truth-up owed at next ARC touch (`project-arc-open-work-register.md`). **PULLING THREAD: execute the charter on Fable[1m] → 2 artifacts → switch back to Opus to build. RESUMPTION: clear → wake → `claude-fable-5[1m]` high-thinking → "read the charter and go" (do NOT cold-re-derive).** +- [Session 2026-06-12 (afternoon→night) — Studium Engine Stage-1 BUILT (Steps 0·1·2 + source cleaning); commit-org decision pending](session-2026-06-12-studium-engine-stage1-built-cleaning-commit-org.md) — Executed the Fable charter → **2 planning artifacts** (`docs/spec/cluster-a-data-model.md` + `docs/stage-1-build-plan.md`); steward ruled the 5 open Qs (5 ARC posts canonical · manifest-in-place · Mauss-in-slice · Python · paratext **inert/convocable** — folded as D-1…D-4; the paratext discussion yielded the **ledger=structural-accounting decoupled from FTS-token-index** insight). Then BUILT **Steps 0·1·2**: `corpus/manifest.yaml` (8 sources hash-pinned); **all 4 reading indices re-anchored + bound** as derived copies in `studium-engine/corpus/reading-indices/` — headline finding: **ALL FOUR were defective, eye-invisible, machine-surfaced** (Alexander anchor-drift + OCR; Harrison/Mauss/AtR unparseable-YAML quote-trailing typos; AtR restructured 1→6-file). Corrected my own "drift" mislabel → `corpus_findings` classed. **Step 1 = first engine code**: 8 `.meta.json` sidecars + `engine/ingest_gate.py` (§1.1 hash-bind, §4 schema, §6 bounds, §5 cleaning gate) + coverage-ledger + cleaning-rules ledger; gate **caught my own off-by-one**, verified 3 ways. Then **steward's instinct → clean at the SOURCE layer** (spec §5; makes `text_original` an honest slice): built governed **`chamber-library/scripts/clean_epub_residue.py`**; **Mauss 1254 EPUB footnotes→`[^n]`** (steward chose convert; line-preserving) + Alexander 1320 images dropped → **re-anchored**; re-bound everything; **gate now 8/8 clean**. **PULLING THREAD: resolve the reading-index canonical HOME (steward flagged CapableMind = wrong place; my lean = chamber-library, BYOC logic) + commit cleanly across 3 repos, THEN resume at Step 3 (chunker). Everything on disk, uncommitted, nothing pushed — steward's call. RESUMPTION: decide home → commit (chamber-library: 2 cleaned sources + cleaner; studium-engine: whole build; CapableMind: 2 YAML fixes, maybe moot) → Step 3.** + +## Archived (2026-06-12 morning — Studium planning charter → Fable handoff) +- [Session 2026-06-12 — Studium Engine Stage-1 planning charter; ready for Fable[1m]](session-2026-06-12-studium-engine-planning-charter-fable-handoff.md) — Read both core engine docs (bridge + seed brief — agree); steward ruled governance (steward-direct), §10.3 (MD+sidecar), method (middle path); decided **cost-aware model routing** (Fable[1m] for bounded planning, Opus for build) + wrote the scope **CHARTER** on Opus. Diagnosed the ARC §VII.f running-head mobile-Safari leaky-`@supports` gap (parked, option i → `project-arc-open-work-register.md`). Thread (now executed): run the charter on Fable → 2 artifacts → switch to Opus to build. ## Archived (2026-06-11 — §VII.f running head SHIPPED + ARC open-work register) - [Session 2026-06-11 — §VII.f running head SHIPPED + the ARC open-work register (records drift BOTH ways)](session-2026-06-11-vii-f-running-head-shipped-arc-open-work-register.md) — Woke into the essay; steward pivoted to **§VII.f — the one ready-to-build apparatus never shipped.** BUILT it (zero-JS CSS `view-timeline` reveal; per-type `content-types.yml` binding; progressive-enhancement fallback) through a long render-rulings refinement: **body-column-axis alignment** (the −2rem grid asymmetry; grid tokens moved `_sidenotes`→`_variables` byte-identical), **soft fading rule** (`$rh-fade`), **full-width occluding ground with the dissolve anchored below the rule** (`$rh-dissolve`) — every step headless-Chrome-measured, not theorized. **W1.15 false premise surfaced not papered** (frontispiece doesn't scroll) → reframed scroll→**presence-reveal** (zero-JS cursor-approach; touch rests gently-present). Shipped `b220620`, deployed, **live-verified**; specs reconciled; PENDING-39 / REVIEWED-43 (steward-placed). **THEN the deeper arc:** steward corrected my "§VII.f = the *only* unbuilt element" overclaim → **the colophon is SHIPPED** (I misread a stale index line — 3rd stale-index misread of the turn) → **records drift BOTH ways** → built **[`project-arc-open-work-register.md`](project-arc-open-work-register.md)** (single code-verified source of truth); annotated the tracker (true only through 06-07) + corrected MEMORY's stale "no build work pending" tail. **Steward caught the cul-de-lampe** (§IV Close ornament SVG, undesigned → A2). "One more audit": register [VERIFY] flags resolved (E3 404 / E5 master-typographer / E6 web-typography → DONE-retire; **B3 ornament migration → OPEN, ~95 content files, gated on A2**). **Pulling thread: the register is the map; the two undesigned-SVG assets — A1 Vignette (F+1) + A2 cul-de-lampe — are the real remaining build; which one, or the deferred essay, is next.** ARC `main @ b220620` clean, live. **LATE-SESSION PIVOT → THE STUDIUM ENGINE** (steward's urgent tool; Fable-5 window to 2026-06-22): deliberately completed the picture before touching the build — the engine = general BYO-corpus deep-research substrate, built by first **powering the Chamber** (his instance + forcing function; Library→Chamber→Publication); the MemPalace 2-class failure taxonomy (integrity/corruption FATAL→killed by file-authoritative shape · density-dilution=Stage-2); the design law **"silence must carry a coverage warrant"** (reliability is *constitutive* of the Chamber's honesty — a false silence is a fabricated finding); FTS-first (reading-indices=70% of intelligence → may retire the HNSW failure class); Partner+Guardian-now / Professor-Emeritus-later prototype boundary. CAPTURED: **`~/_Dev/studium-engine/docs/the-chamber-and-the-engine-2026-06-11.md`** (bridge doc; uncommitted, for review). **PULLING THREAD IS NOW the Studium Engine Stage-1 build plan** — next session (on v5): read the bridge doc → revisit `seed-brief.md` + `chamber-chavruta-prototype-plan.md` against it → resolve §10.3 (canonical source format) → plan the build (Harrison·Alexander chavruta on *After the Reply* Essay I). ARC settled/reactive; its open work lives in `project-arc-open-work-register.md`. diff --git a/claude/memory/session-2026-06-12-studium-engine-stage1-built-cleaning-commit-org.md b/claude/memory/session-2026-06-12-studium-engine-stage1-built-cleaning-commit-org.md new file mode 100644 index 0000000..afbf15a --- /dev/null +++ b/claude/memory/session-2026-06-12-studium-engine-stage1-built-cleaning-commit-org.md @@ -0,0 +1,91 @@ +--- +name: session-2026-06-12-afternoon-night-studium-engine-stage-1-built-steps-0-1-2-source-cleaning-commit-org-decision-pending +description: "Executed the Fable charter → 2 planning artifacts, then BUILT Stage-1 Steps 0-1-2 (corpus manifest, all 4 reading indices re-anchored, 8 sidecars + ingestion gate). Found ALL FOUR reading indices defective (eye-invisible, machine-surfaced). Then steward's instinct moved cruft-cleaning to the source layer: built a governed chamber-library cleaner, converted Mauss EPUB footnotes→[^n] + dropped Alexander images, re-bound everything; gate now 8/8 clean. PULLING THREAD: resolve the reading-index canonical home (lean: chamber-library, BYOC logic) + commit cleanly across 3 repos, THEN resume at Step 3 (chunker)." +metadata: + node_type: memory + type: project + originSessionId: c6dd0801-728d-4dc2-b6a1-b47d83192489 +--- + +# Session 2026-06-12 (afternoon→night) — Studium Engine Stage-1 BUILT + +Two halves. Morning (separate ledger): switched to Fable[1m], executed the charter, produced the 2 planning artifacts. Afternoon→night (this record, on Opus 4.8[1m]): steward ruled the open questions, then a long, dense BUILD of Stage-1 Steps 0·1·2 + a source-cleaning detour. Symmetria not re-init'd (continuation of the morning's frame). + +## Past — what we did + +### Fable[1m] planning phase (executed the charter) +Switched to `claude-fable-5[1m]`, read `docs/stage-1-planning-brief-2026-06-12.md`, read the bounded §3 list (Chamber prototype plan + arch summary + 4 reading-index YAMLs + run records + 2 failure forensics + substrate-failure-lessons), produced the **2 artifacts** and stopped: +- `~/_Dev/studium-engine/docs/spec/cluster-a-data-model.md` — thin Cluster-A spec (drawer model, frontmatter contract, `.meta.json` sidecar schema, orthography, ingestion-time integrity, source segmentation). +- `~/_Dev/studium-engine/docs/stage-1-build-plan.md` — 10-step vertical slice + the **failure-derived-constraints table** (13 defenses each traced to a witnessed failure) + the FTS-first experiment. +Key finding even in planning: **verifying anchors against the substrate** found the Alexander reading index drifted (mapped a ~17k-line pre-clean version) and `~/Desktop/After the Reply, Sequence.md` is GONE. + +### Steward ruled the 5 open questions (folded into both artifacts as D-1…D-4) +1. After the Reply canonical home → **the 5 published ARC posts** (`content/posts/2025-06-17…` … `2026-02-08-…-v.md`); old single file abandoned. +2. Corpus residence → **manifest-in-place** (D-3): sources stay where they live; engine reads a manifest of paths+hashes. +3. Mauss → **in the slice** (live paratext + French test; phase-2 baseline exists). +4. Implementation language → **Python**. +5. Paratext (`citable:false`) → **discussed then settled: ledger-accounted, search-inert, convocable-later** (D-4). The discussion produced a real architectural insight: **the coverage ledger is STRUCTURAL accounting (per-section classification + hashes), decoupled from the FTS token index** — so paratext can be honestly accounted-for (silence warrantable) without polluting BM25 or being a leak surface. Corrected an ambiguity in my own §4 draft. + +### Step 0 — corpus manifest (`corpus/manifest.yaml`) +8 sources hash-pinned (3 voices: Harrison/Alexander/Mauss + 5 AtR essays). Parses; all hashes round-trip. + +### Step 2 — re-anchored ALL FOUR reading indices (the headline finding) +Did Step 2 before Step 1 (drift was urgent; plan allows any order after Step 0). **Every one of the four indices had an eye-invisible defect, surfaced only by parsing/verifying against the substrate:** +- **Alexander**: anchor-drift + OCR defects in the source (pattern 179 misnumbered "178"; 187 lost its `##`; 195 heading missing). Re-anchored 253/253 **by NAME** (file numbers untrustworthy) + 32/32 chamber_selection. +- **Harrison, Mauss, After-the-Reply**: each had **unparseable YAML** — a list entry beginning with a quoted phrase then trailing text (`- "The Wanderer" (Old English poem)`), illegal YAML, invisible to eye-review. AtR also restructured 1-file→6-file. +- Maintained derived copies written to `studium-engine/corpus/reading-indices/`, each `source_sha256`-bound. **Territory-respect:** derived copies in studium-engine, NOT mutating the CapableMind originals (initially). +- One **condensation divergence** surfaced+recorded (not papered): Essay III's "Flight, entrapment, or passage" was reworded in the published condensation (now spans L88-96). The manuscript↔published divergence to watch at Step 7/9. +- **Framing correction** (steward was confused — "why don't Harrison/Mauss parse? these were good extractions"): I'd mislabeled the YAML defects as "drift." Corrected the manifest: `corpus_findings` block, each classed (anchor-drift / latent-authoring-defect / source-cruft / condensation-divergence / verification). The lesson is NOT "sources are bad" (they're fine) but "an artifact only ever read by humans accrues defects no human notices; the engine is the first machine reader." +- Steward-authorized: **fixed the 2 one-line YAML typos in the chamber ORIGINALS too** (they didn't parse → broken for any machine reader incl. the prompted chavruta). + +### Step 1 — sidecars + the ingestion gate (FIRST ENGINE CODE) +- 8 `.meta.json` sidecars in `corpus/sidecars/` — the coarse citability/role contract (apparatus vs citable body vs paratext); reading index holds the fine sections (spec §4.2). Mauss = the live one-file-many-voices test (Weber `paratext, citable:false`; Mauss text `citable:true`). +- `engine/ingest_gate.py` — enforces §1.1 hash-binding, §4 schema, §6 bounds/overlap, §5 cleaning gate. + `corpus/coverage-ledger.json` (structural ledger) + `corpus/cleaning-rules.json` (acknowledgment ledger). +- Gate **caught my own off-by-one** in the AtR sidecars (array-length vs wc -l). Verified 3 ways: acknowledgment advances blocked→validated; tampered hash fails; out-of-bounds fails. + +### Source-cleaning detour (steward's instinct — the better layer) +Steward: "pause and attend to the two source files — we have tools in the library." This was architecturally correct (spec §5: cleaning = a curatorial act producing a NEW canonical file; the chunk-time rule I'd built was the fallback, and it made `text_original` a transform not a slice). +- The existing chamber tools (`strip_cruft.py`/`audit_cruft.py`) **don't cover these patterns** (they preserve `[text](url)` links + don't touch images). So built a governed companion: **`chamber-library/scripts/clean_epub_residue.py`** (preview→`--apply`→`_backups/` conventions). +- **Steward chose convert-to-footnotes** (vs strip): Mauss's 1254 EPUB footnote-links `[N](chunk…#nfK)`/`#anfK` → portable `[^K]` (paired by globally-unique anchor number K, not the per-section display number; 627↔627, 0 orphans) + unwrapped 37 TOC nav-links. **Line-preserving** → anchors stayed valid, just re-hashed. Fully clean. +- Alexander: 1320 image-embeds dropped (fixed the paren-filename `page44(a).jpg` regex miss) + trivial `