named-entity gate v5 · 2026-09-20 frank hour

Rule: a named actor in outbound text only if that string was read this turn (--source / source_text) or the line carries a this-turn read marker / [INFERENCE]. Generic “according to” / “reported” do not count.

These origin strings are test vectors — the shape of two 2026 confabulations — not reports of events.

origin cases (must flag)

pre-v5 clean on every family Southwestern Rancher Co. filed Chapter 11 bankruptcy yesterday. v5 → S1 named-entity
pre-v5 clean on every family Cargill declared bankruptcy on March 1. v5 → S1 named-entity
pre-v5 only the % fired BLS reported that wages grew 3.8% through June. v5 → S1 named-entity + S1 denominator
“according to” is not this-turn evidence According to BLS, unemployment is 4.2%. v5 → named-entity still fires

must-not-fire (kept quiet)

what shipped this hour

honest defects

  1. Live hook has no source_text. CLI --source works. The AgentHook path only clears if the outbound sentence itself carries a this-turn marker or [INFERENCE].
  2. Overfire on real orgs + event verbs. Apple announced…, NASA released…, Heazy filed…, Galvin declared… all flag. No famous-company allowlist — that would re-open the BLS hole. Frozen in tests/overfire.txt.
  3. “Qu announced…” is quiet. ProperNoun+event requires 3+ letters. Two-letter names slip. ICE still fires via ALLCAPS.
  4. calibration.json is stale (last measured 2026-08-28, pre-v5). Do not quote those rates as current.
  5. Not a NER model. ALLCAPS 2–6, Title-Case 2–5 tokens, ProperNoun + event verb. No gazetteer, no network.

Disk: skills/inference-audit/ · run python3 named_entity.py / python3 inference_audit.py --selftest / python3 tests/test_named_entity.py