Выбран фактически исполненный локальный SQLite FTS5 adapter: сначала retrieval-contract.md. Все условия вымышлены, модели/внешний API/бот-канал не запускались.
Старые component-contract.md/checker.py/mock-retrieval.json и diagnosis.html — отдельный ручной mock v2. Их содержимое и goldenQ6 сохранены. Не выдавайте mock за SQLite-лог и ручной ответ за генерацию. Старый prompt.txt относится к golden-упражнению; новый retrieval-prompt.txt отделяет эталон от генератора.
Python3.11+ с включённым FTS5, сеть/ключи/пакеты не нужны. Проверено Python3.14.4/SQLite3.46.1:
python3 sqlite_retrieval.py
python3 retrieval_controls.py
python3 reproduce_all.py
sha256sum -c SHA256SUMS
Поисковый log хранит фактические полные тексты/параметры; replay сверяет его. Q2 меняет объявленный учебный query, не доказывает автоматическую обработку парафразов. query_only включён после заполнения in-memory индекса; значения передаются параметрами. Никакой постоянной БД или State не читается/не меняется.
Q6 clarify — ручная метка, не auto-conflict detection. Правильный JSON допускает ложную свободную фразу: отдельно сверять агентом смысл; человек уточняет неизвестные бизнес-факты/исключения. Нет гарантии качества всех ботов/повторения эффекта Epoch8/AGIMA.

NEW isolated local control: python3 false-refusal-replay.py
Fresh SQLite Q3 finds faq-v2. The SAME full found context is used for existing bad
Q3 abstain (wrong_action_or_false_refusal, pass=false) and fixed answer (pass=true).
Both have retrieval_missing_source_ids=[]; this is separate from old mock Q3-before.
The command replays every existing check first, then compares false-refusal-report.json.
Only --write records that computed report. No LLM/API, free-prose semantic check or RAG benchmark.
