Этап 4 / Волна 18 закрытие блокеров по времени, доменной полярности и допуску доказательной базы
This commit is contained in:
+6
@@ -5,6 +5,12 @@
|
||||
Чеклист используется для приемки Stage 4 в текущей фазе (Wave 9):
|
||||
**P0 baseline hardening и формальная измеримость качества**.
|
||||
|
||||
## Актуализация на 2026-03-28
|
||||
|
||||
Этот чеклист оставлен для исторической фиксации Wave 9.
|
||||
Для текущего corrective-пакета Stage 4 использовать:
|
||||
`03_execution/ACCEPTANCE_CHECKLIST_STAGE_04_CORRECTIVE_PACK_2026-03-28.md`
|
||||
|
||||
## Статус
|
||||
|
||||
- Дата актуализации: 2026-03-27
|
||||
|
||||
+188
@@ -0,0 +1,188 @@
|
||||
# ACCEPTANCE_CHECKLIST_STAGE_04_CORRECTIVE_PACK_2026-03-28
|
||||
|
||||
## Назначение
|
||||
|
||||
Чеклист используется для формальной приемки Stage 4 corrective pack.
|
||||
Заполняется после каждого run и финально после двух live rerun подряд.
|
||||
|
||||
## Правила статусов
|
||||
|
||||
Допустимые статусы:
|
||||
- `PASS`
|
||||
- `PARTIAL`
|
||||
- `FAIL`
|
||||
- `N/A` (только с явным обоснованием)
|
||||
|
||||
Для каждого пункта фиксируется:
|
||||
- что проверено
|
||||
- чем подтверждено (файл/метрика/trace)
|
||||
- какие ограничения остались
|
||||
|
||||
## Блок A. Scope Discipline
|
||||
|
||||
### A1. Stage 4 удержан в P0-only контуре (3 домена)
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### A2. Нет расширения graph/schema/ontology
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### A3. Нет выезда в Stage 5/6 как core path
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### A4. Нет большого transport/routing refactor
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
## Блок B. Subwave 0 Session Isolation
|
||||
|
||||
### B1. Межкейсовое загрязнение контекста устранено
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### B2. В debug есть `question_scope_id` и `scope_origin`
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### B3. `session_leakage_rate = 0` на контрольном наборе
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
## Блок C. Subwave A Temporal Anchor
|
||||
|
||||
### C1. Temporal anchor для July snapshot корректен
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### C2. Нет `2023/2025/2026/2030` и других out-of-window дат в grounded path
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### C3. Неразрешимый temporal case уходит в limited answer
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
## Блок D. Subwave B Domain Polarity
|
||||
|
||||
### D1. Supplier/account-60 не уходит в customer/receivable branch
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### D2. Customer/account-62 не уходит в supplier/payable branch
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### D3. Нет mixed semantic profile для single-focus кейсов
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
## Блок E. Subwave C Evidence Admissibility
|
||||
|
||||
### E1. Inadmissible evidence не попадает в grounded answer
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### E2. При `matched_rows = 0` live evidence не усиливает ответ
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### E3. Future-dated/VAT contamination отсутствует в settlement кейсах
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
## Блок F. Subwave D Mechanism Contract
|
||||
|
||||
### F1. Ответ формата mechanism-first (не checklist)
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### F2. `mechanism_discrimination_rate >= 0.90`
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### F3. Если уверенности недостаточно, используется честный top-2 с ранжированием
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
## Блок G. Regression / Metrics
|
||||
|
||||
### G1. Прогнан минимум обязательный контрольный набор
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### G2. Посчитаны метрики corrective pack
|
||||
Список:
|
||||
- `temporal_anchor_correctness_rate`
|
||||
- `domain_polarity_correctness_rate`
|
||||
- `evidence_admissibility_rate`
|
||||
- `mechanism_discrimination_rate`
|
||||
- `limited_answer_honesty_rate`
|
||||
- `session_leakage_rate`
|
||||
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### G3. Нет срабатывания hard fail criteria
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
## Блок H. Run Artifacts Discipline
|
||||
|
||||
### H1. Для каждого run-пакета есть полный комплект артефактов
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### H2. Артефакты предметно отражают фикс текущей подволны
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
### H3. Есть consolidated acceptance note после финального live rerun
|
||||
Статус:
|
||||
Подтверждение:
|
||||
Комментарий:
|
||||
|
||||
## Итог
|
||||
|
||||
- Результат: `PASS / PARTIAL / FAIL`
|
||||
- Дата:
|
||||
- Проверял:
|
||||
- Версия/ветка/commit:
|
||||
- Связанные run-папки:
|
||||
|
||||
## Открытые ограничения
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
|
||||
## Обязательные next steps
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
+114
@@ -0,0 +1,114 @@
|
||||
# RUN_ARTIFACTS_PROTOCOL_STAGE_04_CORRECTIVE_PACK
|
||||
|
||||
## Назначение
|
||||
|
||||
Протокол задает обязательный состав артефактов после каждого прогона Stage 4 corrective pack.
|
||||
Цель: любой run должен предметно подтверждать конкретный фикс подволны.
|
||||
|
||||
## Базовая папка
|
||||
|
||||
Все артефакты сохраняются в:
|
||||
`X:\1C\NDC_1C\llm_normalizer\docs\runs`
|
||||
|
||||
## Именование run-папок
|
||||
|
||||
Формат:
|
||||
`YYYY-MM-DD_Stage_04_Wave_<NN>_Subwave_<ID>_<ShortName>`
|
||||
|
||||
Примеры:
|
||||
- `2026-03-29_Stage_04_Wave_17_Subwave_0_Session_Isolation`
|
||||
- `2026-03-29_Stage_04_Wave_18_Subwave_A_Temporal_Anchor_Hardening`
|
||||
- `2026-03-29_Stage_04_Wave_19_Subwave_B_Domain_Polarity_Lock`
|
||||
- `2026-03-30_Stage_04_Wave_20_Subwave_C_Evidence_Admissibility_Gate`
|
||||
- `2026-03-30_Stage_04_Wave_21_Subwave_D_Mechanism_Contract`
|
||||
- `2026-03-31_Stage_04_Wave_22_Subwave_E_Final_Live_Rerun_1`
|
||||
- `2026-03-31_Stage_04_Wave_23_Subwave_E_Final_Live_Rerun_2`
|
||||
|
||||
Если требуется повтор подволны:
|
||||
- добавлять суффикс `_R1`, `_R2`, ...
|
||||
|
||||
## Обязательная структура каждой run-папки
|
||||
|
||||
1. `README.md`
|
||||
2. `run_summary.json`
|
||||
3. `before_after_metrics.json`
|
||||
4. `case_matrix.md`
|
||||
5. `prompt_dialogs/`
|
||||
6. `debug_payloads/`
|
||||
7. `acceptance_note.md`
|
||||
|
||||
## Обязательное содержание артефактов
|
||||
|
||||
### 1) `README.md`
|
||||
|
||||
Минимум:
|
||||
- цель прогона
|
||||
- какая подволна и какой фикс проверяется
|
||||
- список контрольных кейсов
|
||||
- что считалось PASS/FAIL для этого прогона
|
||||
- краткий итог
|
||||
|
||||
### 2) `run_summary.json`
|
||||
|
||||
Минимум:
|
||||
- `run_id`
|
||||
- `stage`
|
||||
- `subwave`
|
||||
- `target_defect`
|
||||
- `verdict`
|
||||
- `hard_fail_triggered` (true/false)
|
||||
- ссылки на ключевые артефакты
|
||||
|
||||
### 3) `before_after_metrics.json`
|
||||
|
||||
Минимум:
|
||||
- baseline до фикса
|
||||
- значения после фикса
|
||||
- delta по каждой метрике corrective pack
|
||||
|
||||
### 4) `case_matrix.md`
|
||||
|
||||
Для каждого кейса:
|
||||
- case id
|
||||
- expected behavior
|
||||
- actual behavior
|
||||
- status
|
||||
- ссылка на trace/debug
|
||||
|
||||
### 5) `prompt_dialogs/`
|
||||
|
||||
Минимум:
|
||||
- диалоги по ключевым кейсам подволны
|
||||
- отдельный диалог по проблемному кейсу, который фиксился
|
||||
|
||||
### 6) `debug_payloads/`
|
||||
|
||||
Минимум:
|
||||
- не менее 3 payload:
|
||||
- supplier/account-60
|
||||
- VAT
|
||||
- month-close
|
||||
- в payload должны быть видны причины отбраковки evidence и выбранный mechanism
|
||||
|
||||
### 7) `acceptance_note.md`
|
||||
|
||||
Минимум:
|
||||
- что именно исправлено в этой подволне
|
||||
- что осталось ограничением
|
||||
- решение: `PASS/PARTIAL/FAIL`
|
||||
- можно ли переходить к следующей подволне
|
||||
|
||||
## Жесткие правила для достоверности артефактов
|
||||
|
||||
1. Артефакты должны отражать именно целевой фикс текущей подволны, а не общий шум.
|
||||
2. Если прогон упал по hard fail criteria, это явно указывается в `run_summary.json` и `acceptance_note.md`.
|
||||
3. Нельзя отмечать прогон как PASS без заполненных `case_matrix.md` и `before_after_metrics.json`.
|
||||
4. Для финальной стабилизации обязательны 2 подряд live rerun с полным комплектом артефактов.
|
||||
|
||||
## Мини-чек перед закрытием каждого run
|
||||
|
||||
1. Папка создана по формату именования.
|
||||
2. 7 обязательных артефактов присутствуют.
|
||||
3. В `run_summary.json` указан целевой дефект и verdict.
|
||||
4. В `case_matrix.md` заполнены все контрольные кейсы этого прогона.
|
||||
5. Есть явное решение: переходим дальше или делаем rerun этой же подволны.
|
||||
+185
@@ -0,0 +1,185 @@
|
||||
# STAGE_04_CORRECTIVE_PACK_TASK_CARD_2026-03-28
|
||||
|
||||
## Назначение
|
||||
|
||||
Документ фиксирует рабочий план закрытия Stage 4 как live-grounded слоя для P0 бухгалтерских кейсов.
|
||||
План оформлен как один corrective pack с короткими подволнами и отдельным acceptance по каждой подволне.
|
||||
|
||||
## Статус
|
||||
|
||||
- Дата актуализации: 2026-03-28
|
||||
- Статус Stage 4: `OPEN_FOR_CORRECTIVE_PACK`
|
||||
- Базовый факт: Chat20 baseline green достигнут, но live/debug path показывает hard-fail по grounding
|
||||
- Режим: только Stage 4 corrective work, без выхода в Stage 5/6 как core path
|
||||
|
||||
## Scope Stage 4 (фиксированный)
|
||||
|
||||
Разрешены только P0 домены:
|
||||
- `settlements_60_62`
|
||||
- `vat_document_register_book`
|
||||
- `month_close_costs_20_44`
|
||||
|
||||
## Что запрещено в corrective pack
|
||||
|
||||
- Добавлять новые домены
|
||||
- Расширять ontology/graph/schema
|
||||
- Подтягивать Stage 5 investigation orchestration в core path
|
||||
- Добавлять Stage 6 live verification layer как архитектурный слой
|
||||
- Делать большой refactor transport/routing
|
||||
- Лечить качество общим ростом generic retrieval
|
||||
|
||||
## Непокрытые acceptance-критерии Stage 4
|
||||
|
||||
1. `temporal_correctness`
|
||||
2. `domain_polarity_correctness`
|
||||
3. `evidence_admissibility`
|
||||
4. `mechanism_specific_answer`
|
||||
5. `session_context_isolation`
|
||||
|
||||
## Поэтапный план corrective pack
|
||||
|
||||
Каждая подволна выполняется отдельным run с обязательными артефактами в:
|
||||
`X:\1C\NDC_1C\llm_normalizer\docs\runs`
|
||||
|
||||
### Подволна 0. Session / Context Isolation
|
||||
|
||||
Цель:
|
||||
- исключить межкейсовое загрязнение контекста и неверный перенос active focus
|
||||
|
||||
Изменения:
|
||||
- в trace/debug явно фиксировать `question_scope_id` и `scope_origin`
|
||||
- в follow-up handling ввести защиту от переноса нерелевантного фокуса между независимыми кейсами
|
||||
|
||||
Acceptance:
|
||||
- `session_leakage_rate = 0` на контрольном наборе
|
||||
- в debug payload видно, какой контекст активен и почему
|
||||
|
||||
### Подволна A. Temporal Anchor Hardening
|
||||
|
||||
Цель:
|
||||
- закрепить корректную привязку времени для company snapshot July 2020
|
||||
|
||||
Изменения:
|
||||
- ввести `company_snapshot_temporal_lock`
|
||||
- hard priority: `explicit_from_question -> snapshot_context_lock -> limited_answer`
|
||||
- запретить relative/default year для snapshot-вопросов
|
||||
- hard-fail: time_scope вне окна snapshot не может идти в grounded answer
|
||||
|
||||
Acceptance:
|
||||
- 100% попадание temporal anchor в окно `2020-07-01..2020-07-31` для snapshot-кейсов
|
||||
- 0 ответов с датами вне окна snapshot в grounded path
|
||||
|
||||
### Подволна B. Domain Polarity Lock
|
||||
|
||||
Цель:
|
||||
- устранить инверсию supplier/customer и payable/receivable
|
||||
|
||||
Изменения:
|
||||
- `domain_polarity_guard` до retrieval ranking и до problem-unit assembly
|
||||
- hard veto:
|
||||
- `supplier + account 60` не может резолвиться в customer/receivable branch
|
||||
- `customer + account 62` не может резолвиться в supplier/payable branch
|
||||
- запрет mixed semantic profile для single-focus вопроса
|
||||
|
||||
Acceptance:
|
||||
- 100% корректность polarity для core P0 вопросов
|
||||
- 0 случаев `customer_settlement` для supplier/account-60 case
|
||||
|
||||
### Подволна C. Evidence Admissibility Gate
|
||||
|
||||
Цель:
|
||||
- допускать в grounded answer только релевантные и доказательные факты
|
||||
|
||||
Изменения:
|
||||
- `evidence_admissibility_gate` перед answer composer
|
||||
- правила допуска:
|
||||
- дата в окне вопроса
|
||||
- домен совпадает с active domain card
|
||||
- account scope совместим
|
||||
- weak mapping не используется как доказательство
|
||||
- при `matched_rows = 0` live не усиливает grounded answer
|
||||
- классифицировать evidence на:
|
||||
- `hard_evidence`
|
||||
- `supporting_signal`
|
||||
- `inadmissible_noise`
|
||||
|
||||
Acceptance:
|
||||
- 0 inadmissible evidence в grounded answers
|
||||
- 0 future-dated evidence для snapshot-кейсов
|
||||
- 0 false-grounded ответов при `matched_rows = 0`
|
||||
|
||||
### Подволна D. Mechanism-Specific Answer Contract
|
||||
|
||||
Цель:
|
||||
- перейти от checklist-ответов к mechanism-first диагностике
|
||||
|
||||
Изменения:
|
||||
- добавить `mechanism_discriminator` перед финальным answer composer
|
||||
- для settlements_60_62 различать минимум:
|
||||
- `wrong_contract_binding`
|
||||
- `wrong_settlement_object`
|
||||
- `closure_document_not_confirmed`
|
||||
- `partial_settlement_tail`
|
||||
- `chronology_break`
|
||||
- основной механизм выбирается только при достаточном margin top1/top2; иначе честный top-2 с ранжированием
|
||||
|
||||
Acceptance:
|
||||
- `mechanism_discrimination_rate >= 0.90`
|
||||
- symptom-first ответы выдают основной механизм, а не равноправный список гипотез
|
||||
|
||||
### Подволна E. Final Live Stabilization
|
||||
|
||||
Цель:
|
||||
- подтвердить устойчивость после фиксов
|
||||
|
||||
Изменения:
|
||||
- 2 последовательных live rerun без красных регрессий
|
||||
- consolidated acceptance note по Stage 4 corrective pack
|
||||
|
||||
Acceptance:
|
||||
- оба live rerun проходят hard fail criteria
|
||||
- зафиксирован итог `STAGE_04_READY_FOR_CLOSEOUT` или `STAGE_04_PARTIAL_WITH_EXPLICIT_LIMITATIONS`
|
||||
|
||||
## Контрольный набор (минимум)
|
||||
|
||||
1. supplier settlement case (оплата 55 200, незакрытый хвост)
|
||||
2. buyer advance offset case (276 873,60 / 62.02)
|
||||
3. VAT case (услуги связи + СФ 233,33)
|
||||
4. month-close case (закрытие косвенных расходов)
|
||||
5. RBP case
|
||||
6. limitation honesty case после полного month-end
|
||||
|
||||
Предпочтительно: все 8 core вопросов Stage 4.
|
||||
|
||||
## Метрики corrective pack
|
||||
|
||||
- `temporal_anchor_correctness_rate`
|
||||
- `domain_polarity_correctness_rate`
|
||||
- `evidence_admissibility_rate`
|
||||
- `mechanism_discrimination_rate`
|
||||
- `limited_answer_honesty_rate`
|
||||
- `session_leakage_rate`
|
||||
|
||||
## Hard fail criteria (красные линии)
|
||||
|
||||
Любой из пунктов ниже автоматически валит прогон:
|
||||
- temporal anchor вне окна snapshot в grounded path
|
||||
- polarity inversion supplier/customer для 60/62 core кейсов
|
||||
- inadmissible evidence в блоке доказательств
|
||||
- false-grounded ответ при weak evidence или `matched_rows = 0`
|
||||
- межкейсовое загрязнение follow-up контекста
|
||||
|
||||
## Процесс выполнения
|
||||
|
||||
1. Одна подволна = один run
|
||||
2. Если подволна не прошла acceptance, делается rerun той же подволны до PASS
|
||||
3. Переход к следующей подволне только после PASS текущей
|
||||
4. После каждого run артефакты обязательно сохраняются в `docs/runs` по протоколу
|
||||
|
||||
## Definition of Done для Stage 4 corrective pack
|
||||
|
||||
Stage 4 corrective pack считается закрытым, если одновременно:
|
||||
- закрыты acceptance подволны 0/A/B/C/D/E
|
||||
- выполнены 2 подряд live rerun без красных регрессий
|
||||
- в `docs/runs` есть полный и воспроизводимый артефактный след по каждой подволне
|
||||
- выпущен consolidated acceptance note с честным перечнем оставшихся ограничений (если есть)
|
||||
+93
@@ -0,0 +1,93 @@
|
||||
# STAGE_04_CORRECTIVE_RUN_QUEUE_2026-03-28
|
||||
|
||||
## Назначение
|
||||
|
||||
Очередь прогонов для Stage 4 corrective pack с жестким порядком и entry/exit gate.
|
||||
Переход к следующему run разрешен только после PASS текущего.
|
||||
|
||||
## Run Queue
|
||||
|
||||
### Run 1
|
||||
|
||||
- Run ID: `2026-03-29_Stage_04_Wave_17_Subwave_0_Session_Isolation`
|
||||
- Цель: снять межкейсовое загрязнение контекста
|
||||
- Entry: текущий baseline с воспроизводимым leakage кейсом
|
||||
- Exit:
|
||||
- `session_leakage_rate = 0`
|
||||
- debug содержит `question_scope_id` и `scope_origin`
|
||||
|
||||
### Run 2
|
||||
|
||||
- Run ID: `2026-03-29_Stage_04_Wave_18_Subwave_A_Temporal_Anchor_Hardening`
|
||||
- Цель: зафиксировать July 2020 temporal lock
|
||||
- Entry: PASS Run 1
|
||||
- Exit:
|
||||
- 100% `temporal_anchor_correctness_rate` для snapshot-кейсов
|
||||
- 0 out-of-window temporal в grounded path
|
||||
|
||||
### Run 3
|
||||
|
||||
- Run ID: `2026-03-29_Stage_04_Wave_19_Subwave_B_Domain_Polarity_Lock`
|
||||
- Цель: убрать supplier/customer polarity inversion
|
||||
- Entry: PASS Run 2
|
||||
- Exit:
|
||||
- 100% `domain_polarity_correctness_rate` на core P0
|
||||
- 0 `customer_settlement` для supplier/account-60
|
||||
|
||||
### Run 4
|
||||
|
||||
- Run ID: `2026-03-30_Stage_04_Wave_20_Subwave_C_Evidence_Admissibility_Gate`
|
||||
- Цель: не допускать нерелевантное evidence в grounded answer
|
||||
- Entry: PASS Run 3
|
||||
- Exit:
|
||||
- 0 inadmissible evidence в grounded answers
|
||||
- 0 false-grounded при `matched_rows = 0`
|
||||
|
||||
### Run 5
|
||||
|
||||
- Run ID: `2026-03-30_Stage_04_Wave_21_Subwave_D_Mechanism_Contract`
|
||||
- Цель: mechanism-first answer contract
|
||||
- Entry: PASS Run 4
|
||||
- Exit:
|
||||
- `mechanism_discrimination_rate >= 0.90`
|
||||
- symptom-first ответы дают основной механизм или честный top-2
|
||||
|
||||
### Run 6
|
||||
|
||||
- Run ID: `2026-03-31_Stage_04_Wave_22_Subwave_E_Final_Live_Rerun_1`
|
||||
- Цель: первая фиксация общей устойчивости после corrective pack
|
||||
- Entry: PASS Run 5
|
||||
- Exit:
|
||||
- нет hard fail criteria
|
||||
- полный комплект артефактов
|
||||
|
||||
### Run 7
|
||||
|
||||
- Run ID: `2026-03-31_Stage_04_Wave_23_Subwave_E_Final_Live_Rerun_2`
|
||||
- Цель: подтверждение стабильности вторым подряд прогоном
|
||||
- Entry: PASS Run 6
|
||||
- Exit:
|
||||
- нет hard fail criteria
|
||||
- metrics стабильны относительно Run 6
|
||||
- подготовлен consolidated acceptance note
|
||||
|
||||
## Обязательные артефакты для каждого run
|
||||
|
||||
См. протокол:
|
||||
`03_execution/RUN_ARTIFACTS_PROTOCOL_STAGE_04_CORRECTIVE_PACK.md`
|
||||
|
||||
Коротко, обязательно:
|
||||
1. `README.md`
|
||||
2. `run_summary.json`
|
||||
3. `before_after_metrics.json`
|
||||
4. `case_matrix.md`
|
||||
5. `prompt_dialogs/`
|
||||
6. `debug_payloads/`
|
||||
7. `acceptance_note.md`
|
||||
|
||||
## Политика rerun
|
||||
|
||||
Если run получает `PARTIAL` или `FAIL`:
|
||||
1. выполняется rerun той же подволны
|
||||
2. run ID получает суффикс `_R1`, `_R2`, ...
|
||||
3. переход к следующей подволне запрещен до `PASS`
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
# STAGE_04_RUNTIME_GROUND_TRUTH_AUDIT_TASK_CARD_2026-03-28
|
||||
|
||||
## Назначение
|
||||
|
||||
Execution-карта для разворота Stage 4 из fix-wave режима в режим независимого runtime ground-truth аудита.
|
||||
|
||||
## Цель
|
||||
|
||||
Подтвердить фактический end-to-end runtime pipeline и доказательную основу ответов:
|
||||
`question -> route -> retrieval -> snapshot/live -> evidence -> answer`.
|
||||
|
||||
## Non-goals
|
||||
|
||||
- Не делать архитектурный redesign в этом задании.
|
||||
- Не запускать большой кодовый refactor как часть аудита.
|
||||
- Не закрывать Stage 4 по косвенным симптомам.
|
||||
|
||||
## Рабочие фазы
|
||||
|
||||
1. `Static architecture pass`
|
||||
- runtime call graph по фактическим код-путям.
|
||||
|
||||
2. `Instrumentation pass`
|
||||
- временные hooks/logging для невидимых runtime решений.
|
||||
|
||||
3. `Controlled runtime pass`
|
||||
- прогоны 8 core вопросов July 2020 с audit logging.
|
||||
|
||||
4. `Comparative pass`
|
||||
- матрица по каждому кейсу: route/sources/evidence/claim/answer.
|
||||
|
||||
5. `Structural gap analysis`
|
||||
- фиксация gaps и минимально необходимого следующего слоя.
|
||||
|
||||
## Артефакты (обязательные)
|
||||
|
||||
В `docs/ARCH`:
|
||||
- `7 - assistant_runtime_ground_truth_audit_2026-03-28.md`
|
||||
- `7A - runtime_call_graph.md`
|
||||
- `7B - snapshot_inventory_and_coverage.md`
|
||||
- `7C - live_mcp_call_inventory.md`
|
||||
- `7D - control_question_trace_matrix.md`
|
||||
- `7E - structural_gap_register.md`
|
||||
- `7F - instrumentation_notes.md`
|
||||
- `audit_artifacts/`
|
||||
|
||||
## Формат верификации
|
||||
|
||||
Каждое ключевое утверждение имеет минимум одно подтверждение:
|
||||
- code path;
|
||||
- runtime trace;
|
||||
- debug payload;
|
||||
- live call dump;
|
||||
- snapshot inspection.
|
||||
|
||||
Маркировка:
|
||||
- `verified`
|
||||
- `partially verified`
|
||||
- `not verified`
|
||||
- `inferred`
|
||||
|
||||
## Финальный выход
|
||||
|
||||
Жесткий итоговый вердикт:
|
||||
- `VERIFIED_AS_EVIDENCE_FIRST`
|
||||
- `VERIFIED_AS_HYPOTHESIS_FIRST`
|
||||
- `MIXED_RUNTIME_WITHOUT_MANDATORY_PROOF_LAYER`
|
||||
@@ -5,6 +5,12 @@
|
||||
Документ фиксирует **актуальный implementation scope Stage 4** после завершения Waves 5-8 и запуска Wave 9.
|
||||
Он нужен для работы в узком P0-контуре и предотвращения расползания в будущие этапы.
|
||||
|
||||
## Актуализация на 2026-03-28
|
||||
|
||||
Этот документ сохраняется как исторический контекст Wave 9.
|
||||
Текущий рабочий execution-план по закрытию Stage 4 после live/debug hard-fail вынесен в:
|
||||
`03_execution/STAGE_04_CORRECTIVE_PACK_TASK_CARD_2026-03-28.md`
|
||||
|
||||
## Статус
|
||||
|
||||
- Дата актуализации: 2026-03-27
|
||||
|
||||
@@ -0,0 +1,289 @@
|
||||
Да. Тут лучше не распиливать на десять мелких задач. Оптимальный формат — **одна ТЗ на corrective pack Stage 4**, но внутри неё сделать **4 короткие подволны** с отдельным acceptance на каждую. Это не ломает вашу текущую рамку, потому что Stage 4 у вас уже жёстко зафиксирован как `P0-only` по трём доменам, без новых доменов, без graph/schema expansion, без Stage 5/6 как core path и без больших транспортных рефакторингов. При этом сам отчёт уже показывает, что после зелёного `Chat20` у вас live-path всё ещё дочищался отдельными micro-fix проходами, а в follow-up прямо требуется финальный live-rerun и consolidated acceptance note.
|
||||
|
||||
Ниже даю ТЗ в форме, которую можно почти как есть отправлять в Codex.
|
||||
|
||||
## ТЗ для Codex: Stage 4 Corrective Pack — Grounding / Polarity / Evidence / Mechanism
|
||||
|
||||
### 1. Контекст
|
||||
|
||||
Текущий Stage 4 формально удерживается в `P0-only` контуре по трём доменам:
|
||||
|
||||
* `settlements_60_62`
|
||||
* `vat_document_register_book`
|
||||
* `month_close_costs_20_44`
|
||||
|
||||
В рамках corrective work **запрещено**:
|
||||
|
||||
* добавлять новые домены;
|
||||
* расширять graph/schema;
|
||||
* тащить внутрь core-path Stage 5 investigation;
|
||||
* строить новый live verification layer как архитектурный слой;
|
||||
* делать большие refactor transport/routing.
|
||||
|
||||
### 2. Цель corrective pack
|
||||
|
||||
Нужно не расширять архитектуру, а **добить качество Stage 4 на live-path** для company-specific вопросов по июльскому снапшоту 2020 так, чтобы ассистент:
|
||||
|
||||
* держал правильный temporal anchor;
|
||||
* не путал supplier/customer polarity;
|
||||
* не тащил нерелевантные live/snapshot evidence в ответ;
|
||||
* отвечал mechanism-first, а не checklist-ом из нескольких гипотез;
|
||||
* проходил контрольные P0-вопросы не только на Chat20, но и на живом trace/debug прогоне.
|
||||
|
||||
### 3. Зафиксированные дефекты, которые надо исправить
|
||||
|
||||
На текущем прогоне по supplier settlement вопросу зафиксированы такие сбои:
|
||||
|
||||
1. **Temporal anchor error**
|
||||
Вопрос про оплату 6 июля в июльском снапшоте 2020 был нормализован в `time_scope = 2023-07-06`.
|
||||
|
||||
2. **Business scope / company grounding слабый**
|
||||
`business_scope` остался `generic_accounting`, хотя вопрос company-specific и привязан к конкретному снапшоту.
|
||||
|
||||
3. **Domain polarity drift**
|
||||
Кейс по поставщику / счёту 60 уходит в смесь supplier/customer логики, а problem units оказываются в `customer_settlement` и `stale_receivable`, что бухгалтерски неверно для supplier payable closure. При этом semantic profile одновременно содержит и `suppliers`, и `customers`, а graph traversal допускает `bank_settlement` и `customer_settlement` вместе.
|
||||
|
||||
4. **Evidence contamination / inadmissible evidence**
|
||||
`live_mcp.matched_rows = 0`, но в evidence всё равно попадают live-элементы; среди них есть записи с проводками `68.02 / 19.04`, то есть VAT-контур, плюс даты 2025/2026/2030, что недопустимо для ответа по июльскому снапшоту 2020. Для части evidence уже помечено `weak_source_mapping`, но они всё равно используются как опора.
|
||||
|
||||
5. **Mechanism-first answer contract не дожат**
|
||||
Вопросы в контрольном наборе специально проверяют, способен ли ассистент различать механизм разрыва: не тот договор, не тот объект расчётов, неполный closure, неполный VAT-edge, stale RBP и т.д. Сейчас ответ часто скатывается в общий partial-coverage checklist вместо выбора наиболее вероятного механизма и объяснения, почему именно он.
|
||||
|
||||
### 4. Объём работ
|
||||
|
||||
Сделать **одну corrective wave**, но внутри неё 4 подволны.
|
||||
|
||||
---
|
||||
|
||||
## Подволна A — Temporal Anchor Hardening
|
||||
|
||||
### Задача
|
||||
|
||||
Запретить неверную интерпретацию даты/периода для company snapshot вопросов.
|
||||
|
||||
### Что сделать
|
||||
|
||||
1. В normalizer/router добавить `company_snapshot_temporal_lock`.
|
||||
2. Если вопрос явно относится к июльскому снапшоту 2020:
|
||||
|
||||
* не допускать авто-подстановку текущего/дефолтного года;
|
||||
* не допускать relative reinterpretation;
|
||||
* переводить время в fixed window `2020-07-01 .. 2020-07-31`, если вопрос не требует более узкого дня;
|
||||
* если в вопросе явно указан день июля, привязывать к `2020-07-DD`.
|
||||
3. Добавить hard-fail guard:
|
||||
|
||||
* если extracted time_scope выходит за рамки company snapshot, answer не должен собираться как grounded.
|
||||
4. В debug/export явно показывать:
|
||||
|
||||
* raw time anchor;
|
||||
* resolved time anchor;
|
||||
* source of resolution (`explicit_from_question`, `snapshot_context_lock`, etc.).
|
||||
|
||||
### Acceptance
|
||||
|
||||
* Ни один вопрос из июльского контрольного набора не должен уходить в 2023/2025/2026/2030.
|
||||
* В debug payload temporal resolution должна быть прозрачной и объяснимой.
|
||||
* Если temporal anchor неразрешим, ответ обязан честно это признать, а не строить псевдо-grounded answer.
|
||||
|
||||
---
|
||||
|
||||
## Подволна B — Domain Polarity Lock
|
||||
|
||||
### Задача
|
||||
|
||||
Убрать путаницу между supplier/customer, payable/receivable, 60/62 и month-close/VAT соседними контурами.
|
||||
|
||||
### Что сделать
|
||||
|
||||
1. Ввести `domain_polarity_guard` до retrieval ranking и до problem-unit assembly.
|
||||
2. Минимальные правила:
|
||||
|
||||
* `supplier + account 60 + obligation not closed` => только supplier/payable semantics.
|
||||
* `buyer/customer + 62 + аванс/дебиторка` => только customer/receivable semantics.
|
||||
* VAT domain не может подмешиваться в settlement answer без явного VAT-вопроса.
|
||||
* month-close domain не может подменять settlement domain по общим lifecycle сигналам.
|
||||
3. Запретить mixed semantic_profile вида:
|
||||
|
||||
* `suppliers + customers` одновременно для одного single-focus question, если вопрос не cross-entity by design.
|
||||
4. Для problem units ввести polarity-aware mapping:
|
||||
|
||||
* supplier cases: `unresolved_supplier_settlement_cluster`, `supplier_document_conflict`, `supplier_partial_closure`
|
||||
* customer cases: `unresolved_customer_settlement_cluster`, `customer_advance_offset_conflict`
|
||||
Названия можно оставить внутренними, но логика должна быть раздельной.
|
||||
5. Если polarity не определена достаточно уверенно, ответ должен переходить в ограниченный режим с явным указанием, что именно не удалось различить.
|
||||
|
||||
### Acceptance
|
||||
|
||||
* Вопросы про счёт 60 и поставщика не должны производить `customer_settlement`, `stale_receivable`, `receivable_closed`.
|
||||
* Вопросы про 62/авансы покупателя не должны превращаться в supplier payable cases.
|
||||
* Domain drift между settlement / VAT / month-close должен быть снят не только по Chat20, но и по debug/live traces.
|
||||
|
||||
---
|
||||
|
||||
## Подволна C — Evidence Admissibility Gate
|
||||
|
||||
### Задача
|
||||
|
||||
Запретить попадание в grounding нерелевантного evidence даже если retrieval что-то “нашёл”.
|
||||
|
||||
### Что сделать
|
||||
|
||||
1. Ввести `evidence_admissibility_gate` перед answer composer.
|
||||
2. Evidence допускается в grounded answer только если одновременно выполнено:
|
||||
|
||||
* дата попадает в допустимое временное окно вопроса;
|
||||
* домен совпадает с активным domain card;
|
||||
* account scope совместим с вопросом;
|
||||
* source mapping не weak/ambiguous, либо такой evidence помечается только как limitation, но не как доказательство;
|
||||
* если live probe дал `matched_rows = 0`, live evidence не усиливает answer.
|
||||
3. Запретить cross-domain contamination:
|
||||
|
||||
* VAT postings не попадают в settlement evidence;
|
||||
* settlement traces не попадают в VAT proof без явной cross-branch задачи;
|
||||
* month-close traces не усиливают settlement answer.
|
||||
4. Развести уровни evidence:
|
||||
|
||||
* `hard_evidence`
|
||||
* `supporting_signal`
|
||||
* `inadmissible_noise`
|
||||
5. В debug payload показывать:
|
||||
|
||||
* сколько evidence прошло gate;
|
||||
* сколько отрезано и почему (`wrong_period`, `wrong_domain`, `wrong_account_scope`, `weak_source_mapping`, `zero_live_match`).
|
||||
|
||||
### Acceptance
|
||||
|
||||
* При `matched_rows = 0` live probe не должен добавлять ложную уверенность.
|
||||
* VAT проводки и future-dated live rows не должны попадать в settlement-grounded answer.
|
||||
* grounded answer без admissible evidence должен автоматически деградировать в честный limited answer.
|
||||
|
||||
---
|
||||
|
||||
## Подволна D — Mechanism-Specific Answer Contract
|
||||
|
||||
### Задача
|
||||
|
||||
Заставить ассистента не просто перечислять проверки, а различать механизм разрыва и объяснять его.
|
||||
|
||||
### Что сделать
|
||||
|
||||
1. Для P0-доменов ввести `mechanism_discriminator` перед финальным answer composer.
|
||||
2. Для settlements_60_62 минимум различать:
|
||||
|
||||
* wrong_contract_binding
|
||||
* wrong_settlement_object
|
||||
* closure_document_not_confirmed
|
||||
* partial_settlement_tail
|
||||
* chronology_break
|
||||
3. Для VAT минимум различать:
|
||||
|
||||
* missing_invoice_link
|
||||
* missing_tax_entry
|
||||
* missing_purchase_book_entry
|
||||
* partial_vat_chain
|
||||
4. Для month_close минимум различать:
|
||||
|
||||
* close_completed_but_tail_remains
|
||||
* stale_rbp
|
||||
* invalid_close_transition
|
||||
* normal_residual_not_a_bug
|
||||
5. Финальный answer contract сделать таким:
|
||||
|
||||
* **Основной вывод**: один наиболее вероятный механизм.
|
||||
* **Почему именно он**: 2–4 коротких grounding facts.
|
||||
* **Что не доказано**: отдельный limitation block.
|
||||
* **Что проверить первым**: 1–2 next checks, а не длинный checklist.
|
||||
6. Если discriminator не может выбрать один механизм честно:
|
||||
|
||||
* разрешено показать top-2 mechanism candidates,
|
||||
* но с ранжированием и явным объяснением, почему первый выше второго.
|
||||
|
||||
### Acceptance
|
||||
|
||||
* Ответ на symptom-first вопросы должен содержать не набор равноправных гипотез, а основной mechanism candidate.
|
||||
* False confidence по VAT и month-close не допускается.
|
||||
* Ranking/truthful limitation из контрольного набора должны быть сохранены.
|
||||
|
||||
---
|
||||
|
||||
## 5. Eval / Regression
|
||||
|
||||
### Обязательный контрольный набор
|
||||
|
||||
Минимум прогонять:
|
||||
|
||||
1. supplier settlement case по оплате 55 200 / незакрытый хвост;
|
||||
2. buyer advance offset case 276 873,60 / 62.02;
|
||||
3. VAT case по услугам связи + счёт-фактура 233,33;
|
||||
4. month-close case по закрытию косвенных расходов;
|
||||
5. RBP case;
|
||||
6. limitation honesty case после полного month-end.
|
||||
|
||||
Предпочтительно прогонять все 8 core-вопросов из вашего ядра.
|
||||
|
||||
### Новые метрики
|
||||
|
||||
Добавить в harness:
|
||||
|
||||
* `temporal_anchor_correctness_rate`
|
||||
* `domain_polarity_correctness_rate`
|
||||
* `evidence_admissibility_rate`
|
||||
* `mechanism_discrimination_rate`
|
||||
* `limited_answer_honesty_rate`
|
||||
|
||||
### Минимальный проходной порог
|
||||
|
||||
Для corrective acceptance:
|
||||
|
||||
* 100% по temporal_anchor на контрольном наборе;
|
||||
* 100% по domain polarity на core P0 вопросах;
|
||||
* 0 inadmissible evidence в grounded answers;
|
||||
* не менее 0.9 по mechanism discrimination;
|
||||
* 0 false-grounded answers при weak evidence / zero live match.
|
||||
|
||||
---
|
||||
|
||||
## 6. Артефакты, которые нужно вернуть после реализации
|
||||
|
||||
1. `run_summary.json`
|
||||
2. `before_after_metrics.json`
|
||||
3. `case_matrix.md` по контрольным вопросам
|
||||
4. `чат.txt` / dialog export по минимум 3 вопросам, лучше по 6–8
|
||||
5. `debug_payloads/` с примерами:
|
||||
|
||||
* supplier 60 case
|
||||
* VAT case
|
||||
* month-close case
|
||||
6. короткий `acceptance_note.md`:
|
||||
|
||||
* что исправлено;
|
||||
* что осталось ограничением;
|
||||
* прошёл ли final live rerun.
|
||||
|
||||
Это согласуется с вашим текущим operational follow-up по Stage 4: нужен единый финальный live-rerun и короткая consolidated acceptance фиксация.
|
||||
|
||||
---
|
||||
|
||||
## 7. Что не делать
|
||||
|
||||
* Не добавлять новые домены.
|
||||
* Не расширять онтологию/graph ради этого фикса.
|
||||
* Не тащить Stage 5 investigation state как обязательный core-path.
|
||||
* Не делать большой рефактор маршрутизации.
|
||||
* Не пытаться “лечить” всё общим ростом generic retrieval.
|
||||
|
||||
Задача corrective pack — не расширение платформы, а жёсткое добивание качества Stage 4 в уже зафиксированной P0-рамке.
|
||||
|
||||
---
|
||||
|
||||
## 8. Ожидаемый итог
|
||||
|
||||
После corrective pack система должна:
|
||||
|
||||
* корректно держать июль 2020;
|
||||
* не путать supplier/customer и 60/62;
|
||||
* не использовать нерелевантные live/VAT/future traces как доказательство;
|
||||
* выдавать mechanism-first answer с честными ограничениями;
|
||||
* проходить контрольные company-specific P0 вопросы не только на корпусе, но и на живом trace/debug прогоне.
|
||||
|
||||
Если хочешь, следующим сообщением я могу сразу дать ещё **сверхкороткую версию этой ТЗ на 15–20 строк**, прямо в формате “вставить в Codex без лишнего контекста”.
|
||||
Reference in New Issue
Block a user