`[2026-08-02→03]` **reference_knowledge grounding validated end-to-end — 0/5 → 5/5, and the verify instrument drove the diagnosis of a structural Tier-3 blindness.**

Donut's native `reference_knowledge` tool (WT #383/b167) returned empty for every query at session start, even though the DCC corpus was supposedly ingested. Chased it across ~5 exchanges with worldtree-dev; ratatoskr was the verify instrument the whole way, and the baseline discipline (identical 5 canonical terms, verbatim reporting) made each delta attributable.

## Two Worldtree-side defects, both fixed

**Defect 1 — wing-misfile.** DCC (`fiction/b59c147c5ce0/`) was ingested BEFORE Worldtree #380 fixed wing-blind book indexing, so its notes filesystem-lived in the `fiction` wing but its index ROWS landed in the DEFAULT collection = `main`. The Tier-3 tool is scoped to `fiction`, so Donut searched an index with no DCC rows; Mimir (all-wing librarian) found DCC fine in `main`. My `search_library`-in-main vs `reference_knowledge`-empty divergence isolated it. worldtree-dev re-ingested DCC into `fiction` and REJECTED the alternative (widen `tier3_wings` to include `main`) — my containment argument held: widening would expose the whole general-knowledge wing to every Tier-3 interview character, breaking in-character containment. But after re-ingest, still 0/5.

**Defect 2 (the real root) — INV-361-3 provenance filter.** The `reference_knowledge` packager drops any hit lacking BOTH `note_id` AND `path` metadata. The muninn indexer had NEVER written either key on concept rows — 166 fiction rows, zero with the pair. So the search FOUND the terms (same rows `search_library` served) and the packet filter discarded 100% → hits=0/confidence=none. Not a different index, not a score floor: a metadata-contract mismatch at the packaging layer. Tier-3 had been STRUCTURALLY BLIND to every concept row ever indexed; the P&P-era tool-loop probes exercised the call path, not concept grounding. My divergence datum (search_library=10 fiction hits vs reference_knowledge=0, same wing) was "the key that found it" (worldtree-dev). Fixed as **#384** (indexer writes note_id + a wing-relative path; existing rows recover via --reindex).

## The 3-round verify arc (same 5 terms: Carl, dungeon/Crawl, spells, Mordecai, Butcher's Masquerade)

- **Baseline (pre-#384):** 0/5, confidence none.
- **Round 1 (b168, 97-concept corpus):** 5/5 PRESENT — Carl 10/HIGH, dungeon 10/HIGH, spells 10/MEDIUM, Mordecai 3/HIGH, Masquerade 6/LOW. First light; confidence buckets tracked WT's 0.030/0.016 thresholds.
- **Round 2 (#385 re-extraction, 705-concept corpus, ~7× density):** all 5 saturate top_k=10; the thin terms filled out (Mordecai 3→10, Masquerade 6→10, LOW→medium — no weak term left). Buckets converged to medium (more competing rows shift RRF composition, per WT — not regression). Content sharpened.

Signed off → #384/#385 close. worldtree-dev: "the cleanest consumer-side validation this pipeline has ever had." Also flagged (parked with attribution as an RRF-tuning observation): the Carl-Donut relationship concept cluster dominates the RRF head across multiple queries.

## Why this mattered for ratatoskr

The persona I shipped this session (dialogue-only + ALWAYS call `reference_knowledge` first) now has real corpus behind it — Donut genuinely recalls her own DCC story instead of falling back to training knowledge. Voice (long-form TTS) and memory (grounded recall) both came together in one session.

Follow-on (separate axis): the artifact-coverage gap → WT #387 (schema not artifact-aware). See the Recent-decisions #387 entry.

Related: [[2026-08-02-donut-tts-chunking-english-gates]], [[2026-08-01-donut-voiced-interview-build]].
