MEMORY.md 20,413 -> 16,887 B (19.9 -> 16.5 KB), steward-directed at the 2026-08-06 evening wrap after three deferrals. Relocation, not deletion, and verified as such: 0 dead pointers, 0 orphaned clauses, every dropped backticked span traced to a home elsewhere in the corpus. Method, derived rather than felt: an entry keeps its rule inline when it fires at a moment I would not recognise as needing a lookup (spelling, quotation, "am I deferring?"); it shrinks to a pointer when the trigger is loud enough that the file gets opened anyway (chamber work, L1 work, a jurist package); and a ⚠ constraint always travels with the workaround it limits, never relocated away from it. The mechanical diff of dropped spans caught two losses that re-reading did not: `feedback-constitution-as-block-then-pull-based-corpus` dropped by inattention (a fires-silently rule — restored), and the facet-formalism pointer for the V1-purpose decision, which existed ONLY on the index line being compressed. That second one is `removing-a-claim-is-not-removing-the-reliance` exactly: the open decision would have stayed live with its formalism unfindable. Relocated into project-chamber-versioned-releases.md, its canonical surface, rather than back into the index. project-studium-engine.md — NEW, and the gap MEMORY.md itself had flagged as "no tracker file yet". The engine's state had been living inline in the index (one 950-character line pointing at the charter, a constitutional document that holds no build state) plus per-session memories: two update surfaces and no canonical one. Now holds current state, a chronological log, and the open-thread stack captured mid-session so the day's accumulation cannot be lost. MemPalace wind-down relocated to MEMORY-reference.md — a workstream closed 2026-07-07 whose one live clause (the typography-palace exception) is carried by a standing preference that stays wake-loaded. session-2026-08-06-evening: the claim that Alexander's rating classes "compare as identical" under @3 is marked SUPERSEDED and false. Measured while landing the fix: old @3 gave COMPOST\ , COMPOST\\ , COMPOST — three distinct strings. The ratings never collided; the real defect ran the opposite way, corrupting the rating into a backslash residue and causing false REFUSALS. I carried that generalisation into the record from the package's Part III(a) without checking it against the package's own Part I table, which printed the refutation. session-ledger-2026-08-07: the day's returns, including that every defect found today was found by a COUNT rather than a read — the dropped-span diff, the span-count-versus-store (769 unreachable drawers), the adapter comparison (3 of 253) — and that twice the instrument itself was at fault in the more dangerous direction, failing healthy data in a way that invites editing the data to satisfy the checker. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NEWjLBP4quXbDPDL2byEzZ
202 lines
14 KiB
Markdown
202 lines
14 KiB
Markdown
---
|
||
name: project-studium-engine
|
||
description: "Canonical Studium Engine workstream tracker — build state, governing instruments, live blocker, and the chronological log of substantive moves. Established 2026-08-07 at the MEMORY.md trim, filling the gap MEMORY.md had flagged as 'no tracker file yet'; state seeded verbatim from the MEMORY.md line it replaces."
|
||
metadata:
|
||
node_type: memory
|
||
type: project
|
||
originSessionId: 033cfe63-c9d0-4fad-accf-c45de561f09a
|
||
modified: 2026-08-07T15:08:08.484Z
|
||
---
|
||
|
||
# Studium Engine — canonical workstream tracker
|
||
|
||
**Established 2026-08-07**, at the steward-directed MEMORY.md trim. Until now the engine had
|
||
*no tracker file*, so its build state lived inline in `MEMORY.md` (one 950-character line) and in
|
||
per-session memories. That is two update surfaces and no canonical one — the drift shape recorded
|
||
as skill-harvest proposal #183. This file is now the canonical surface; `MEMORY.md` carries only a
|
||
pointer.
|
||
|
||
**This file holds state. It does not hold the *why* or the *law*:**
|
||
- **Why** → [[project-studium-engine-telos-chamber-of-voices]] (the telos — above the build plan)
|
||
- **Law** → [[reference-studium-engine-architectural-charter]] (`studium-engine/docs/the-studium-engine-architectural-charter.md`)
|
||
- **Touchstone** → `~/_Dev/studium-engine/docs/the-chamber-touchstone.md` (read at Step 0 when lost in the trees)
|
||
- **How we work here** → [[feedback-studium-engine-sixtus-v-collaboration]] (Sixtus-V: build freely, surface only vision-forks)
|
||
- **Tool review** → `studium-engine/docs/tool-evolution-log.md` (read its §0)
|
||
|
||
---
|
||
|
||
## Current state (as of 2026-08-07 wake)
|
||
|
||
**Build:** Steps 0–7 built. Corpus CLEAN and gate-validated **13/13**.
|
||
|
||
**Governing instruments:** V1 `verify-quote` + `fidelity_equivalence@3` — ratified 2026-08-05,
|
||
**GOVERNING** (REVIEWED-87 placed 2026-08-06).
|
||
|
||
⚠ **`@3` is under challenge.** PENDING-111 + a full jurist package filed 2026-08-06
|
||
(`studium-engine/docs/fidelity-3-literal-asterisk-JURIST-PACKAGE-2026-08-06.md`, containment
|
||
13/13): `_MARKUP_EMPHASIS = re.compile(r"[_*]")` strips the **escaped literal** `\*`, erasing
|
||
Alexander's confidence rating (two asterisks = a true invariant, one = progress, none = far from
|
||
invariant; "Using this book", pp. 14–15). Measured **81 / 114 / 54** across the manifested corpus.
|
||
The ruling sets the V-track course. **Verified 2026-08-07: no ruling yet** — zero occurrences of
|
||
`PENDING-111` in `~/dotfiles/REVIEWED.md`. It does **not** gate N1.
|
||
|
||
**Read side — the parse fix LANDED, `27b79ca`.** `retrieve.py` now accepts a sentence; the query
|
||
was previously passed to `MATCH ?` where FTS5 parses it as a *query expression*, so `?` and `:`
|
||
were syntax errors. Result, answer-keyed against `tests/chavruta_harness.py`:
|
||
|
||
| | |
|
||
|---|---|
|
||
| crashes | **26 → 0** |
|
||
| HIT | **0/22** ← *the number to beat* |
|
||
| MISLOCATED | **0** |
|
||
| FALSE-POSITIVE | **0** (across all 5 items where silence is the correct answer) |
|
||
|
||
Both deciding buckets empty ⇒ the revert condition was not met. **The engine now grounds nothing
|
||
*honestly*** — every question needs **13–19 terms to co-occur**. Recorded explicitly as *the number
|
||
to beat* so a later pass cannot mistake silence for progress.
|
||
|
||
**Test floor (the read side's first):** `tests/test_retrieve.py` (21 checks) +
|
||
`tests/chavruta_harness.py`. **`test_conjunction_is_monotonic` is the tripwire** against every
|
||
future answer-more change — it must stay green.
|
||
|
||
**Live blocker: PENDING-97** — retrieval AND-s bare tokens and has no semantic layer. Now
|
||
reachable and *measurable* for the first time (the 13–19 term conjunctions above).
|
||
|
||
⚡ **The embedding arm already scores 22/22 recall@20**, voice-scoped, on the identical 22 items
|
||
where FTS scores 0/22 (`corpus/measure-rerank-voicescoped.json`, verified same id-set). Capability
|
||
measured in June, **never landed**. recall@20 means the right passage is in the top 20 *alongside
|
||
nineteen others* — the answer-more direction — so **V2 is the gate that makes surfacing it safe.**
|
||
Landing embeddings first would be the make-the-demo-nicer move.
|
||
|
||
**NEXT: N1 → V2.**
|
||
|
||
- **N1** — the navigation-tree builder. Contract written: `docs/spec/n0-navigation-tree-contract.md`
|
||
§1 (the tree) and §2 (the four primitives: `list-children`, `open-node`, `expand-to-parent`,
|
||
`load-whole-work`), including that `open-node` refuses citable text for a non-citable node. Do not
|
||
re-derive it. ⚠ **N1 will NOT move 0/22** — that is N2, where the reasoner navigates; N1 lays the
|
||
ground it walks on. ⚠ **Build the tree from the READING INDEX** (`chamber-library/reading-indices/*.yaml`
|
||
— Alexander: all 253, re-found *by name*, ascending order verified, sha-bound), **not by parsing
|
||
headings**: heading text hits three documented OCR defects (179 misnumbered 178 → a duplicate node;
|
||
187 lost its `##`; 195 has no heading). The harness's heading regex is a working reference, not the input.
|
||
- **V2** — gold set + pre-registered thresholds. Follows N1 rather than PENDING-97 for the reason above.
|
||
|
||
---
|
||
|
||
## OPEN THREADS — the stack as of 2026-08-07 (captured mid-session, before the TEI detour)
|
||
|
||
*Written because the session went N1 → `@3` → R0 → TEI-decision and each step opened threads. That
|
||
accumulation is the thing the steward abhors; this block is the guard.*
|
||
|
||
**Owed to the steward, not startable by the executor**
|
||
1. **REVIEWED-87 amendment — DRAFTED, NOT PLACED.** `studium-engine/docs/REVIEWED-87-amendment-DRAFT-2026-08-07.md`
|
||
§A is the block to place. `~/REVIEWED.md` is `[ESCALATE]`, steward's hand.
|
||
2. **Three measured findings for relay to the jurist** (same draft, §B): the package's `≡` claim is
|
||
false and its own table refutes it; condition (a)'s "verdicts that may have overclaimed" has an
|
||
empty referent (the risk ran the other way — false *refusals*); Q1's grounds hold on the corpus
|
||
side only. Q3 census: escaped emphasis in **3 of 13** sources, not "Alexander only".
|
||
3. **The TEI ruling itself** — agreed in shape (MD+sidecar canonical, proxy trigger retired,
|
||
deferral becomes a design window), **not yet recorded**. Blocked on the mechanism below.
|
||
|
||
**Executor-startable, in rough priority**
|
||
4. **N2** — the agentic navigation loop + embedding entry-finder fallback; discovery emits
|
||
hypothesis-labelled output. This is the next N-track station and **the one that can move 0/22**.
|
||
5. **V2** — gold set + pre-registered thresholds; the gate that makes surfacing the embedding arm
|
||
safe (22/22 recall@20 measured in June, never landed).
|
||
6. **Alexander `front_matter` re-anchor** — all five anchors stale (+20/+20/+22/+26/+32). Now
|
||
*mechanical*: `python3 -m engine.reading_index recover` proposes; nothing is applied. Unblocks →
|
||
7. **The "Using this book" FIX** — a composite-span misclassification, **not** a D-4 policy change.
|
||
D-4's own text: *"citability is a function of **convocation**, not an intrinsic byte property"*,
|
||
with `citable:false` reserved for matter that is **nobody's** quotable voice. Alexander's framing
|
||
essays are his own words (the sidecar's own note says so). Partition the span; don't flip a flag.
|
||
8. **R0 emit / migration** — `reading_index emit <id>` renders native R0; **nothing has been written
|
||
to `chamber-library`** (D-3). Steward review before any write.
|
||
9. **The collision census** — count characters ambiguous between markdown syntax and authorial
|
||
content, per source. The number the TEI question will eventually turn on; deferred behind the
|
||
mechanism by steward call 2026-08-07.
|
||
10. **56 regions unverified** (Mauss 23 + after-the-reply 33) — editorial/synthetic titles, so
|
||
name-landing cannot test them. A content probe at the declared boundary is owed.
|
||
|
||
**Not this thread:** the Seb package · the L2 design note · PENDING-109 census + PENDING-104 brief,
|
||
both still **needing dates, not "later."**
|
||
|
||
## Chronological log
|
||
|
||
*Append substantive moves here at `/wrap-up` — not only to "Current state" above. A tracker with two
|
||
update surfaces drifts between them (skill-harvest #183).*
|
||
|
||
### 2026-08-07 — PENDING-111 RULED, `@3` corrected in place (`4be9378`)
|
||
Jurist: **Q1 AUTHORIZE** (narrow to *unescaped* delimiters), **Q2 correction-in-place** not an `@4`
|
||
bump (mechanism defect against standing doctrine), **Q3** census follows non-gating, **Q4** steward's.
|
||
`FIDELITY_VERSION` stays `@3`; **`@4` reserved.** Implemented as one left-to-right scan, not
|
||
lookbehind-plus-unescape (that form mis-reads `\\*`). Falsifier incl. the jurist's **nested** case;
|
||
suite 33, fleet **153/153**; gold **6/17 before and after — no verdict moved either way**.
|
||
|
||
⚠ **The REVIEWED-87 amendment is DRAFTED, NOT PLACED** — `docs/REVIEWED-87-amendment-DRAFT-2026-08-07.md`.
|
||
`~/REVIEWED.md` is `[ESCALATE]`, steward's hand; a jurist sign-off does not authorize a REVIEWED write.
|
||
|
||
⚡ **Three measured findings contradict the package's own premises** (draft §B, for relay): (1) the
|
||
`COMPOST\* ≡ COMPOST\*\* ≡ COMPOST` claim is **FALSE** — old `@3` gave three distinct strings and the
|
||
package's own Part I table printed the refutation; (2) so condition (a)'s "verdicts that may have
|
||
overclaimed" has an **empty referent** — the real failure was false *refusals*, the opposite risk
|
||
direction; (3) Q1's grounds hold on the **corpus side only** — a human's bare `COMPOST**` still
|
||
normalizes to `COMPOST`. **Census: escaped emphasis in 3 of 13 sources, not "Alexander only"**
|
||
(Alexander 293 · Musil 16 · Arendt 1); ratings **83/114/56 over all 253**.
|
||
|
||
**Also opened by this ruling (Q4):** D-4's primary text says *"citability is a function of
|
||
**convocation**, not an intrinsic byte property"* and reserves `citable: false` for matter that is
|
||
**nobody's** quotable voice. Alexander's framing essays are his own words — the sidecar's own note
|
||
says so — so fencing them is a **misclassification against D-4, not D-4 working**. The `frontmatter`
|
||
section is a **composite span** (YAML+TOC furniture + four Alexander essays) never partitioned.
|
||
⚠ Blocked: its partition points live in the reading index's `front_matter` block, and **all five of
|
||
those anchors are stale** (offsets +20/+20/+22/+26/+32; three land on blank lines) while the
|
||
`patterns` block in the same file is exact 253/253 — **the 2026-06-12 re-anchor was partial** and
|
||
the manifest reports one status, `RE-ANCHORED-BOUND`, for a file bound in one region and stale in
|
||
another.
|
||
|
||
### 2026-08-07 — N1 BUILT
|
||
`engine/navigate.py` + `tests/test_navigate.py` (32 checks) + `docs/spec/n1-navigation-tree-note.md`.
|
||
Tree: **9 works · 13 expressions · 359 divisions · 5,685 spans**; four N0 primitives + a browsable
|
||
CLI. Fleet **142/142**, retrieval untouched. **0/22 unchanged, as expected.**
|
||
|
||
**The derivation that mattered:** every sidecar declares exactly ONE served section (Alexander's
|
||
`body` = 10,832 lines, "Patterns 1-253"), so the sidecar is the *envelope* and the reading index is
|
||
the *articulation*. Adapters declared per index filename; unknown shape → `UndeclaredIndexShape`.
|
||
|
||
**Three defects, all caught by measurement, none by reading the code:** 455 spans orphaned in gaps
|
||
between declared divisions → 314 more in the no-sidecar source → citability reimplemented and
|
||
diverged from `chunker.section_is_served` (latent). In the first two `load_whole_work` would have
|
||
**silently under-returned**. `test_every_drawer_is_reachable` is the invariant; red-witnessed at
|
||
1,970.
|
||
|
||
**Owed / open:** ⚠ **6 of 8 indexed sources cannot be name-tested** (editorial or synthetic division
|
||
titles) — reported as an OPEN GAP, a content probe at the declared boundary is owed. ⚠ **Mauss's
|
||
reading index is not sha-bound** to the manifested file yet the manifest declares `VERIFIED-BOUND`.
|
||
**Two constraint-candidates for the steward:** (1) Alexander's confidence rating is in the source but
|
||
*not declared* by the reading index, so the tree cannot carry it without a chamber-side change —
|
||
converging with PENDING-111, where `@3` erases the same semantic; (2) a manifest `role:
|
||
reading-source` with no sidecar is chunked as `role: text, citable: true` — citable by absence.
|
||
|
||
### 2026-08-07 — tracker established
|
||
Created at the steward-directed MEMORY.md trim. State above seeded from the `MEMORY.md` line it
|
||
replaces plus `session-2026-08-06-evening-the-asterisk-that-carried-meaning.md`; nothing dropped.
|
||
Substrate-verified at creation: PENDING-111 has no ruling; `engine/` contains no navigation module
|
||
and the four N0 primitives appear only in docs (N1 genuinely unbuilt); the N0 contract and the
|
||
Alexander reading index both exist at the paths named.
|
||
|
||
### 2026-08-06 evening — the parse fix landed; the asterisk that carried meaning
|
||
`27b79ca` — 26 crashes → 0, HIT 0/22, MISLOCATED 0, FALSE-POSITIVE 0. Semantics measured unchanged
|
||
(old path vs new over all 27 items, not one disagreement); whole-query phrasing rejected because it
|
||
answers *less* (1 where the conjunction returns 4). Silence path reached for the first time by long
|
||
questions, so a silence now names its term count and states it cannot distinguish *"the voice is
|
||
silent"* from *"the terms did not co-occur"*; an unsearchable query is marked **`✗ NOT SEARCHED`**,
|
||
never coverage-warranted. Then the steward's printed *A Pattern Language* exposed the `@3` asterisk
|
||
defect → PENDING-111 + jurist package. Manifest fixes `41527be`, `cbd6a9b` (a disarmed
|
||
absent-sidecar tripwire; a usage fact in a bibliographic field; a defect record cited at
|
||
`corpus_findings[1]`, a key existing in zero files fleet-wide). Full account:
|
||
[[session-2026-08-06-evening-the-asterisk-that-carried-meaning]].
|
||
|
||
### Before 2026-08-06
|
||
Not reconstructed here. Per-session memories carry it (`session-*.md`, 2026-07-05 onward for the
|
||
Stage-1 rebuild), together with `studium-engine/docs/stage-1-rebuild-plan-2026-07-05.md` and
|
||
`docs/tool-evolution-log.md`. Backfill on demand rather than speculatively.
|