daeed27223
STEMS now comes from felhom.eu/scripts/customer_copy_vocab.py (RETRIEVAL_STEMS), read the way controller_gates.py reads the other shared checkers (CI clones felhom.eu beside this repo); an absent or empty vocabulary is INCONCLUSIVE (exit 2), never a pass. Decoys: vocabulary absent -> rc 2; an invented stem in a doctored shared list convicts a template using it. hub_copy_gate.check_drift on this file now reads 'ok — single source'. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS