# Changelog: LLM Normalizer v1.1

## Что изменено в prompt-слое

- Добавлен preset versioning: `normalizer_v1` и `normalizer_v1_1`.
- Добавлены отдельные файлы:
  - `prompts/developer/normalizer_v1_1.txt`
  - `prompts/domain/normalizer_domain_v1_1.txt`
  - `prompts/fewshot/normalizer_fewshot_v1_1.txt`
- В `developer` усилены приоритеты между классами:
  - `cross_entity` vs `anomaly_probe`
  - `cross_entity` vs `rule_based_account_control`
  - `drilldown_explain` для точечного object trace
  - контроль fallback в `ambiguous_human_query`
- Добавлена confidence-policy v1.1: при ambiguity/сложном вопросе/high-uncertainty запрещено ставить `high` без оснований.

## Какие linguistic patterns добавлены

- "не сходится", "не видно", "не собралось", "повисло", "что пошло криво".
- "разложи по документам/оплатам/закрывающим".
- "чем подтверждается", "где ошибка в цепочке".
- Отдельно выделены паттерны точечного drilldown: ref, номер документа, конкретная строка проводки.

## Какие few-shot кейсы добавлены

В `normalizer_fewshot_v1_1.txt` добавлено 7 коротких примеров, покрывающих:
- `cross_entity` vs `anomaly_probe`
- `cross_entity` vs `rule_based_account_control`
- `cross_entity` (массовый explain) vs `drilldown_explain` (точечный trace)
- causal language + risk words
- ambiguous human wording
- rule-based контроль без causal chain
- heavy overview без точечного explain

## Какие кейсы были проблемными в baseline

- `NQ-004`: intent ушел в `anomaly_probe` вместо `rule_based_account_control`.
- `NQ-008`: intent ушел в `cross_entity` вместо `drilldown_explain`.
- `NQ-009`: intent и route ушли в risk bucket вместо широкого human-style обзорного маршрута.

Подробный forensic: `docs/normalizer_forensic_audit_v1_1.md`.

## Сколько API-вызовов потрачено

- Forensic этап: `0` новых внешних вызовов (использованы существующие traces).
- Финальный контрольный run: `0` внешних вызовов, так как запуск выполнен в `useMock=true` режиме.
- Итого этап: `0` внешних API-вызовов.

## Итоговые метрики до/после

Baseline (из `eval-YxrhL2dCcH.report.json`):
- schema_validation_pass_rate: `100`
- intent_class_accuracy: `72.73`
- route_hint_accuracy: `90.91`
- causal_flag_accuracy: `81.82`
- high_confidence_error_rate: `9.09`

v1.1 strict run (`reports/normalizer_eval_v1_1_run.json`, mock):
- schema_validation_pass_rate: `100`
- intent_class_accuracy: `83.33`
- route_hint_accuracy: `100`
- causal_flag_accuracy: `100`
- high_confidence_error_rate: `0`

## Что осталось проблемным после тюнинга

- В mock-run остались mismatch по классам `anomaly_probe`, `ambiguous_human_query`, `period_close_risk`.
- Это ожидаемо для текущей mock-эвристики (она route-driven и не отражает полноценно LLM taxonomy).
- Следующий шаг для честной приемки: один реальный `single-pass-strict` запуск на тех же 30 кейсах с OpenAI API key и фиксация финальных production-метрик.
