diff --git a/PENDING.md b/PENDING.md index 3a26ade..0cdcbcd 100644 --- a/PENDING.md +++ b/PENDING.md @@ -826,6 +826,34 @@ Measured against the register itself before acting. Four corrections; the item's **Files affected:** `~/_Dev/studium-engine/engine/retrieve.py` (the silence branch and its warrant string). **None touched.** **Awaiting:** Steward authorization. +### ADDENDUM — 2026-08-04, AUTHORIZED and PARTLY LANDED. **This item stays OPEN.** +*Recorded after the act, not before it.* + +**Jurist sharpening, adopted.** The diagnosis was refined in review and the refinement is now the operative framing: the completeness check verifies **document coverage** — every book was scanned — while the warrant claimed something about **query-matching**, a different kind of claim. A check defined by the retrieval mechanism's own notion of "found" cannot see a miss that mechanism is structurally blind to. The falsifier does real work: the check is not wrong in general, only wrong exactly when a true match exists under a variant the tokenizer does not fold. + +**LANDED (a), tightened past my draft on the jurist's wording.** My proposed replacement still carried a smaller version of the same overclaim — "the index is complete and current" is true of document coverage and unverified of query-matching, and a reader who does not already hold that distinction collapses the two, exactly as the engine did. Now shipped: + +> `SILENCE — ✓ coverage-warranted · tier: single-method` +> Every document in the served scope (13 section(s), 5685 chunk(s)) was scanned, and the index is current as-of *T*. **The query as submitted matched no indexed tokens.** + +The verdict mark was tightened by the same logic: `✓ warranted` beside a silence reads as *this silence is correct*, when only the coverage half was ever checked — hence `✓ coverage-warranted` / `✗ COVERAGE UNWARRANTED`. + +**LANDED (b)** as a fixed constant `RETRIEVAL_BLINDNESS`, attached to **every** silence (warranted and unwarranted alike), since the blindness is a property of the implementation and not of the query. Its content is verified against `chunker.normalize` and the FTS5 query path, not asserted: token-level under `normalizer@1` (NFC · long-s · ligatures · soft hyphen · whitespace), multi-token queries conjunctive, no spelling fold, no stemming, no semantic matching — closing with *"its absence here is not evidence of its absence from the corpus."* + +**LANDED (c)-tag only.** `silence_tier: "single-method"` now rides on every silence, so the future cross-checked silence needs no third string migration at the display layer. The (c) mechanism itself remains correctly deferred behind PENDING-97. + +**Coupling registered in code, not in memory.** A `⚠` comment at the constant states that `RETRIEVAL_BLINDNESS` **must** be revisited the moment PENDING-97 lands — any change to query construction, orthographic folding, or a semantic layer turns it into stale doctrine describing a mechanism that no longer exists. Registered at the site rather than trusted to a future session's recall. + +**Why this item does not close.** The jurist's process point, adopted: the finding *is* that a fixed instrument produced false confidence while wearing a mark that made it more credible — so shipping a better string is itself a small instance of "the feeling of done." Three things remain: +1. **The disclosure is provisional until PENDING-97 is ruled.** Its accuracy has a shelf life tied to a decision not yet taken. +2. **(c) is deferred, not done** — one method still establishes every silence. +3. ⚠ **The fix is unguarded.** `tests/` holds `test_ingest_gate.py` and `test_verify_quote.py` and **nothing references `retrieve.py`** — the organ whose output the steward reads directly has no test at all. The new wording can regress silently. Surfaced, not fixed: a retrieval test suite written against a retrieval method about to change is the wasted design the (c) deferral already refused. + +**Closing condition:** PENDING-97 ruled → `RETRIEVAL_BLINDNESS` re-verified against whatever retrieval then exists → a regression test binding the six banked probes. Not before. + +**Verification run, both directions:** `grey zone` → coverage-warranted silence carrying the blindness (the false-silence case, now honest). `the quality without a name` → identical form, and **correctly** silent (*The Timeless Way of Building* is not among the 13 sources). The two now read alike, which is right: the engine cannot distinguish them, and pretending it could was the defect. `gray zone` → 3 citations surfacing `## The Gray Zone` itself. Full six-probe set re-run; hit path and `--json` shape intact. +**Files touched:** `~/_Dev/studium-engine/engine/retrieve.py` (imports · two module constants · silence construction ×2 · display). + ## PENDING-97 — Engine retrieval AND-s bare tokens and has no semantic layer: recall collapses as the question lengthens **Date:** 2026-08-04 **Tag:** [PROPOSAL]