pipelines/SUBSTRATE_REGION_RETAG_2026-07-19.md
Status: APPLIED. The companion harness fix is the left-word-boundary gazetteer matcher
(harness/rag/index.py _infer_region, regression-pinned in harness/rag/test_gazetteer.py, battery
100/100). Provenance: the sumatra_java region-page build surfaced one leaked cross-region source in a
region-filtered query; the diagnosis generalized to the whole auto-sorted class.
The gazetteer matcher scored keywords by pure lowercase SUBSTRING (kw in text), so short tokens hid
inside common words: "malay/malaya/malayan" all match inside "Himalaya(n)" (a Garhwal pilgrimage paper
beat tibet_himalaya 3-2 and was filed malay_world — SRC_00025, the proven leak); "san" matches inside
"thousand/sanskrit/sanctuary" (the san_khoisan epidemic); "bali" inside "kabbalistic"; "iberia" inside
"Siberia". The exposed class is the 307 auto-sorted junk-titled sources (numeric filenames, largely
the Donner Institute / Scripta comparative-religion paper dump), which had no human-readable title for
the gazetteer to verify and were bucketed on first-two-page probe text at min_score 1.
stays open so the curated stem tokens keep matching their inflections — himalaya→himalayan). Three
new adversarial regression cases pin the class in test_gazetteer.py.
Re-scored all 307 junk-titled sources against their STORED chunk text (first 5 chunks, richer than
the original probe) with the fixed matcher. A keyword matcher must not pretend to classify
comparative-religion academic prose (a spot-check caught two plausible-looking-but-wrong low-score
re-tags: a French Gayomart/Iran paper scoring "bali", a Huns-and-Scandinavia paper scoring
"gabon_bwiti" — both correctly refused under the thresholds):
the PDFs moved to their correct processed/ bucket folders: SRC_00025 malay_world→tibet_himalaya ·
SRC_00037 →amazon_colombia · SRC_00078/00079/00089/00091/00351/00368/00369/00374/00375 →sami_sapmi
(the Donner/Åbo Sámi-studies cluster) · SRC_00141/00143 →tibet_himalaya · SRC_00322 →angkor_khmer ·
SRC_00353 →norse_germanic.
honest keyword winner exists. Region tags REMOVED (a wrong tag poisons region-filtered builds; an
absent tag is honest) — these sources are invisible to region-filtered queries until re-classified.
cells updated on all 240 changed rows; fidelity baseline re-emitted (extension-zone hash).
The 226 stripped sources are the semantic re-classification queue: junk-titled rows in
T0_Source_Material_Registry with an EMPTY region_tags cell (query: source_title has no alphabetic
word of length >= 3 AND region_tags = ''). They join the standing ~370-file never-ingested triage
queue as the same job class — content-level classification by a model that reads meaning, not
keywords. Until then, absence-from-region-queries is the correct, noise-gate-conformant state.
Region-filtered substrate queries (the load-bearing correctness mechanism for region pages and all
downstream builds) no longer surface the mis-bucketed class. Coverage note per the no-silent-caps
rule: region query recall over this paper dump is REDUCED until the triage lane re-classifies the 226
— the earlier state was not better coverage, it was silent cross-region pollution.