# Forensic Audit v1.1 (NQ-004 / NQ-008 / NQ-009)

Источник baseline: `data/eval_cases/eval-YxrhL2dCcH.report.json` и trace-файлы `h5BLdC1oBO0wY6`, `iel5ScdccVZ4zT`, `1C9MATbKvo5FnF`.
Новые API-вызовы на forensic этап: `0`.

| case_id | raw_question | expected.intent_class | actual.intent_class | expected.route_hint | actual.route_hint | expected.requires | actual.requires | какие признаки модель не увидела | какие признаки модель увидела лишние | предполагаемая причина ошибки | какая минимальная правка должна это исправить |
|---|---|---|---|---|---|---|---|---|---|---|---|
| NQ-004 | По 97 счету проверь, где возможна ошибка дат начала и окончания списания. | rule_based_account_control | anomaly_probe | store_feature_risk | store_feature_risk | `{cross=false, causal=false}` | `{cross=false, causal=true}` | Что это rule-based контроль по учетному правилу 97, а не поиск аномалий | Ложный causal (`needs_causal_chain=true`) и смещение в anomaly_probe | Лексика "ошибка" сработала как anomaly trigger без приоритета rule-based контроля | В developer v1.1 добавить приоритет: "ошибка дат/правил по счету" -> `rule_based_account_control`; запрет поднимать causal без явной цепочки |
| NQ-008 | Покажи по банку документ №TRX-88 и связанную проводку по 51. | drilldown_explain | cross_entity | live_mcp_drilldown | live_mcp_drilldown | `{cross=false, causal=false}` | `{cross=true, causal=false}` | Что это точечный object trace с фокусом на конкретный документ | Лишний `needs_cross_entity_join=true`, из-за чего intent ушел в cross_entity | Слово "связанную" переоценено как cross-entity, хотя запрос точечный | В developer v1.1 закрепить правило: при точном doc/ref приоритет у `drilldown_explain`, cross_entity только если запрошен массовый разбор |
| NQ-009 | Где у нас пахнет ручной ошибкой по июню? | ambiguous_human_query | anomaly_probe | batch_refresh_then_store | store_feature_risk | `{cross=false, causal=false}` | `{cross=false, causal=false}` | Что это широкий human-style запрос про периодный обзор без точного объекта | Лишний уход в risk-route (`store_feature_risk`) как будто это только anomaly probe | Комбинация "ручная ошибка" + короткая формулировка классифицирована как чистый risk-bucket | В developer/domain v1.1 добавить приоритеты: широкие human-form формулировки по периоду -> `batch_refresh_then_store`; `ambiguous_human_query` только контролируемый fallback |

## Итог forensic

- Основной baseline-дефект был в границах `intent_class`, а не в schema.
- У `NQ-004` и `NQ-008` route был верный, но intent смещался в соседний класс.
- У `NQ-009` одновременно сломались и intent, и route из-за перегруза risk-лексики.
- Минимальные правки действительно лежат в prompt/few-shot таксономии и приоритетах, без переписывания бизнес-логики backend.
