АДРЕСНЫЙ РЕЖИМ -Step-4: Batch-2 lifecycle закрыт gate 36/36, nightly 102/102 + 25/25 PASS

This commit is contained in:
2026-04-08 13:39:40 +03:00
parent 1f9bb886ee
commit 71762af575
41 changed files with 50617 additions and 53 deletions
+8 -11
View File
@@ -23,33 +23,30 @@
- `followup_25`: `25/25`
- comparator: `PASS`
- run: `docs/ADDRESS/runs/2026-04-08_Address_Nightly_Regression_2026-04-08_10-51-20/nightly_summary.json`
- Batch-2 lifecycle официально переведен в `Phase A active`:
- Batch-2 lifecycle закрыт до `Phase C` (domain + global gates PASS):
- domain card: `domain_general_batch2_lifecycle_card_v1.md`
- acceptance set: `docs/ADDRESS/question_sets/domain_general_batch2_lifecycle_acceptance_2026-04-08_phaseA.json`
- probe report: `wave1_batch2_phaseA_probe_report_2026-04-08.md`
- backlog: `step4_wave1_batch2_phaseA_backlog_v1.md`
- Batch-2 Phase-B progress:
- resolver hardening по `Q12/Q13/Q26/Q27/Q31/Q32` выполнен
- targeted test gate: `addressQueryRuntimeM23.test.ts = 210/210`, `build=PASS`
- live hotpass: `wave1_batch2_phaseB_resolver_hotpass_2026-04-08.md` (`route match 6/6`)
- backlog closeout: `step4_wave1_batch2_phaseA_backlog_v1.md`
- domain live-gate: `docs/ADDRESS/runs/2026-04-08_Address_Batch2_Lifecycle_FullGate_PhaseC_PostFix2/run_summary.json` (`strict 36/36`)
- targeted code gate: `addressQueryRuntimeM23.test.ts + assistantAddressFollowupContext.test.ts = 223/223`, `build=PASS`
- global non-regression: `docs/ADDRESS/runs/2026-04-08_Address_Nightly_Regression_2026-04-08_13-19-24/nightly_summary.json` (`stress 102/102`, `followup 25/25`, comparator PASS)
- Финальный stress-pack: `102/102`
`docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
- Финальный follow-up pack: `25/25`
`docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
- Актуальный nightly regression (green):
`docs/ADDRESS/runs/2026-04-08_Address_Nightly_Regression_2026-04-08_10-51-20/nightly_summary.json`
`docs/ADDRESS/runs/2026-04-08_Address_Nightly_Regression_2026-04-08_13-19-24/nightly_summary.json`
- Task Scheduler: `NDC_ADDRESS_Nightly_Regression` временно `Disabled` (ручной режим до стабилизации infra-канала).
- Текущий production-контур: `question_mode=address_query`, live-first через MCP.
- Следующий этап: `Step-4` domain expansion по рельсовой модели Step-0.
## Что реально реализовано в коде (срез 2026-04-03)
## Что реально реализовано в коде (срез 2026-04-08)
Поддерживаемые intents в runtime:
- `period_coverage_profile` (Wave-1 B1, gate-closed)
- `document_type_and_account_section_profile` (Wave-1 B1, pre-gate)
- `counterparty_population_and_roles` (Wave-1 B1, pre-gate)
- `counterparty_activity_lifecycle` (Wave-1/B2, Phase-A active)
- `counterparty_activity_lifecycle` (Wave-1 B2, gate-closed)
- `contract_usage_overview` (Wave-1 B1, gate-closed)
- `customer_revenue_and_payments` (Wave-1 B3 value, gate-closed)
- `supplier_payouts_profile` (Wave-1 B3 value, gate-closed)
@@ -2,12 +2,12 @@
Дата: `2026-04-08`
Домен: `general_batch2_lifecycle`
Статус: `active` (Phase A стартован)
Статус: `closed` (Phase A/B/C закрыты; domain + global gate PASS)
Владелец: `Address Runtime Team`
## 1. Scope
Кратко: домен закрывает lifecycle-вопросы общего домена (`Q8..Q13 + Q26 + Q27 + Q31 + Q32`) и готовит единый рельсовый контракт перед Phase B.
Кратко: домен закрывает lifecycle-вопросы общего домена (`Q8..Q13 + Q26 + Q27 + Q31 + Q32`) и зафиксирован как rail-ready после Phase C gate.
In-scope intents:
@@ -117,9 +117,9 @@ Global gate:
## 8. Rollout Plan
1. `phase_a` — contract freeze + acceptance set + probe baseline.
2. `phase_b` — resolver/compose hardening по lifecycle gap-ам.
3. `phase_c` — domain live gate + global comparator PASS.
1. `phase_a` — contract freeze + acceptance set + probe baseline (`completed`, 2026-04-08).
2. `phase_b` — resolver/compose hardening по lifecycle gap-ам (`completed`, 2026-04-08).
3. `phase_c` — domain live gate + global comparator PASS (`completed`, 2026-04-08).
## 9. Artifacts
@@ -131,8 +131,14 @@ Global gate:
4. `step4_wave1_batch2_phaseA_backlog_v1.md`
5. `runs/<run_id>/run_summary.json`
6. `runs/<run_id>/full_live_results.json`
7. `wave1_batch2_phaseB_resolver_hotpass_2026-04-08.md`
8. `runs/2026-04-08_Address_Batch2_Lifecycle_FullGate_PhaseC_PostFix2/run_summary.json`
9. `runs/2026-04-08_Address_Nightly_Regression_2026-04-08_13-19-24/nightly_summary.json`
## 10. Change Log
- `2026-04-08` — создана карточка домена Batch-2 lifecycle и зафиксирован contract scope.
- `2026-04-08` — добавлен Phase-A acceptance набор `Q8..Q13 + Q26 + Q27 + Q31 + Q32`.
- `2026-04-08` — закрыт Phase-B hardening (resolver/decompose/follow-up контур по lifecycle noisy/follow-up формулировкам).
- `2026-04-08` — закрыт Phase-C domain gate: `strict 36/36` (`2026-04-08_Address_Batch2_Lifecycle_FullGate_PhaseC_PostFix2`).
- `2026-04-08` — подтвержден global non-regression PASS: `stress 102/102`, `followup 25/25`, comparator `PASS` (`2026-04-08_Address_Nightly_Regression_2026-04-08_13-19-24`).
@@ -13,14 +13,14 @@ flowchart LR
D["Global Nightly Comparator (R6)<br/>102/102 + 25/25 PASS"]
E["Auto-nightly Incident<br/>2026-04-08 09:52<br/>MCP fetch failed"]
F["Targeted Fix<br/>S019 predecompose anchor drift"]
G["Manual Control Nightly Recheck<br/>2026-04-08 10:51<br/>102/102 + 25/25 PASS"]
H["CURRENT STATE<br/>BATCH2_PHASE_B_ACTIVE"]
I["NEXT STEP<br/>Batch-2 Phase B closeout<br/>Follow-up carryover + compose hardening"]
K["Batch-2 Gate<br/>Phase C -> Global Regression"]
G["Manual Control Nightly Recheck<br/>2026-04-08 13:19<br/>102/102 + 25/25 PASS"]
H["CURRENT STATE<br/>BATCH2_PHASE_C_CLOSED"]
I["NEXT STEP<br/>Batch-4/5 domain scoping<br/>Debt/Aging/Risk"]
K["Batch-2 Gate Closed<br/>36/36 + Global PASS"]
J["Operational Rail<br/>Scheduler: Disabled<br/>Manual nightly only"]
A --> B --> C --> D --> H --> I --> K
D --> E --> F --> G --> H
A --> B --> C --> D --> K --> H --> I
D --> E --> F --> G --> K
E --> J
H --> J
```
@@ -31,8 +31,10 @@ flowchart LR
`docs/ADDRESS/runs/2026-04-03_Address_Nightly_Regression_Post_AnchorHardening_R6/nightly_summary.json`
- Incident run (auto-nightly):
`docs/ADDRESS/runs/2026-04-08_Address_Nightly_Regression_2026-04-08_09-52-39/nightly_summary.json`
- Control recheck PASS (manual):
`docs/ADDRESS/runs/2026-04-08_Address_Nightly_Regression_2026-04-08_10-51-20/nightly_summary.json`
- Control recheck PASS (manual, latest):
`docs/ADDRESS/runs/2026-04-08_Address_Nightly_Regression_2026-04-08_13-19-24/nightly_summary.json`
- Batch-2 domain gate PASS:
`docs/ADDRESS/runs/2026-04-08_Address_Batch2_Lifecycle_FullGate_PhaseC_PostFix2/run_summary.json`
- Master checker (entry to Batch-2):
`docs/ADDRESS/address_query/step4_wave1_batch1_master_checker_v1.md`
- Batch-2 Phase-A artifacts:
@@ -47,5 +49,5 @@ flowchart LR
- Функциональные гейты закрыты.
- Точечный flake `S019` закрыт.
- Batch-2 переведен в `Phase B active`; resolver drift по `Q12/Q13/Q26/Q27/Q31/Q32` закрыт (`hotpass 6/6`).
- Следующий практический шаг: Phase-B closeout (follow-up carryover + compose), затем Batch-2 domain gate.
- Batch-2 lifecycle закрыт до `Phase C`: domain gate `36/36`, global regression `102/102 + 25/25`, comparator PASS.
- Следующий практический шаг: стартовать scoping Batch-4/Batch-5 (`debt/aging/risk`) как отдельную доменную волну.
@@ -30,7 +30,7 @@
| AQ-B1-10 | period_coverage_profile | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | functional gates закрыты; остаточный риск в operational стабильности auto-nightly/MCP канала | держать comparator PASS (R6) и переходить к Batch-2 lifecycle |
| AQ-B1-11 | document_type_and_account_section_profile | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | functional gates закрыты; остаточный риск в operational стабильности auto-nightly/MCP канала | держать comparator PASS (R6) и переходить к Batch-2 lifecycle |
| AQ-B1-12 | counterparty_population_and_roles | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | functional gates закрыты; остаточный риск в operational стабильности auto-nightly/MCP канала | держать comparator PASS (R6) и переходить к Batch-2 lifecycle |
| AQ-B2-13 | counterparty_activity_lifecycle | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | resolver drift hotfix закрыт, но Batch-2 domain gate еще не прогнан | закрыть Phase-B (follow-up/compose) и выполнить Batch-2 domain gate |
| AQ-B2-13 | counterparty_activity_lifecycle | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | functional gates закрыты; остаточный риск в operational стабильности auto-nightly/MCP канала | держать comparator PASS и использовать Batch-2 как reference-domain для следующей волны |
| AQ-B1-14 | contract_usage_overview | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | functional gates закрыты; остаточный риск в operational стабильности auto-nightly/MCP канала | держать comparator PASS (R6) и переходить к Batch-2 lifecycle |
| AQ-B3-15 | customer_revenue_and_payments | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | functional gates закрыты; остаточный риск в operational стабильности auto-nightly/MCP канала | держать comparator PASS (R6) и переходить к Batch-2 lifecycle |
| AQ-B3-16 | supplier_payouts_profile | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | functional gates закрыты; остаточный риск в operational стабильности auto-nightly/MCP канала | держать comparator PASS (R6) и переходить к Batch-2 lifecycle |
@@ -38,7 +38,7 @@
| AQ-P1-10 | account_turnover_snapshot | STRUCTURALLY_VISIBLE | UNKNOWN | intent/recipe отсутствуют в runtime | планировать как отдельный домен Step-4 |
| AQ-P1-11 | list_documents_by_type | STRUCTURALLY_VISIBLE | UNKNOWN | intent/recipe отсутствуют в runtime | планировать как отдельный домен Step-4 |
## Sync Notes (2026-04-03)
## Sync Notes (2026-04-08)
- В runtime реализованы by-contract intents:
- `list_documents_by_contract`
@@ -56,7 +56,7 @@
- Для value-слоя зафиксирован стандарт ранжирования: `top-20` по умолчанию (если пользователь не указал иной лимит).
- Добавлена устойчивость к сленгу/опечаткам в intent routing (в т.ч. фразы вида `приходы самые высокие`, `кликентов самый высокий чек`).
- Targeted code gate зеленый:
- `npm --prefix llm_normalizer/backend test -- addressQueryRuntimeM23.test.ts` -> `200/200`.
- `npm --prefix llm_normalizer/backend run test -- addressQueryRuntimeM23.test.ts assistantAddressFollowupContext.test.ts --testTimeout 30000` -> `223/223`.
- `npm --prefix llm_normalizer/backend run build` -> `PASS`.
- Domain live gates (2026-04-03):
- Batch-1 pack: `docs/ADDRESS/runs/2026-04-03_Address_Domain_General_B1_PhaseC_LiveGate_R3/` -> `strict 28/28`.
@@ -74,7 +74,13 @@
- Batch-2 lifecycle Phase-B resolver hotpass (2026-04-08):
- report: `docs/ADDRESS/address_query/wave1_batch2_phaseB_resolver_hotpass_2026-04-08.md`
- фактический результат: `route match 6/6` на `Q12/Q13/Q26/Q27/Q31/Q32`
- кодовый gate: `addressQueryRuntimeM23.test.ts = 210/210`, `build=PASS`.
- кодовый gate: `addressQueryRuntimeM23.test.ts = 220/220`, `assistantAddressFollowupContext.test.ts = 3/3`, `build=PASS`.
- Batch-2 lifecycle Phase-C domain gate (2026-04-08):
- run: `docs/ADDRESS/runs/2026-04-08_Address_Batch2_Lifecycle_FullGate_PhaseC_PostFix2/`
- фактический результат: `strict 36/36`, `false_factual_rate=0`, `execution_error_rate=0`.
- Global non-regression после Phase-C (2026-04-08):
- run: `docs/ADDRESS/runs/2026-04-08_Address_Nightly_Regression_2026-04-08_13-19-24/nightly_summary.json`
- фактический результат: `stress_102=102/102`, `followup_25=25/25`, comparator `PASS`.
- `COMPOUND_FACTUAL_QUERY` остается detection-only (без multi-intent execution).
- Финальные gate-артефакты стабильности:
- stress `102/102`: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
@@ -1,7 +1,7 @@
# Step-4 Wave-1 Batch-2 — Phase A/B Backlog V1
Дата: 2026-04-08
Статус: `active`
Статус: `closed` (`Phase C done`, domain/global gates PASS)
Scope: `Q8..Q13 + Q26 + Q27 + Q31 + Q32`
## 1. Phase A (Design/Contract) — статус
@@ -29,7 +29,7 @@ Scope: `Q8..Q13 + Q26 + Q27 + Q31 + Q32`
Добавить contract lifecycle routing:
- stale contract phrasing -> `contract_usage_overview`
- multi-contract/active contract phrasing -> `contract_usage_and_value`
- [ ] `llm_normalizer/backend/src/services/address_runtime/decomposeStage.ts`
- [x] `llm_normalizer/backend/src/services/address_runtime/decomposeStage.ts`
Усилить follow-up carryover для Batch-2 chain:
`а кто новые`, `а кто потом исчез`, `а теперь за 2021`, `и какие договоры активны`.
@@ -53,7 +53,7 @@ Scope: `Q8..Q13 + Q26 + Q27 + Q31 + Q32`
- [x] `llm_normalizer/backend/tests/addressQueryRuntimeM23.test.ts`
Добавить regression-кейсы под `Q12/Q13/Q26/Q27/Q31/Q32`.
- [ ] `llm_normalizer/backend/tests/assistantAddressFollowupContext.test.ts`
- [x] `llm_normalizer/backend/tests/assistantAddressFollowupContext.test.ts`
Добавить lifecycle follow-up chains для переключения года и сегментов.
- [x] Кодовый gate:
- `npm --prefix llm_normalizer/backend run test -- addressQueryRuntimeM23.test.ts --testTimeout 20000`
@@ -64,20 +64,25 @@ Scope: `Q8..Q13 + Q26 + Q27 + Q31 + Q32`
## 3. Phase C (Gate) — критерии закрытия
- [ ] Domain run-pack по
- [x] Domain run-pack по
`docs/ADDRESS/question_sets/domain_general_batch2_lifecycle_acceptance_2026-04-08_phaseA.json`:
- `strict_pass(route)=100%`
- `false_factual_rate=0`
- `execution_error_rate=0`
- [ ] Global non-regression:
- [x] Global non-regression:
- `address_slang_stress_full_2026-04-02.json`
- `address_followup_context_chains_2026-04-02.json`
обе метрики не ниже baseline (`102/102`, `25/25`).
- [ ] Comparator PASS against latest green nightly:
`docs/ADDRESS/runs/2026-04-08_Address_Nightly_Regression_2026-04-08_10-51-20/nightly_summary.json`
- [x] Comparator PASS against latest green nightly:
`docs/ADDRESS/runs/2026-04-08_Address_Nightly_Regression_2026-04-08_13-19-24/nightly_summary.json`
## 4. Текущий приоритет (следующий кодовый шаг)
1. Закрыть follow-up carryover для lifecycle/contract lifecycle chain.
2. Дожать compose-представления для `stale`/`one-time`/`longest-running`/`regular-vs-episodic`.
3. Прогнать полный Batch-2 domain gate pack + global comparator.
1. Перевести Batch-2 из wave backlog в master checker как `closed`.
2. Подготовить Batch-4/Batch-5 scope (debt/aging/risk) отдельной доменной карточкой.
3. Держать nightly regression в green-контуре как release guardrail.
## 5. Фактические артефакты закрытия
1. Domain gate PASS: `docs/ADDRESS/runs/2026-04-08_Address_Batch2_Lifecycle_FullGate_PhaseC_PostFix2/run_summary.json` (`strict 36/36`).
2. Global non-regression PASS: `docs/ADDRESS/runs/2026-04-08_Address_Nightly_Regression_2026-04-08_13-19-24/nightly_summary.json` (`stress 102/102`, `followup 25/25`, comparator PASS).