session 2026-07-14: PENDING-58 rewritten (corollary struck); session file + MEMORY demote; feedback-close-low-hanging-fruit; KG +3; skill-harvest flag

This commit is contained in:
David F Glidden
2026-07-14 10:15:12 +02:00
parent b00294a1fb
commit 0a25b183ba
8 changed files with 195 additions and 16 deletions
+33 -15
View File
@@ -1503,18 +1503,36 @@ Disposition (verbatim capture + executor action-list: `chamber-library/docs/libr
**CLOSED 2026-07-13 (REVIEWED-57 AUTHORIZED — fully ratified across three jurist rounds).** Gate WIRED into graduation as its own source-in-hand step `body_conservation_gate()` (`cdb3454`). §6 retroactive sweep RUN over all 952 Loeb → the corpus-health map (d9f6880/9afb0cf). Follow-on same day: the 18 body-deficit **cause-analysed** by reading the missing spans → three remedy tracks (re-match 8 / re-extract 4 / re-verify-and-reconvert 12); a wrong-match-by-fabrication classifier rule + the 2 REORDER? books resolved (both wrong/partial-key, CLEAN on re-match) → REORDER? dissolved to 0 (eb21eca/836b665/c54edbb). Nothing further awaited on PENDING-57. The reprocess itself (matcher fix → the 2b sidecar-wiring amendment gated on the steward's Loeb-first-vs-full-corpus call → B2 ②+③) is downstream work tracked in the session files + `chamber-library/docs/chamber-program-open-work.md`, not here.
## PENDING-58 — 2b: Wire the Loeb structural sidecar into graduation (V-DSL tier), with the `DSL-full = body + app[]` reconciliation as the apparatus/body FACT — Loeb-first scope
**Date:** 2026-07-13
**Tag:** [PROPOSAL] — change-class PROPOSAL (it changes what graduation PRODUCES and what the body-conservation gate may CREDIT; per chamber CLAUDE.md "FIX→PROPOSAL when it changes what a gate accepts", and per REVIEWED-56 §4 "graduation-spec names the sidecar as the graduated structural layer — a separate, additive amendment"). Jurist editor-gate → steward ratification (REVIEWED-58).
**Summary:** For the **V-DSL (Loeb) tier only**, make graduation produce + validate the `.meta.json` structural sidecar (via the fleet-v1 `build_loeb_sidecar.py`) as a graduated structural layer, so the reserved `app[]` is populated — and add the **`DSL-full = candidate-body + sidecar-app[]` (by multiset) reconciliation** as the mechanism that turns the corpus-health map's *diagnosis-by-magnitude* ("apparatus-shaped, NOT sidecar-verified") into a **checked fact**: reconciles → the deficit was apparatus (the 126); doesn't → it was body (the 16).
**Rationale:** The whole reprocess stands on turning "apparatus or body?" from a judgment into a reconciliation. The sweep (PENDING-57 §6) can only *diagnose* apparatus by magnitude — it explicitly labels the 126 APPARATUS-SHAPED *not sidecar-verified*, because the app[] input does not exist yet. Wiring B2's sidecar into graduation is what supplies that input; the reconciliation is then the same shape as the verbatim gate's fabrication/loss split — *reconciles* is a fact and *doesn't* is a fact, no eyeballing. It also un-blocks the ②+③ reprocess (B2 becomes the graduation path for the reconvert, not a side tool). The matcher fix (`4b34447`, 2026-07-13) finalized the target set (16 BODY-DEFICIT: ②4 + ③12, MATCH-SUSPECT→0), so the scope this amendment governs is now stable.
**Scope decision — LOEB-FIRST (steward-ruled 2026-07-13, decided now not deferred):** wire it for the **V-DSL / Loeb tier ONLY**, through `build_loeb_sidecar.py` (**fleet-v1**: six commits this week, matcher rewrite, fabrication+loss injection tests, a 952-book sweep, in `test_tools`). **Explicitly NOT** the general EPUB/PDF tier: its extractor `build_sidecar.py` is a **v0 prototype, never in the fleet, exactly where it was at schema-lock**. The asymmetry is the argument: building the amendment for a corpus half of which runs through v0 tooling would be "should generalize, structurally similar" *trusted before proof anywhere* — the shape that broke nagarjuna's index, the nested-block div, and the Aeschylus reordering, one level up. The general tier joins by a **later additive amendment** once its extractor earns the same trust; nothing about Loeb-first blocks that path.
**The reconciliation (the checkable corollary this amendment installs):**
· `multiset(DSL-full for the work) == multiset(candidate body) ⊎ multiset(all sidecar app[] entries)` (drift-tolerant, same boilerplate accounting as the sweep).
· **Reconciles** ⇒ the map's deficit was apparatus the old extractor flattened → the APPARATUS-SHAPED label is now *sidecar-verified fact* (predicts the 126).
· **Does not reconcile** ⇒ the deficit is real body loss (predicts the 16) → stays a reprocess target. The prediction *is* the test.
**THE PRE-REGISTERED PROOF CONDITION (steward-directed 2026-07-13 — the un-retired schema-lock question, NOT new):** the reconciliation must be **demonstrated on an apparatus shape it has NOT already seen** (not `table`/`glyph` again — an unseen `app[]` kind: marginal sigla, interlinear gloss, testimonia-citation, verse-line apparatus), **at a scale closer to what the 126 actually are** — before apparatus-credit is granted at scale / before the reconciliation is trusted as the fact. This LIFTS the jurist's already-ratified extractor condition (schema-DRAFT §5: apparatus *density* ≠ *diversity of kind*; "the densest volume fit the schema" ≠ "the worst case is expressible"; the real safety property is "the extractor holds *anything* it does not recognize") **up from the extractor to the reconciliation** — the reconciliation running once on two prototype books does not retire it; it retires when asked at the 126's scale against an unseen kind. Until it clears, **apparatus-credit into `body_conservation_gate` stays FACT-GATED on populated `app[]`** (already the PENDING-57 posture — this amendment does not loosen it, it names the condition that would).
**Options:** **(a)** wire the sidecar as produced-and-validated at V-DSL graduation, run the reconciliation as a diagnostic, keep apparatus-credit FACT-GATED, and require the proof-condition demonstration before the reconciliation is cited as fact at scale (RECOMMEND); **(b)** wire + immediately treat reconciliation as authoritative apparatus-credit (REJECT — grants credit before the unseen-kind/at-scale proof, the exact move the condition forbids); **(c)** defer wiring until B2 has reconverted the ②+③ set (REJECT — circular: the reconvert graduates *through* this wiring).
**Change-class boundary — what this does NOT change:** the LOCKED sidecar schema (additive-only; no field meaning/shape touched); the verbatim guarantee text; any tier's evidence-class; the V-DSL/V-TEXT/V-SCAN dispatch; the general-tier graduation path (untouched — Loeb-only). It ADDS: a V-DSL sidecar-generation+validation step at graduation, and a reconciliation instrument + its FACT-GATE.
**Files affected (on ratification):** `_curation/graduation-spec.yaml` (gates block: name the sidecar as the graduated structural layer for V-DSL + declare the sidecar-generation/validation step, mirroring how `body_word_conservation`/line 136 was wired); `scripts/graduate_to_canonical.py` (produce+validate the sidecar at V-DSL graduation, source-in-hand layer, beside `body_conservation_gate`); `scripts/build_loeb_sidecar.py` (the graduation entry point — already fleet-v1); a NEW reconciliation instrument (`DSL-full = body ⊎ app[]` multiset check) + its unseen-kind/at-scale demonstration; `_curation/conversion-runbook.yaml` (pipeline direction). Companion `docs/2b-sidecar-wiring-FOR-JURIST-2026-07-13.md` relay brief to follow (the evidence pack, as PENDING-56/57 carried).
**Awaiting:** jurist editor-gate (esp. on the proof-condition wording — is "unseen kind AND near-126 scale" the right bar, or does he want it sharper?) → steward ratification (REVIEWED-58) → land by supersession.
## PENDING-58 — 2b: Wire the Loeb structural sidecar into graduation (V-DSL tier) on its OWN merits (`notes[]` · `anchors[]` · structural typing) — the reconciliation corollary REFUTED and struck
**Date:** 2026-07-13 (original filing) · **REWRITTEN 2026-07-14** (corollary refuted on the record; steward-directed rewrite-not-withdraw).
**Tag:** [PROPOSAL] — change-class PROPOSAL (changes what graduation PRODUCES; per chamber CLAUDE.md "FIX→PROPOSAL when it changes what a gate accepts"). **Jurist editor-gate → steward ratification (REVIEWED-58), FRESH** — the prior editor-gate ruled on the struck corollary's *shape* and does NOT carry.
**WHY THIS IS A REWRITE, NOT THE ORIGINAL:** The original PENDING-58 hung on a **reconciliation corollary** — `multiset(DSL-full) == multiset(candidate_body) ⊎ multiset(app[])` — which would have turned the corpus-health map's magnitude-diagnosis ("apparatus-shaped") into a **mechanical fact** (reconciles→apparatus / doesn't→body, no eyeballing). **That corollary is REFUTED and struck** — not renamed, not quietly dropped (steward + jurist explicit: a filing that drops its central justification and keeps the conclusion is what this process exists to prevent). The sidecar wiring never *depended* on the corollary; the corollary was a bonus hung on it. This rewrite argues the remaining, untouched case on its own merits.
**THE REFUTATION, on the record** (evidence: 2026-07-13/14 session ledger; the demonstration `scratchpad/proto_reconcile.py` + `decompose_v2.py`; jurist rulings `docs/2b-sidecar-wiring-jurist-*-2026-07-13.md`):
· The proof condition (demonstrate on real books before crediting) did its job — on 3 real books the literal reconciliation **does not hold**: `app[]` covers only 5–40% of the `m_lost` deficit, and **`new_body` is token-identical to `old_body`** (the B2 builder recovers the deficit into *neither* body nor `app[]` — the DSL's "missing" tokens are in neither channel).
· Decomposition (contiguity via `_uncovered_runs` + a reorder-immune multiset-ratio guard + reading the tail; validated on Oeconomica's proven 202-token Book-II drop and Catullus's 14,840-token translation block) shows the `m_lost` deficit is **not flattened apparatus** — it is running-header/reflow **count-drift on common words** + editorial **paratext** (introductions) + **small real loss**, none of which a *structural* sidecar captures or was meant to.
· **THE DEEPER FINDING (steward-named as the primary carry-forward, bigger than this amendment):** the corpus-health map's buckets are **magnitude-shaped groupings that cut across the actual causes**, not clean causal partitions. `loeb-aeschylus-persians` is labeled **BODY-DEFICIT** yet its loss is **dramatic apparatus** (speaker labels `ειδωλον 22→1, ξερξης 43→1, χορος 70→21` — verified real loss, ratio 1.03, not displacement); apparatus-shaped books are 74–90% benign drift with small real-loss tails. Because a "body-deficit" book can be losing apparatus and an "apparatus-shaped" book can be mostly drift, **no mechanical `app[]`-reconciliation could ever have discriminated apparatus from body** — the entanglement is in the buckets themselves. The decomposition survives only as an *evidence-backed, human-judged diagnostic*, never a mechanical gate. *(This finding likely warrants a note on the map's own interpretation — open sub-question below.)*
**Summary (the remaining proposal):** For the **V-DSL (Loeb) tier only**, make graduation **produce + validate the `.meta.json` structural sidecar** via `build_loeb_sidecar.py`, earning its keep on the fields that stand on their own — **`notes[]`** (footnote ref↔body pairing), **`anchors[]`** (the Loeb citation system: line-anchors, Bekker/Stephanus refs, page markers), and **structural typing** (sections, editorial-insertions, tables/glyphs, the `unrecognized` safety-net) — under **per-field trust gating** (below). The reconciliation instrument is **struck**; **no corpus-health map gets "verified" by this amendment.**
**WHY THE REMAINING CASE STANDS (argued fresh, not inherited):**
· `notes[]` — already-proven footnote work (PENDING-54/REVIEWED-54 pre-processor + B2 pairing; genre-heterogeneous, honest-flagged). Independently valuable to the engine's apparatus layer.
· `anchors[]` — the Loeb **citation system**, load-bearing for the engine's addressing whether or not any map is ever verified. The field with real downstream risk (see condition 1).
· structural typing — the preserve-never-flatten value (REVIEWED-56): typed structure the engine wants regardless of the map.
These merits are untouched by the corollary's failure — which is exactly why the steward ruled *rewrite, not withdraw*.
**TWO CONDITIONS THE REWRITE MUST CARRY (they would otherwise vanish with the corollary):**
**1. `anchors[]` spot-check — a LIVE pre-condition (steward-flagged).** Before `anchors[]` is trusted as the engine's citation layer, spot-check a sample against the source: does anchor N (line / Bekker / Stephanus) point to the passage it claims? **A wrong number is the engine citing the wrong passage with confidence** — the highest-consequence failure in the whole sidecar. `anchors[]` is PRODUCED at graduation but NOT trusted-for-citation until this clears.
> **RUN 2026-07-14 — FAILED as-built** (evidence: `docs/2b-sidecar-wiring-FOR-JURIST-2026-07-14.md` §4; `scratchpad/anchor_spotcheck.py`). On Aristotle NE the anchors capture Loeb section-subnumbers (3305/3333 are ≤40, resetting per chapter) and **drop the Bekker citation axis** — which IS in the source (dimgray `'1094 a'` cues), rejected by the extraction's digit filter. Ground-truth: Bekker **1094a** opening → anchor **ref=3**. `anchors[]` needs a per-scheme numbering parser (Bekker/Stephanus/line, distinctly typed) before it bears the citation claim. **Per the steward's logic (sample not clean → blocker), this condition is a BLOCKER; the amendment's shape is now open for ruling (brief §6).** The rewrite's framing of `anchors[]` as a *standing* merit is accordingly downgraded to *potential, pending the parser* — the amendment's live merits are `notes[]` (proven) + structural typing.
**2. Per-field gating — with the corollary struck, `app[]` has NO proof condition at all.** Each field earns its own trust; **`app[]` does not inherit trust from `notes[]`/`anchors[]` merely by sharing the file.** Trust states: `notes[]` = trusted (proven) · `anchors[]` = trusted-after-spot-check · `sections[]`/`provenance` = produced (low-risk) · **`app[]` = PRODUCED-BUT-UNCREDITED** (verbatim + typed + `unrecognized`-safety-net, but no proof condition met — never credited into any gate; a future amendment adds one if a use needs it). This preserves the PENDING-57 posture (`body_conservation_gate` gets NO apparatus credit) — now for the honest reason: not "pending the reconciliation," but "`app[]` has no proof condition, full stop."
**Options (current — the reconciliation options are moot):** **(a)** wire the sidecar to PRODUCE the fields under per-field gating; `anchors[]` trusted-for-citation only after the spot-check; `app[]` produced-but-uncredited; **no reconciliation instrument** (RECOMMEND). **(b)** withdraw the amendment entirely (REJECT — steward-ruled: the `notes[]`/`anchors[]` merits stand untouched by the corollary's failure; withdrawal would discard proven, independently-valuable work).
**Change-class boundary — what this does NOT change:** LOCKED sidecar schema (additive-only); the verbatim guarantee; any tier's evidence-class; V-DSL/V-TEXT/V-SCAN dispatch; the general-tier path (Loeb-only). It ADDS: a V-DSL sidecar produce+validate step at graduation under per-field trust gating, and the `anchors[]` spot-check as a pre-condition on citation-trust. It REMOVES from the prior filing: the reconciliation instrument, the `app[]`-credit-into-`body_conservation_gate` path, the 128-demonstration-as-gate.
**Files affected (on ratification):** `_curation/graduation-spec.yaml` (name the sidecar as the graduated structural layer for V-DSL; declare the produce/validate step + per-field trust states); `scripts/graduate_to_canonical.py` (produce+validate the sidecar beside `body_conservation_gate`, NO apparatus credit); `scripts/build_loeb_sidecar.py` (the graduation entry point — a 1-commit, self-stamped v0 prototype carrying one substantive fleet test incl. the `unrecognized` fail-loud check; wired, not modified); a NEW **`anchors[]` spot-check** instrument + its sample result; `_curation/conversion-runbook.yaml`. **No reconciliation instrument.**
**History (superseded, preserved — not archived away):** the original corollary filing + its jurist editor-gate + rationale-correction live at `docs/2b-sidecar-wiring-jurist-editor-gate-ruling-2026-07-13.md` + `docs/2b-sidecar-wiring-jurist-rationale-correction-2026-07-13.md` + git history + the 2026-07-13/14 ledger. The refutation is recorded above, in the open.
**Awaiting:** jurist editor-gate + steward ratification (REVIEWED-58), **fresh**. Open sub-questions for the ruling: **(i)** is "produce-but-uncredited `app[]`" the right posture, or should `app[]` not be produced at all until it has a use + a proof? **(ii)** is the `anchors[]` spot-check a ratification pre-condition (block until it clears) or a fast-follow after wiring? **(iii)** does the entanglement finding warrant a standing note on the corpus-health map's interpretation (its buckets are magnitude-shaped, not causal)?