Parent: gloss. This is an offline follow-up to the selection experiment. It applies a lexical evidence gate to the cached top-three labels; no paid API calls.
Gate: a one-word label must occur in the source text; a multiword label must have every content word occur. This is deliberately conservative: it rejects “perl python” for the Python exception policy, “summer poem” for the Kathy poem, and “freebsd host” where FreeBSD is absent. It can also reject useful paraphrases such as “functional exercise”, so this is a diagnostic rather than a production rule.
The gate filters the existing three cosine and three pursuit labels. It does not search candidates ranked below three, so it cannot recover a good label hidden behind a false top-three result. A wider reranking pass should be the next implementation if this direction survives review.
| Group/policy | Same first label | Same complete set | Mean original-label retention |
|---|---|---|---|
| primary / cosine1 | 476 | 476 | 67.1% |
| primary / cosine2 | 399 | 246 | 58.1% |
| primary / cosine3 | 351 | 149 | 53.7% |
| primary / pursuit1 | 476 | 476 | 67.1% |
| primary / pursuit2 | 429 | 226 | 57.5% |
| primary / pursuit3 | 362 | 88 | 50.3% |
| without_drain / cosine1 | 401 | 401 | 66.4% |
| without_drain / cosine2 | 342 | 240 | 60.3% |
| without_drain / cosine3 | 334 | 149 | 57.5% |
| without_drain / pursuit1 | 401 | 401 | 66.4% |
| without_drain / pursuit2 | 346 | 210 | 57.8% |
| without_drain / pursuit3 | 295 | 84 | 50.6% |
The strict gate sharply reduces emitted labels and therefore reduces false-specificity opportunities, but it also loses recall. In the representative examples, it removes the unsupported Perl, summer, and FreeBSD labels, while leaving “functional exercise” with no labels because neither word appears exactly in the source. That trade-off is unacceptable as a default without a synonym or phrase-normalisation layer.
Recommendation: keep the gate as a confidence signal, not a hard deletion rule. Mark a label as “text-supported” when exact evidence exists; mark specific labels with no evidence as low-confidence; retain related paraphrases for retrieval. For factual summaries, require text-supported labels and preserve the source passage that supplied the evidence.
All 712 non-empty notes were processed from the fixed snapshot. Full per-note output is in the local review appendix; CSV: /home/john/py/gloss/artifacts/evidence-2026-09-18/comparison.csv; summary and method: /home/john/py/gloss/artifacts/evidence-2026-09-18/summary.json. Existing selection defaults were not changed.