16 KiB
Да. Тут лучше не распиливать на десять мелких задач. Оптимальный формат — одна ТЗ на 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_62vat_document_register_bookmonth_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 вопросу зафиксированы такие сбои:
-
Temporal anchor error Вопрос про оплату 6 июля в июльском снапшоте 2020 был нормализован в
time_scope = 2023-07-06. -
Business scope / company grounding слабый
business_scopeосталсяgeneric_accounting, хотя вопрос company-specific и привязан к конкретному снапшоту. -
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вместе. -
Evidence contamination / inadmissible evidence
live_mcp.matched_rows = 0, но в evidence всё равно попадают live-элементы; среди них есть записи с проводками68.02 / 19.04, то есть VAT-контур, плюс даты 2025/2026/2030, что недопустимо для ответа по июльскому снапшоту 2020. Для части evidence уже помеченоweak_source_mapping, но они всё равно используются как опора. -
Mechanism-first answer contract не дожат Вопросы в контрольном наборе специально проверяют, способен ли ассистент различать механизм разрыва: не тот договор, не тот объект расчётов, неполный closure, неполный VAT-edge, stale RBP и т.д. Сейчас ответ часто скатывается в общий partial-coverage checklist вместо выбора наиболее вероятного механизма и объяснения, почему именно он.
4. Объём работ
Сделать одну corrective wave, но внутри неё 4 подволны.
Подволна A — Temporal Anchor Hardening
Задача
Запретить неверную интерпретацию даты/периода для company snapshot вопросов.
Что сделать
-
В normalizer/router добавить
company_snapshot_temporal_lock. -
Если вопрос явно относится к июльскому снапшоту 2020:
- не допускать авто-подстановку текущего/дефолтного года;
- не допускать relative reinterpretation;
- переводить время в fixed window
2020-07-01 .. 2020-07-31, если вопрос не требует более узкого дня; - если в вопросе явно указан день июля, привязывать к
2020-07-DD.
-
Добавить hard-fail guard:
- если extracted time_scope выходит за рамки company snapshot, answer не должен собираться как grounded.
-
В 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 соседними контурами.
Что сделать
-
Ввести
domain_polarity_guardдо retrieval ranking и до problem-unit assembly. -
Минимальные правила:
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 сигналам.
-
Запретить mixed semantic_profile вида:
suppliers + customersодновременно для одного single-focus question, если вопрос не cross-entity by design.
-
Для 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Названия можно оставить внутренними, но логика должна быть раздельной.
- supplier cases:
-
Если 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 что-то “нашёл”.
Что сделать
-
Ввести
evidence_admissibility_gateперед answer composer. -
Evidence допускается в grounded answer только если одновременно выполнено:
- дата попадает в допустимое временное окно вопроса;
- домен совпадает с активным domain card;
- account scope совместим с вопросом;
- source mapping не weak/ambiguous, либо такой evidence помечается только как limitation, но не как доказательство;
- если live probe дал
matched_rows = 0, live evidence не усиливает answer.
-
Запретить cross-domain contamination:
- VAT postings не попадают в settlement evidence;
- settlement traces не попадают в VAT proof без явной cross-branch задачи;
- month-close traces не усиливают settlement answer.
-
Развести уровни evidence:
hard_evidencesupporting_signalinadmissible_noise
-
В debug payload показывать:
- сколько evidence прошло gate;
- сколько отрезано и почему (
wrong_period,wrong_domain,wrong_account_scope,weak_source_mapping,zero_live_match).
Acceptance
- При
matched_rows = 0live probe не должен добавлять ложную уверенность. - VAT проводки и future-dated live rows не должны попадать в settlement-grounded answer.
- grounded answer без admissible evidence должен автоматически деградировать в честный limited answer.
Подволна D — Mechanism-Specific Answer Contract
Задача
Заставить ассистента не просто перечислять проверки, а различать механизм разрыва и объяснять его.
Что сделать
-
Для P0-доменов ввести
mechanism_discriminatorперед финальным answer composer. -
Для settlements_60_62 минимум различать:
- wrong_contract_binding
- wrong_settlement_object
- closure_document_not_confirmed
- partial_settlement_tail
- chronology_break
-
Для VAT минимум различать:
- missing_invoice_link
- missing_tax_entry
- missing_purchase_book_entry
- partial_vat_chain
-
Для month_close минимум различать:
- close_completed_but_tail_remains
- stale_rbp
- invalid_close_transition
- normal_residual_not_a_bug
-
Финальный answer contract сделать таким:
- Основной вывод: один наиболее вероятный механизм.
- Почему именно он: 2–4 коротких grounding facts.
- Что не доказано: отдельный limitation block.
- Что проверить первым: 1–2 next checks, а не длинный checklist.
-
Если discriminator не может выбрать один механизм честно:
- разрешено показать top-2 mechanism candidates,
- но с ранжированием и явным объяснением, почему первый выше второго.
Acceptance
- Ответ на symptom-first вопросы должен содержать не набор равноправных гипотез, а основной mechanism candidate.
- False confidence по VAT и month-close не допускается.
- Ranking/truthful limitation из контрольного набора должны быть сохранены.
5. Eval / Regression
Обязательный контрольный набор
Минимум прогонять:
- supplier settlement case по оплате 55 200 / незакрытый хвост;
- buyer advance offset case 276 873,60 / 62.02;
- VAT case по услугам связи + счёт-фактура 233,33;
- month-close case по закрытию косвенных расходов;
- RBP case;
- limitation honesty case после полного month-end.
Предпочтительно прогонять все 8 core-вопросов из вашего ядра.
Новые метрики
Добавить в harness:
temporal_anchor_correctness_ratedomain_polarity_correctness_rateevidence_admissibility_ratemechanism_discrimination_ratelimited_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. Артефакты, которые нужно вернуть после реализации
-
run_summary.json -
before_after_metrics.json -
case_matrix.mdпо контрольным вопросам -
чат.txt/ dialog export по минимум 3 вопросам, лучше по 6–8 -
debug_payloads/с примерами:- supplier 60 case
- VAT case
- month-close case
-
короткий
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 без лишнего контекста”.