The wake reported MEMORY.md at 26,803 bytes against a 24,986-byte budget, so the
index was being silently truncated at load — the failure the two-file split exists
to prevent, on the one file every session reads first.
The cause was not bulk. It was an inversion the file's own Index discipline section
forbids: "Canonical Trackers as one-line pointers — chronological detail lives in
the linked tracker files, not here." Five tracker entries had grown into paragraphs,
and for three of them the index had become the SOLE custodian of live state:
- Studium Engine: the tracker's chronological log stopped at 2026-08-13 while the
index carried engine state through 2026-09-01 (REVIEWED-133, 496cd7e, the
deleted undisclosed_days_in_force). Relocated verbatim as a dated log entry.
- The Fool (Tarbuckle): the only linked target was a SEALED seed, which is not a
place state may be appended, so there was nowhere for it to go. Tracker
established (project-fool-tarbuckle.md); index line relocated verbatim.
- L1 reliability: the tracker records that replay is "not resumable" but neither
the mechanism (minCursor is a minimum over 11 modules, two never participate, so
it is pinned at 0 by construction) nor the completion criterion (uninterrupted
run length, not rate). Both appended.
Cut only where the file's own rule says to cut. "Rules that fire silently" was left
untouched by design — those entries keep their rule inline precisely because I would
not know to look them up, and gutting them is the one cut that would do real harm.
The frozen verification-ladder pointer (REVIEWED-123) and the skill-harvest hold
(PENDING-141) were likewise not touched.
Lossless-relocation gate applied: line-range slices, never retyping; md5 per slice;
token-conservation check over all five originals against the trimmed index and the
relocation targets — 0 unconserved after the L1 append. Link canary: 406 pointers,
0 dead, 0 mis-authored; 32 wikilinks clean.
26,803 -> 23,714 bytes. Headroom is only 1.3 KB; the Active Session block still
carries ~5.5 KB that the wrap rotates.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X3L79vgAnt1x2kxvf23Qt7
24 KiB
name, description, metadata
| name | description | metadata | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| project-studium-engine | 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. |
|
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 thatopen-noderefuses 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
- REVIEWED-87 amendment — DRAFTED, NOT PLACED.
studium-engine/docs/REVIEWED-87-amendment-DRAFT-2026-08-07.md§A is the block to place.~/REVIEWED.mdis[ESCALATE], steward's hand. - 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". - 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
2026-09-03 — state relocated from the MEMORY.md index at the load-integrity trim
⚠ Provenance: this entry is the verbatim MEMORY.md index line, moved here because the index had become this workstream's sole custodian — the log below stopped at 2026-08-13 while the index carried engine state through 2026-09-01, and MEMORY.md was over its load budget and being silently truncated at wake. Relocated, not rewritten; the pointer in the index is now one line.
- Studium Engine — canonical engine tracker. N0–N2 + R0 +
voice_stampbuilt; corpus 14 sources, trilingual, fleet 9 suites / 285 green. fr cell: TWO STEPS FROM CLOSING. REVIEWED-133 (PENDING-137) RULED + EXECUTED 2026-09-01 (2b30425,496cd7e) — the cell-constant narrowing is now a placed amendment:fr.stratum_amendmentscarries REVIEWED-121 and REVIEWED-133 as siblings (what cond. 4 turned on).undisclosed_days_in_forcedeleted, not corrected;directionrecorded as INFERENCE, never measurement — ⚠ the narrowing removed the markers the claim turns on, so the before-state is unrecoverable from the file that carries the disclosure. NEXT: PENDING-134's disclosure (⚠ what it now requires is NOT obvious — read REVIEWED-133'sIf AUTHORIZEDwith REVIEWED-121 point 9 before touching the file; deliberately not guessed at the wrap), thenratio_A_to_Bre-derived ONCE (REVIEWED-116 pt 5). ⚠ PENDING-134 was ruled REVIEWED-121 on 2026-08-14 — this line said "NEXT: rule PENDING-134" for 18 days and aimed the steward at the wrong target. ⚠ PENDING-131 (c) never bound the engine (chunker.pyhaschar_rangesince Cluster A).
2026-08-13 — the fence was never blocked; the fr cell all but closed
REVIEWED-118 EXECUTED (e51e30d) — authorized 2026-08-10, unexecuted for three days, found by
substrate-checking the **If AUTHORIZED:** clause rather than reading it as status. L926's
instances 6/12/16 retracted. Two decisions not implied by the ruling: mauss-phase2-spans.yaml is
generated, so the record went into scripts/bind_mauss_spans.py too (a retraction in the
emitted YAML alone is erased by the next run, with no diff); and that file measures binding, so
the binding facts stayed and a cross-reference carries the retraction.
THE (b1) IDENTIFICATION PASS RAN (docs/fr-reported-speech-identification-pass-2026-08-13.md),
authorized at REVIEWED-116 pt 5 on 08-10 and never executed. Reported speech in exactly 1 of 9 fr
grounded spans (L1551). The other eight are Mauss's own terminology, three self-marked
("comme nous proposons de les appeler"). ⚠ Corrects REVIEWED-116 pt 6 rather than confirming
it: Mauss's 73 inline ≥120-char spans are a different population from the grounded set, of which
only L926 and L1551 were ever members — within the grounded set P7's F4 tagging was correct and
complete. ⇒ PENDING-134's blast radius on inherited fr gold is ONE span.
PENDING-135 (c) → REVIEWED-119 · PENDING-136 (c) → REVIEWED-120 (de1c34b, both placed by the
steward). Instance 8 reclassified negative-candidate, marked in place; ⚠ sub-type name OPEN —
§7.4(i) addresses the nested voice served as the host's, this fuses both. Count fields now
carry their populations; bare distinct_spans retired. ⚠ REVIEWED-119 pt 4 corrects PENDING-135's
own blocking claim: option (d) is constrained by studium/v2-gold@1 §14.2 (lines: [a,b]) —
engine-side, D-1 — not by the chamber-locked studium/meta@1. Materially cheaper route.
⚠ I committed 136's own error while executing it: bound_instances_grounded 12 by subtraction,
ignoring instance 17. Correct 10; all counts now verified by enumeration.
voice_stamp BUILT (d411034; engine/voice_stamp.py, suite 22; fleet 9 suites / 285).
⚠ AND MOVE 1 WAS NEVER BLOCKED. PENDING-131 (c) is real for the sidecar and never bound the
engine — chunker.py has recorded char_range document offsets since Cluster A. The
line-granularity ceiling was an artifact of where the fence was being WRITTEN, not of what the
engine can SEE. Paragraph-scoped pairing (not line-scoped) is what makes it work on hard-wrapped
sources. Reporter, deliberately NOT wired to abstention — verdict semantics are unruled.
fr cell as of this wrap: 11 listed spans / 8 grounded (1 A + 7 B) / 2 reclassified / 1
retracted / 10 grounded bound instances. ratio_A_to_B VOID — re-derived ONCE after
PENDING-134 lands and all dispositions are recorded (REVIEWED-116 pt 5).
⚠ INSTRUMENT LESSON, and it is the day's most transferable: the nested-voice census carried five defects and four escaped its own controls — every control was drawn from Mauss, so they exercised one quotation convention and one line structure, and could not see blindness to ASCII quotes (3 sources) or to hard-wrapped text (2 sources), both of which produced clean zeros. Only the fifth — a regression in an already-covered case — was caught by the controls. A control set drawn from one source establishes nothing about a corpus.
⚠ PENDING-134's remaining blocker is a STEWARD CLIENT RESTART, not a build. governance-mcp.py
builds FILES at import, so the four V0-lane keys registered at 4c3758e are not yet served.
Executor half discharged: selftest 54/54, and two key descriptions that had gone stale the same day
were refreshed (92d5ad2) so the jurist's first read is not of a stale index.
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-08 — disposition (vi) RULED (REVIEWED-97), and voice: is the convocation key (824139d)
Ruled and placed. REVIEWED-97 (PENDING-113) disposes kind (vi): four slots, each one
job — identity voice: · relation quoted_by: · category (traditional /
non-individual-origin, held out of the key) · per-source prose note. Reasoning of record:
docs/voice-non-individual-origin-2026-08-08.md. Substrate findings kept in
docs/vi-disposition-DRAFT-2026-08-08.md (superseded in part).
The correction that mattered. The jurist's first structure put the category pair in
voice:. voice: is what retrieve.py:216 filters on, so that would have made the Havámál
and the Mahābhārata one convocable speaker. Measured before asserting: glidden spans 5
sources, weil 2 — correct, one person each. Aggregation principle, jurist's phrasing:
individual-author voices aggregate at the person because a person is real and singular;
traditional matter has no such person, so identity lives at the work.
Refuted by measurement: option C (omit voice, let the relation carry it) — omission
resolves to the host via sec.get("voice", catalog.get("voice")). Control 4/4.
Corrections found in filed records. Surah LXIV (at-Taghābun), not CXIV — the sidecar
title was wrong and had reached REVIEWED-96, PENDING-113 and memory; it voided the jurist's
worked provenance note, which was built on the "Say" formula absent from the quoted passage.
quotation-poet-jurist reclassified from "unnamed individual" to traditional matter by one
footnote. Naming evidence for six of nine blocks sits inside the fenced apparatus,
engine-unreachable.
Fourth defect in 118f411. L850 ("M. Cahen nous signale aussi la strophe 145 :") is
Mauss's own prose, fenced inside the Havámál block — found only because the steward corrected
a framing about language. And the body → body-01..13 split left test_navigate.py red
for a full day (stale hardcoded node id; the containment invariant itself verified intact).
Re-run the fleet after any sidecar/corpus change — proposed as a pre-commit hook extension.
Filed: PENDING-114 (scripture quoted unmarked in Harrison — Mark 16:7–8 served as
voice: harrison) → steward AUTHORIZED (b)+(c) → REVIEWED-98 placed same day (verified clean, L1080). PENDING-115 (two
step-3 blockers: ROLE_CLASS has no quotation key, so such sections are searchable while
classified outside the declared scope; and the warrant scope is computed per source, so a
sub-source voice overclaims — 191 chunks of Mauss would warrant a Havámál silence).
NEXT (steward-agreed order): the quotation-in × translation-of jurist package —
all twelve blocks are translated matter and role is single-valued, so (vi) is decided but
inapplicable until it is ruled. Then PENDING-114 (b), validation phase first.
2026-08-07 night — V2 preconditions worked; the corpus answered with a bigger question
P4 censused 14 sources (parsed, not grepped — grep -c '^ - id:' gives 22 and reproduces the
design addendum's "21" error; 8 numeric ids live under corpus_findings). P1 verified clean.
P5 → span-binding, 73dfef3: P5's content_located: 6 is byte-locatability; Tier-2 gold needs a
bound span — 15 of 17 bind (11 distinct spans), each corroborated twice (verify_quote locates +
line sits at stated − 1). corpus/mauss-phase2-spans.yaml. ⚠ The first pass bound 0 of 11 on a
criterion inherited from Tier-1; the control (6 known answers, 6/6) is what corrected it.
P7, 2a45c26: fr tagged 1 A : 9 B — inverting P7's own prediction — and §6.3's French method
produces B by construction, so ~8 stratum-A pairs must be authored and nothing schedules them.
en is NOT taggable (no spans, only division anchors; EN divisions run ~29× the FR spans).
P6 still 0 bytes.
Then the corpus-wide finding. Mauss's body had no role: quotation region, so §7.4(i)'s
provenance join did not exist. Fixed G&G (57090ab) and Mauss (118f411) — and the jurist ruled the
fix the wrong instrument. REVIEWED-96: D-4's convocation governs; citable: false is for matter
that is nobody's voice; §4.1 case 2 keeps a non-host voice quotable under a relation.
Q3's rule: a quoted span grounds the host's reproduction, never the quoted author's
authorship. Q2 deferred — the chunk invariant is derived; carry provenance at the span
layer instead. Q4 binds borrowed authority only; (vi) anonymous/traditional matter GATES the
Mauss remediation. Q5 upgraded to BLOCKING. PENDING-113 lodged with the remediation order.
⚠ 118f411 was mislabelled [FIX] — corpus-wide policy under a scoped label, overriding a
ratified default on the authority of a document whose front matter forbids acting on it pre-review,
and destroying the only human-verified §7.4(i) negative (the Havámál, identified as a gold-negative
candidate six hours earlier). Commits STAND pending the ruled order: (vi) → re-tag → only then
citable: true.
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.