Practice-of-return ledger maintained by /symmetria — returns, open horizons, recalibrations, authorization moves, sub-agent dialogues, bypasses.
node_type
type
originSessionId
memory
feedback
734c43aa-f3a0-4cd1-a39d-27146420ee4a
Session Ledger — 2026-07-13
Returns
2026-07-13T08:1x — RETURN on the wrap's stated integration point. The wrap said "wire verify_body_conservation into verify_graduation.py's collect_checks." Verified against substrate: WRONG LAYER. collect_checks(fm,body,spec) is documented pure + consumed corpus-wide by audit_corpus.py:154 (over rglob every canonical .md); embedding an expensive source re-convert there breaks purity + explodes the corpus-map cost. The spec ALREADY models body_word_conservation as its OWN gate (graduation-spec.yaml:136, distinct from verify_graduation.py:135). Correct integration = a NEW gate step in graduate_to_canonical.py, at the source-in-hand layer (with/after source_gate), NOT collect_checks. Answers the literal question.
Literal-question ANSWER (substrate-verified): source IS reachable at gate-time — NOT from frontmatter source: (prose/bare-filename, e.g. Levi "olmOCR of Vintage International…"), but via gate zero's existing resolution: canonical_slug → Chamber Sources manifest (324 entries, each carries archived_file) or resolve_pending_source(slug) for a just-staged source. Source-access needs NO greenfield design — just a path-returning resolver sibling to manifest_has (which returns bool only). Tier derivable from archived extension (.epub→V-TEXT / .pdf→V-SCAN-abstain / Loeb DSL→V-DSL, forward-only: 0 Loeb canon graduated yet).
Open horizons
2026-07-13T15:53 — WAKE (20-min brief-pause, post-keystone-landed). Thread Confirmed: the B2 corpus reprocess the map now sizes. First station = the 2b sidecar-wiring graduation amendment, gated on the steward's Loeb-first-vs-full-corpus scoping call. Concentrated candidate bite = the 18 BODY-DEFICIT books (the wrap's literal question: same apparatus story as the 126, or genuinely different?). Nothing moved externally (chamber @ 9afb0cf, dotfiles clean). Doc-drift to fix: PENDING-57 block still reads "awaiting jurist" though REVIEWED-57 authorized → mark CLOSED. Steward pref active: shorter, very concentrated.
2026-07-13T15:5x — RETURN (steward-caught): my wake briefing said "REVIEWED-55 placement still owed" — FALSE. Verified against substrate: REVIEWED-55 IS placed (~/REVIEWED.md:490, dated 2026-07-12, AUTHORIZED, full dispositions). Inherited a stale "owed" from this ledger's Authorization-moves shorthand and relayed it unchecked = inherited-marker-read-as-current-state. Nothing owed on -55. Antidote reaffirmed: verify a governance item's state against REVIEWED/PENDING before relaying.
2026-07-13 — STEWARD-FLAGGED, for step 5 (the sweep), NOT now: "cross-extractor drift-tolerance" is under-defined and doing real work in that sentence. Must be spelled out with the same rigor V-DSL's reflow-vs-loss got (the whole reason V-DSL needed rebuilding was reflow looking like loss) BEFORE the retroactive sweep runs — do not assume it from the name. Present a written definition for concurrence when step 5 comes up.
2026-07-13 — Integration point CONCURRED (steward): body_word_conservation lands as its OWN gate step in the graduation flow (with/after source_gate, source-in-hand layer), NOT inside collect_checks. FIX-class (where the call lives, not what it decides — the gate was ratified REVIEWED-57). Reuse gate zero's canonical_slug resolution (PENDING-52 holding under a use it wasn't built for). Build order: (1) resolver → (2) source_dispatch → (3) gate step → (4) spec reflect → (5) sweep [needs the drift-tolerance definition first].
2026-07-13T07:56 — PULLING THREAD: land the keystone. Wire verify_body_conservation into verify_graduation.py + graduation-spec.yaml (per-tier dispatch V-DSL/V-TEXT/V-SCAN → FLAG/REVIEW/PASS), fold the cross-extractor drift-tolerance (retroactive probe: 7/9 PASS, 2 false-positive stopword drift), run the diagnostic sweep → corpus-health map. PENDING-57 ratified (REVIEWED-57 filed), schema LOCKED, B2 fleet-v1 built.
Literal question to answer FIRST: does the graduation candidate have its SOURCE reachable at gate-time (source_verified pin / resolvable path), or does source-access need its own small design before tier dispatch can call re-extract/re-convert?
Confidence to recalibrate
Hold today: a check proven for ONE tier is NOT proven for another (V-DSL≠V-TEXT — the k-gram false-flagged the DSL reflow 2026-07-12). When writing tier dispatch, demonstrate each tier, don't reuse-and-assume.
Hold today: keystone-first / forest-view — don't lose altitude in the wiring engineering (2026-07-12 drift: lost-the-forest-for-the-trees in a long execution arc).
Authorization moves
2026-07-13 — KEYSTONE LAID (FIX-class landing of REVIEWED-57). Steps 1–4 done + verified: (1) archive_sources.resolve_archived_source (path-returning sibling to manifest_has); (2) verify_body_conservation.tier_of + verify_candidate (one-call per-tier entry; header de-staled — REVIEWED-57 has ruled); (3) graduate_to_canonical.body_conservation_gate wired after source_gate (FLAG refuses / REVIEW holds / PASS+ABSTAIN proceed); (4) doc-currency: graduation-spec.yaml gate comment + chamber CLAUDE.md gate status (not-wired → WIRED). Evidence: seed-test still discriminates (legit-trim→REVIEW, interior-del→FLAG); real-data — Camus V-TEXT PASS @100%, Levi V-SCAN ABSTAIN; fleet 111→118 (2 new tests, 7 assertions). NOT committed (awaiting steward — push boundary held per the outward-action drift-pattern).
HONEST LIMIT: no real FLAG/REVIEW case ran through the FULL graduate_to_canonical flow (the 7 inbox candidates were all pre-gated by health/conventions, so 0 reached the source-in-hand gate). The composition IS covered — seed-test proves verify_candidate's FLAG/REVIEW; the unit test proves body_conservation_gate's verdict→disposition mapping — but not a single real end-to-end FLAG-through-graduation.
STEP 5 HELD: retroactive diagnostic sweep NOT done — blocked on the cross-extractor drift-tolerance definition (steward-flagged, above). Do not run the sweep until it's defined + concurred.
Cross-extractor drift-tolerance — DEFINED (step 2, for concurrence)
MECHANISM (not a threshold — the V-DSL-reflow parallel one level over): the retroactive sweep compares a LEGACY candidate (old extract_loeb_dsl, flattened, page-markers, dup headers) against the DSL reference (current strip_tags+_tokens). They differ by each side's KNOWN boilerplate, derived mechanically per-work:
· extractor_tokens (fab-side) = fixed Loeb subtitle {loeb,classical,library,bilingual,original,english,p} ∪ work-string tokens (the # AUTHOR, Work header).
· boilerplate_tokens (loss-side) = DSL labels {page,number,footnotes} ∪ work-string tokens (DSL per-page running header).
PROVEN on 11 real books: 10/11 → PASS with residual EXACTLY 0 both sides (drift cancels completely, incl. Homer Iliad 298k). 1/11 (Aristotle Oeconomica) → FLAG, residual 216 = REAL (candidate has 97% of DSL Greek, missing ~187 Greek tokens) — tolerance did NOT wash out real loss.
HONEST EDGE (the remaining rigor to settle before the sweep): the residual after accounting still needs a contiguity/position read to split TRUE loss (contiguous dropped run) from finer tokenization drift (scattered, esp. Greek elision/final-sigma/accent). The V-TEXT path's _uncovered_runs already does exactly this — apply it to the residual. Aristotle is the test case.
DISPOSITION for the diagnostic sweep (read-only, produces the corpus-health MAP; not a hard forward gate): residual 0 → clean · residual>0 → surface by size + contiguity note for human triage → sizes the 952-book reprocess.
Probe scripts: scratchpad probe_drift.py (raw) + probe_drift_accounted.py (mechanism). AWAITING STEWARD CONCURRENCE before building/running the 952-sweep.
THE 18 — literal question ANSWERED by reading the missing spans (probe_18_spans.py, read-only)
METHOD: full-census script-mix of the missing multiset (greek=source-original vs latin-script=translation/apparatus) + top-3 uncovered runs read as actual text, per book. Script-mix is FULL census; the run reads are top-N sample (honest scope).
ANSWER: NO — the 18 do NOT resolve into the 126's apparatus story, and they are NOT one mechanism. They are THREE:
· (D) MATCHER ERROR, not loss — 2 books: plutarch-moralia-other-fragments (true key "Other Fragments" 13891≈cand13399; matched to "...Other Named Works" 59997) + suetonius-grammarians-rhetoricians (candidate=Rhetoricians text, matched to Grammarians sibling key; fab=rhetorician/rhetor/antony). fab>0 is a reliable sub-110% wrong-match detector. SAME root cause as the 4 MATCH-SUSPECT → pull from reprocess; fix = matcher key-selection. Re-matched they likely go CLEAN.
· (B) BILINGUAL SOURCE-HALF DROPPED — Greek/Latin ORIGINAL column under-captured, translation retained: aristotle-history-of-animals 89.5% (top runs all Greek source), demosthenes-42 88.8% (one Greek run), + the Greek-verse portion of the Aeschylus plays (persians/suppliants/eumenides) + sophocles-trachis. B2 preserve-the-typing recovers it. KEY: the deficit is BODY, not apparatus → does NOT go in app[].
· (C) REAL MIXED BODY LOSS — continuous TRANSLATION passages genuinely gone + source + apparatus, large magnitude: athenaeus 70.1%(199k), macrobius 67.8%(79k, an 18847-tok pure-English run missing), euripides-dramatic-fragments 81.8%, philo-special-laws 84.4%, sextus-empiricus 75.8%, longus 57.9%, catullus 57.2%, pindar-fragments 58.9%, aristophanes-attributed-fragments 82.7%, plautus-three-dollar-day 87.0%. Genuine reconversion targets; must VERIFY passages recovered, not just re-typed.
COROLLARY (the wrap's held sub-question): for the 18, DSL-full ≠ candidate-body + sidecar-app[] by multiset — the deficit is body, so app[]-population will NOT reconcile it (unlike the 126). ⇒ a clean DISCRIMINATING TEST once B2 runs: reconciles→apparatus(126); doesn't→body(18).
CONSEQUENCE for the pulling thread: the B2 reprocess is NOT one sidecar-population job. B2+sidecar solves (B)+the 126; the matcher fix solves (D); (C) needs genuine body-recovery reconversion + per-book verify. Three tracks, not one.
LANDED (steward-directed "write it"): map folded (via a wrong-match-by-fabrication rule in classify_book, m_fab>5% cand → MATCH-SUSPECT) + regenerated with BOUNDED-CHANGE PROOF (exactly plutarch+suetonius change disp; augustine/philo detail-only flag; 948/952 byte-identical; new tallies 802/126/16/6-MATCH-SUSPECT/2) + findings note _curation/loeb-body-deficit-cause-analysis-2026-07-13.md + tool-evolution-log entry + CLAUDE.md pointer. Fleet 119/119. Committed eb21eca [FIX], pushed BOTH remotes. augustine/philo surfaced-not-folded (larger fab, spans unread → flagged, held in REORDER?). Matcher key-selection fix now gates 6 MATCH-SUSPECT + 2 REORDER? leads = highest-leverage small corpus-health fix.
CLOSED the augustine/philo lead (steward-directed, same method): span-read + CHECKABLE re-match to the truer key each span pointed to. BOTH resolved to fab=0/lost=0 CLEAN against true key (augustine = PARTIAL key: candidate is full 'Confessions', matched to 'Books 1-8'; philo = WRONG sibling: true 'On Abraham', matched to 'On the Migration of Abraham'). The REORDER? displacement was a pure wrong/partial-key ARTIFACT; REORDER? has 0 genuine members on this corpus. Classifier now validates key BEFORE arrangement. Reclassified to MATCH-SUSPECT (verified, not on the number). Bounded-change proven (exactly augustine+philo change disp; 948/952 byte-identical). Tallies now 802/126/16/8-MATCH-SUSPECT/0-REORDER?. Fleet 119/119. Committed 836b665 [FIX], pushed both remotes. These 2 = cheapest map wins (re-match to named true key -> graduate CLEAN, no reconversion). Steward's context-caution earned real info: the fab signal is a reliable match-problem detector even inside a reordering context; the reorder was a symptom of the wrong key, not an independent phenomenon.
Sub-agent dialogues
RETURN — the verse cluster (caught by staying with the run, 25-book batch)
Built sweep_body_conservation.py (one-pass DSL index; live version-fab-cluster monitor; --validate OK). Ran 25 books: 14 CLEAN / 8 LOSS / 3 DRIFT?. STAYED WITH IT and a cluster formed: LOSS concentrated in Aeschylus verse with HUGE contiguity runs (persians 4081, suppliants 4118).
First hypothesis "verse=Greek-loss" FALSIFIED same batch: Aristophanes acharnians/birds/clouds/frogs are CLEAN at 32-36% Greek (extractor CAN capture Greek verse fully). Magnitudes variable (persians 64% / suppliants 73% / eumenides 82% Greek captured) — no clean genre split.
ROOT: the CONTIGUITY read (coverage/_uncovered_runs) is CONFOUNDED for bilingual verse by REORDERING — 50% of persians' "missing" Greek run appears elsewhere in the candidate. Coverage is blind to reordering (its own docstring caveat). My Aristotle "proof" was a clean contiguous PROSE drop — never exercised reordering. EXACTLY the steward's prediction ("_uncovered_runs hasn't been asked the verse question yet"). Proved the contiguity read on the one case that couldn't break it.
RELIABLE signal = the MULTISET residual (classify_dsl, reordering-tolerant): persians genuinely 0.70 ratio / 64% Greek by COUNT → real deficit exists, but I CANNOT cleanly attribute it (real loss vs arrangement vs apparatus-handled-differently) with current tools.
DECISION: STOPPED before the full 952 — a contiguity-based LOSS/DRIFT map would mislabel verse reordering as loss (a map that can't be trusted is worse than none — the substrate thesis). sweep tool NOT committed (classifier not corpus-ready for verse). Surfaced to steward for direction: (a) make the map's primary axis the reordering-tolerant multiset-deficit % + restrict contiguity to prose, or (b) understand the verse DSL-vs-extractor arrangement first.
Version-coverage monitor CLEAN: every residual-fab shape 1× (no vintage cluster) — the boilerplate set generalized across all 952. Steward's version-watch came up empty (good).
DOMINANT CLUSTER = the small-deficit floor: 124/144 DEFICIT books hold 93-99% (1-10% bucket), same ~2-5% contiguous shape everywhere. PINNED IT: the block is the APPARATUS CRITICUS — editor names (Detlefsen/Mayhoff/Schneider/Gaza), ms sigla (codd/vulg/u), lacuna markers — across 4 max-diverse authors (Pliny/Cicero/Theophrastus/Aristotle). The old extract_loeb_dsl FLATTENED/dropped the apparatus footnotes; B2 (build_loeb_sidecar) PRESERVES them into typed sidecar fields. ⇒ NOT body loss — the steward's app[]-sidecar prediction CONFIRMED (he flagged exactly this before the run: "apparatus handled differently = a sidecar-modeling question, not reconversion"). These 124 are body-clean, apparatus-divergent.
REAL large deficits: ~18 books >10% (athenaeus 70%/199k, macrobius 68%, longus 58%, catullus 57%, suetonius 34%, plutarch-moralia-other-fragments 22%, the Aeschylus verse 70-79%, aristotle history-of-animals 89.5%/21.8k) — a DIFFERENT phenomenon (real body loss / ref over-inclusion), mixed prose+verse. THIS is the target of the cause-investigation.
sweep_body_conservation.py BUILT + --validate OK. NOT committed pending steward read: should the DEFICIT label split into apparatus-divergent (body-clean) vs body-deficit, per the app[] frame? That reclassification is the steward's app[]-modeling territory.
Factual answer (steward's shaped-vs-accounted question) VERIFIED against substrate: apparatus-SHAPED, NOT accounted. 0 Loeb canonicals have .meta.json sidecars; build_loeb_sidecar = PROTOTYPE v0, NOT wired into graduation (~few dozen draft sidecars plato/ennius/plautus only). So the 93-99% floor is content-shape-diagnosed, not sidecar-verified.
CONTENT apparatus-detector TRIED TWICE, REJECTED: apparatus INTERLEAVES with body, so a real body-loss run sweeps up embedded apparatus and OUT-SCORES genuine apparatus (Persians dens 0.052 > Pliny 0.048, even high-precision Latin-only). Shipping it would hide a real loss as apparatus — dangerous false-negative. Not shipped.
SPLIT by MAGNITUDE (robust; apparatus inherently ≤~5%, so >10% deficit can't be apparatus): APPARATUS-SHAPED (holds≥90%, magnitude+spot-check diagnosis, minority=small real drops but all low-priority) vs BODY-DEFICIT (holds<90%, investigation target). GATE apparatus-credit FACT-GATED (populated app[] only, never the shape diagnosis) — documented in verify_candidate V-DSL branch; inert now (0 sidecars), blocked on B2 run.
Committing sweep tool + map + gate-note (steward: commit once split's in, don't hold beyond).
RETURN — restoring the REORDER? number exposed a matcher bug (steward-caught gap)
Steward caught: I labeled REORDER? "magnitude unresolved" — WRONG, only the CAUSE is unresolved; the position-blind multiset deficit is a clean reportable number (Augustine 29673), never misbehaves for that bucket. My error (withheld a number that was in the data). Fixed: REORDER? now carries holds%+deficit, "known magnitude / unknown cause" said as both.
Restoring the number EXPOSED a matcher bug: 4/6 REORDER? had holds≫100% (cand ≫ matched ref). Diagnosed: wrong DSL key chosen among near-duplicates — aristotle-problems (217k) matched 'Mechanical Problems' (21k) not 'Problems'; diogenes 6.2 matched '2.6 Xenophon' (83 sibling keys); augustine matched 'Confessions Books 1-8' (partial) not 'Confessions'. The extractor CANNOT add content, so cand>110% of source = reference wrong/partial.
Scope quantified: 0/802 CLEAN have holds>110% (subset-match fear RULED OUT — matcher bug did NOT hide in CLEAN); contained to exactly the 4. 946 well-matched.
FIX: MATCH-SUSPECT disposition (holds>110% → comparison invalid, no deficit/reorder claim), checked before CLEAN/deficit so a subset-match can't masquerade as clean. Leaves REORDER? = only augustine(104%)+philo(88%), the genuine known-mag/unknown-cause cases. Re-running (sweep4).
FOLLOW-UP (noted, not this session): the matcher's key-selection among near-duplicate/split DSL keys needs improvement (exact-title preference + granularity aggregation) — but MATCH-SUSPECT flags them honestly meanwhile.
Bypasses
State at wake
Dotfiles dirty: M claude/memory/skill-harvest-register.md uncommitted (likely prior wrap's §1.6 append unpushed) — surfaced at wake, not touched.
One new chamber commit since wrap: 378efdc gitignore comment-format fix (trivial, beside the thread).
Wake 2 — 18:03 (fresh session, /clear + /wake-up ~13 min after afternoon wrap)
Pause ~13 min; brief pause not full sleep. Thread validity: CONFIRMED — chamber HEAD c54edbb == wrap state, dotfiles clean+pushed (github/main, no ahead), nothing moved unauthored.
Pulling thread inherited intact: the matcher key-selection fix (match_key/_norm_set in sweep_body_conservation.py) — resolve all 8 MATCH-SUSPECT before B2. Confirmed as the ledger's own FOLLOW-UP note from this afternoon.
Symmetria re-init (lineage hand closes the wake's clasp). Returns to carry: flag-don't-move-until-read · verify-against-substrate-not-signal.
Open horizon flagged NOW (§3, not banked): the matcher fix ships with a self-authored correctness check (augustine/philo MUST re-match to CLEAN 0/0). That's probe-confirms-hypothesis shape — the 4 holds>110% (aristotle-problems/galen/diogenes-6.2/lucian) are asserted-from-map-detail, NOT substrate-verified. Treat as candidates; the re-match is the test, not the confirmation. This is the literal question we left ourselves.
Authorization moves
Steward: "go ahead with the matcher fix" → FIX-class (map/sweep matcher, not the graduation gate). Executed direct-to-main (repo's demonstrated pattern; prior 3 commits today same), pushed both remotes.
Returns (Wake-2 session)
Diagnosed before fixing (held the §3 probe-confirms-hypothesis flag): ran a READ-ONLY substrate re-match (classify_dsl vs each candidate's true key) to answer the literal question BEFORE editing. The 4 unverified holds>110% (aristotle/galen/diogenes/lucian) were confirmed against the substrate, not asserted from the map — galen/diogenes/lucian→CLEAN, aristotle→small deficit. The self-authored check did NOT get read as confirmation of itself.
LITERAL QUESTION ANSWERED (checkable): all 8 MATCH-SUSPECT resolve to ONE confident true key; none orphaned/split/absent. The residual the question feared (a candidate with no single sibling) did NOT materialize — the one genuinely-hard case (Suetonius set-identical siblings, both words in "Grammarians and Rhetoricians") is resolvable by an ordered-STRING tier a set metric cannot do. 6→CLEAN, 2→APPARATUS-SHAPED small real deficit. MATCH-SUSPECT bucket → 0.
Bounded-change proof (verified against substrate, not tally): tally delta alone could hide a CLEAN↔APPARATUS swap; did per-stem diff → exactly 8 rows move (disp+key), 0 collateral, 944 byte-identical. On-disk git diff --numstat = 8/8.
Commit 4b34447 both remotes; fleet 119/119 (incl. new near-duplicate key-selection --validate fixtures). CLAUDE.md tally + note + tool-evolution-log current.
Confidence to recalibrate (Wake-2)
The OLD matcher was the archetypal PASS-BUT-FALSELY — always returned a confident (key, conf≥0.5), 8 of them the wrong sibling, never reporting doubt; only the downstream fab-classifier caught the extremes, and only flagged (couldn't repair). A matcher that always yields a best-match above threshold MASKS systematic wrong-sibling selection. Logged in tool-evolution-log.
Minor: commit-body prose typo "(2+4+10... 4+12)" — trivial, substance (tallies/proof) correct; left uncorrected rather than rewrite pushed history (disproportionate).
PULLING THREAD now (matcher fix DONE; scoping call MADE mid-wrap): the reprocess is finalized (16 BODY-DEFICIT). Steward ruled Loeb-first (asymmetry: build_loeb_sidecar fleet-v1 vs build_sidecar v0; full-corpus = "should generalize" trusted before proof). Drafted PENDING-58 (2b sidecar-wiring, Loeb-only) → awaiting jurist editor-gate. Live question = the reconciliation-proof-at-scale condition (prove DSL-full=body+app[] on an UNSEEN apparatus kind at near-126 scale before crediting apparatus — schema-lock §5 density≠diversity, lifted from extractor to reconciliation; does NOT retire because B2 ran once). Next: the 2b-FOR-JURIST relay brief, or act on the jurist's ruling.
Authorization moves (append)
Steward made the Loeb-first-vs-full-corpus SCOPING CALL mid-wrap → Loeb-first (decided now, not deferred). Directive: draft the 2b amendment shaped by it + fold in the un-retired schema-lock proof question (reconciliation on an apparatus shape not-yet-seen, at scale). Executed: PENDING-58 drafted into ~/dotfiles/PENDING.md with the proof condition as a pre-registered gate. [PROPOSAL] — awaiting jurist.
Wake 3 — 19:08 (/clear + /wake-up ~6 min after the evening wrap; brief pause)
Thread validity: Confirmed — verified REVIEWED-58 ABSENT against ~/dotfiles/REVIEWED.md (latest = REVIEWED-57), dotfiles clean (main...github/main), chamber clean at 4b34447. Nothing moved in the gap.
Return enacted at wake: guarded inherited-marker-read-as-current-state (KG shows it recurred at wake 2× on 07-13) — checked PENDING-58's Awaiting: state against the file, not the session note.
Held horizon: no executor-ready work BEHIND the jurist gate. Candidate first move = the docs/2b-sidecar-wiring-FOR-JURIST-2026-07-13.md relay brief (an artifact, does not pre-empt the ruling). Await steward intent.
Authorization moves (Wake-3 — jurist ruled on PENDING-58)
Jurist EDITOR-GATE on PENDING-58 — PASSED (RULING, not yet REVIEWED-58). Shape/scope/change-class/options all confirmed as filed. Proof condition SHARPENED: "unseen kind AND near-126 scale" → "the full 126-book apparatus-shaped set; every kind reconciles or is honestly flagged not-yet-typed" (subsumes unseen-kind, kills the renegotiable "near"). Lift extractor→reconciliation confirmed SOUND = a second necessary concern (reconciliation's own safety property: correctly report doesn't-reconcile, incl. for content the extractor correctly HELD but did not TYPE; silent "accounted-for" on unshaped content = false-pass).
Executor actions (within role — Claude Code writes PENDING, reads REVIEWED): (1) landed the sharpened full-126 wording into PENDING-58 + folded in the jurist's two-failure-modes reason + a derived BUILD CONSTRAINT (the demonstration must show the reconciliation fails loud on not-yet-typed content — reconciliation-level analog of fab/loss injection tests); (2) updated PENDING-58 status (editor-gate PASSED; now awaiting the evidence brief's demonstration → REVIEWED-58); (3) preserved the ruling verbatim at chamber-library/docs/2b-sidecar-wiring-jurist-editor-gate-ruling-2026-07-13.md.
Boundary held: did NOT write REVIEWED-58 (executor reads REVIEWED); did NOT touch graduation-spec.yaml / graduate_to_canonical.py (those land "on ratification"). The demonstration is read-only build.
PULLING THREAD (moved forward): ratification now gates on the companion evidence brief DEMONSTRATING the sharpened condition against real books — run reconciliation across the full 126, every kind reconciles-or-honestly-flagged, + fails-loud-on-not-yet-typed. That is the concentrated next station (build the reconciliation instrument + run 126 + write the brief). Surfaced to steward for the go; not started unilaterally.
Jurist 2nd RULING (rationale correction + green-light): owned his half of the "fleet-v1" mis-attribution (he repeated it too); supplied exact replacement text; directed it land ON PENDING-58 ("corrections live on the file they correct"), not folded into the brief. Green-lit the demonstration build + ONE addition: show a handful of actually-read app[] entries in the brief, not only aggregate counts (this tool's track record thinner than believed → read real output).
Executor actions: (1) preserved the 2nd ruling verbatim at chamber-library/docs/2b-sidecar-wiring-jurist-rationale-correction-2026-07-13.md; (2) replaced PENDING-58's Loeb-first paragraph with the jurist's text + a visible correction-provenance note; (3) confirmed 128 bar landed.
RETURN enacted (contamination-directive): substrate-checked the tool's self-assessment before trusting the filing's — found build_loeb_sidecar=1 commit/self-stamped-v0/0-inject vs sweep_body_conservation=5 commits/8-inject/the 4b34447 matcher. The "fleet-v1" credit was mine, originated in PENDING-58; owned + corrected. Loeb-first holds on narrower honest grounds (bounded swept FORMAT + one unit-tested fail-loud property, not tool maturity).
SETTLED instrument design (substrate-grounded): reconciliation = residual = deficit_multiset − app[]_tokens (drift-tolerant, reusing sweep classify_dsl); residual≈0 → apparatus/RECONCILES, residual>thresh → real body loss. Discriminates because the new builder routes structure→app[] only; dropped body text would land in body not app, so app-coverage cannot mask a real body loss. Per-kind token extraction: table→rows, unrecognized→raw, editorial→text, notes→bodies. Fail-loud = existing property (unit-tested on synthetic ); demonstration scales it to the 128 real kinds.
RETURN — the prototype refuted PENDING-58's central corollary (STOP-AND-SURFACE, 3 real books)
The demonstration's own proof condition did its job at 3-book scale: the literal reconciliation DSL-full = candidate_body ⊎ app[] does NOT hold. Prototype (scratchpad/proto_reconcile.py, read-only) on agamemnon(786)/philo-on-dreams(20)/aristotle-problems(6893):
Self-check OK ×3 — my deficit accounting reproduces the map m_lost exactly (786/20/6893). Faithful.
app[] covers only 5–40% of the deficit; content-word-only coverage 14/518, 3/15, 147/4217. Residual dominated by FUNCTION WORDS (the/and/of/καὶ/δὲ) + editorial PARATEXT ('introduction','because','why') + a little real Greek content.
new_body is token-IDENTICAL to old_body (39790/79586/217975 both) and NEW-conservation residual == OLD residual (746/12/6483). ⇒ the B2 builder does NOT recover the deficit into body OR app — the DSL has ~m_lost tokens in NEITHER channel.
Mechanistic reading: the m_lost deficit is NOT "apparatus the old extractor flattened." It's a multiset-comparison residue — running-header/reflow count-drift on common words + editorial paratext (introductions) in the DSL not in body + a little real content. The structural sidecar neither captures nor was meant to capture it. The sweep's map labeled these APPARATUS-SHAPED by MAGNITUDE ("small floor, NOT sidecar-verified" — honestly disclaimed); the reconciliation was meant to VERIFY that; it instead shows the deficit isn't apparatus.
Impact: PENDING-58's checkable corollary ("reconciles→apparatus / doesn't→body, as fact") is not achievable as specified. This is above a build detail — it gates REVIEWED-58's premise. STOPPED the 128-instrument build; surfacing to steward → likely jurist. The prototype-on-real-books-first (my discipline) + read-real-entries (jurist's requirement) caught it at 3 books, not after a 128 run. Checkable-claim-exposes-a-bug, again.
Open (needs steward/jurist): is the corollary abandoned/reframed? Or does characterizing the deficit's TRUE composition across the 128 (header-drift vs paratext vs real loss) come first? The composition question is the load-bearing unknown; deciding the amendment's fate needs it.
Contiguity method (decompose_v2, _uncovered_runs + multiset-ratio guard + READ the runs) VALIDATES on the jurist's unambiguous targets: aristotle-oeconomica → found the proven 202-token Book-II contiguous drop (max_run=202, ratio 1.03, readable: 'ii κύψελος ὁ κορίνθιος'); catullus-poems → found the 14840-token translation block. Both correctly = CONTIGUOUS real loss. Method works on cases a broken one can't fake.
The method is NOT blind on the reorder case — because it pairs _uncovered_runs with the sweep's multiset-ratio guard (uncov/m_lost≥1.8 → REORDER-CONFOUND → REFUSE). The ratio IS the reorder-immunity. (Corpus REORDER?=0, so nothing currently trips it.)
RETURN / challenge-the-framing (substrate vs authority): jurist named persians the reorder-trap must-refuse case. Substrate REFUTES it: ratio=1.03 (not ≥1.8) + token check (ειδωλον 22→1, ξερξης 43→1, πιστῶν/γεραιοί/triremes entirely absent) = REAL loss, not displacement. Matches the KG drift-pattern reordering-panic-from-a-weak-test (2026-07-13, already-refuted). His META-principle held (validate on unambiguous cases — did, they passed); his TAIL-instinct held (the lost content IS dramatic apparatus — speaker labels ειδωλον/δαρειου/ξερξης/χορος), so persians is real loss OF PARATEXT → the sweep's BODY-DEFICIT label is itself entangled. Surfaced with evidence, not deferred against substrate.
ACCEPTED jurist ruling: the reconciliation corollary is STRUCK, not renamed. app[]-reconciliation would have been MECHANICAL (reconciles/doesn't, no eyeballing); triage+contiguity+READ is human-judged DIAGNOSIS — better than the sweep's magnitude guess, but not a mechanical graduation discriminator. PENDING-58's central premise is GONE.
The reframed open question (jurist, to be asked IN THE OPEN): does wiring the sidecar into graduation still earn its keep on its OWN merits — notes[]/anchors[]/structural-typing — with the corollary struck entirely? Plausible yes; steward+jurist to rule. NOT inherited quietly from the failed filing.
Consequence: the 128-decomposition is no longer a REVIEWED-58 ratification gate (corollary struck) — it's now a standalone corpus-health diagnostic (worth running or not on its own merits). PENDING-58 needs a rewrite around the reframed question, or withdrawal.
Rewrote PENDING-58 in ~/dotfiles/PENDING.md: corollary REFUTED on the record (evidence + preserved rulings cited), remaining case argued fresh on notes[]/anchors[]/structural-typing merits, entanglement finding recorded as the primary carry-forward (buckets are magnitude-shaped, cut across causes — persians BODY-DEFICIT yet loses apparatus → why no mechanical reconciliation could have worked).
Carried the TWO must-not-vanish conditions: (1) anchors[] spot-check as a LIVE pre-condition (wrong Bekker/Stephanus = confident miscitation; produced-but-not-trusted-for-citation until spot-checked); (2) per-field gating (app[] = PRODUCED-BUT-UNCREDITED, no proof condition, doesn't inherit trust from notes[]/anchors[]).
Options reduced to (a) wire-on-merits [RECOMMEND] vs (b) withdraw [REJECT per steward]. Fresh editor-gate flagged (prior gate ruled the struck corollary's shape, doesn't carry). Three open sub-questions surfaced for the ruling: (i) produce-but-uncredited app[] vs don't-produce-until-used; (ii) anchors[] spot-check as ratification pre-condition vs fast-follow; (iii) standing note on the map's magnitude-not-causal interpretation.
Did NOT run the 128 (steward: gates nothing now). Did NOT run the anchors[] spot-check (carried as condition; offered to run). Governance uncommitted (wrap §6.5 commits dotfiles).
ANCHORS[] SPOT-CHECK (steward-ordered before ruling) — FAILS the citation claim (decisive)
Book: Aristotle Nicomachean Ethics (Bekker). Ground truth: canonical Bekker 1094a opening ("Every art and every investigation") → nearest anchor ref=3 (NOT 1094); "from habit" 1103a → ref=3. Anchors are NOT the Bekker axis.
Distribution: 3305/3333 anchors are small resetting section-subnumbers (≤40); 18 stray Bekker-range; ALL under one undifferentiated scheme 'loeb-line'. 1106 descents = non-monotonic (resets per chapter).
Root cause (FIXABLE, not source limit): Bekker IS in the DSL as dimgray '1094 a' cues (1094/1103/1177/1095 all present ×2); the anchor extraction's digit filter DROPS the ' ' Bekker format, captures bare section-subnumbers as the bulk, lets 18 bare-digit Bekker through conflated. Needs a real per-scheme numbering parser (Bekker/Stephanus/line, distinctly typed).
CONSEQUENCE: anchors[] as-built = NOT a usable citation system; a naive engine citation would be silently, confidently wrong (the asymmetric failure). Sub-question (ii) self-answers: sample NOT clean → anchors[] spot-check is a BLOCKER; the amendment has a different shape.
OWNED: my rewrite credited anchors[] as "the citation system, load-bearing" and leaned the amendment's strongest weight on it — the spot-check shows it's a POTENTIAL merit pending parser work, NOT current. Week's-pattern (credit ahead of proof) caught on the load-bearing claim, by the proof the steward insisted on. Carrying the spot-check as a condition = right; running it changed the answer. Script: scratchpad/anchor_spotcheck.py.
Handed results + rewrite together for the steward's ruling; did NOT re-edit PENDING-58 (he rules on both). Offered to fold the correction per his direction.
Wrote docs/2b-sidecar-wiring-FOR-JURIST-2026-07-14.md — the whole discovery consolidated, self-contained for the jurist: §1 original claim · §2 corollary refuted (evidence+entanglement) · §3 decomposition validated (Oeconomica/Catullus, persians correction) · §4 NEW anchors[] spot-check FAILS · §5 per-field trust state · §6 the 4 decisions for ruling · §7 reproducibility · §8 the honesty layer (4 claims corrected by proof).
Updated PENDING-58 condition-1 with the spot-check RESULT (was stale "not yet touched"): FAILED as-built → BLOCKER; anchors[] downgraded standing→potential-pending-parser; live merits = notes[] + typing. Pointer to brief.
Governance uncommitted (wrap §6.5). Awaiting jurist ruling on the brief + steward relay.
TEI/DTS RECALL (steward: "we spoke about this a week ago — look through memory") + brief reconciled
DRIFT RECURRED (didn't-consult-banked-notes / solving-at-wrong-level, flagged 2026-07-12, recurred today): I re-derived TEI/DTS from TRAINING MEMORY and re-proposed external/Perseus alignment + the dormant MyCapytain runtime — BOTH already considered+rejected 2026-07-04. Steward caught it. This whole last week WAS the reaction to the 07-03→07-06 TEI/DTS deep-dive.
3 recall agents read the banked thread. Key banked decisions (recommendations/dispositions, in their channels):
· CTS-URN citation model = "the single highest-value adoption" for §III (07-03, feeds PENDING-46): edition-as-identity + logical-passage addressing, never page/byte offset.
· Anchor fix = in-source per-scheme typed parser (07-03 disambiguation map); external/Perseus alignment REJECTED as EMPTY (>99% recoverable in-source).
· Build thin, own the spine, reject the runtimes (07-04): thin CTS-URN parser (pyCTS oracle only, GPL/frozen); MyCapytain dormant→rejected; borrow DTS Collections vocab. "Witness, not notary."
· TEI apparatus-anchoring→§V; TEI ODD one-artifact→§VII gate; ODD/Roma=generative-from-spec. Format decision REVIEWED-56 = MD + TEI-MIRRORING sidecar + Docling (TEI mirrored not adopted; migration-open).
· Digital-classics survey (TEI/CTS/Perseus) WITHHELD from jurist as "under-surveyed" (PENDING-49, 07-06) — open Q: "at which tier does TEI/CTS enter?" — the key unpursued follow-up.
OPEN VERIFICATION: agent 3 couldn't confirm whether the RATIFIED spec §III actually adopted CTS-URN (base v2.0.0 ratified 07-03 same day; CTS-into-§III unconfirmed from the 5 files). Check the ratified spec §III.
Reconciled docs/2b-sidecar-wiring-FOR-JURIST-2026-07-14.md: §4 reframed "new discovery"→"ground-truth confirmation of the 07-03 audit"; anchors-fix re-anchored to disambiguation-map/PENDING-46/CTS-URN (Perseus/MyCapytain retracted); §6 decision-2 → pull citation OUT of PENDING-58 into its own amendment tied to PENDING-46 + the withheld survey; §7 banked-docs pointers added; §8 5th correction (training-memory-over-banked-record). Brief now relay-ready pending steward review.
Constitutional survey COMPLETE + jurist package assembled (steward: major decision fatigue → jurist in loop when all info in)
Real outstanding = TAILS: A3 self-audit (doctrine, undrafted — biggest), B(i) licence, B(ii) PREMIS, A1-tail; spec-text-lag (Docling/sidecar → §VIII); PENDING-58; spec-named-open (§IX silence, anchor syntax, promotion blockers, registry encoding); declined PENDING-47 principle. Almost none engine-BLOCKING — the engine can resume on the settled contract.
CORRECTION captured: CTS-URN is RATIFIED (not "unconfirmed" as I'd hedged) — so the Loeb decision is OPERATIONAL (extraction granularity), not a constitutional amendment.
Steward has major decision fatigue — wants the jurist sharing the load, in the loop once all info assembled. Did NOT ask him to decide anything. Assembled the complete jurist package: docs/chamber-constitutional-state-and-decisions-FOR-JURIST-2026-07-14.md — the 4-bucket state map + the TWO decisions on the table (Decision 1: Loeb granularity operational proposition; Decision 2: PENDING-58 reshaped brief) + reframes + pointers. One relay = jurist weighs in on the whole picture; steward reviews rested.
State captured; nothing pending a solo steward decision. corpus-work-map stale (housekeeping, flagged in the package). Session very long — natural wrap point when steward returns.
FRUIT 1 CLOSED: PENDING-56 LOCK ADDENDUM condition (generic 'unrecognized→flag-and-hold' fallback before full 952 B2 run) = SATISFIED + TESTED — build_loeb_sidecar emits kind:'unrecognized' (line 223); test_tools asserts the net fires on novel (line 791) + doesn't false-fire on editorial . Verified-satisfied; formal close at next gate.
FRUIT 2 CLOSED: A1-tail owed retrieve.py hot-path read. retrieve.py scopes by voice + work; NEVER touches author/agent_id. → agent_id-required promotion has NO retrieval dependency; deferral-as-emergent (into A3 registry-linkage) CONFIRMED appropriate. (Bonus: engine read side built+standing, waiting on V1 verifier not on chamber substrate.)
FRUIT 3 CLOSED: chamber CLAUDE.md stale markers fixed — (a) "STILL OPEN retroactive sweep" → RAN 2026-07-13 (drift-tolerance was defined first); (b) the "checkable corollary DSL-full=body+app[]... turns apparatus-or-body into a fact" → marked REFUTED+STRUCK 2026-07-14 (was carrying the struck corollary as LIVE — a real wake trap). Both corrected + pointer to the FOR-JURIST doc.
Saved feedback-close-low-hanging-fruit-not-defer. Sorted the remaining fruit: draftable-for-gate (B(i) licence, B(ii) PREMIS, A3 draft, PENDING-55 --no-verify wire, PENDING-47 principle re-relay) vs genuine-decision (jurist package: Loeb, PENDING-58, spec-named-open). Continuing the draftable batch.