session 2026-06-12: Studium Stage-1 built (Steps 0·1·2 + source cleaning); reading-index home + commit-org decision pending
This commit is contained in:
@@ -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`.
|
||||
|
||||
@@ -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 `<div>`/`{.small}` residue. 12901→11763 lines → **re-anchored 253/253** by name on the cleaned file (caught + fixed a bug where pattern 195's special matched the wrong "STAIRCASE AS A STAGE").
|
||||
- Both cleaned with backups (`chamber-library/_backups/2026-06-12/`), new hashes propagated through manifest + indices + sidecars; cleaning-rules → `resolved-by-source-cleaning`. **Gate now 8/8 validated clean, 0 blocked, 0 failed.** Full integrity sweep: all coherent.
|
||||
|
||||
## Present — mood / returns
|
||||
- **The day's discipline, repeatedly vindicated: verify against the substrate, not the record.** Every reading index defect, my own sidecar off-by-one, the Alexander-195 mis-anchor, the partial-clean residue iterations — all caught by checking, not asserting. The morning's named return (theorize-before-measuring, the ARC running-head) is the same shape.
|
||||
- **Both steward interventions improved the architecture, not just the output:** (a) the paratext-inert discussion → ledger-vs-token-index decoupling; (b) "clean the source files" → cruft handled at the source layer, `text_original` honest. Worth holding: the steward's instincts about *layer/placement* are load-bearing.
|
||||
- Cleaning is iterative by nature (multiple residue passes: paren-filenames, TOC links, inline images, the 195 special). Didn't rush to "done" — gave it the passes it asked for.
|
||||
- Governance held throughout: territory-respect (derived copies, didn't mutate CapableMind until authorized; backups before any source edit); surfaced the framing mislabel honestly when the steward was confused.
|
||||
|
||||
## Future
|
||||
|
||||
### Pulling thread (singular)
|
||||
**Resolve the reading-index canonical HOME, then commit the session's work cleanly across the 3 repos — THEN resume the build at Step 3 (the chunker).** The steward's last concern: the reading-index data files live in `CapableMind-AI/docs/thinking/David/chamber/reading-indices/` = wrong place for where we're headed (and superseded by the studium-engine maintained copies). My lean (for his refreshed decision): **reading indices → chamber-library** (with the texts they index; BYOC logic — a user brings library+indices together; spec §4.2 interpretive-vs-mechanical split: indices=scholarly→with corpus, sidecars=engine contract→studium-engine), engine references them in-place (manifest-in-place, like the sources), killing the derived-copy duplication. CapableMind chamber/ keeps only the design docs.
|
||||
|
||||
### Actionable resumption point (as of wrap)
|
||||
Everything is ON DISK, uncommitted, nothing pushed (steward's call). Commit picture:
|
||||
- **chamber-library** (already ahead 1): M 2 cleaned sources + ?? `scripts/clean_epub_residue.py` → commit here (sources "must stay in the library" — settled).
|
||||
- **studium-engine** (all untracked): `corpus/` (manifest, 4 indices, 8 sidecars, 2 ledgers), `docs/` (specs, charter, bridge doc, 2 stage-1 docs), `engine/` → commit here.
|
||||
- **CapableMind-AI**: M the 2 reading-index YAML fixes → the "wrong place" question; possibly moot/legacy if indices move to chamber-library.
|
||||
- **animal-davidglidden-eu**: clean (read-only).
|
||||
First move: make the reading-index-home decision → execute commits accordingly → then Step 3 (chunker: section-bounded, quality-scored, over the now-clean text). Re-judge against anything that changed overnight.
|
||||
|
||||
### Other open horizons (ranked)
|
||||
- **Reading-index home + commits** (the thread; load-bearing — gates everything else).
|
||||
- **Step 3 (chunker) → Steps 4-9** — the build continuation (store+FTS5+coverage ledger; retrieval primitives; voice-balanced ranker; the FTS-first experiment; chavruta skill; the Essay-I re-run).
|
||||
- The Essay-III condensation divergence — watch at Step 7/9 (cite the published substrate faithfully, log further divergence).
|
||||
- Fable-5 cost window closes ~2026-06-22 (the planning phase already spent its Fable budget; build is on Opus).
|
||||
- ARC §VII.f mobile-Safari spec truth-up — still parked (option i), into `project-arc-open-work-register.md` at next ARC touch.
|
||||
- Baton: be (Pat WTP) · L1 (Seb).
|
||||
|
||||
### Pause statement
|
||||
I am about to be away. The build is sound and saved; nothing is at risk (backups exist, all on disk). What I want to find still pulling: **the reading-index home decided and the commits executed cleanly across the 3 repos** — and if that's done, the build resumed at Step 3. What I do NOT want: to re-derive the commit picture cold, or to forget that the steward flagged CapableMind as the wrong place.
|
||||
|
||||
### Literal question for next-Claude
|
||||
**Where do the reading indices belong for where we're headed — chamber-library (with the texts, my lean) or engine-owned in studium-engine — and has the commit picture been executed accordingly across the three repos?** (If decided + committed: resume at Step 3, the chunker.)
|
||||
|
||||
## Decisions deferred (and why)
|
||||
- **The reading-index canonical home** — deliberately left for the steward's refreshed thinking (he was heading to sleep; it's an org decision that benefits from rest).
|
||||
- **All commits** — steward's call, his repos; nothing committed tonight by design.
|
||||
- **Step 3 onward (the chunker + rest of the build)** — deferred behind the org/commit decision.
|
||||
- **Retiring the CapableMind chamber reading-index originals** — contingent on the home decision; not touched beyond the 2 authorized YAML fixes.
|
||||
- **Dotfiles/governance** — no PENDING items added this session (the engine is steward-direct governance, outside the PENDING/REVIEWED loop per D-1).
|
||||
@@ -134,3 +134,12 @@ The single place proposed skills live so they don't evaporate between sessions.
|
||||
| **verification-ladder: feature-detect gates can lie** | verification-ladder entry | A CSS `@supports(feature)` (or any capability probe) can return **true on a platform where the feature is non-functional** — today the ARC §VII.f running head: `@supports(animation-timeline:view())` is `true` on iOS Safari 26, but mobile WebKit won't *drive* the scroll-reveal on a `position:fixed`+`timeline-scope` consumer (`display:block, opacity:0`); desktop Safari works. So a progressive-enhancement "no-support shows nothing" contract can be **silently false** on a major platform. Antidote: **verify the feature on the real engine/device, not the support table** — `CSS.supports(...)` + computed-`opacity`/`getBoundingClientRect` on-device (the iOS analog of the headless-Chrome box-model harness). Kin to `/measure-render`; one level up (feature-functionality, not box-model). | `reference-verification-ladder.md` | **PROPOSED** |
|
||||
|
||||
*(Both genuine, both recurring-shaped — not manufactured. The first will pay off the very next time the steward opens a Fable window; the second generalizes today's running-head correction into a standing instrument.)*
|
||||
|
||||
## New proposals (2026-06-12 night — Studium Stage-1 build / source-cleaning, awaiting steward)
|
||||
|
||||
| Element | Kind | One-line | Where it lands | Status |
|
||||
|---------|------|----------|----------------|--------|
|
||||
| **verification-ladder: parse/validate machine-consumed artifacts that have only ever been human-read** | verification-ladder entry | When an artifact that humans have only ever *read* (a hand-authored YAML index, a config, a data file) is about to be *machine-consumed* for the first time, parse-and-validate it BEFORE trusting it. Today: **all four** chamber reading-index YAMLs were defective and **eye-invisible** — three had unparseable YAML (a list entry starting with a quoted phrase then trailing text, e.g. `- "The Wanderer" (Old English poem)`), one had silent anchor-drift; the Read tool renders them fine, so eye-review and the prior cruft audits never caught them. The engine was the first machine reader. Antidote: `yaml.safe_load` (or the consumer's real parser) + anchor-verify against the substrate, both directions, before binding. Kin to the deliberate-mismatch gate, one level up (artifact-validity, not output-validity). | `reference-verification-ladder.md` | **PROPOSED** |
|
||||
| **clean cruft at the SOURCE layer, not as a downstream transform** | feedback memory | When a source carries conversion cruft (EPUB footnote-links, image-scan embeds), clean it at the SOURCE — producing a new canonical file (new hash, re-anchor) — not as a chunk-time/read-time transform. A downstream strip makes `text_original` a *transform* of the file rather than a byte-faithful *slice*, silently violating the verbatim guarantee. Spec §5 names this the primary path; the steward's instinct ("attend to the source files") corrected my chunk-time-rule fallback. Technique note: when footnote *display* numbers restart per-section (so `[45]` recurs), pair/label by the globally-unique anchor id (`#nf K`/`#anf K`), not the visible number — Pandoc renumbers on render anyway. Governed cleaner built: `chamber-library/scripts/clean_epub_residue.py`. | `feedback-clean-at-source-not-downstream-transform.md` | **PROPOSED** |
|
||||
|
||||
*(Both earned in use, both recurring-shaped. The first generalizes today's all-four-indices-defective finding into a standing gate; the second captures the steward's layer/placement correction — his instincts about WHERE a thing belongs were load-bearing twice today, also worth holding.)*
|
||||
|
||||
Reference in New Issue
Block a user