АДРЕСНЫЙ РЕЖИМ -ADDRESS:Шаг 0 (Pre-Prod Rails): Предпродакшн-постановка ADDRESS Query V1 на рельсы референсный домен, nightly-автоматизация и подтверждённый global gate (102/102 + 25/25)

This commit is contained in:
dctouch 2026-04-02 17:53:43 +03:00
parent 4cb9fc7021
commit 53716e548e
113 changed files with 89499 additions and 549 deletions

View File

@ -1,20 +1,74 @@
# ADDRESS Query Docs
Дата: 2026-03-29
Дата: 2026-04-02
Статус синхронизации: актуализировано по текущему коду в `llm_normalizer/backend/src/services/*`.
## Документы
## Актуальный статус (2026-04-02)
- `entity_map_1c_2020.md` - полная карта сущностей по snapshot 2020.
- `address_scenario_matrix.md` - матрица сценариев (question -> intent -> recipe).
- `query_recipes_v1.md` - каталог фильтров и recipe-контракты.
- `runtime_integration_plan.md` - план встраивания `question_mode=address_query`.
- `address_runtime_contracts.md` - контракты runtime/debug/result для address lane.
- `address_architecture_contract_v1.md` - архитектурные границы `Decompose -> Resolve -> Execute -> Compose` и политика data-agnostic runtime.
- `runtime_readiness_matrix_v1.md` - матрица structural vs runtime readiness.
- `known_positive_live_suite_v1.md` - базовый template positive-evidence suite.
- `data_aware_positive_acceptance_suite_v1.md` - M2.3 canonical guide для curated live acceptance.
- `curated_positive_live_suite_v1.md` - M2.3c curated suite (counterparty/account split + negative twins).
- `address_query_bootstrap_report_2026-03-29.md` - итоговая сводка bootstrap этапа.
- Этап стабилизации закрыт под `strict_policy=route`.
- Step-0 pre-prod rails закрыт (reference-domain + nightly automation).
- Финальный 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-02_Address_Nightly_Regression_2026-04-02_17-35-00/nightly_summary.json`
- Task Scheduler: `NDC_ADDRESS_Nightly_Regression` (`daily 03:30`, owner `DCTOUCH`).
- Текущий production-контур: `question_mode=address_query`, live-first через MCP.
- Следующий этап: `Step-4` domain expansion по рельсовой модели Step-0.
## Что реально реализовано в коде (срез 2026-04-02)
Поддерживаемые intents в runtime:
- `list_open_contracts`
- `list_payables_counterparties`
- `list_receivables_counterparties`
- `account_balance_snapshot`
- `open_items_by_counterparty_or_contract`
- `list_documents_by_counterparty`
- `bank_operations_by_counterparty`
- `list_documents_by_contract`
- `bank_operations_by_contract`
- `documents_forming_balance`
Ключевой scope-лимит:
- `COMPOUND_FACTUAL_QUERY` пока detection-only (без multi-intent execution).
- `account_turnover_snapshot` и `list_documents_by_type` не реализованы в runtime V1.
## Основные документы
- `address_scenario_matrix.md` - актуальная матрица сценариев `question -> intent -> recipe_id`.
- `query_recipes_v1.md` - фактический каталог runtime recipes и их контрактов.
- `runtime_readiness_matrix_v1.md` - статус готовности сценариев по текущему коду.
- `address_runtime_contracts.md` - актуальный debug/output контракт address lane.
- `runtime_integration_plan.md` - фактическая схема интеграции в `assistantService`.
- `address_architecture_contract_v1.md` - guardrails `Decompose -> Resolve -> Execute -> Compose`.
- `global_execution_checklist_v1.md` - release-gate и шаги этапа.
- `stage_closeout_2026-04-02.md` - закрытие этапа стабилизации.
- `step0_preprod_rail_plan_v1.md` - обязательный pre-prod рельсовый этап перед массовым расширением доменов.
- `step0_closeout_2026-04-02.md` - факт закрытия Step-0 с артефактами и gate-подтверждением.
- `domain_expansion_implementation_plan_v1.md` - план `Step-4`.
- `domain_card_template_v1.md` - шаблон описания домена для repeatable delivery.
- `domain_acceptance_question_set_template_v1.md` - шаблон структуры domain acceptance question set.
- `run_pack_spec_v1.md` - обязательный формат run-артефактов и gate-валидации.
Исторические и supporting docs:
- `entity_map_1c_2020.md`
- `address_query_bootstrap_report_2026-03-29.md`
- `known_positive_live_suite_v1.md`
- `data_aware_positive_acceptance_suite_v1.md`
- `curated_positive_live_suite_v1.md`
## Step-0 Automation (rail tools)
- `python scripts/validate_address_run_pack.py docs/ADDRESS/runs/<run_id>`
- `python scripts/compare_address_run_summary.py --baseline-summary <baseline_run_summary.json> --candidate-summary <candidate_run_summary.json>`
- `python scripts/run_address_nightly_regression.py`
- `python scripts/run_address_nightly_regression.py --dry-run`
- `powershell -ExecutionPolicy Bypass -File .\scripts\run_address_nightly_regression.ps1`
## Связанные run-паки
@ -26,4 +80,8 @@
- `docs/ADDRESS/runs/2026-03-29_Address_Query_Runtime_V1_M2_3C_Resolver_Filter_Tuning_And_AccountScope_Audit/`
- `docs/ADDRESS/runs/2026-04-01_Address_Query_Runtime_V1_M2_3D_Query_Variants_Expansion/`
- `docs/ADDRESS/runs/2026-04-01_Address_Query_Runtime_V1_M2_3E_Stability_Hardening_AccountQueryScope/`
- `docs/ADDRESS/runs/2026-04-01_Address_Query_Runtime_V1_M2_3F_LLM_Decompose_Coercion_Layer/`
- `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/`
- `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/`
- `docs/ADDRESS/runs/2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_17-00-22/`
- `docs/ADDRESS/runs/2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00/`

View File

@ -1,97 +1,126 @@
# Address Runtime Contracts V1 (M2.3c)
# Address Runtime Contracts V1 (Code Sync)
Дата: 2026-03-29
Дата: 2026-04-02
Reference:
- `address_architecture_contract_v1.md` (architecture guardrails and stage boundaries).
- `address_architecture_contract_v1.md` (guardrails and stage boundaries)
- `llm_normalizer/backend/src/types/addressQuery.ts`
- `llm_normalizer/backend/src/services/addressQueryService.ts`
- `llm_normalizer/backend/src/services/assistantService.ts` (`buildAddressDebugPayload`)
## Runtime Policy
- Runtime lane is `data-agnostic`: no hardcoded counterparties/contracts/accounts from one concrete base.
- Acceptance lane is `data-aware`: positive cases are curated after exploratory live pass.
- Address lane remains MCP/live-first, whitelist-only, read-only.
- Runtime execution is MSP-only in production; snapshot usage is explicit fallback only.
- Canonical pipeline boundary: `Decompose -> Resolve -> Execute -> Compose` (no cross-stage leakage).
- LLM decompose stage interprets question structure only; company entities are resolved only in live resolver stage.
- Runtime lane is `data-agnostic`: без company-specific словарей в коде.
- Acceptance lane is `data-aware`: позитивные live-кейсы подбираются отдельно.
- Address lane: MCP/live-first, whitelist-only, read-only.
- Canonical boundary: `Decompose -> Resolve -> Execute -> Compose`.
- LLM pre-decompose интерпретирует текст, но не подменяет whitelist execution.
## Input Contract
- `question_mode`: `address_query | deep_analysis | unsupported`
- `address_intent`: nullable enum
- `resolved_filters`: object
- `missing_filters`: string[]
- `address_intent`: enum intents + `unknown`
- `extracted_filters`: object
- `missing_required_filters`: string[]
## Debug Contract
## Debug Contract (actual payload)
Core detection:
- `detected_mode`
- `detected_mode_confidence`
- `query_shape`
- `query_shape_confidence`
- `detected_intent`
- `runtime_readiness`
- `is_compound_query`
- `subqueries_count`
- `resolved_entities`
- `resolved_filters`
- `missing_filters`
- `selected_recipe_ids`
- `detected_intent_confidence`
Filter + recipe:
- `extracted_filters`
- `missing_required_filters`
- `selected_recipe`
Resolver block:
- `anchor_type`
- `anchor_value_raw`
- `anchor_value_resolved`
- `resolver_confidence`
- `ambiguity_count`
MCP/evidence flow block:
- `mcp_call_status`
- `mcp_call_status_legacy`
- `match_failure_stage`
- `match_failure_reason`
- `rows_fetched`
- `raw_rows_received`
- `rows_after_account_scope`
- `rows_materialized`
- `rows_after_recipe_filter`
- `rows_matched`
- `raw_row_keys_sample`
- `materialization_drop_reason`
Account-scope audit block:
- `account_scope_mode`
- `account_scope_fallback_applied`
- resolver block:
- `anchor_type`
- `anchor_value_raw`
- `anchor_value_resolved`
- `resolver_confidence`
- `ambiguity_count`
- MCP/evidence flow block:
- `mcp_call_status`
- `mcp_call_status_legacy`
- `match_failure_stage`
- `match_failure_reason`
- `rows_fetched`
- `raw_rows_received`
- `rows_after_account_scope`
- `rows_materialized`
- `rows_after_recipe_filter`
- `rows_matched`
- `raw_row_keys_sample`
- `materialization_drop_reason`
- account-scope audit block:
- `account_token_raw`
- `account_token_normalized`
- `account_scope_fields_checked`
- `account_scope_match_strategy`
- `account_scope_drop_reason`
- `response_type`
- `account_token_raw`
- `account_token_normalized`
- `account_scope_fields_checked`
- `account_scope_match_strategy`
- `account_scope_drop_reason`
Result block:
- `runtime_readiness`
- `limited_reason_category`
- `fallback_reason`
- `response_type`
- `limitations`
- `reasons`
Assistant-level metadata (added in `buildAddressDebugPayload`):
- `llm_decomposition_attempted`
- `llm_decomposition_applied`
- `llm_provider_used`
- `llm_decomposition_trace_id`
- `llm_decomposition_effective_message`
- `llm_decomposition_reason`
- `fallback_rule_hit`
- `sanitized_user_message`
- `tool_gate_decision`
- `tool_gate_reason`
- `execution_lane` (`address_query`)
## Output Contract
### FACTUAL_LIST
- short summary
- rows[]
- totals
- short factual summary
- rows list
- optional hints
### FACTUAL_SUMMARY
- aggregate summary
- top rows
- optional drilldown hints
- compact top rows
### LIMITED_WITH_REASON
- explicit reason code
- missing filters / data availability note
- missing filters / data visibility note
## Limited Reason Taxonomy
- `empty_match` - live-запрос выполнен, но по фильтру нет строк.
- `missing_anchor` - не хватает обязательного якоря (контрагент/договор/счет/период).
- `recipe_visibility_gap` - текущий recipe не материализует нужную аналитику.
- `execution_error` - ошибка MCP/инфраструктуры/feature-flag.
- `unsupported` - вопрос не покрыт address-intent V1.
- `empty_match` - live запрос выполнен, но по фильтрам нет строк.
- `missing_anchor` - не хватает обязательного якоря или якорь не подтвердился.
- `recipe_visibility_gap` - текущий recipe не дает нужной видимости.
- `execution_error` - ошибка MCP/feature-flag/инфраструктуры.
- `unsupported` - intent не поддержан в Address V1.
## Runtime Readiness Status
@ -101,7 +130,7 @@ Reference:
- `DEEP_ONLY`
- `UNKNOWN`
## MCP Stage Status Taxonomy (M2.3c)
## MCP Stage Status Taxonomy
- `skipped`
- `error`
@ -112,9 +141,10 @@ Reference:
- `matched_non_empty`
Legacy compatibility:
- `mcp_call_status_legacy` may still report `materialized_but_not_matched` for backward-compatible analytics.
## Materialization Drop Reasons (M2.3c)
- `mcp_call_status_legacy` может быть `materialized_but_not_matched` для backward-compatible аналитики.
## Materialization Drop Reasons
- `none`
- `dropped_by_account_scope_filter`
@ -123,21 +153,15 @@ Legacy compatibility:
- `missing_registrator_field`
- `unknown_row_shape`
## Account Scope Strategy (M2.3c)
## Account Scope Strategy
- `strict` - account scope is mandatory and applied as a hard filter.
- `preferred` - account scope is applied first; if it yields zero rows while raw rows exist, runtime falls back to raw rows and continues matching.
## M2.3c Runtime Snapshot
- Counterparty intents now have confirmed `matched_non_empty` cases in curated live suite.
- Account intents still mostly stop at `raw_rows_received_but_not_materialized`.
- Guardrails remain unchanged: no free query generation, no false factual outputs.
- `strict` - account scope обязателен и работает как hard filter.
- `preferred` - account scope применяется first-pass; если дал 0 строк при наличии raw rows, runtime может fallback к raw rows.
## Compound Query Note
- `COMPOUND_FACTUAL_QUERY` currently remains detection-only.
- Multi-intent decomposition execution is planned for the next increment.
- `COMPOUND_FACTUAL_QUERY` пока detection-only.
- Multi-intent decomposition execution в runtime V1 не включен.
## Guardrails
@ -145,3 +169,4 @@ Legacy compatibility:
- read-only MCP
- no free-form query generation
- no silent source substitution
- false factuals are forbidden (`rows_matched > 0` required for factual)

View File

@ -1,58 +1,67 @@
# Address Scenario Matrix (V1)
Дата: 2026-03-29
Дата: 2026-04-02
Режим: `question_mode=address_query` (отдельно от deep-analysis)
## Scope
Этот сценарный слой покрывает только direct factual lookup без тяжелого reasoning-chain:
Этот сценарный слой покрывает direct factual lookup без causal/proof reasoning:
- список объектов;
- агрегаты (остатки/долги/хвосты);
- drilldown от агрегата к документам.
- списки документов/операций;
- агрегатные срезы остатков/взаиморасчетов;
- drilldown до документов по счету.
Не покрывается в V1:
- "почему так произошло";
- доказательная причинно-следственная бухгалтерская интерпретация;
- сложные chain proof-вопросы (должны уходить в deep-analysis path).
- причинно-следственный анализ ("почему", "докажи", root-cause);
- многошаговый multi-intent execution для составных вопросов;
- свободный query builder вне whitelist recipe.
## Matrix
## Matrix (актуально по коду)
| scenario_id | Пользовательский вопрос | intent | required_filters | optional_filters | target_entity_family | MCP recipe | expected_response_type | priority |
| scenario_id | Пользовательский вопрос | intent | required_filters (runtime) | optional_filters | target_entity_family | recipe_id (runtime) | expected_response_type (runtime) | priority |
|---|---|---|---|---|---|---|---|---|
| AQ-P0-01 | Какие договоры не закрыты на текущую дату? | `list_open_contracts` | `as_of_date` | `organization`, `counterparty`, `limit`, `sort` | `NSI_CATALOG`, `ACCOUNTING_REGISTER`, `DOCUMENT` | `address.open_contracts.by_asof` | `FACTUAL_LIST` | P0 |
| AQ-P0-02 | Кому мы должны денег на сегодня? | `list_payables_counterparties` | `as_of_date` | `organization`, `account`, `limit`, `sort` | `ACCOUNTING_REGISTER`, `DOCUMENT`, `DOCUMENT_JOURNAL` | `address.payables.counterparty_totals` | `FACTUAL_SUMMARY` | P0 |
| AQ-P0-03 | Кто должен нам денег на сегодня? | `list_receivables_counterparties` | `as_of_date` | `organization`, `account`, `limit`, `sort` | `ACCOUNTING_REGISTER`, `DOCUMENT`, `DOCUMENT_JOURNAL` | `address.receivables.counterparty_totals` | `FACTUAL_SUMMARY` | P0 |
| AQ-P0-04 | Какой остаток по счету 60 на дату? | `account_balance_snapshot` | `account`, `as_of_date` | `organization`, `limit`, `sort` | `ACCOUNTING_REGISTER`, `CHART_OF_ACCOUNTS` | `address.account.balance_snapshot` | `FACTUAL_SUMMARY` | P0 |
| AQ-P0-05 | Какие хвосты висят по контрагенту X? | `open_items_by_counterparty_or_contract` | `counterparty`, `as_of_date` | `organization`, `contract`, `account`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address.open_items.by_counterparty` | `FACTUAL_LIST` | P0 |
| AQ-P0-06 | Какие хвосты висят по договору Y? | `open_items_by_counterparty_or_contract` | `contract`, `as_of_date` | `organization`, `counterparty`, `account`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT`, `NSI_CATALOG` | `address.open_items.by_contract` | `FACTUAL_LIST` | P0 |
| AQ-P0-07 | Покажи документы по контрагенту X за период | `list_documents_by_counterparty` | `counterparty`, `period_from`, `period_to` | `document_type`, `organization`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL` | `address.documents.by_counterparty` | `FACTUAL_LIST` | P0 |
| AQ-P0-07B | Покажи банковские операции по контрагенту X за период | `bank_operations_by_counterparty` | `counterparty` | `period_from`, `period_to`, `organization`, `limit`, `sort` | `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER` | `address.bank_ops.by_counterparty` | `FACTUAL_LIST` | P0 |
| AQ-P0-08 | Покажи документы по договору Y за период | `list_documents_by_contract` | `contract`, `period_from`, `period_to` | `document_type`, `organization`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `NSI_CATALOG` | `address.documents.by_contract` | `FACTUAL_LIST` | P0 |
| AQ-P0-09 | Какие документы формируют этот остаток по счету 62? | `documents_forming_balance` | `account`, `as_of_date` | `organization`, `counterparty`, `contract`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address.balance.drilldown_documents` | `FACTUAL_LIST` | P0 |
| AQ-P1-10 | Дай обороты по счету 51 за период | `account_turnover_snapshot` | `account`, `period_from`, `period_to` | `organization`, `counterparty`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address.account.turnover_snapshot` | `FACTUAL_SUMMARY` | P1 |
| AQ-P1-11 | Дай список документов по типу "СписаниеСРасчетногоСчета" за период | `list_documents_by_type` | `document_type`, `period_from`, `period_to` | `organization`, `counterparty`, `contract`, `limit` | `DOCUMENT`, `DOCUMENT_JOURNAL` | `address.documents.by_type` | `FACTUAL_LIST` | P1 |
| AQ-P0-01 | Какие договоры не закрыты на текущую дату? | `list_open_contracts` | - | `as_of_date`, `organization`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT`, `NSI_CATALOG` | `address_open_contracts_candidates_v1` | `FACTUAL_LIST` | P0 |
| AQ-P0-02 | Кому мы должны денег на сегодня? | `list_payables_counterparties` | - | `as_of_date`, `counterparty`, `contract`, `limit` | `ACCOUNTING_REGISTER` | `address_movements_payables_v1` | `FACTUAL_LIST` | P0 |
| AQ-P0-03 | Кто должен нам денег на сегодня? | `list_receivables_counterparties` | - | `as_of_date`, `counterparty`, `contract`, `limit` | `ACCOUNTING_REGISTER` | `address_movements_receivables_v1` | `FACTUAL_LIST` | P0 |
| AQ-P0-04 | Какой остаток по счету 60 на дату? | `account_balance_snapshot` | `account` (`as_of_date` defaulted) | `as_of_date`, `period_from`, `period_to`, `limit` | `ACCOUNTING_REGISTER`, `CHART_OF_ACCOUNTS` | `address_movements_account_snapshot_v1` | `FACTUAL_SUMMARY` | P0 |
| AQ-P0-05 | Какие хвосты висят по контрагенту/договору? | `open_items_by_counterparty_or_contract` | `counterparty OR contract` | `as_of_date`, `counterparty`, `contract`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address_open_items_by_party_or_contract_v1` | `FACTUAL_LIST` | P0 |
| AQ-P0-06 | Покажи документы по контрагенту X | `list_documents_by_counterparty` | `counterparty` | `period_from`, `period_to`, `as_of_date`, `organization`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER` | `address_documents_by_counterparty_v1` | `FACTUAL_LIST` | P0 |
| AQ-P0-07 | Покажи банковские операции по контрагенту X | `bank_operations_by_counterparty` | `counterparty` | `period_from`, `period_to`, `as_of_date`, `organization`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER` | `address_bank_operations_by_counterparty_v1` | `FACTUAL_LIST` | P0 |
| AQ-P0-08 | Покажи документы по договору Y | `list_documents_by_contract` | `contract` | `period_from`, `period_to`, `as_of_date`, `organization`, `counterparty`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER`, `NSI_CATALOG` | `address_documents_by_contract_v1` | `FACTUAL_LIST` | P0 |
| AQ-P0-08B | Покажи банковские операции по договору Y | `bank_operations_by_contract` | `contract` | `period_from`, `period_to`, `as_of_date`, `organization`, `counterparty`, `limit`, `sort` | `DOCUMENT`, `DOCUMENT_JOURNAL`, `ACCOUNTING_REGISTER`, `NSI_CATALOG` | `address_bank_operations_by_contract_v1` | `FACTUAL_LIST` | P0 |
| AQ-P0-09 | Какие документы формируют остаток по счету 62? | `documents_forming_balance` | `account` + `as_of_date` (`as_of_date` defaulted) | `organization`, `counterparty`, `contract`, `period_from`, `period_to`, `limit`, `sort` | `ACCOUNTING_REGISTER`, `DOCUMENT` | `address_documents_forming_balance_v1` | `FACTUAL_LIST` | P0 |
| AQ-P1-10 | Дай обороты по счету 51 за период | `account_turnover_snapshot` | `account`, `period_from`, `period_to` | `organization`, `counterparty`, `limit` | `ACCOUNTING_REGISTER`, `DOCUMENT` | - (not implemented) | `LIMITED_WITH_REASON` | P1 |
| AQ-P1-11 | Дай список документов по типу за период | `list_documents_by_type` | `document_type`, `period_from`, `period_to` | `organization`, `counterparty`, `contract`, `limit` | `DOCUMENT`, `DOCUMENT_JOURNAL` | - (not implemented) | `LIMITED_WITH_REASON` | P1 |
| AQ-P2-12 | Покажи технические константы конфигурации | `unsupported_for_v1` | - | - | `CONSTANT` | - | `LIMITED_WITH_REASON` | P2 |
## Сценарные правила
## Runtime rules (актуально по коду)
- Если вопрос распознается как `address_query`, ответ строится только через recipe-based MCP path.
- Если обязательные фильтры не извлечены, вернуть `LIMITED_WITH_REASON` с указанием недостающих параметров.
- Если вопрос требует causal/proof reasoning, перевести в deep-analysis path.
- Для `as_of_date` по умолчанию используется текущая дата runtime (на момент этого документа: 2026-03-29), если пользователь явно не задал дату.
## Runtime status note (M2.3c)
- Если mode распознан как `address_query`, ответ строится через whitelist recipe + MCP live path.
- Если `shape=EXPLAIN_OR_REASON`, запрос не идет в address lane (handoff в deep-analysis).
- Если обязательные фильтры не извлечены, возвращается `LIMITED_WITH_REASON` с `limited_reason_category=missing_anchor`.
- Для `account_balance_snapshot` и `documents_forming_balance`:
- `as_of_date` берется из `period_to`, если период задан;
- иначе default на текущую дату runtime.
- Для `documents/bank by counterparty|contract` период по умолчанию не форсируется (all-time), с runtime лимитами и fallback-логикой.
- `COMPOUND_FACTUAL_QUERY` пока только детектируется; multi-intent execution не реализован.
Implemented in live runtime now:
## Runtime status note (2026-04-02)
Реально реализованы в runtime:
- `list_open_contracts`
- `open_items_by_counterparty_or_contract`
- `list_documents_by_counterparty`
- `bank_operations_by_counterparty`
- `documents_forming_balance`
Still not implemented in runtime:
- `list_documents_by_contract`
- `bank_operations_by_contract`
- `account_balance_snapshot`
- `documents_forming_balance`
- `list_payables_counterparties`
- `list_receivables_counterparties`
Stage diagnostic note:
- strict account intents still show `raw_rows_received > 0`, but `rows_after_account_scope = 0`;
- counterparty intents now have curated `matched_non_empty` cases after resolver/filter tuning;
- account family still needs account-scope/materialization fix before first stable non-empty account case.
Остаются вне runtime V1:
- `account_turnover_snapshot`
- `list_documents_by_type`

View File

@ -0,0 +1,100 @@
# Domain Acceptance Question Set Template V1
Дата: `YYYY-MM-DD`
Назначение: стандартная структура acceptance-набора вопросов для одного домена.
## 1. Naming Convention
Файл набора:
- `docs/ADDRESS/question_sets/domain_<domain_name>_acceptance_<YYYY-MM-DD>.json`
Run ID:
- `YYYY-MM-DD_Address_Query_Domain_<DomainName>_Acceptance_<HH-mm-ss>`
## 2. Минимальный состав кейсов
1. `canonical`: не меньше 10 вопросов.
2. `noisy_slang`: не меньше 10 вопросов.
3. `followup_chain`: не меньше 5 цепочек.
Каждый вопрос должен иметь:
- ожидаемый `intent`
- ожидаемый набор required filters
- expected outcome (`factual_non_empty | factual_empty | limited_with_reason`)
## 3. JSON Shape (рекомендуемый)
```json
{
"pack_id": "domain_<domain_name>_acceptance_<YYYY-MM-DD>",
"question_mode": "address_query",
"strict_policy": "route",
"cases": [
{
"id": "canonical_001",
"group": "canonical",
"question": "<user question>",
"expected": {
"intent": "<intent_name>",
"required_filters_present": ["<filter_a>"],
"outcome": "factual_non_empty"
}
},
{
"id": "noisy_001",
"group": "noisy_slang",
"question": "<noisy question>",
"expected": {
"intent": "<intent_name>",
"required_filters_present": ["<filter_a>"],
"outcome": "factual_non_empty"
}
},
{
"id": "followup_001_step_1",
"group": "followup_chain",
"session_id": "followup_001",
"question": "<first question in chain>",
"expected": {
"intent": "<intent_name>",
"required_filters_present": ["<filter_a>"],
"outcome": "factual_non_empty"
}
},
{
"id": "followup_001_step_2",
"group": "followup_chain",
"session_id": "followup_001",
"question": "<follow-up question>",
"expected": {
"intent": "<intent_name>",
"required_filters_present": ["<filter_a>"],
"outcome": "factual_non_empty"
}
}
]
}
```
## 4. Правила наполнения
1. Не использовать company-specific формулировки как обязательные якоря.
2. Для follow-up обязательно включать короткие реплики (`а теперь`, `по нему`, `на ту же дату`).
3. Для noisy включать опечатки/сленг/шумовые хвосты.
4. Для каждого intent должна быть хотя бы одна negative-пара (вопрос похож, но должен уйти в другой intent или limited).
## 5. Acceptance Gate
Для закрытия домена набор должен пройти:
1. `strict_pass(route)=100%`
2. `false_factual_rate=0`
3. `execution_error_rate=0`
После domain-gate обязателен global regression gate:
1. `address_slang_stress_full_2026-04-02.json`
2. `address_followup_context_chains_2026-04-02.json`

View File

@ -0,0 +1,124 @@
# Domain Card Template V1
Дата: `YYYY-MM-DD`
Домен: `<domain_name>`
Статус: `draft | active | shadow | deprecated`
Владелец: `<owner/team>`
## 1. Scope
Кратко: какую бизнес-задачу закрывает домен и что сознательно не входит в scope.
In-scope intents:
1. `<intent_1>`
2. `<intent_2>`
Out-of-scope:
1. `<intent_or_case_not_supported>`
## 2. Intent Contract
Для каждого intent фиксируем контракт.
### 2.1 `<intent_1>`
- `query_shape`: `FACTUAL_LIST | FACTUAL_SUMMARY`
- `required_filters`: `[<filter_a>, <filter_b>]`
- `optional_filters`: `[<filter_c>]`
- `resolver_signals`: ключевые фразы/паттерны распознавания
- `ambiguity_rules`: как разрешаем коллизии (дата vs счет vs номер договора)
- `fallback_policy`: только внутри intent, без смены домена
### 2.2 `<intent_2>`
- `query_shape`: `FACTUAL_LIST | FACTUAL_SUMMARY`
- `required_filters`: `[...]`
- `optional_filters`: `[...]`
- `resolver_signals`: `...`
- `ambiguity_rules`: `...`
- `fallback_policy`: `...`
## 3. Recipe Mapping
Связка `intent -> recipe_id` должна совпадать с runtime catalog (`addressRecipeCatalog.ts`).
| intent | recipe_id | mcp_method | expected_statuses |
| --- | --- | --- | --- |
| `<intent_1>` | `<address_*_v1>` | `<method>` | `matched_non_empty, no_raw_rows, materialized_but_not_anchor_matched` |
| `<intent_2>` | `<address_*_v1>` | `<method>` | `...` |
## 4. Anchor and Resolver Rules
- `anchor_type`: `counterparty | contract | account | date_range | ...`
- `anchor_resolution_order`: metadata-first порядок
- `min_confidence`: порог для factual-ответа
- `unresolved_behavior`: что отдаем при неполной резолюции
## 5. Limited Reasons (taxonomy)
Разрешенные категории для этого домена:
1. `<limited_reason_category_1>`
2. `<limited_reason_category_2>`
Запрещено:
- смешивать произвольные free-form причины;
- выдавать factual при unresolved required filter.
## 6. Test Coverage
Unit:
1. resolver intent positives
2. resolver negatives (непересечение с соседними intent)
3. filter extraction required/optional
4. ambiguity resolution tests
Integration:
1. recipe selection
2. execution status mapping
3. debug payload completeness
Live acceptance:
1. canonical questions
2. noisy/slang questions
3. follow-up chains
## 7. Gate Criteria
Domain gate:
- `strict_pass(route)=100%`
- `false_factual_rate=0`
- `execution_error_rate=0`
Global gate:
- baseline stress не ниже текущего эталона
- baseline follow-up не ниже текущего эталона
## 8. Rollout Plan
1. `shadow`: логируем и сравниваем без влияния на prod-ответ.
2. `soft-enable`: ограниченное включение (feature flag/percentage).
3. `prod`: полное включение после green global gate.
## 9. Artifacts
Обязательные артефакты:
1. `domain_<name>_card_v1.md`
2. `question_sets/domain_<name>_acceptance_<date>.json`
3. `runs/<run_id>/run_summary.json`
4. `runs/<run_id>/full_live_results.json`
5. `runs/<run_id>/failures_only.json`
6. `runs/<run_id>/README.md`
## 10. Change Log
- `YYYY-MM-DD``<what changed>`

View File

@ -0,0 +1,257 @@
# Domain Expansion Implementation Plan V1
Дата: 2026-04-02
Контур: `question_mode=address_query` (live-first, MCP)
Стартовая база качества: закрытый этап стабилизации (`102/102` stress, `25/25` follow-up).
## 1. Цель и рамки
Цель этапа: расширять покрытие доменов/интентов без деградации уже стабильного ядра.
Рамки:
- не добавлять company-specific словари/хардкод;
- не генерировать свободные запросы к БД/1С через LLM;
- работать только через whitelist `intent -> filters -> recipe -> MCP -> factual`;
- сохранять release gate: `strict_policy=route`, `false_factual_rate=0`.
## 2. Что считаем “доменом”
Домен в этом плане: группа связанных интентов с общей семантикой фильтров и единым набором recipe.
Примеры доменов:
1. `contracts_open_items` (незакрытые договоры/позиции)
2. `counterparty_documents_bank_ops`
3. `account_balance_drilldown`
4. `turnover_snapshots`
5. `documents_by_type`
## 3. Базовые принципы внедрения
1. Metadata-first
- Любые якоря (контрагент, договор, счет) подтверждаем через live metadata/rows.
- Если якорь не подтвержден, не выдаем псевдо-factual.
2. Data-agnostic runtime
- Никаких уникальных названий компании/договоров в коде как правил.
- Допустимы только универсальные нормализаторы формата (дата, номер счета, шумовые токены).
3. Gate before scale
- Каждый новый домен включаем только после прохождения локального domain-gate и полного regression-gate.
4. Explainability
- Для каждого partial/error обязателен объяснимый `limited_reason_category`.
## 4. Текущий baseline (на который нельзя просесть)
Обязательные контрольные паки:
1. `docs/ADDRESS/question_sets/address_slang_stress_full_2026-04-02.json`
2. `docs/ADDRESS/question_sets/address_followup_context_chains_2026-04-02.json`
Текущие пороги (must keep):
- stress pack: `route_pass=102/102`, `strict_pass(route)=102/102`
- follow-up pack: `route_pass=25/25`, `strict_pass(route)=25/25`
## 4.1. Обязательный pre-prod prerequisite
Перед масштабным Step-4 должен быть закрыт Step-0 (рельсовый pre-prod):
- `step0_preprod_rail_plan_v1.md`
- `domain_card_template_v1.md`
- `domain_acceptance_question_set_template_v1.md`
- `run_pack_spec_v1.md`
Фактический статус на 2026-04-02: Step-0 закрыт (`step0_closeout_2026-04-02.md`), включая nightly automation и reference-domain cycle.
Ограничение остается как guardrail: если Step-0 в будущем будет нарушен (drift артефактов/gate), расширение снова переводится в ограниченный режим.
## 5. Domain rollout model (одинаковый для каждого нового домена)
### Phase A. Domain design
1. Выбрать домен из `runtime_readiness_matrix_v1.md` с максимальной ценностью и минимальным риском.
2. Зафиксировать:
- список интентов домена;
- обязательные фильтры;
- допустимые optional-фильтры;
- тип ответа (`FACTUAL_LIST`/`FACTUAL_SUMMARY`/`LIMITED_WITH_REASON`).
3. Создать domain card (в docs) с примерами canonical/noisy/follow-up формулировок.
Выход фазы:
- domain card;
- update scenario matrix;
- список acceptance-вопросов по домену.
### Phase B. Resolver + filters
1. Добавить/уточнить intent resolver для домена.
2. Добавить extractor/validator фильтров.
3. Проверить ambiguous anchors:
- коллизии чисел (дата vs счет vs номер договора);
- короткие follow-up реплики;
- мусорные хвосты/сленг.
Выход фазы:
- unit tests на resolver/filter;
- audit по ambiguous кейсам;
- отсутствие ложных positive в test-паке.
### Phase C. Recipe implementation
1. Добавить whitelist recipe в `query_recipes_v1.md` и runtime catalog.
2. Привязать intent -> recipe selector.
3. Реализовать execution contract:
- fixed sort/limit;
- read-only;
- status taxonomy (`matched_non_empty`, `no_raw_rows`, `materialized_but_not_anchor_matched`, ...).
Выход фазы:
- интеграционные тесты recipe;
- валидный debug payload;
- dry-run/локальный smoke.
### Phase D. Domain acceptance live
1. Собрать domain question set (минимум 3 слоя):
- canonical (чистые формулировки);
- noisy/slang;
- follow-up chain.
2. Прогнать live batch и сохранить артефакты в `docs/ADDRESS/runs/<run_id>/`.
3. Проверить domain-gate:
- `strict_pass(route) = 100%` для domain-пака;
- `false_factual_rate = 0`;
- `execution_error_rate = 0`.
Выход фазы:
- `run_summary.json`;
- `full_live_results.json`;
- `failures_only.json`;
- краткий `README.md` пака.
### Phase E. Global non-regression gate
После успешного domain-gate обязательно:
1. Прогон stress pack (`102`).
2. Прогон follow-up pack (`25`).
3. Сравнение до/после по:
- `route_pass_rate`;
- `strict_pass_rate`;
- `partial_coverage_count`;
- `execution_error_count`.
Rule:
- если любой из baseline-порогов просел, домен не включаем в production-path.
## 6. Порядок внедрения доменов (рекомендуемый)
1. `account_turnover_snapshot`
- Первый новый domain-intent, которого нет в runtime V1; хорошо измерим отдельным gate.
2. `documents_by_type`
- После фиксации type-normalization и alias-safe matching.
3. Multi-intent execution для `COMPOUND_FACTUAL_QUERY` (V1.1 lane)
- Сейчас в runtime это detection-only, без subquery execution.
4. Дополнительный hardening уже внедренных by-contract/by-counterparty intent-веток
- Проводить как parallel quality track без изменения domain scope.
## 7. Артефакты и структура документов
Для каждого домена создать:
1. `docs/ADDRESS/address_query/domain_<name>_card_v1.md`
2. `docs/ADDRESS/question_sets/domain_<name>_acceptance_<date>.json`
3. `docs/ADDRESS/runs/<run_id>/run_summary.json`
4. `docs/ADDRESS/runs/<run_id>/README.md`
Обновлять после каждого закрытия:
- `runtime_readiness_matrix_v1.md`
- `address_scenario_matrix.md`
- `global_execution_checklist_v1.md`
- `stage_closeout_*.md` (по окончании крупного этапа)
## 8. Метрики контроля по домену
Core metrics:
1. `intent_resolution_rate`
2. `required_filter_resolution_rate`
3. `route_pass_rate`
4. `strict_pass_rate`
5. `factual_non_empty_rate`
6. `partial_with_reason_rate`
7. `execution_error_rate`
8. `false_factual_rate`
Порог включения домена:
- `strict_pass_rate = 100%` на domain-паке;
- `false_factual_rate = 0`;
- `execution_error_rate = 0`.
## 9. Логирование и наблюдаемость (обязательно)
Минимум в debug payload для всех новых доменов:
- `detected_intent`
- `query_shape`
- `extracted_filters`
- `selected_recipe`
- `anchor_type`, `anchor_value_raw`, `anchor_value_resolved`, `resolver_confidence`
- `mcp_call_status`
- `rows_fetched`, `rows_materialized`, `rows_matched`
- `limited_reason_category`
- `llm_decomposition_*`
- `fallback_rule_hit`
Отдельно:
- хранить raw/model trace ID для каждой попытки decomposition;
- не терять связку question -> response -> debug payload в batch-артефактах.
## 10. Риски и как снимаем
1. Drift в follow-up контексте
- Лечение: обязательный follow-up domain-pack + cross-pack regression.
2. Переобучение на текущую базу
- Лечение: запрет на company-specific словари в runtime.
3. Рост partial из-за узких фильтров
- Лечение: controlled fallback только внутри intent, без подмены домена/якоря.
4. Нестабильность local LLM
- Лечение: deterministic fallback + strict validator + trace audit.
## 11. Операционный ритм (итерация)
Одна итерация по домену:
1. Day 1: design + resolver/filter.
2. Day 2: recipe + tests.
3. Day 3: live acceptance + regression + docs update.
Результат итерации:
- либо домен включен в production lane;
- либо остается в `shadow/disabled` с явным backlog-фикс листом.
## 12. Definition of Done для этапа “Domain Expansion V1”
Этап считается закрытым, когда:
1. Закрыт согласованный список новых доменов из раздела 6.
2. Для каждого домена есть полный комплект артефактов (docs + question set + run artifacts).
3. Global baseline-паки не деградируют после каждого включения.
4. `global_execution_checklist_v1.md` отражает актуальный финальный статус.

View File

@ -107,3 +107,23 @@ Acceptance gates:
- Сегодня стартуем с `M0` и `M1` (контракты + классификация/фильтры).
- После этого закрываем `M1.5` (shadow L0 router + регрессия на шумных вопросах).
- И только затем поднимаем `M2` для 2 первых intents (`payables/receivables`).
## Progress Update (2026-04-02)
Статус по subwave:
- `M0`: выполнено.
- `M1`: выполнено.
- `M1.5`: выполнено (LLM-first decompose + deterministic fallback, local provider).
- `M2`: выполнено для текущего production-набора intents.
- `M3`: выполнено для текущего factual/limited contract.
- `M4`: выполнено для текущего acceptance scope.
Подтверждающие финальные артефакты:
- `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json` (`102/102`, strict route pass).
- `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json` (`25/25`, strict route pass).
Дальнейшее движение:
- новый цикл как `Step-4`: domain expansion + nightly regression automation.

View File

@ -1,91 +1,94 @@
# Global Execution Checklist V1
Дата старта: 2026-04-02
Цель: последовательное закрытие V1 без архитектурного дрейфа и без company-specific хардкода.
Последнее обновление: 2026-04-02
Цель: последовательное закрытие Address Query V1 без архитектурного дрейфа и без company-specific хардкода.
## Правило выполнения
- Идем по пунктам сверху вниз.
- Каждый пункт закрываем только после live-прогона и фиксации артефакта в `docs/ADDRESS/runs/...`.
- Критерий качества: `strict_policy=route`, `false_factual_rate=0`, объяснимый debug trace.
- Идем по шагам сверху вниз.
- Каждый шаг закрывается только после live-прогона и фиксации артефакта в `docs/ADDRESS/runs/...`.
- Критерий качества: `strict_policy=route`, `false_factual_rate=0`, explainable debug trace.
## Текущий статус (срез)
## Сводка текущего этапа (закрыто)
- [x] Stabilization regression (slang/noisy input) на полном паке из 102 вопросов.
- [x] Follow-up context hardening (короткие продолжения в сессии) на паке из 25 вопросов.
- [x] Metadata-first якорь договора переведен на live-подтвержденный (`19/15`) вместо synthetic.
- [x] Release gate для текущего набора intents достигнут на live.
## Подтвержденные live-артефакты (финальные для этапа)
1. Полный stress-pack
- Артефакт: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
- Результат: `questions_total=102`, `semantic_pass=102/102`, `route_pass=102/102`, `strict_pass(route)=102/102`
- Reply profile: `factual=97`, `partial=5` (только non-blocking empty match).
2. Follow-up chains pack
- Артефакт: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
- Результат: `questions_total=25`, `semantic_pass=25/25`, `route_pass=25/25`, `strict_pass(route)=25/25`
- Reply profile: `factual=23`, `partial=2` (non-blocking empty match).
## Что было сделано в рамках этапа
1. Hardening noisy-input маршрутизации
- Усилен decompose/fallback слой для шумных формулировок.
- Убраны нестабильные хвосты в датах/периодах (`2020.05`, `year 2020` и т.п.) на этапе фильтров.
2. Hardening follow-up цепочек
- Усилено удержание intent/anchor в коротких репликах вида `а теперь ...`, `по нему ...`, `на ту же дату ...`.
- Расширен stop-word/cleanup слой для служебного мусора в фразах.
3. Якоря договора только metadata-first
- Synthetic anchor заменен на live-подтвержденный `19/15`.
- Цепочки follow-up обновлены на стабильные формулировки дат (`2020`, `2020-12-31`).
4. Наборы вопросов синхронизированы с live-якорями
- Обновлены question sets в `docs/ADDRESS/question_sets/` под `19/15`.
- Закрыт прогон follow-up пакета с новым якорем на `25/25`.
## Что осталось (ближайшие этапы)
### Step-0 (pre-prod rails, обязательный перед массовым expansion)
- [x] Зафиксирован Step-0 план: `step0_preprod_rail_plan_v1.md`.
- [x] Зафиксирован шаблон domain card: `domain_card_template_v1.md`.
- [x] Зафиксирован шаблон domain acceptance набора: `domain_acceptance_question_set_template_v1.md`.
- [x] Зафиксирована спецификация run-пака: `run_pack_spec_v1.md`.
- [x] Добавлен structural validator run-паков: `scripts/validate_address_run_pack.py`.
- [x] Добавлен baseline comparator до/после merge домена: `scripts/compare_address_run_summary.py`.
- [x] Добавлен nightly regression orchestrator на baseline-паках (`102` + `25`): `scripts/run_address_nightly_regression.py` (+ `scripts/run_address_nightly_regression.ps1`).
- [x] Выполнен первый боевой nightly run (green): `docs/ADDRESS/runs/2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15/`.
- [x] Подключено nightly-расписание (Windows Task Scheduler), owner закреплен:
- task: `NDC_ADDRESS_Nightly_Regression`
- owner: `DCTOUCH`
- schedule: `daily 03:30`
- script: `scripts/run_address_nightly_regression.ps1`
- [x] Прогнан референсный домен через полный рельсовый цикл:
- domain pack: `docs/ADDRESS/question_sets/domain_contracts_open_items_acceptance_2026-04-02.json`
- run: `docs/ADDRESS/runs/2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_17-00-22/`
- result: `strict_pass(route)=23/23`
- [x] Повторный nightly после runtime-фиксов (F014/F020) — green:
- run: `docs/ADDRESS/runs/2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00/`
- result: `stress 102/102`, `follow-up 25/25`, validator/comparator PASS
Итог: Step-0 pre-prod rails закрыт, можно переходить к Step-4 в factory-режиме.
### Step-4 (domain expansion)
- [x] `OPEN_ITEMS` стабилизация (as_of, recovery, fallback) + фокус-прогон `7/7`.
Артефакт: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_11-54-08/run_summary.json`
- [x] Полный live regression по `address_slang_stress_full_2026-04-02.json` (102 кейса) выполнен.
Артефакт: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-28-31/run_summary.json`
Результат: `route_pass=79/102 (77.45%)`, `factual=74`, `partial=28`.
- [x] Единый acceptance baseline для релизного gate.
- [x] Дожать follow-up цепочки (контекстные короткие реплики).
- [ ] Domain expansion без деградации текущих intents.
- [ ] CI/nightly automation для обязательного прогона regression-пака.
- [ ] Resolver hardening для более широкого набора anchor-типов (без company-specific словарей).
- [ ] CI/nightly automation полного regression-пака.
## Очередь задач
## Документация (code-sync)
1. Full regression baseline (102 кейса)
- Прогон полного вопросника в live.
- Сохранение `run_summary.json`, `full_live_results.json`, `failures_only.json`.
- Фиксация pass-rate и топ-ошибок.
- Статус: выполнено, нужна итерация hardening до целевого gate.
- [x] Базовые docs синхронизированы с текущим runtime-кодом (`README`, `address_scenario_matrix`, `query_recipes`, `runtime_readiness_matrix`, `address_runtime_contracts`, `runtime_integration_plan`).
2. Follow-up hardening
- Проверка цепей вида: «а теперь ...», «на ту же дату», «по тому же договору».
- Закрытие системных кейсов в tests + live-pack.
3. Resolver hardening (metadata-first)
- Усилить резолв якорей через live-данные, без словарей под конкретную базу.
- Снизить `materialized_but_not_anchor_matched` без ложных factual.
4. Domain expansion
- Расширить покрытие intents по матрице readiness.
- Для каждого нового intent: recipe + tests + live acceptance.
5. Release gate automation
- Закрепить обязательный регресс-порог перед релизом.
- Добавить nightly запуск полного пака и сводный отчет.
## Ближайший шаг
`Step-4`: расширение доменов по матрице readiness без деградации текущего релизного gate (`strict_policy=route`).
## Latest Update (2026-04-02)
- Full live stress rerun: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
- Result: `route_pass=102/102 (100%)`, `strict_pass(route)=102/102`, `semantic_pass=102/102`
- Hardening applied:
- safer document-intent recipe filter fallback (avoid zeroing matched rows when registrator labels are noisy)
- contract anchor cleanup for tails like `year 2020` / trailing separated year
- Acceptance baseline for current 102-case pack: reached.
## Next Step
`Step-3`: follow-up context chains and domain expansion under the same release gate (`strict_policy=route`, no blocked routes).
## Latest Update (Step-3 Follow-up)
- Added follow-up pack: `docs/ADDRESS/question_sets/address_followup_context_chains_2026-04-02.json` (25 cases, session-bound chains).
- Live run #1: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_13-47-Run1/run_summary.json`
- `semantic_pass=18/25`, `route_pass=17/25`.
- Main gaps: intent drift in short follow-up phrases (`a теперь ...`, `по нему`) and noisy counterparty heuristic tokens.
- Hardening implemented:
- decompose-stage follow-up intent adjustment for contract chains and open-items wording;
- balance-family follow-up intent retention for compact account prompts;
- counterparty heuristic stop-words extended (`теперь`, `вернись`, `раскрой`, pronoun anchors).
- regression tests expanded in `addressQueryRuntimeM23.test.ts`.
- Live run #2 after fixes: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_13-47-Run2/run_summary.json`
- `semantic_pass=25/25`, `route_pass=22/25`.
- Remaining 3 fails were tied to synthetic contract anchor in `open_items` (`materialized_but_not_anchor_matched`).
## Immediate Next
- Replace synthetic contract chain anchor with metadata-proven live contract anchor(s) and rerun follow-up pack to target `route_pass=25/25`.
## Latest Update (Step-3 Closeout)
- Metadata-proven live anchor selected from 1С directory: `19/15` (validated against `Справочник.ДоговорыКонтрагентов`).
- Follow-up contract chain updated to stable phrasing (`2020` / `2020-12-31`) and rerun in live.
- Live run #5: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
- `semantic_pass=25/25`, `route_pass=25/25`, `strict_pass(route)=25/25`.
- Step-3 (follow-up hardening) is considered closed under current release gate.
## План Step-4 (коротко)
1. Добавить новые intents из матрицы readiness (по одному домену за итерацию).
2. Для каждого intent: recipe + unit/integration tests + live acceptance run.
3. После каждого добавления прогонять оба gate-пака:
- `address_slang_stress_full_2026-04-02.json`
- `address_followup_context_chains_2026-04-02.json`
4. Release-критерий итерации: не ниже текущего `strict_pass(route)=100%` на обоих паках.

View File

@ -1,116 +1,107 @@
# Query Recipes V1 (Address Query)
Дата: 2026-03-29
Контур: Stage 4, отдельная ветка `question_mode=address_query`
Дата: 2026-04-02
Контур: `question_mode=address_query` (live-first, whitelist only)
## 1) Safe Access Contract
Цепочка должна быть строго управляемой:
Каноническая цепочка исполнения:
`intent -> filters -> recipe -> MCP -> factual result`
`intent -> filters -> recipe -> MCP -> materialization -> factual/limited`
Ограничения:
- LLM не генерирует произвольный SQL/1C-запрос.
- LLM выбирает только `recipe_id` из каталога и заполняет параметры.
- Любой нераспознанный или рискованный случай возвращается как `LIMITED_WITH_REASON` или уходит в deep-analysis.
- LLM не генерирует свободные SQL/1C-запросы.
- Runtime выбирает только `recipe_id` из статического каталога.
- Если фильтры/якоря невалидны или не подтверждены, возвращается `LIMITED_WITH_REASON`.
## 2) Entity Catalog (P0 for address-query)
## 2) Entity Families (runtime focus)
Базовые семейства для V1:
- `ACCOUNTING_REGISTER` (`РегистрБухгалтерии.Хозрасчетный`)
- `DOCUMENT` (`СписаниеСРасчетногоСчета`, `ПоступлениеНаРасчетныйСчет`, документные строки)
- `DOCUMENT_JOURNAL`
- `NSI_CATALOG` (договоры, контрагенты)
- `CHART_OF_ACCOUNTS`
- `ACCOUNTING_REGISTER` (`AccountingRegister_Хозрасчетный*`)
- `DOCUMENT` (`СписаниеСРасчетногоСчета`, `ПоступлениеНаРасчетныйСчет`, `АктСверкиВзаиморасчетов`, документные линии)
- `DOCUMENT_JOURNAL` (`ДокументыПоставщиков`, `ДокументыПокупателей`, `БанковскиеВыписки`)
- `NSI_CATALOG` (`ДоговорыКонтрагентов`, плюс фильтровые справочники)
- `CHART_OF_ACCOUNTS` (`Хозрасчетный`)
## 3) Filter Catalog (runtime)
## 3) Filter Catalog
| filter | type | required_when | notes |
| filter | type | required_when (runtime) | notes |
|---|---|---|---|
| `period_from` | date (`YYYY-MM-DD`) | turnover/list-by-period intents | начало периода |
| `period_to` | date (`YYYY-MM-DD`) | turnover/list-by-period intents | конец периода |
| `as_of_date` | date (`YYYY-MM-DD`) | balance/open-items intents | срез на дату |
| `organization` | string/guid | optional | если не задано, берется default company scope |
| `counterparty` | string/guid | required for by-counterparty intents | допускается name->id resolver |
| `contract` | string/guid | required for by-contract intents | допускается number/name->id resolver |
| `account` | string (`60`, `62.01`, ...) | required for account intents | только validated account tokens |
| `document_type` | enum/string | required for list-by-type | белый список типов |
| `document_ref` | guid/string | required for document drilldown | точечный lookup |
| `status` | enum (`open`, `closed`, `all`) | optional | для open/closed срезов |
| `limit` | int (1..200) | optional | default 50 |
| `sort` | enum (`date_desc`, `amount_desc`, `name_asc`) | optional | default recipe-specific |
| `period_from` | date (`YYYY-MM-DD`) | периодные выборки | начало окна |
| `period_to` | date (`YYYY-MM-DD`) | периодные выборки | конец окна |
| `as_of_date` | date (`YYYY-MM-DD`) | balance/drilldown/open-items | для account intents defaulted если не задан |
| `organization` | string | optional | passthrough-filter |
| `counterparty` | string | by-counterparty intents | допускается heuristic extraction |
| `contract` | string | by-contract intents | допускается heuristic extraction |
| `account` | string (`60`, `62.01`, ...) | account intents | strict token normalization |
| `document_type` | string | optional (пока ограниченно используется) | runtime V1 не строит отдельный by-type intent |
| `document_ref` | string | optional | point lookup |
| `status` | string | optional | reserved |
| `limit` | int | optional | extractor default: `20` |
| `sort` | enum | optional | `period_desc` / `period_asc` |
## 4) Query Recipe Catalog V1
## 4) Runtime Recipe Catalog (actual)
| recipe_id | purpose | required_params | optional_params | expected_output_schema | sort/limit rules | drilldown_targets |
| recipe_id | intent | purpose | required_filters | optional_filters | query_template | account_scope_mode |
|---|---|---|---|---|---|---|
| `address.open_contracts.by_asof` | Незакрытые договоры на дату | `as_of_date` | `organization`, `counterparty`, `limit`, `sort` | `contract_ref`, `contract_name`, `counterparty_ref`, `debit`, `credit`, `saldo`, `as_of_date` | default `saldo_desc`, `limit=50` | `address.open_items.by_contract` |
| `address.payables.counterparty_totals` | Кому должны мы | `as_of_date` | `organization`, `account`, `limit` | `counterparty_ref`, `counterparty_name`, `payable_amount`, `doc_count`, `as_of_date` | default `payable_amount_desc`, `limit=50` | `address.open_items.by_counterparty` |
| `address.receivables.counterparty_totals` | Кто должен нам | `as_of_date` | `organization`, `account`, `limit` | `counterparty_ref`, `counterparty_name`, `receivable_amount`, `doc_count`, `as_of_date` | default `receivable_amount_desc`, `limit=50` | `address.open_items.by_counterparty` |
| `address.account.balance_snapshot` | Остаток по счету на дату | `account`, `as_of_date` | `organization`, `limit` | `account`, `debit_balance`, `credit_balance`, `net_balance`, `as_of_date` | default `account_asc`, `limit=20` | `address.balance.drilldown_documents` |
| `address.open_items.by_counterparty` | Открытые позиции по контрагенту | `counterparty`, `as_of_date` | `organization`, `contract`, `account`, `limit` | `document_ref`, `document_type`, `document_date`, `contract_ref`, `debit`, `credit`, `open_amount` | default `document_date_desc`, `limit=100` | `address.documents.by_contract` |
| `address.open_items.by_contract` | Открытые позиции по договору | `contract`, `as_of_date` | `organization`, `counterparty`, `account`, `limit` | `document_ref`, `document_type`, `document_date`, `counterparty_ref`, `debit`, `credit`, `open_amount` | default `document_date_desc`, `limit=100` | `address.documents.by_contract` |
| `address.documents.by_counterparty` | Документы контрагента за период | `counterparty`, `period_from`, `period_to` | `organization`, `document_type`, `limit`, `sort` | `document_ref`, `document_type`, `number`, `date`, `amount`, `posted` | default `date_desc`, `limit=100` | `address.documents.by_contract` |
| `address.bank_ops.by_counterparty` | Банковские операции по контрагенту | `counterparty` | `period_from`, `period_to`, `organization`, `limit`, `sort` | `document_ref`, `document_type`, `number`, `date`, `amount`, `posted`, `bank_account_hint` | default `date_desc`, `limit=100` | `address.documents.by_counterparty` |
| `address.documents.by_contract` | Документы договора за период | `contract`, `period_from`, `period_to` | `organization`, `document_type`, `limit`, `sort` | `document_ref`, `document_type`, `number`, `date`, `amount`, `posted` | default `date_desc`, `limit=100` | `address.balance.drilldown_documents` |
| `address.balance.drilldown_documents` | Расшифровка остатка до документов | `account`, `as_of_date` | `organization`, `counterparty`, `contract`, `limit` | `document_ref`, `document_type`, `number`, `date`, `debit`, `credit`, `delta` | default `date_desc`, `limit=150` | `address.documents.by_counterparty` |
| `address_movements_payables_v1` | `list_payables_counterparties` | movement-срез по обязательствам | - | `as_of_date`, `counterparty`, `contract`, `limit` | `movements` | `preferred` |
| `address_movements_receivables_v1` | `list_receivables_counterparties` | movement-срез по требованиям | - | `as_of_date`, `counterparty`, `contract`, `limit` | `movements` | `preferred` |
| `address_open_contracts_candidates_v1` | `list_open_contracts` | кандидаты незакрытых договоров | - | `as_of_date`, `organization`, `limit` | `movements` | `preferred` |
| `address_open_items_by_party_or_contract_v1` | `open_items_by_counterparty_or_contract` | открытые позиции по party/contract | - (`service guard`: нужен `counterparty OR contract`) | `as_of_date`, `counterparty`, `contract`, `limit` | `movements` | `preferred` |
| `address_documents_by_counterparty_v1` | `list_documents_by_counterparty` | документы по контрагенту | `counterparty` | `period_from`, `period_to`, `as_of_date`, `organization`, `limit`, `sort` | `bank_docs` | `preferred` |
| `address_bank_operations_by_counterparty_v1` | `bank_operations_by_counterparty` | банковские операции по контрагенту | `counterparty` | `period_from`, `period_to`, `as_of_date`, `organization`, `limit`, `sort` | `bank_docs` | `preferred` |
| `address_documents_by_contract_v1` | `list_documents_by_contract` | документы по договору | `contract` | `period_from`, `period_to`, `as_of_date`, `organization`, `counterparty`, `limit`, `sort` | `movements` | `preferred` |
| `address_bank_operations_by_contract_v1` | `bank_operations_by_contract` | банковские операции по договору | `contract` | `period_from`, `period_to`, `as_of_date`, `organization`, `counterparty`, `limit`, `sort` | `movements` | `preferred` |
| `address_documents_forming_balance_v1` | `documents_forming_balance` | drilldown документов, формирующих остаток | `account`, `as_of_date` | `organization`, `counterparty`, `contract`, `period_from`, `period_to`, `limit`, `sort` | `movements` | `strict` |
| `address_movements_account_snapshot_v1` | `account_balance_snapshot` | snapshot движений по счету | `account` (`as_of_date` defaulted in extractor) | `as_of_date`, `period_from`, `period_to`, `limit` | `movements` | `strict` |
## 5) Result Schema (Unified)
## 5) Limit and Scope Policy (actual)
```json
{
"question_mode": "address_query",
"intent": "list_payables_counterparties",
"recipe_id": "address.payables.counterparty_totals",
"filters": {
"as_of_date": "2026-03-29",
"organization": "<optional>",
"limit": 50
},
"result_mode": "FACTUAL_SUMMARY",
"summary": {
"rows": 12,
"total_amount": 1543200.50,
"currency": "RUB"
},
"rows": [
{
"counterparty_name": "ООО Альфа",
"payable_amount": 450000.00,
"doc_count": 7
}
],
"limitations": []
}
```
- Базовый max limit: `200`.
- Расширенный max limit (`1000`) для:
- `documents/bank by counterparty|contract`;
- `open_items_by_counterparty_or_contract`;
- `list_open_contracts`.
- Для all-time запросов `documents/bank by *` runtime поднимает limit до max.
- Для account intents при явном `account` limit поднимается до `200`.
## 6) Answer Contract
## 6) Stage Status Taxonomy (runtime)
- `FACTUAL_LIST`: короткий вывод + список строк + totals.
- `FACTUAL_SUMMARY`: агрегат + top строки + предложение уточнить фильтр при большом объеме.
- `LIMITED_WITH_REASON`: честная причина ограничения (`missing_required_filters`, `live_unavailable`, `no_matches_for_filters`, `unsupported_for_address_query_v1`).
- `skipped`
- `error`
- `no_raw_rows`
- `raw_rows_received_but_not_materialized`
- `materialized_but_not_anchor_matched`
- `materialized_but_filtered_out_by_recipe`
- `matched_non_empty`
## 7) MCP Execution Notes
Legacy совместимость:
- Runtime вызывает MCP proxy (`/api/execute_query`) только с query-template из recipe и параметрами после валидации.
- Для V1 все recipe выполняются в `read-only` режиме.
- Ограничения на выборку (`limit`) и сортировки фиксируются recipe-контрактом, а не свободным текстом вопроса.
## 8) Account Scope Strategy (M2.3c)
- `mcp_call_status_legacy=materialized_but_not_matched` для двух split-статусов materialized-*.
- `account_balance_snapshot` and `documents_forming_balance` use `strict` account scope.
- counterparty-oriented recipes use `preferred` account scope with runtime fallback to raw rows when scope gives zero rows.
- this keeps account-intent precision while preventing blind row loss on party intents.
## 7) Runtime Fallback Behaviors (actual)
## 9) Runtime Query Template Notes (M2.3c)
- При `list_documents_by_contract` и пустом документном отборе, но с anchor rows:
- fallback на банковские строки по договору или на anchor rows.
- Для `documents/bank by *` при пустом заданном периоде:
- auto-broaden периода до доступных данных (`period_window_auto_broadened_to_available_data`).
- Для `documents/bank by *` при anchor mismatch:
- factual fallback на ближайшие строки (`anchor_not_matched_fallback_rows`) вместо silent empty.
- `address.documents.by_counterparty` and `address.bank_ops.by_counterparty` use a dedicated `bank_docs` live query template.
- account intents (`address.account.balance_snapshot`, `address.balance.drilldown_documents`) continue using movement-oriented query template with strict account scope.
- stage diagnostics are tracked with split statuses:
- `raw_rows_received_but_not_materialized`
- `materialized_but_not_anchor_matched`
- `materialized_but_filtered_out_by_recipe`
- `matched_non_empty`
- for backward compatibility analytics, legacy status is emitted as `mcp_call_status_legacy`.
## 8) Result Modes
- `FACTUAL_LIST`
- `FACTUAL_SUMMARY`
- `LIMITED_WITH_REASON`
Фактическая реализация `composeStage` сейчас отдает:
- `FACTUAL_SUMMARY` в основном для `account_balance_snapshot`;
- для остальных factual intents — `FACTUAL_LIST`.
## 9) Guardrails
- whitelist recipes only
- read-only MCP
- no free-form query generation
- no silent source substitution

View File

@ -0,0 +1,131 @@
# Run Pack Spec V1
Дата: 2026-04-02
Назначение: единый структурный контракт для run-артефактов Address Query.
## 1. Обязательная структура папки
Путь:
- `docs/ADDRESS/runs/<run_id>/`
Обязательные файлы:
1. `run_summary.json`
2. `full_live_results.json`
3. `failures_only.json`
4. `README.md`
Отсутствие любого из файлов = run-pack невалиден для gate.
## 2. Минимальные поля run_summary.json
### 2.1 Top-level
1. `run_id`
2. `generated_at` (или `date` для legacy)
3. `source_questions_file`
4. `strict_policy`
5. `totals` (object)
### 2.2 `totals`
1. `questions_total`
2. `semantic_pass_count`
3. `route_pass_count`
4. `strict_pass_count`
5. `factual_count`
6. `partial_coverage_count`
7. `http_error_count`
Рекомендуется (если есть):
1. `route_pass_rate`
2. `strict_pass_rate`
3. `execution_error_count`
4. `false_factual_count`
5. `false_factual_rate`
## 3. Минимальные поля full_live_results.json
Top-level:
1. `run_id`
2. `rows` (array)
Для каждой строки `rows`:
1. `id` (или `case_id`)
2. `question`
3. `reply_type` (или `assistant_reply_type`)
4. `actual_intent` (или `detected_intent`)
5. `selected_recipe`
6. `route_pass`
7. `strict_pass`
8. `mcp_call_status` (или `execution_status`)
9. `limited_reason_category` (если partial/limited)
10. `debug_payload`
## 4. Минимальные поля failures_only.json
Файл должен быть JSON array.
Рекомендуемые поля элемента:
1. `id` (или `case_id`)
2. `question`
3. `failure_type`
4. `expected`
5. `actual`
6. `diagnostic_summary`
7. `recommended_fix_owner`
## 5. README.md run-пака должен содержать
1. цель прогона
2. используемый question set
3. команду запуска
4. итоговые метрики
5. список известных отклонений (если есть)
6. решение: `promote | fix_required`
## 6. Gate Rules
Domain gate:
1. `strict_pass(route)=100%`
2. `false_factual_rate=0`
3. `execution_error_rate=0`
Global gate:
1. baseline stress не ниже эталона
2. baseline follow-up не ниже эталона
3. нет роста `execution_error_count`
## 7. Автоматические проверки
Structural validator:
- `python scripts/validate_address_run_pack.py docs/ADDRESS/runs/<run_id>`
Baseline comparator:
- `python scripts/compare_address_run_summary.py --baseline-summary <baseline_run_summary.json> --candidate-summary <candidate_run_summary.json>`
Nightly regression orchestrator:
- `python scripts/run_address_nightly_regression.py`
Windows wrapper:
- `powershell -ExecutionPolicy Bypass -File .\scripts\run_address_nightly_regression.ps1`
## 8. Сопровождающие обновления docs
После успешного run-пака обновляются:
1. `runtime_readiness_matrix_v1.md`
2. `address_scenario_matrix.md`
3. `global_execution_checklist_v1.md`
4. `stage_closeout_*.md` (для крупных этапов)

View File

@ -1,232 +1,112 @@
# Runtime Integration Plan (question_mode=address_query)
Дата: 2026-03-29
Дата среза: 2026-04-02
## 1) Цель
Поддерживать отдельный runtime-контур для быстрых address-запросов через MCP,
без деградации deep-analysis path.
## 1) Цель интеграции
Добавить отдельный runtime-контур для быстрых адресных запросов к 1С через MCP, не ломая существующий Stage 4 deep-analysis path.
## 2) As-Is (подтверждено кодом)
Текущий assistant pipeline:
1. normalizer -> route summary
2. execution plan по deep-routes
3. `assistantDataLayer.executeRouteRuntime(...)`
4. admissibility / eligibility guards
5. answer composer
Ключевые точки в текущем коде:
- `llm_normalizer/backend/src/services/assistantService.ts`
- `llm_normalizer/backend/src/services/routeHintAdapter.ts`
- `llm_normalizer/backend/src/services/assistantDataLayer.ts`
- `llm_normalizer/backend/src/services/assistantRuntimeGuards.ts`
- `llm_normalizer/backend/src/services/answerComposer.ts`
## 2.1) Architecture Reference (mandatory)
Перед любыми изменениями address lane сверяться с:
- `address_architecture_contract_v1.md`
Ключевая рамка:
- `Decompose -> Resolve -> Execute -> Compose`
- runtime не хранит company-specific словари
- company entities подтверждаются только через live resolver/MCP
## 3) To-Be: Separate Address Lane
Новый high-level flow:
1. Входящий вопрос.
2. L0 hybrid router: LLM decompose + deterministic fallback.
3. Mode-classifier: `address_query` | `deep_analysis` | `unsupported`.
4. Если `address_query`:
- resolve `address_intent`;
- extract+validate filters;
- select recipe;
- execute MCP (live-first);
- normalize result schema;
- return factual answer.
5. Если не `address_query`: текущий deep path без изменений.
## 3.1) L0 Hybrid Router (stabilization layer)
Назначение: убрать хрупкость на шумном пользовательском вводе (опечатки, сленг, лишние слова), не раздувая словари.
Порядок работы:
1. Сначала запускаем LLM decompose в строгий JSON-контракт.
2. Если LLM дал пустой/невалидный/неиспользуемый фрагмент, включается короткий deterministic fallback:
- триггеры по корням/подстрокам (не giant словарь словоформ);
- парсинг дат/периодов/счетов;
- шумоочистка (служебные слова, междометия, мусорные хвосты).
3. Если и fallback не дал валидный результат, возвращаем `LIMITED_WITH_REASON`, без выдумывания фактов.
Ограничения:
- без company-specific словарей в runtime;
- без генерации SQL/1C-query в свободной форме;
- только интерпретация вопроса + передача в whitelist recipes.
## 4) Встраивание по слоям
### 4.1 Normalizer / Routing Layer
Изменения:
- добавить `question_mode` и `address_intent` в normalizer contract;
- добавить L0 router contract (decompose output + fallback reason);
- в `routeHintAdapter` добавить address-query rule set до deep route discipline.
Рекомендуемые файлы:
- `llm_normalizer/backend/src/types/normalizer.ts`
- `llm_normalizer/backend/src/services/routeHintAdapter.ts`
### 4.2 Assistant Service Orchestration
Изменения:
- в `AssistantService.processMessage(...)` добавить раннюю развилку по `question_mode`;
- для `address_query` запускать отдельный pipeline (без claim-bound deep-chain).
Рекомендуемый новый сервис:
- `llm_normalizer/backend/src/services/addressQueryService.ts`
### 4.3 Intent + Filter Extraction
Новые компоненты:
- `addressIntentResolver.ts`
- `addressFilterExtractor.ts`
- `addressFilterValidator.ts`
Выход контракта:
- `detected_mode`
- `detected_intent`
- `required_filters`
- `resolved_filters`
- `missing_filters`
### 4.4 Recipe Selection + MCP Execution
Новые компоненты:
- `addressRecipeCatalog.ts` (статический whitelist recipes)
- `addressRecipeSelector.ts`
- `addressMcpExecutor.ts`
Правила:
- только whitelist `recipe_id`;
- live-first; snapshot только explicit fallback;
- hard limit на строки и fixed sorting profile.
### 4.5 Result Materialization + Answer Composer
Новые компоненты:
- `addressResultMaterializer.ts`
- `addressAnswerComposer.ts`
Режимы ответа:
- `FACTUAL_LIST`
- `FACTUAL_SUMMARY`
- `LIMITED_WITH_REASON`
### 4.6 Debug/Trace Contract
Минимальный debug блок для address lane:
- `detected_mode`
- `detected_intent`
- `extracted_filters`
- `selected_recipe`
- `mcp_call_status`
- `rows_fetched`
- `rows_matched`
- `response_type`
- `llm_decomposition_attempted`
- `llm_decomposition_applied`
- `llm_decomposition_reason`
- `fallback_rule_hit`
- `sanitized_user_message`
## 5) Fallback Rules
- Если mode=`address_query`, но `missing_required_filters` -> `LIMITED_WITH_REASON` (без silent fallback в deep).
- Если mode=`address_query`, но `intent` не поддержан -> `LIMITED_WITH_REASON` или controlled handoff в deep-path с явной пометкой.
- Если live недоступен -> `LIMITED_WITH_REASON: live_unavailable`.
## 5.1) Compound factual scope (M2.1 real status)
- `COMPOUND_FACTUAL_QUERY` is currently **detection-only**.
- Runtime does **not** execute multi-intent decomposition yet.
- Current behavior for compound prompts:
- one selected intent;
- one selected recipe;
- one factual/limited output block.
- Multi-step decomposition (`subquery planning -> per-subquery execution -> stitched composer`) is planned for V1.1.
## 6) Safety Guardrails
- Никакого free-form query generation от LLM.
- Query только через recipe whitelist.
- Все параметры проходят типовую и value-валидацию.
- Account anchors — только validated account tokens (исключая date/amount pollution).
- Read-only MCP profile для address lane.
## 7) Minimal Implementation Queue
1. `M0`: контракты (`question_mode`, `address_intent`, filter schema, recipe schema).
2. `M1`: classifier + resolver + validator (без MCP execution).
3. `M1.5`: L0 hybrid router (LLM-first + deterministic fallback) в shadow mode.
4. `M2`: MCP executor + 5 P0 recipe.
5. `M3`: factual composer + debug payload + basic tests.
6. `M4`: live rerun pack в `docs/ADDRESS/runs/...`.
## 7.2) L0 rollout policy
1. `Shadow`: LLM decompose не влияет на ответ, только trace/audit.
2. `Soft-enable`: LLM decompose влияет на routing только для P0 intents.
3. `Full-enable`: LLM decompose + fallback включены для всего `address_query`.
Правило безопасности:
- любой сбой LLM должен откатываться в deterministic fallback, а не в random behavior.
## 7.1) Sprint B priority order (adapted to current reality)
1. `documents_by_counterparty`
2. `bank_operations_by_counterparty`
3. `documents_forming_balance`
4. `documents_by_contract`
5. `bank_operations_by_contract`
Rationale:
- start from anchors with higher resolver stability (counterparty first);
- unlock early positive evidence before contract-heavy variants;
- keep contract scenarios behind anchor-resolution hardening.
## 8) Out of Scope for V1
- Новый proof engine.
- Расширение доменов beyond P0 address intents.
- Полный redesign deep-stage routing.
- Автоматический свободный доступ к произвольным сущностям 1С.
## 9) Expected Acceptance (V1)
- Deep-analysis path не деградировал.
- Address intents из P0 стабильно маршрутизируются в MCP/live-first lane.
- Factual-ответы по P0 сценариям возвращаются в предсказуемом формате.
- `false_factual_rate = 0`.
- Нет silent-degradation: при провале LLM есть explainable fallback reason.
- На шумном вводе нет ложного сдвига anchor (`counterparty`, `account`, `period`).
## 2) Фактический статус интеграции
Address lane уже встроен в `AssistantService` и включен feature-флагами по умолчанию:
- `FEATURE_ASSISTANT_ADDRESS_QUERY_V1=true`
- `FEATURE_ASSISTANT_ADDRESS_QUERY_LLM_PREDECOMPOSE_V1=true`
- `FEATURE_ASSISTANT_ADDRESS_QUERY_LIVE_V1=true`
Ключевая оркестрация:
- `assistantService.ts`:
- L0 pre-decompose (LLM + deterministic fallback)
- tool-gate решение (`run_address_lane` / `skip_address_lane`)
- follow-up carryover context (сигнал берется из raw user message и pre-decompose effective message)
- вызов `addressQueryService.tryHandle(...)`
## 3) Canonical Runtime Flow (actual)
1. User message.
2. L0 layer:
- message sanitization/cleanup;
- optional LLM pre-decompose (`normalizer_v2_0_2`);
- deterministic fallback rules;
- tool-gate decision.
3. `addressQueryService`:
- `decomposeStage` (mode/shape/intent/filters + follow-up merge)
- `resolveStage` (primary anchor + refinement from rows)
- `execute` (recipe select -> MCP query -> materialization/scope/filter)
- `compose` (FACTUAL_* или LIMITED_WITH_REASON)
4. Unified debug payload в `AssistantService`.
5. Если lane не обработал запрос - возврат в основной deep path.
## 4) Реализованные компоненты
- `src/services/address_runtime/decomposeStage.ts`
- `src/services/address_runtime/resolveStage.ts`
- `src/services/address_runtime/composeStage.ts`
- `src/services/addressIntentResolver.ts`
- `src/services/addressFilterExtractor.ts`
- `src/services/addressRecipeCatalog.ts`
- `src/services/addressMcpClient.ts`
- `src/services/addressQueryService.ts`
## 5) Intent Coverage (runtime)
Реализовано:
- `list_open_contracts`
- `list_payables_counterparties`
- `list_receivables_counterparties`
- `account_balance_snapshot`
- `open_items_by_counterparty_or_contract`
- `list_documents_by_counterparty`
- `bank_operations_by_counterparty`
- `list_documents_by_contract`
- `bank_operations_by_contract`
- `documents_forming_balance`
Не реализовано (V1):
- `account_turnover_snapshot`
- `list_documents_by_type`
## 6) Execution and Debug Guarantees
- whitelist recipes only
- read-only MCP
- no free-form query generation
- explicit stage statuses:
- `no_raw_rows`
- `raw_rows_received_but_not_materialized`
- `materialized_but_not_anchor_matched`
- `materialized_but_filtered_out_by_recipe`
- `matched_non_empty`
- legacy compatibility field:
- `mcp_call_status_legacy`
## 7) Runtime Fallbacks (actual)
- Missing required filters -> `LIMITED_WITH_REASON` (`missing_anchor`)
- Recipe missing -> `LIMITED_WITH_REASON` (`recipe_visibility_gap`)
- MCP error / lane disabled -> `LIMITED_WITH_REASON` (`execution_error`)
- Period auto-broaden for by-counterparty/by-contract docs+bank intents
- Anchor mismatch fallback для document/bank intents
- Contract-docs recovery path через bank-like rows
## 8) Compound Scope
- `COMPOUND_FACTUAL_QUERY` сейчас detection-only.
- Multi-intent decomposition execution не выполняется в runtime V1.
## 9) Known Gaps for Step-4
- введены шаблоны (`domain_card_template_v1.md`, `domain_acceptance_question_set_template_v1.md`), но domain-specific cards/sets для новых доменов еще не заведены;
- P1 intents (`turnover`, `documents_by_type`) в runtime отсутствуют;
- CI pipeline интеграция nightly еще не подключена (локальный nightly через Task Scheduler уже работает).
## 10) Acceptance Baseline (must keep)
- stress pack: `102/102` (run `2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27`)
- follow-up pack: `25/25` (run `2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5`)
- `strict_policy=route`
- `false_factual_rate=0`

View File

@ -1,35 +1,41 @@
# Runtime Readiness Matrix V1 (M2.3c)
# Runtime Readiness Matrix V1 (Code Sync)
Дата: 2026-03-29
Дата: 2026-04-02
Формат: `scenario -> structural_readiness -> runtime_readiness -> blocker`
## Статусы
- `STRUCTURALLY_VISIBLE` - сущность подтверждена в snapshot/inventory.
- `LIVE_QUERYABLE` - в текущем live path можно давать factual ответ стабильно.
- `LIVE_QUERYABLE_WITH_LIMITS` - live path работает, но результат зависит от anchor/period precision.
- `REQUIRES_SPECIALIZED_RECIPE` - базовый recipe-контур не покрывает сценарий.
- `DEEP_ONLY` - сценарий не относится к address V1.
- `STRUCTURALLY_VISIBLE` - сущность подтверждена в inventory/snapshot.
- `LIVE_QUERYABLE` - stable factual path без ограничений (пока практически не используется).
- `LIVE_QUERYABLE_WITH_LIMITS` - live path работает, но результат зависит от anchor/period precision и fallback-веток.
- `REQUIRES_SPECIALIZED_RECIPE` - нужен отдельный recipe/исполнительный путь.
- `DEEP_ONLY` - сценарий вне address V1.
- `UNKNOWN` - runtime статус не зафиксирован.
## Матрица (P0/P1)
## Матрица (по текущему коду + актуальным run-пакам)
| scenario_id | scenario | structural_readiness | runtime_readiness | current_blocker | next_action |
|---|---|---|---|---|---|
| AQ-P0-01 | list_open_contracts | STRUCTURALLY_VISIBLE | REQUIRES_SPECIALIZED_RECIPE | weak contract anchors in current live rows | add contract-aware document recipe + resolver confidence gate |
| AQ-P0-02 | list_payables_counterparties | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | broad prompts still produce sparse matches | keep curated positive suite and tighten period hints |
| AQ-P0-03 | list_receivables_counterparties | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | broad prompts still produce sparse matches | keep curated positive suite and tighten period hints |
| AQ-P0-04 | account_balance_snapshot | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | `raw_rows_received > 0`, but account scope drops rows before materialization | account token/shape audit and account field mapping fix |
| AQ-P0-05 | open_items_by_counterparty_or_contract (counterparty) | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | requires explicit counterparty anchor for stable non-empty | anchor refinement and resolver ambiguity handling |
| AQ-P0-06 | open_items_by_counterparty_or_contract (contract) | STRUCTURALLY_VISIBLE | REQUIRES_SPECIALIZED_RECIPE | movement rows often miss contract linkage | two-step path: contract resolver -> focused recipe |
| AQ-P0-07 | documents_by_counterparty | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | positive cases confirmed, but narrow/broad anchor variants still fragile | continue resolver/filter tuning and parity checks |
| AQ-P0-07B | bank_operations_by_counterparty | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | positive cases confirmed, but narrow/broad anchor variants still fragile | continue resolver/filter tuning and bank-doc visibility checks |
| AQ-P0-08 | documents_by_contract | STRUCTURALLY_VISIBLE | REQUIRES_SPECIALIZED_RECIPE | by-contract live recipe not implemented in runtime V1 | implement contract resolver + focused recipe |
| AQ-P0-09 | documents_forming_balance | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | implemented, but account-family still blocked before materialization | account scope/materialization diagnostics and account token normalization |
| AQ-P1-10 | account_turnover_snapshot | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | not in current intent set | extend intents in V1.1 |
| AQ-P0-01 | list_open_contracts | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | contract candidates зависят от качества movement materialization | усилить contract resolver confidence и стабилизировать non-empty профили |
| AQ-P0-02 | list_payables_counterparties | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | broad prompts могут давать sparse/empty | держать curated positive + периодные подсказки |
| AQ-P0-03 | list_receivables_counterparties | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | broad prompts могут давать sparse/empty | держать curated positive + периодные подсказки |
| AQ-P0-04 | account_balance_snapshot | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | часть кейсов упирается в account-scope/materialization | продолжить account token/shape audit |
| AQ-P0-05 | open_items_by_counterparty_or_contract | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | обязателен anchor (`counterparty OR contract`) | донастройка anchor extraction и ambiguity handling |
| AQ-P0-06 | list_documents_by_counterparty | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | возможны anchor mismatches и period misses | поддерживать auto-broaden + anchor fallback аудит |
| AQ-P0-07 | bank_operations_by_counterparty | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | возможны anchor mismatches и period misses | поддерживать auto-broaden + anchor fallback аудит |
| AQ-P0-08 | list_documents_by_contract | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | document-filter может обнулять rows по узкому окну | contract docs fallback + resolver hardening |
| AQ-P0-08B | bank_operations_by_contract | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | устойчивость зависит от contract anchor качества | усилить contract normalization и follow-up carryover |
| AQ-P0-09 | documents_forming_balance | STRUCTURALLY_VISIBLE | LIVE_QUERYABLE_WITH_LIMITS | account-family чувствителен к row-shape/materialization | продолжить materialization diagnostics |
| 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 Note (M2.3c)
## Sync Notes (2026-04-02)
- `documents_by_counterparty` and `bank_operations_by_counterparty` now have curated `matched_non_empty` cases.
- `account_balance_snapshot` and `documents_forming_balance` remain limited because rows are dropped before materialization.
- `COMPOUND_FACTUAL_QUERY` is detection-only and does not execute multi-intent decomposition yet.
- В runtime реализованы by-contract intents:
- `list_documents_by_contract`
- `bank_operations_by_contract`
- `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`
- follow-up `25/25`: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`

View File

@ -0,0 +1,103 @@
# Address Query V1 — Stage Closeout (2026-04-02)
Дата среза: 2026-04-02
Контур: `address_query` (live-first через MCP)
LLM: local (`qwen2.5-14b-instruct-1m`, LM Studio)
## 1. Цель закрываемого этапа
Закрыть стабильность текущего V1-контура до расширения доменов:
- маршрутизация и интенты на шумном/сленговом вводе;
- follow-up цепочки в пределах одной сессии (`а теперь...`, `по нему...`, `на ту же дату...`);
- отсутствие company-specific хардкода в runtime;
- release gate по `strict_policy=route`.
## 2. Что закрыто фактически
1. Full slang stress regression
- Набор: `docs/ADDRESS/question_sets/address_slang_stress_full_2026-04-02.json`
- Финальный прогон: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
- Итог: `102/102` по `semantic_pass`, `route_pass`, `strict_pass(route)`.
2. Follow-up context chains
- Набор: `docs/ADDRESS/question_sets/address_followup_context_chains_2026-04-02.json`
- Финальный прогон: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
- Итог: `25/25` по `semantic_pass`, `route_pass`, `strict_pass(route)`.
3. Resolver/anchor стабилизация
- Убран synthetic якорь договора в ключевых цепочках.
- Рабочий якорь переведен на live-подтвержденный: `19/15`.
4. Gate-профиль зафиксирован
- `strict_policy=route` применяется как обязательный критерий этапа.
- `partial_coverage` учитывается как non-blocking только при корректной маршрутизации и явной причине (`empty_match`).
## 3. Подробные метрики (финальные артефакты)
### 3.1 Stress pack 102
Артефакт: `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
- `questions_total=102`
- `ok_200=102`
- `semantic_pass=102/102`
- `route_pass=102/102`
- `strict_pass(route)=102/102`
- `factual=97`
- `partial_coverage=5`
- `llm_decomposition_applied=77`
- `avg_elapsed_ms=5922.3`
### 3.2 Follow-up pack 25
Артефакт: `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
- `questions_total=25`
- `ok_200=25`
- `semantic_pass=25/25`
- `route_pass=25/25`
- `strict_pass(route)=25/25`
- `factual=23`
- `partial_coverage=2`
- `llm_decomposition_applied=13`
- `avg_elapsed_ms=4896.8`
## 4. Какие изменения закреплены в базе документов/наборов
1. Чеклист этапа обновлен
- `docs/ADDRESS/address_query/global_execution_checklist_v1.md`
2. Вопросники синхронизированы с live-якорем договора
- `docs/ADDRESS/question_sets/address_contract_19_15_postfix_2026-04-02.json`
- `docs/ADDRESS/question_sets/address_followup_context_chains_2026-04-02.json`
- связанные stress/open-items packs в `docs/ADDRESS/question_sets/`
3. Диагностические/исторические прогоны сохранены, но не являются gate-артефактами
- например, `docs/ADDRESS/runs/2026-04-02_Address_Live_Contract_24_15_PostFix_Check_13-34-22/` (без `run_summary.json`).
## 5. Что важно понимать по качеству этапа
1. Система вопрос понимает и корректно роутит в `address_query` для текущего acceptance-пака.
2. Если в live-окне нет строк под фильтром, система возвращает объяснимый `partial_coverage` с `empty_match` (а не выдумывает factual).
3. Контур остается data-agnostic: runtime не должен хранить уникальные company-сущности как словарь.
## 6. Остаточные риски
1. Domain coverage пока ограничен текущим набором intents; при расширении возможны регрессии в noisy/follow-up.
2. Для некоторых исторических чат-экспортов встречается проблема кодировки в текстовом слое вывода (mojibake); это отдельная задача presentation/debug слоя.
3. Диагностические run-паки в `docs/ADDRESS/runs/` неоднородны по структуре (не во всех есть `run_summary.json`), поэтому release-gate нужно держать на фиксированном whitelist артефактов.
## 7. Что дальше (Step-4)
1. Domain expansion по `runtime_readiness_matrix_v1.md` без снижения текущего gate.
2. На каждый новый intent:
- recipe;
- unit/integration tests;
- live-run с артефактами в `docs/ADDRESS/runs/...`.
3. После каждой итерации обязательный повтор двух gate-паков:
- `address_slang_stress_full_2026-04-02.json`
- `address_followup_context_chains_2026-04-02.json`
4. Рельсовый prerequisite закрыт отдельным документом:
- `step0_closeout_2026-04-02.md`
5. Дальше: подключение nightly в CI (локальный nightly через Task Scheduler уже включен).

View File

@ -0,0 +1,51 @@
# Step-0 Closeout (2026-04-02)
Дата среза: 2026-04-02
Контур: `address_query`
Статус: `CLOSED`
## 1. Что подтверждено
1. Рельсовый toolkit внедрен:
- `scripts/validate_address_run_pack.py`
- `scripts/compare_address_run_summary.py`
- `scripts/run_address_nightly_regression.py`
- `scripts/run_address_nightly_regression.ps1`
- `scripts/register_address_nightly_task.ps1`
2. Nightly automation подключена и закреплена:
- Task Scheduler task: `NDC_ADDRESS_Nightly_Regression`
- Owner: `DCTOUCH`
- Schedule: `daily 03:30`
- Entry script: `scripts/run_address_nightly_regression.ps1`
3. Референсный домен прошел полный цикл:
- Domain pack: `docs/ADDRESS/question_sets/domain_contracts_open_items_acceptance_2026-04-02.json`
- Run: `docs/ADDRESS/runs/2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_17-00-22/`
- Result: `strict_pass(route)=23/23`, `false_factual_rate=0`, `execution_error_count=0`
4. Глобальный gate после фиксов повторно зеленый:
- Nightly bundle: `docs/ADDRESS/runs/2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00/`
- Stress: `102/102`
- Follow-up: `25/25`
- Validator: PASS
- Comparator vs baseline: PASS
## 2. Дополнительный runtime hardening, который вошел в закрытие
1. Follow-up carryover теперь учитывает исходное сообщение пользователя и pre-decompose effective message,
чтобы не терять referential follow-up контекст (`этому же договору`).
2. Intent/anchor hardening для account-drilldown:
- compact account token (`62`) распознается корректно;
- `документами` и близкие формы исключены из контрагентных эвристик.
## 3. Definition of Done (Step-0) — статус
1. Domain card template и acceptance template: `DONE`
2. Structural validator run-паков: `DONE`
3. Baseline comparator до/после: `DONE`
4. Nightly regression на baseline-паках: `DONE`
5. Минимум 1 референсный домен end-to-end: `DONE`
6. Чеклист обновлен с closeout: `DONE` (`global_execution_checklist_v1.md`)
Итог: Step-0 pre-prod rails завершен, контур готов к Step-4 domain expansion в repeatable/factory режиме.

View File

@ -0,0 +1,174 @@
# Step-0 Pre-Prod Rail Plan V1
Дата: 2026-04-02
Контур: `question_mode=address_query`
Горизонт: 2 недели
## Статус выполнения (2026-04-02)
- Step-0 закрыт.
- Closeout: `step0_closeout_2026-04-02.md`
- Подтверждающий nightly bundle: `docs/ADDRESS/runs/2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00/`
## 1. Зачем Step-0
Цель Step-0: перевести расширение доменов из режима R&D в режим фабрики доменов (repeatable delivery).
Важно:
- нужен не «идеальный домен», а «идеальный процесс внедрения домена»;
- достаточно одного референсного домена с полностью отлаженным циклом поставки;
- остальные домены добавляются по тем же рельсам, без ручных исключений.
## 2. Входные условия (на сегодня)
Базовый quality-gate уже есть и подтвержден:
- stress: `102/102` (`strict_policy=route`)
- follow-up: `25/25` (`strict_policy=route`)
- `false_factual_rate = 0`
Контрольные артефакты:
- `docs/ADDRESS/runs/2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27/run_summary.json`
- `docs/ADDRESS/runs/2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5/run_summary.json`
## 3. Что считается «рельсами»
Обязательные элементы рельсов:
1. Единый domain-contract (intent/filters/recipe/statuses/fallback).
2. Единый формат run-артефактов (неопционально).
3. Двухуровневый gate:
- domain-gate (локальный для нового домена)
- global-gate (`102` + `25`) после каждой доменной итерации.
4. Единый rollout-процесс: `shadow -> soft-enable -> prod`.
5. Автоматический nightly/CI прогон с fail-fast.
## 4. Scope Step-0 (что делаем за 2 недели)
### 4.1 Process/Contract Track
- Зафиксировать шаблон domain card:
- intent-set;
- required filters;
- recipe mapping;
- accepted limited reasons;
- known risk patterns;
- rollout mode.
- Зафиксировать template acceptance question set:
- `canonical`
- `noisy/slang`
- `follow-up chains`
- Зафиксировать rule: один PR = один домен/поддомен.
### 4.2 Tooling/Gate Track
- Ввести validator структуры run-пака:
- обязательны `run_summary.json`, `full_live_results.json`, `failures_only.json`, `README.md`.
- Ввести gate-скрипт сравнения baseline до/после:
- `strict_pass_rate`
- `route_pass_rate`
- `execution_error_count`
- `false_factual_rate`
- Ввести nightly regression:
- `address_slang_stress_full_2026-04-02.json`
- `address_followup_context_chains_2026-04-02.json`
### 4.3 Reference Domain Track
- Выбрать 1 референсный домен (рекомендуется `open_contracts + open_items` hardening).
- Пройти полный цикл:
- design -> code -> tests -> live acceptance -> global regression -> docs closeout.
- Сохранить полный набор артефактов как эталон для следующих доменов.
## 5. План на 2 недели
### Week 1
1. Day 1-2: зафиксировать контракты и шаблоны (domain card + question set + run-pack spec).
2. Day 3-4: добавить CI validator run-паков и baseline comparator.
3. Day 5: dry-run на текущих исторических run-папках, устранить структурные дыры.
Результат недели 1:
- есть формальный domain factory contract;
- есть автоматический structural gate артефактов;
- есть baseline comparator.
### Week 2
1. Day 1-2: провести референсный домен через полный pipeline.
2. Day 3: включить nightly regression + отчет.
3. Day 4: зафиксировать PR-шаблон и release checklist для доменов.
4. Day 5: Step-0 closeout review.
Результат недели 2:
- минимум 1 домен поставлен по рельсам end-to-end;
- nightly и fail-criteria работают автоматически;
- Step-4 можно запускать как последовательность однотипных доменных итераций.
## 6. Жесткие gate-критерии Step-0
### 6.1 Domain Gate
- `strict_pass_rate = 100%` на domain-паке
- `false_factual_rate = 0`
- `execution_error_rate = 0`
### 6.2 Global Gate
- stress pack не ниже baseline (`102/102`)
- follow-up pack не ниже baseline (`25/25`)
- нет роста `execution_error_count`
### 6.3 Artifact Gate
Для каждого run-пака обязательны:
- `run_summary.json`
- `full_live_results.json`
- `failures_only.json`
- `README.md`
Если чего-то нет - домен считается незакрытым.
## 7. Definition of Done (Step-0 Complete)
Step-0 считается закрытым, когда одновременно выполнено:
1. Есть утвержденный domain card template и acceptance template.
2. Есть автоматический structural validator run-паков.
3. Есть автоматический comparator baseline до/после.
4. Есть nightly regression на двух baseline-паках.
5. Хотя бы 1 референсный домен прошел полный цикл с green domain+global gates.
6. `global_execution_checklist_v1.md` обновлен и содержит Step-0 closeout.
## 8. Что НЕ требуется для старта Step-4
Не требуется «идеальная система» или «идеальный все-домены-ready».
Требуется:
- доказанный repeatable delivery-процесс;
- доказанный контроль качества без ручного hero-mode.
Именно это и делает Step-0 pre-prod обязательным перед масштабным domain expansion.
## 9. Automation Toolkit (внедрено)
Готовые скрипты Step-0:
1. Structural validator run-пака
`python scripts/validate_address_run_pack.py docs/ADDRESS/runs/<run_id>`
2. Baseline comparator
`python scripts/compare_address_run_summary.py --baseline-summary <baseline_run_summary.json> --candidate-summary <candidate_run_summary.json>`
3. Nightly orchestration (102 + 25, validator + comparator)
`python scripts/run_address_nightly_regression.py`
4. Windows wrapper для планировщика
`powershell -ExecutionPolicy Bypass -File .\scripts\run_address_nightly_regression.ps1`
Минимальный dry-run smoke:
- `python scripts/run_address_nightly_regression.py --dry-run`

View File

@ -0,0 +1,172 @@
[
{
"id": "RCO_C001",
"group": "canonical",
"text": "Покажи незакрытые договоры на 2020-12-31",
"expected_intent": "list_open_contracts",
"expected_mode": "address_query",
"expected_reply_type": "factual"
},
{
"id": "RCO_C002",
"group": "canonical",
"text": "Show open contracts as of 2020-12-31",
"expected_intent": "list_open_contracts",
"expected_mode": "address_query",
"expected_reply_type": "factual"
},
{
"id": "RCO_C003",
"group": "canonical",
"text": "Есть ли долг по договору 19/15 на 2020-07-31",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
},
{
"id": "RCO_C004",
"group": "canonical",
"text": "Есть ли незакрытые позиции по договору 19/15 на 2020-12-31",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
},
{
"id": "RCO_C005",
"group": "canonical",
"text": "Покажи открытые позиции по договору 19/15",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
},
{
"id": "RCO_C006",
"group": "canonical",
"text": "Есть ли открытые позиции по договору 19/15 на 2020-12-31",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
},
{
"id": "RCO_C007",
"group": "canonical",
"text": "Покажи незакрытые договоры на конец 2020-12-31",
"expected_intent": "list_open_contracts",
"expected_mode": "address_query",
"expected_reply_type": "factual"
},
{
"id": "RCO_C008",
"group": "canonical",
"text": "list open contracts for 2020-12-31",
"expected_intent": "list_open_contracts",
"expected_mode": "address_query",
"expected_reply_type": "factual"
},
{
"id": "RCO_N001",
"group": "noisy_slang",
"text": "покажи незакрытые договоры на 2020-12-31 пж",
"expected_intent": "list_open_contracts",
"expected_mode": "address_query"
},
{
"id": "RCO_N002",
"group": "noisy_slang",
"text": "незакрытые договоры на 2020-12-31 гони",
"expected_intent": "list_open_contracts",
"expected_mode": "address_query"
},
{
"id": "RCO_N003",
"group": "noisy_slang",
"text": "open contracts 2020-12-31 pls",
"expected_intent": "list_open_contracts",
"expected_mode": "address_query"
},
{
"id": "RCO_N004",
"group": "noisy_slang",
"text": "по дог 19/15 есть хвосты на 2020-12-31",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
},
{
"id": "RCO_N005",
"group": "noisy_slang",
"text": "долг по дог 19/15 на 2020-12-31 есть?",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
},
{
"id": "RCO_N006",
"group": "noisy_slang",
"text": "open items by contract 19/15 as of 2020-12-31",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
},
{
"id": "RCO_N007",
"group": "noisy_slang",
"text": "есть ли долг по договору 19/15 на 31.12.2020",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
},
{
"id": "RCO_N008",
"group": "noisy_slang",
"text": "покажи открытые позиции по дог 19/15 на 2020-12-31 пж",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
},
{
"id": "RCO_N009",
"group": "noisy_slang",
"text": "show open contracts for 2020.12.31",
"expected_intent": "list_open_contracts",
"expected_mode": "address_query"
},
{
"id": "RCO_N010",
"group": "noisy_slang",
"text": "незакрытые договоры 2020-12-31",
"expected_intent": "list_open_contracts",
"expected_mode": "address_query"
},
{
"id": "RCO_F001",
"group": "followup_chain",
"session": "chain_contract_open_items_a",
"text": "Есть ли долг по договору 19/15 на 2020-07-31",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
},
{
"id": "RCO_F002",
"group": "followup_chain",
"session": "chain_contract_open_items_a",
"text": "а теперь на 2020-12-31",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
},
{
"id": "RCO_F003",
"group": "followup_chain",
"session": "chain_contract_open_items_a",
"text": "а теперь открытые позиции по нему",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
},
{
"id": "RCO_F004",
"group": "followup_chain",
"session": "chain_contract_open_items_b",
"text": "Покажи незакрытые договоры на 2020-12-31",
"expected_intent": "list_open_contracts",
"expected_mode": "address_query"
},
{
"id": "RCO_F005",
"group": "followup_chain",
"session": "chain_contract_open_items_b",
"text": "а теперь есть ли долг по договору 19/15 на 2020-12-31",
"expected_intent": "open_items_by_counterparty_or_contract",
"expected_mode": "address_query"
}
]

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10
Generated at: 2026-04-02T16:55:34
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\domain_contracts_open_items_acceptance_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 23
- ok_200_count: 23
- semantic_pass_count: 21
- semantic_pass_rate: 0.913
- route_pass_count: 19
- route_pass_rate: 0.8261
- strict_pass_count: 19
- strict_pass_rate: 0.8261
- factual_count: 19
- partial_coverage_count: 3
- clarification_required_count: 1
- http_error_count: 0
- llm_decomposition_applied_count: 17
- avg_elapsed_ms: 6984.8
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

View File

@ -0,0 +1,860 @@
[
{
"index": 7,
"id": "RCO_C007",
"question": "Покажи незакрытые договорные позиции на 2020-12-31",
"session": null,
"session_id": "asst-2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10-rco_c007",
"status_code": 200,
"ok": true,
"elapsed_ms": 6241,
"reply_type": "partial_coverage",
"trace_id": "address-K-kNk82lg0",
"assistant_reply": "Для точного адресного поиска не хватает обязательного якоря.\nПричина: для open_items нужен якорь контрагента или договора.\nЧто нужно уточнить: укажите контрагента или номер/название договора.",
"assistant_reply_first_line": "Для точного адресного поиска не хватает обязательного якоря.",
"expected_intent": "list_open_contracts",
"actual_intent": "open_items_by_counterparty_or_contract",
"intent_match": false,
"expected_mode": "address_query",
"actual_mode": "address_query",
"mode_match": true,
"expected_reply_type": "factual",
"reply_match": false,
"semantic_pass": false,
"route_pass": false,
"route_health": "blocked_missing_anchor",
"strict_policy": "route",
"strict_pass": false,
"selected_recipe": null,
"missing_required_filters": [
"counterparty_or_contract"
],
"match_failure_stage": "none",
"match_failure_reason": null,
"rows_fetched": 0,
"rows_matched": 0,
"mcp_call_status": "skipped",
"limited_reason_category": "missing_anchor",
"llm_decomposition_applied": true,
"llm_decomposition_reason": "normalized_fragment_applied",
"fallback_rule_hit": null,
"debug_payload": {
"trace_id": "address-K-kNk82lg0",
"prompt_version": "address_query_runtime_v1",
"schema_version": "address_query_runtime_v1",
"fallback_type": "partial",
"route_summary": null,
"fragments": [],
"requirements_extracted": [],
"coverage_report": {
"requirements_total": 0,
"requirements_covered": 0,
"requirements_uncovered": [],
"requirements_partially_covered": [],
"clarification_needed_for": [],
"out_of_scope_requirements": []
},
"routes": [],
"retrieval_status": [],
"retrieval_results": [],
"answer_grounding_check": {
"status": "partial",
"route_subject_match": true,
"missing_requirements": [],
"reasons": [
"address_action_detected",
"address_entity_detected",
"object_signal_detected",
"open_items_signal_detected"
],
"why_included_summary": [],
"selection_reason_summary": []
},
"dropped_intent_segments": [],
"detected_mode": "address_query",
"detected_mode_confidence": "high",
"query_shape": "OBJECT_LOOKUP",
"query_shape_confidence": "medium",
"detected_intent": "open_items_by_counterparty_or_contract",
"detected_intent_confidence": "medium",
"extracted_filters": {
"sort": "period_desc",
"limit": 20,
"as_of_date": "2020-12-31"
},
"missing_required_filters": [
"counterparty_or_contract"
],
"selected_recipe": null,
"mcp_call_status_legacy": "skipped",
"account_scope_mode": "strict",
"account_scope_fallback_applied": false,
"anchor_type": "unknown",
"anchor_value_raw": null,
"anchor_value_resolved": null,
"resolver_confidence": "low",
"ambiguity_count": 0,
"match_failure_stage": "none",
"match_failure_reason": null,
"mcp_call_status": "skipped",
"rows_fetched": 0,
"raw_rows_received": 0,
"rows_after_account_scope": 0,
"rows_after_recipe_filter": 0,
"rows_materialized": 0,
"rows_matched": 0,
"raw_row_keys_sample": [],
"materialization_drop_reason": "none",
"account_token_raw": null,
"account_token_normalized": null,
"account_scope_fields_checked": [
"account_dt",
"account_kt",
"registrator",
"analytics"
],
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
"account_scope_drop_reason": "not_applicable",
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
"limited_reason_category": "missing_anchor",
"response_type": "LIMITED_WITH_REASON",
"execution_lane": "address_query",
"llm_decomposition_applied": true,
"llm_decomposition_attempted": true,
"llm_provider_used": "local",
"llm_decomposition_trace_id": "xGDs8U2f3GsoPC",
"llm_decomposition_effective_message": "Показать незакрытые договорные позиции по состоянию на 2020-12-31",
"llm_decomposition_reason": "normalized_fragment_applied",
"fallback_rule_hit": null,
"sanitized_user_message": "покажи незакрытые договорные позиции на 2020-12-31",
"tool_gate_decision": "run_address_lane",
"tool_gate_reason": "address_mode_classifier_detected",
"answer_structure_v11": null,
"investigation_state_snapshot": null,
"normalized": null,
"normalizer_output": {
"trace_id": "xGDs8U2f3GsoPC",
"prompt_version": "normalizer_v2_0_2",
"applied": true,
"effective_message": "Показать незакрытые договорные позиции по состоянию на 2020-12-31"
}
},
"error_code": null,
"error_message": null
},
{
"index": 9,
"id": "RCO_N001",
"question": "покажи незакрытые догоры на 2020-12-31",
"session": null,
"session_id": "asst-2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10-rco_n001",
"status_code": 200,
"ok": true,
"elapsed_ms": 12203,
"reply_type": "clarification_required",
"trace_id": "S6B0lD-FqSJ6wt",
"assistant_reply": "Коротко: Наиболее вероятный механизм проблемы подтвержден частично и требует первичной проверки. Что сломано:\n- Есть признаки проблемы, но без уточнений по периоду и объекту вывод ненадежен. Почему это похоже на проблему:\n- Сигнал проблемы есть, но механизм подтвержден не полностью. На чем это основано:\n- Опора частичная: часть требований покрыта не полностью.\n- Отдельно не подтверждено или покрыто частично: R1. Что проверить первым:\n- Проверьте связку документов и проводок по проблемному участку в указанном периоде. Ограничения:\n- Якоря из вопроса без прямого подтверждения: 2020-12, period:2020-12.\n- Ни одно требование не получило подтвержденного покрытия.\n- Нет explainable-сигналов why_included в результатах выборки.\n- supplier/customer polarity.\n- required anchors claim-bound grounding.\n- evidence.",
"assistant_reply_first_line": "Коротко: Наиболее вероятный механизм проблемы подтвержден частично и требует первичной проверки. Что сломано:",
"expected_intent": "list_open_contracts",
"actual_intent": null,
"intent_match": false,
"expected_mode": "address_query",
"actual_mode": null,
"mode_match": false,
"expected_reply_type": null,
"reply_match": true,
"semantic_pass": false,
"route_pass": false,
"route_health": "blocked_clarification",
"strict_policy": "route",
"strict_pass": false,
"selected_recipe": null,
"missing_required_filters": null,
"match_failure_stage": null,
"match_failure_reason": null,
"rows_fetched": null,
"rows_matched": null,
"mcp_call_status": null,
"limited_reason_category": null,
"llm_decomposition_applied": null,
"llm_decomposition_reason": null,
"fallback_rule_hit": null,
"debug_payload": {
"trace_id": "S6B0lD-FqSJ6wt",
"prompt_version": "address_query_runtime_v1",
"schema_version": "v1",
"fallback_type": "clarification",
"route_summary": null,
"fragments": [],
"requirements_extracted": [
{
"requirement_id": "R1",
"source_fragment_id": null,
"requirement_text": "покажи незакрытые догоры на 2020-12-31",
"subject_tokens": [],
"status": "clarification_needed",
"route": null
}
],
"coverage_report": {
"requirements_total": 1,
"requirements_covered": 0,
"requirements_uncovered": [],
"requirements_partially_covered": [],
"clarification_needed_for": [
"R1"
],
"out_of_scope_requirements": []
},
"routes": [],
"retrieval_status": [],
"retrieval_results": [],
"answer_grounding_check": {
"status": "no_grounded_answer",
"route_subject_match": true,
"missing_requirements": [
"R1"
],
"reasons": [
"Ни одно требование не получило подтвержденного покрытия.",
"Нет explainable-сигналов why_included в результатах выборки.",
"Не удалось надежно определить supplier/customer polarity.",
"Недостаточно покрытия required anchors для claim-bound grounding.",
"Недостаточно допустимого evidence для обоснованного ответа.",
"Targeted evidence acquisition не дал допустимых попаданий по claim target path.",
"Есть критическое противоречие по domain/account scope."
],
"why_included_summary": [],
"selection_reason_summary": []
},
"dropped_intent_segments": [],
"question_type_class": "why_breaks",
"company_anchors": {
"contract_numbers": [],
"document_numbers": [],
"dates": [],
"amounts": [],
"accounts": [],
"periods": [
"2020-12"
],
"document_types": [],
"all": [
"period:2020-12"
]
},
"business_scope_raw": [],
"business_scope_resolved": [],
"company_grounding_applied": false,
"scope_resolution_reason": [],
"company_scope_resolution_reason": [],
"raw_time_anchor": null,
"raw_time_scope": null,
"resolved_time_anchor": null,
"resolved_primary_period": null,
"effective_primary_period": null,
"temporal_guard_input": null,
"temporal_alignment_status": "conflicting",
"temporal_resolution_source": "normalized_time_scope:missing",
"temporal_guard_basis": "none",
"temporal_guard_applied": false,
"temporal_guard_outcome": "passed",
"temporal_guard": {
"raw_time_anchor": null,
"raw_time_scope": null,
"resolved_time_anchor": null,
"resolved_primary_period": null,
"effective_primary_period": null,
"temporal_guard_input": null,
"temporal_alignment_status": "conflicting",
"temporal_resolution_source": "normalized_time_scope:missing",
"temporal_guard_basis": "none",
"temporal_guard_applied": false,
"temporal_guard_outcome": "passed",
"primary_period_window": null,
"allowed_context_window": null,
"controlled_temporal_expansion_enabled": false,
"context_expansion_reasons_allowed": [
"prehistory",
"carryover",
"post_period_closure",
"long_running_contract_context"
],
"normalized_anchor_drift_detected": false,
"reason_codes": [
"missing_resolved_primary_period"
]
},
"raw_numeric_tokens": [
"2020",
"12",
"31"
],
"classified_numeric_tokens": [
{
"token": "12",
"classification": "date_token"
},
{
"token": "31",
"classification": "date_token"
}
],
"rejected_as_non_accounts": [
"12",
"31"
],
"resolved_account_anchors": [],
"domain_polarity_guard": {
"applied": true,
"polarity": "mixed_or_unresolved",
"outcome": "limited_unresolved_polarity",
"supplier_score": 0,
"customer_score": 0,
"account_scope": [],
"raw_numeric_tokens": [
"2020",
"12",
"31"
],
"classified_numeric_tokens": [
{
"token": "12",
"classification": "date_token"
},
{
"token": "31",
"classification": "date_token"
}
],
"rejected_as_non_accounts": [
"12",
"31"
],
"resolved_account_anchors": [],
"rejected_problem_units": 0,
"rejected_evidence": 0,
"critical_contradiction": true,
"reason_codes": [
"unresolved_supplier_customer_polarity",
"supplier_customer_signals_absent"
]
},
"claim_anchor_audit": {
"claim_type": "prove_month_close_state",
"settlement_role_resolution_reason": [],
"polarity_resolution_status": "not_applicable",
"required_anchors": [
"period",
"close_signal",
"cost_scope"
],
"resolved_anchors": {
"period": [
"2020-12"
],
"account_scope": [],
"amounts": [],
"contract": [],
"document_numbers": [],
"document_types": [],
"counterparty_scope": [],
"advance_signal": [],
"closure_signal": [
"closure"
],
"vat_signal": [],
"chain_signal": [],
"close_signal": [],
"cost_scope": [],
"rbp_signal": [],
"writeoff_signal": [],
"fixed_asset_signal": [],
"amortization_signal": [],
"expected_fa_set": [],
"actual_fa_set": []
},
"missing_anchors": [
"close_signal",
"cost_scope"
],
"claim_anchor_resolution_rate": 0.3333,
"primary_period": null,
"allowed_context_window": null,
"context_expansion_reasons_allowed": [
"prehistory",
"carryover",
"post_period_closure",
"long_running_contract_context"
],
"reason_codes": [
"claim_missing_required_anchors",
"claim_anchor_resolution_low"
]
},
"settlement_role": null,
"settlement_role_resolution_reason": [],
"polarity_resolution_status": "not_applicable",
"targeted_evidence_acquisition": {
"claim_type": "prove_month_close_state",
"required_checks": [
"close_operation_found",
"distribution_step_found",
"residual_tail_found"
],
"check_status": {
"close_operation_found": "not_found",
"distribution_step_found": "not_found",
"residual_tail_found": "not_found"
},
"targeted_item_hits": 0,
"targeted_evidence_hits": 0,
"targeted_evidence_hit_rate": 0,
"targeted_evidence_source_refs": [],
"reason_codes": [
"targeted_evidence_not_found",
"targeted_evidence_hit_rate_low"
]
},
"evidence_admissibility_gate": {
"candidate_evidence_total": 0,
"admissible_evidence_count": 0,
"rejected_evidence_count": 0,
"rejected_item_count": 0,
"reject_breakdown": {
"wrong_period": 0,
"wrong_domain": 0,
"wrong_account_scope": 0,
"weak_source_mapping": 0,
"zero_live_match": 0,
"future_dated_or_out_of_window": 0
},
"category_breakdown": {
"hard_evidence": 0,
"supporting_signal": 0,
"inadmissible_noise": 0
},
"reason_codes": [
"no_admissible_evidence_for_grounded_answer"
]
},
"eligibility_time_basis": "none",
"grounded_answer_eligibility_guard": {
"eligible": false,
"temporal_passed": true,
"eligibility_time_basis": "none",
"business_scope_passed": true,
"polarity_passed": false,
"claim_anchors_passed": false,
"claim_anchor_resolution_rate": 0.3333,
"missing_required_anchors": 2,
"admissible_evidence_count": 0,
"critical_contradiction": true,
"outcome": "limited_or_insufficient_evidence",
"grounding_mode": "limited_or_insufficient_evidence",
"reason_codes": [
"polarity_guard_limited_unresolved_polarity",
"claim_anchor_coverage_insufficient",
"admissible_evidence_count_zero",
"targeted_evidence_hit_rate_zero",
"critical_domain_or_account_contradiction"
]
},
"problem_centric_answer_applied": false,
"problem_units_used_count": 0,
"problem_answer_mode": "stage1_policy_v11",
"answer_structure_v11": {
"schema_version": "answer_structure_v1_1",
"answer_summary": "Нужны уточнения: без сужения фокуса надежный вывод невозможен.",
"direct_answer": "Есть признаки проблемы, но без уточнений по периоду и объекту вывод ненадежен.",
"mechanism_block": {
"status": "unresolved",
"mechanism_notes": [],
"limitation_reason_codes": []
},
"evidence_block": {
"evidence_ids": [],
"source_refs": [],
"mechanism_notes": [],
"coverage_note": "coverage_partial_or_limited"
},
"uncertainty_block": {
"open_uncertainties": [
"R1",
"missing_anchor:document_or_object",
"missing_anchor:counterparty"
],
"limitations": [
"Ни одно требование не получило подтвержденного покрытия.",
"Нет explainable-сигналов why_included в результатах выборки.",
"Не удалось надежно определить supplier/customer polarity.",
"Недостаточно покрытия required anchors для claim-bound grounding.",
"Недостаточно допустимого evidence для обоснованного ответа.",
"Targeted evidence acquisition не дал допустимых попаданий по claim target path.",
"Есть критическое противоречие по domain/account scope.",
"Часть якорей запроса пока не подтверждена в опоре: 2020-12, period:2020-12."
]
},
"next_step_block": {
"recommended_actions": [
"Дайте недостающие якоря (период/счет/объект), иначе сильный factual вывод невозможен."
],
"clarification_questions": [
"Укажите документ/GUID/конкретный объект для трассировки.",
"Укажите контрагента или группу контрагентов.",
"Закройте уточнения для требований: R1."
]
}
},
"investigation_state_snapshot": {
"schema_version": "investigation_state_v1",
"session_id": "asst-2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10-rco_n001",
"status": "active",
"turn_index": 1,
"updated_at": "2026-04-02T13:54:03.427Z",
"question_id": "msg-QQjwBnw0bw",
"question_scope_id": "p:2020-12|s:покажи незакрытые догоры на 2020-12-31",
"scope_origin": "explicit_from_message",
"focus": {
"domain": null,
"period": "2020-12",
"primary_accounts": [],
"active_query_subject": "покажи незакрытые догоры на 2020-12-31"
},
"narrowing_status": "unknown",
"evidence_refs": [],
"open_uncertainties": [
"clarify:R1"
],
"last_answer_mode": "clarification_required",
"followup_context": {
"previous_question_id": null,
"last_user_message": "покажи незакрытые догоры на 2020-12-31",
"referenced_requirement_ids": [
"R1"
],
"active_domain": null,
"active_requirement_ids": [
"R1"
],
"uncovered_requirement_ids": [
"R1"
],
"last_problem_unit_id": null,
"settlement_next_actions": [],
"evidence_summary": [],
"question_scope_id": "p:2020-12|s:покажи незакрытые догоры на 2020-12-31",
"scope_origin": "explicit_from_message"
},
"query_mode_hint": "investigation_candidate"
},
"normalized": null
},
"error_code": null,
"error_message": null
},
{
"index": 16,
"id": "RCO_N008",
"question": "покажи открытые позиции по дог 19/15 пж",
"session": null,
"session_id": "asst-2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10-rco_n008",
"status_code": 200,
"ok": true,
"elapsed_ms": 7091,
"reply_type": "partial_coverage",
"trace_id": "address-WjcNH7liP2",
"assistant_reply": "В live-данных по текущему фильтру записи не найдены.\nПричина: по указанному якорю и фильтрам в live-выборке нет строк.\nЧто нужно уточнить: уточните период или снимите часть фильтров.",
"assistant_reply_first_line": "В live-данных по текущему фильтру записи не найдены.",
"expected_intent": "open_items_by_counterparty_or_contract",
"actual_intent": "open_items_by_counterparty_or_contract",
"intent_match": true,
"expected_mode": "address_query",
"actual_mode": "address_query",
"mode_match": true,
"expected_reply_type": null,
"reply_match": true,
"semantic_pass": true,
"route_pass": false,
"route_health": "likely_blocked_route",
"strict_policy": "route",
"strict_pass": false,
"selected_recipe": "address_open_items_by_party_or_contract_v1",
"missing_required_filters": [],
"match_failure_stage": "materialized_but_not_anchor_matched",
"match_failure_reason": "contract_anchor_not_matched_in_materialized_rows",
"rows_fetched": 20,
"rows_matched": 0,
"mcp_call_status": "materialized_but_not_anchor_matched",
"limited_reason_category": "empty_match",
"llm_decomposition_applied": true,
"llm_decomposition_reason": "normalized_fragment_applied",
"fallback_rule_hit": null,
"debug_payload": {
"trace_id": "address-WjcNH7liP2",
"prompt_version": "address_query_runtime_v1",
"schema_version": "address_query_runtime_v1",
"fallback_type": "partial",
"route_summary": null,
"fragments": [],
"requirements_extracted": [],
"coverage_report": {
"requirements_total": 0,
"requirements_covered": 0,
"requirements_uncovered": [],
"requirements_partially_covered": [],
"clarification_needed_for": [],
"out_of_scope_requirements": []
},
"routes": [],
"retrieval_status": [],
"retrieval_results": [],
"answer_grounding_check": {
"status": "partial",
"route_subject_match": true,
"missing_requirements": [],
"reasons": [
"address_action_detected",
"address_entity_detected",
"object_signal_detected",
"open_items_signal_detected"
],
"why_included_summary": [],
"selection_reason_summary": []
},
"dropped_intent_segments": [],
"detected_mode": "address_query",
"detected_mode_confidence": "high",
"query_shape": "OBJECT_LOOKUP",
"query_shape_confidence": "medium",
"detected_intent": "open_items_by_counterparty_or_contract",
"detected_intent_confidence": "medium",
"extracted_filters": {
"sort": "period_desc",
"limit": 20,
"contract": "19/15 ПЖ"
},
"missing_required_filters": [],
"selected_recipe": "address_open_items_by_party_or_contract_v1",
"mcp_call_status_legacy": "materialized_but_not_matched",
"account_scope_mode": "preferred",
"account_scope_fallback_applied": true,
"anchor_type": "contract",
"anchor_value_raw": "19/15 ПЖ",
"anchor_value_resolved": "19/15 ПЖ",
"resolver_confidence": "medium",
"ambiguity_count": 0,
"match_failure_stage": "materialized_but_not_anchor_matched",
"match_failure_reason": "contract_anchor_not_matched_in_materialized_rows",
"mcp_call_status": "materialized_but_not_anchor_matched",
"rows_fetched": 20,
"raw_rows_received": 20,
"rows_after_account_scope": 20,
"rows_after_recipe_filter": 0,
"rows_materialized": 20,
"rows_matched": 0,
"raw_row_keys_sample": [
"Период",
"Регистратор",
"СчетДт",
"СчетКт",
"Сумма",
"Period",
"Registrator",
"AccountDt",
"AccountKt",
"Amount"
],
"materialization_drop_reason": "none",
"account_token_raw": null,
"account_token_normalized": null,
"account_scope_fields_checked": [
"account_dt",
"account_kt",
"registrator",
"analytics"
],
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
"account_scope_drop_reason": "not_applicable",
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
"limited_reason_category": "empty_match",
"response_type": "LIMITED_WITH_REASON",
"execution_lane": "address_query",
"llm_decomposition_applied": true,
"llm_decomposition_attempted": true,
"llm_provider_used": "local",
"llm_decomposition_trace_id": "lxly54b13hg0NS",
"llm_decomposition_effective_message": "Показать открытые позиции по договору 19/15 ПЖ.",
"llm_decomposition_reason": "normalized_fragment_applied",
"fallback_rule_hit": null,
"sanitized_user_message": "покажи открытые позиции по договор 19/15",
"tool_gate_decision": "run_address_lane",
"tool_gate_reason": "address_mode_classifier_detected",
"answer_structure_v11": null,
"investigation_state_snapshot": null,
"normalized": null,
"normalizer_output": {
"trace_id": "lxly54b13hg0NS",
"prompt_version": "normalizer_v2_0_2",
"applied": true,
"effective_message": "Показать открытые позиции по договору 19/15 ПЖ."
}
},
"error_code": null,
"error_message": null
},
{
"index": 23,
"id": "RCO_F005",
"question": "а теперь есть ли долг по договору 19/15",
"session": "chain_contract_open_items_b",
"session_id": "asst-2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10-chain_contract_open_items_b",
"status_code": 200,
"ok": true,
"elapsed_ms": 7071,
"reply_type": "partial_coverage",
"trace_id": "address-alvGrbULwl",
"assistant_reply": "В live-данных по текущему фильтру записи не найдены.\nПричина: по указанному якорю и фильтрам в live-выборке нет строк.\nЧто нужно уточнить: уточните период или снимите часть фильтров.",
"assistant_reply_first_line": "В live-данных по текущему фильтру записи не найдены.",
"expected_intent": "open_items_by_counterparty_or_contract",
"actual_intent": "open_items_by_counterparty_or_contract",
"intent_match": true,
"expected_mode": "address_query",
"actual_mode": "address_query",
"mode_match": true,
"expected_reply_type": null,
"reply_match": true,
"semantic_pass": true,
"route_pass": false,
"route_health": "likely_blocked_route",
"strict_policy": "route",
"strict_pass": false,
"selected_recipe": "address_open_items_by_party_or_contract_v1",
"missing_required_filters": [],
"match_failure_stage": "materialized_but_not_anchor_matched",
"match_failure_reason": "contract_anchor_not_matched_in_materialized_rows",
"rows_fetched": 20,
"rows_matched": 0,
"mcp_call_status": "materialized_but_not_anchor_matched",
"limited_reason_category": "empty_match",
"llm_decomposition_applied": true,
"llm_decomposition_reason": "normalized_fragment_applied",
"fallback_rule_hit": null,
"debug_payload": {
"trace_id": "address-alvGrbULwl",
"prompt_version": "address_query_runtime_v1",
"schema_version": "address_query_runtime_v1",
"fallback_type": "partial",
"route_summary": null,
"fragments": [],
"requirements_extracted": [],
"coverage_report": {
"requirements_total": 0,
"requirements_covered": 0,
"requirements_uncovered": [],
"requirements_partially_covered": [],
"clarification_needed_for": [],
"out_of_scope_requirements": []
},
"routes": [],
"retrieval_status": [],
"retrieval_results": [],
"answer_grounding_check": {
"status": "partial",
"route_subject_match": true,
"missing_requirements": [],
"reasons": [
"address_action_detected",
"address_entity_detected",
"verify_signal_detected",
"open_items_signal_detected",
"period_from_followup_context",
"address_followup_context_applied"
],
"why_included_summary": [],
"selection_reason_summary": []
},
"dropped_intent_segments": [],
"detected_mode": "address_query",
"detected_mode_confidence": "high",
"query_shape": "VERIFY_FACTUAL",
"query_shape_confidence": "medium",
"detected_intent": "open_items_by_counterparty_or_contract",
"detected_intent_confidence": "medium",
"extracted_filters": {
"sort": "period_desc",
"limit": 20,
"contract": "19/15",
"period_from": "2020-12-01",
"period_to": "2020-12-31"
},
"missing_required_filters": [],
"selected_recipe": "address_open_items_by_party_or_contract_v1",
"mcp_call_status_legacy": "materialized_but_not_matched",
"account_scope_mode": "preferred",
"account_scope_fallback_applied": true,
"anchor_type": "contract",
"anchor_value_raw": "19/15",
"anchor_value_resolved": "19/15",
"resolver_confidence": "medium",
"ambiguity_count": 0,
"match_failure_stage": "materialized_but_not_anchor_matched",
"match_failure_reason": "contract_anchor_not_matched_in_materialized_rows",
"mcp_call_status": "materialized_but_not_anchor_matched",
"rows_fetched": 20,
"raw_rows_received": 20,
"rows_after_account_scope": 20,
"rows_after_recipe_filter": 0,
"rows_materialized": 20,
"rows_matched": 0,
"raw_row_keys_sample": [
"Период",
"Регистратор",
"СчетДт",
"СчетКт",
"Сумма",
"Period",
"Registrator",
"AccountDt",
"AccountKt",
"Amount"
],
"materialization_drop_reason": "none",
"account_token_raw": null,
"account_token_normalized": null,
"account_scope_fields_checked": [
"account_dt",
"account_kt",
"registrator",
"analytics"
],
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
"account_scope_drop_reason": "not_applicable",
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
"limited_reason_category": "empty_match",
"response_type": "LIMITED_WITH_REASON",
"execution_lane": "address_query",
"llm_decomposition_applied": true,
"llm_decomposition_attempted": true,
"llm_provider_used": "local",
"llm_decomposition_trace_id": "JCTFOfjzFFHE7a",
"llm_decomposition_effective_message": "проверить наличие долга по договору 19/15",
"llm_decomposition_reason": "normalized_fragment_applied",
"fallback_rule_hit": null,
"sanitized_user_message": "а теперь есть ли долг по договору 19/15",
"tool_gate_decision": "run_address_lane",
"tool_gate_reason": "address_mode_classifier_detected",
"answer_structure_v11": null,
"investigation_state_snapshot": null,
"normalized": null,
"normalizer_output": {
"trace_id": "JCTFOfjzFFHE7a",
"prompt_version": "normalizer_v2_0_2",
"applied": true,
"effective_message": "проверить наличие долга по договору 19/15"
}
},
"error_code": null,
"error_message": null
}
]

View File

@ -0,0 +1,27 @@
# Response Audit: 2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| RCO_C001 | True | ok_or_factual | factual | list_open_contracts | None | Покажи незакрытые договоры на 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_C002 | True | ok_or_factual | factual | list_open_contracts | None | Show open contracts as of 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_C003 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли долг по договору 19/15 на 2020-07-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_C004 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли незакрытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_C005 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Покажи открытые позиции по договору 19/15 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_C006 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_C007 | False | blocked_missing_anchor | partial_coverage | open_items_by_counterparty_or_contract | missing_anchor | Покажи незакрытые договорные позиции на 2020-12-31 | Для точного адресного поиска не хватает обязательного якоря. |
| RCO_C008 | True | ok_or_factual | factual | list_open_contracts | None | list open contracts for 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_N001 | False | blocked_clarification | clarification_required | None | None | покажи незакрытые догоры на 2020-12-31 | Коротко: Наиболее вероятный механизм проблемы подтвержден частично и требует первичной проверки. Что сломано: |
| RCO_N002 | True | ok_or_factual | factual | list_open_contracts | None | незакрытые договоры на 2020-12-31 гони | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_N003 | True | ok_or_factual | factual | list_open_contracts | None | open contracts 2020-12-31 pls | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_N004 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | по дог 19/15 есть хвосты на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_N005 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | долг по дог 19/15 на 2020-12-31 есть? | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_N006 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | open items by contract 19/15 as of 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_N007 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли долг по договору 19/15 на 31.12.2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_N008 | False | likely_blocked_route | partial_coverage | open_items_by_counterparty_or_contract | empty_match | покажи открытые позиции по дог 19/15 пж | В live-данных по текущему фильтру записи не найдены. |
| RCO_N009 | True | ok_or_factual | factual | list_open_contracts | None | show open contracts for 2020.12.31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_N010 | True | ok_or_factual | factual | list_open_contracts | None | незакрытые договоры 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_F001 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли долг по договору 19/15 на 2020-07-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_F002 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_F003 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_F004 | True | ok_or_factual | factual | list_open_contracts | None | Покажи незакрытые договоры на 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_F005 | False | likely_blocked_route | partial_coverage | open_items_by_counterparty_or_contract | empty_match | а теперь есть ли долг по договору 19/15 | В live-данных по текущему фильтру записи не найдены. |

View File

@ -0,0 +1,58 @@
{
"run_id": "2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_16-50-10",
"generated_at": "2026-04-02T16:55:34",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\domain_contracts_open_items_acceptance_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 23,
"ok_200_count": 23,
"semantic_pass_count": 21,
"semantic_pass_rate": 0.913,
"route_pass_count": 19,
"route_pass_rate": 0.8261,
"strict_pass_count": 19,
"strict_pass_rate": 0.8261,
"factual_count": 19,
"partial_coverage_count": 3,
"clarification_required_count": 1,
"http_error_count": 0,
"llm_decomposition_applied_count": 17,
"avg_elapsed_ms": 6984.8
},
"distributions": {
"reply_type": {
"factual": 19,
"partial_coverage": 3,
"clarification_required": 1
},
"actual_intent": {
"list_open_contracts": 8,
"open_items_by_counterparty_or_contract": 14,
"None": 1
},
"actual_mode": {
"address_query": 22,
"None": 1
},
"mcp_call_status": {
"matched_non_empty": 19,
"skipped": 1,
"None": 1,
"materialized_but_not_anchor_matched": 2
},
"limited_reason_category": {
"missing_anchor": 1,
"empty_match": 2
},
"route_health": {
"ok_or_factual": 19,
"blocked_missing_anchor": 1,
"blocked_clarification": 1,
"likely_blocked_route": 2
}
}
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_17-00-22
Generated at: 2026-04-02T16:58:39
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\domain_contracts_open_items_acceptance_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 23
- ok_200_count: 23
- semantic_pass_count: 23
- semantic_pass_rate: 1.0
- route_pass_count: 23
- route_pass_rate: 1.0
- strict_pass_count: 23
- strict_pass_rate: 1.0
- factual_count: 23
- partial_coverage_count: 0
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 18
- avg_elapsed_ms: 6755.0
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

View File

@ -0,0 +1,27 @@
# Response Audit: 2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_17-00-22
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| RCO_C001 | True | ok_or_factual | factual | list_open_contracts | None | Покажи незакрытые договоры на 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_C002 | True | ok_or_factual | factual | list_open_contracts | None | Show open contracts as of 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_C003 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли долг по договору 19/15 на 2020-07-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_C004 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли незакрытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_C005 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Покажи открытые позиции по договору 19/15 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_C006 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_C007 | True | ok_or_factual | factual | list_open_contracts | None | Покажи незакрытые договоры на конец 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_C008 | True | ok_or_factual | factual | list_open_contracts | None | list open contracts for 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_N001 | True | ok_or_factual | factual | list_open_contracts | None | покажи незакрытые договоры на 2020-12-31 пж | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_N002 | True | ok_or_factual | factual | list_open_contracts | None | незакрытые договоры на 2020-12-31 гони | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_N003 | True | ok_or_factual | factual | list_open_contracts | None | open contracts 2020-12-31 pls | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_N004 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | по дог 19/15 есть хвосты на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_N005 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | долг по дог 19/15 на 2020-12-31 есть? | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_N006 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | open items by contract 19/15 as of 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_N007 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли долг по договору 19/15 на 31.12.2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_N008 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | покажи открытые позиции по дог 19/15 на 2020-12-31 пж | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_N009 | True | ok_or_factual | factual | list_open_contracts | None | show open contracts for 2020.12.31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_N010 | True | ok_or_factual | factual | list_open_contracts | None | незакрытые договоры 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_F001 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли долг по договору 19/15 на 2020-07-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_F002 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_F003 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| RCO_F004 | True | ok_or_factual | factual | list_open_contracts | None | Покажи незакрытые договоры на 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| RCO_F005 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь есть ли долг по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |

View File

@ -0,0 +1,45 @@
{
"run_id": "2026-04-02_Address_Domain_ContractsOpenItems_Reference_Acceptance_2026-04-02_17-00-22",
"generated_at": "2026-04-02T16:58:39",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\domain_contracts_open_items_acceptance_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 23,
"ok_200_count": 23,
"semantic_pass_count": 23,
"semantic_pass_rate": 1.0,
"route_pass_count": 23,
"route_pass_rate": 1.0,
"strict_pass_count": 23,
"strict_pass_rate": 1.0,
"factual_count": 23,
"partial_coverage_count": 0,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 18,
"avg_elapsed_ms": 6755.0
},
"distributions": {
"reply_type": {
"factual": 23
},
"actual_intent": {
"list_open_contracts": 10,
"open_items_by_counterparty_or_contract": 13
},
"actual_mode": {
"address_query": 23
},
"mcp_call_status": {
"matched_non_empty": 23
},
"limited_reason_category": {},
"route_health": {
"ok_or_factual": 23
}
}
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_Followup_Recheck_PostDomain_17-14-30
Generated at: 2026-04-02T17:14:46
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 25
- ok_200_count: 25
- semantic_pass_count: 23
- semantic_pass_rate: 0.92
- route_pass_count: 23
- route_pass_rate: 0.92
- strict_pass_count: 23
- strict_pass_rate: 0.92
- factual_count: 24
- partial_coverage_count: 1
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 13
- avg_elapsed_ms: 5041.3
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
# Response Audit: 2026-04-02_Address_Followup_Recheck_PostDomain_17-14-30
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
| F014 | False | ok_or_factual | factual | list_documents_by_counterparty | None | раскрой 62 документами на ту же дату | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F015 | False | ok_or_factual | factual | list_documents_by_counterparty | None | вернись на 2020-12-31 по 60 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F020 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по этому же договору | Собран список документов по договору (live address lane). |
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |

View File

@ -0,0 +1,55 @@
{
"run_id": "2026-04-02_Address_Followup_Recheck_PostDomain_17-14-30",
"generated_at": "2026-04-02T17:14:46",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 25,
"ok_200_count": 25,
"semantic_pass_count": 23,
"semantic_pass_rate": 0.92,
"route_pass_count": 23,
"route_pass_rate": 0.92,
"strict_pass_count": 23,
"strict_pass_rate": 0.92,
"factual_count": 24,
"partial_coverage_count": 1,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 13,
"avg_elapsed_ms": 5041.3
},
"distributions": {
"reply_type": {
"factual": 24,
"partial_coverage": 1
},
"actual_intent": {
"list_documents_by_counterparty": 5,
"account_balance_snapshot": 8,
"documents_forming_balance": 1,
"bank_operations_by_counterparty": 2,
"list_documents_by_contract": 3,
"bank_operations_by_contract": 3,
"open_items_by_counterparty_or_contract": 3
},
"actual_mode": {
"address_query": 25
},
"mcp_call_status": {
"matched_non_empty": 24,
"no_raw_rows": 1
},
"limited_reason_category": {
"empty_match": 1
},
"route_health": {
"ok_or_factual": 24,
"partial_non_blocking": 1
}
}
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_Followup_Recheck_PostFix2_17-24-40
Generated at: 2026-04-02T17:26:20
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 25
- ok_200_count: 25
- semantic_pass_count: 24
- semantic_pass_rate: 0.96
- route_pass_count: 23
- route_pass_rate: 0.92
- strict_pass_count: 23
- strict_pass_rate: 0.92
- factual_count: 22
- partial_coverage_count: 3
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 13
- avg_elapsed_ms: 4910.7
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

View File

@ -0,0 +1,298 @@
[
{
"index": 14,
"id": "F014",
"question": "раскрой 62 документами на ту же дату",
"session": "chain_balance_c",
"session_id": "asst-2026-04-02_Address_Followup_Recheck_PostFix2_17-24-40-chain_balance_c",
"status_code": 200,
"ok": true,
"elapsed_ms": 8385,
"reply_type": "factual",
"trace_id": "address-uEVFkkwWvL",
"assistant_reply": "Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу.\nСобран список документов по контрагенту (live address lane).\nСтрок отобрано: 2.\n1. 2020-05-21T12:00:00Z | Поступление на расчетный счет 00000000023 от 21.05.2020 12:00:00 | 0 / 0 | 250546.24 | аналитика: ЗАО Ремонтно-строительная фирма «Ремстройсервис»\n2. 2020-05-15T12:00:02Z | Поступление на расчетный счет 00000000022 от 15.05.2020 12:00:02 | 0 / 0 | 765000 | аналитика: ПрофТренд,ООО",
"assistant_reply_first_line": "Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу.",
"expected_intent": "documents_forming_balance",
"actual_intent": "list_documents_by_counterparty",
"intent_match": false,
"expected_mode": "address_query",
"actual_mode": "address_query",
"mode_match": true,
"expected_reply_type": null,
"reply_match": true,
"semantic_pass": false,
"route_pass": false,
"route_health": "ok_or_factual",
"strict_policy": "route",
"strict_pass": false,
"selected_recipe": "address_documents_by_counterparty_v1",
"missing_required_filters": [],
"match_failure_stage": "materialized_but_not_anchor_matched",
"match_failure_reason": "counterparty_anchor_not_matched_in_materialized_rows",
"rows_fetched": 20,
"rows_matched": 2,
"mcp_call_status": "matched_non_empty",
"limited_reason_category": null,
"llm_decomposition_applied": false,
"llm_decomposition_reason": "normalized_fragment_rejected_intent_conflict",
"fallback_rule_hit": null,
"debug_payload": {
"trace_id": "address-uEVFkkwWvL",
"prompt_version": "address_query_runtime_v1",
"schema_version": "address_query_runtime_v1",
"fallback_type": "none",
"route_summary": null,
"fragments": [],
"requirements_extracted": [],
"coverage_report": {
"requirements_total": 0,
"requirements_covered": 0,
"requirements_uncovered": [],
"requirements_partially_covered": [],
"clarification_needed_for": [],
"out_of_scope_requirements": []
},
"routes": [],
"retrieval_status": [],
"retrieval_results": [],
"answer_grounding_check": {
"status": "grounded",
"route_subject_match": true,
"missing_requirements": [],
"reasons": [
"address_entity_detected",
"drilldown_signal_detected",
"documents_by_counterparty_signal_detected",
"period_from_followup_context",
"address_followup_context_applied",
"anchor_not_matched_fallback_rows"
],
"why_included_summary": [],
"selection_reason_summary": []
},
"dropped_intent_segments": [],
"detected_mode": "address_query",
"detected_mode_confidence": "medium",
"query_shape": "DRILLDOWN_REQUEST",
"query_shape_confidence": "high",
"detected_intent": "list_documents_by_counterparty",
"detected_intent_confidence": "medium",
"extracted_filters": {
"sort": "period_desc",
"limit": 20,
"counterparty": "документами",
"period_from": "2020-05-01",
"period_to": "2020-05-31"
},
"missing_required_filters": [],
"selected_recipe": "address_documents_by_counterparty_v1",
"mcp_call_status_legacy": "matched_non_empty",
"account_scope_mode": "preferred",
"account_scope_fallback_applied": false,
"anchor_type": "counterparty",
"anchor_value_raw": "документами",
"anchor_value_resolved": "документами",
"resolver_confidence": "medium",
"ambiguity_count": 0,
"match_failure_stage": "materialized_but_not_anchor_matched",
"match_failure_reason": "counterparty_anchor_not_matched_in_materialized_rows",
"mcp_call_status": "matched_non_empty",
"rows_fetched": 20,
"raw_rows_received": 20,
"rows_after_account_scope": 2,
"rows_after_recipe_filter": 0,
"rows_materialized": 2,
"rows_matched": 2,
"raw_row_keys_sample": [
"Период",
"Регистратор",
"СчетДт",
"СчетКт",
"Сумма",
"Контрагент",
"Period",
"Registrator",
"Amount"
],
"materialization_drop_reason": "none",
"account_token_raw": null,
"account_token_normalized": null,
"account_scope_fields_checked": [
"account_dt",
"account_kt",
"registrator",
"analytics"
],
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
"account_scope_drop_reason": "not_applicable",
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
"limited_reason_category": null,
"response_type": "FACTUAL_LIST",
"execution_lane": "address_query",
"llm_decomposition_applied": false,
"llm_decomposition_attempted": true,
"llm_provider_used": "local",
"llm_decomposition_trace_id": "fWGwdLnz5skfYo",
"llm_decomposition_effective_message": "раскрой 62 документами на ту же дату",
"llm_decomposition_reason": "normalized_fragment_rejected_intent_conflict",
"fallback_rule_hit": null,
"sanitized_user_message": "раскрой 62 документами на ту же дату",
"tool_gate_decision": "run_address_lane",
"tool_gate_reason": "address_mode_classifier_detected",
"answer_structure_v11": null,
"investigation_state_snapshot": null,
"normalized": null,
"normalizer_output": {
"trace_id": "fWGwdLnz5skfYo",
"prompt_version": "normalizer_v2_0_2",
"applied": false,
"effective_message": "раскрой 62 документами на ту же дату"
}
},
"error_code": null,
"error_message": null
},
{
"index": 20,
"id": "F020",
"question": "покажи документы по этому же договору",
"session": "chain_contract_d",
"session_id": "asst-2026-04-02_Address_Followup_Recheck_PostFix2_17-24-40-chain_contract_d",
"status_code": 200,
"ok": true,
"elapsed_ms": 6027,
"reply_type": "partial_coverage",
"trace_id": "address-CdjfoNgyoR",
"assistant_reply": "Для точного адресного поиска не хватает обязательного якоря.\nПричина: не хватает обязательных фильтров.\nЧто нужно уточнить: уточните: contract.",
"assistant_reply_first_line": "Для точного адресного поиска не хватает обязательного якоря.",
"expected_intent": "list_documents_by_contract",
"actual_intent": "list_documents_by_contract",
"intent_match": true,
"expected_mode": "address_query",
"actual_mode": "address_query",
"mode_match": true,
"expected_reply_type": null,
"reply_match": true,
"semantic_pass": true,
"route_pass": false,
"route_health": "blocked_missing_anchor",
"strict_policy": "route",
"strict_pass": false,
"selected_recipe": "address_documents_by_contract_v1",
"missing_required_filters": [
"contract"
],
"match_failure_stage": "none",
"match_failure_reason": null,
"rows_fetched": 0,
"rows_matched": 0,
"mcp_call_status": "skipped",
"limited_reason_category": "missing_anchor",
"llm_decomposition_applied": true,
"llm_decomposition_reason": "normalized_fragment_applied",
"fallback_rule_hit": null,
"debug_payload": {
"trace_id": "address-CdjfoNgyoR",
"prompt_version": "address_query_runtime_v1",
"schema_version": "address_query_runtime_v1",
"fallback_type": "partial",
"route_summary": null,
"fragments": [],
"requirements_extracted": [],
"coverage_report": {
"requirements_total": 0,
"requirements_covered": 0,
"requirements_uncovered": [],
"requirements_partially_covered": [],
"clarification_needed_for": [],
"out_of_scope_requirements": []
},
"routes": [],
"retrieval_status": [],
"retrieval_results": [],
"answer_grounding_check": {
"status": "partial",
"route_subject_match": true,
"missing_requirements": [],
"reasons": [
"address_action_detected",
"address_entity_detected",
"document_list_signal_detected",
"documents_by_contract_signal_detected",
"missing_required_filters"
],
"why_included_summary": [],
"selection_reason_summary": []
},
"dropped_intent_segments": [],
"detected_mode": "address_query",
"detected_mode_confidence": "high",
"query_shape": "DOCUMENT_LIST",
"query_shape_confidence": "medium",
"detected_intent": "list_documents_by_contract",
"detected_intent_confidence": "medium",
"extracted_filters": {
"sort": "period_desc",
"limit": 20
},
"missing_required_filters": [
"contract"
],
"selected_recipe": "address_documents_by_contract_v1",
"mcp_call_status_legacy": "skipped",
"account_scope_mode": "strict",
"account_scope_fallback_applied": false,
"anchor_type": "unknown",
"anchor_value_raw": null,
"anchor_value_resolved": null,
"resolver_confidence": "low",
"ambiguity_count": 0,
"match_failure_stage": "none",
"match_failure_reason": null,
"mcp_call_status": "skipped",
"rows_fetched": 0,
"raw_rows_received": 0,
"rows_after_account_scope": 0,
"rows_after_recipe_filter": 0,
"rows_materialized": 0,
"rows_matched": 0,
"raw_row_keys_sample": [],
"materialization_drop_reason": "none",
"account_token_raw": null,
"account_token_normalized": null,
"account_scope_fields_checked": [
"account_dt",
"account_kt",
"registrator",
"analytics"
],
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
"account_scope_drop_reason": "not_applicable",
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
"limited_reason_category": "missing_anchor",
"response_type": "LIMITED_WITH_REASON",
"execution_lane": "address_query",
"llm_decomposition_applied": true,
"llm_decomposition_attempted": true,
"llm_provider_used": "local",
"llm_decomposition_trace_id": "8HqWWHl_5_uQpy",
"llm_decomposition_effective_message": "Показать документы по указанному договору.",
"llm_decomposition_reason": "normalized_fragment_applied",
"fallback_rule_hit": null,
"sanitized_user_message": "покажи документы по этому же договору",
"tool_gate_decision": "run_address_lane",
"tool_gate_reason": "address_mode_classifier_detected",
"answer_structure_v11": null,
"investigation_state_snapshot": null,
"normalized": null,
"normalizer_output": {
"trace_id": "8HqWWHl_5_uQpy",
"prompt_version": "normalizer_v2_0_2",
"applied": true,
"effective_message": "Показать документы по указанному договору."
}
},
"error_code": null,
"error_message": null
}
]

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
# Response Audit: 2026-04-02_Address_Followup_Recheck_PostFix2_17-24-40
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
| F014 | False | ok_or_factual | factual | list_documents_by_counterparty | None | раскрой 62 документами на ту же дату | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F015 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | вернись на 2020-12-31 по 60 | В live-данных по текущему фильтру записи не найдены. |
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F020 | False | blocked_missing_anchor | partial_coverage | list_documents_by_contract | missing_anchor | покажи документы по этому же договору | Для точного адресного поиска не хватает обязательного якоря. |
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |

View File

@ -0,0 +1,58 @@
{
"run_id": "2026-04-02_Address_Followup_Recheck_PostFix2_17-24-40",
"generated_at": "2026-04-02T17:26:20",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 25,
"ok_200_count": 25,
"semantic_pass_count": 24,
"semantic_pass_rate": 0.96,
"route_pass_count": 23,
"route_pass_rate": 0.92,
"strict_pass_count": 23,
"strict_pass_rate": 0.92,
"factual_count": 22,
"partial_coverage_count": 3,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 13,
"avg_elapsed_ms": 4910.7
},
"distributions": {
"reply_type": {
"factual": 22,
"partial_coverage": 3
},
"actual_intent": {
"list_documents_by_counterparty": 4,
"account_balance_snapshot": 9,
"documents_forming_balance": 1,
"bank_operations_by_counterparty": 2,
"list_documents_by_contract": 3,
"bank_operations_by_contract": 3,
"open_items_by_counterparty_or_contract": 3
},
"actual_mode": {
"address_query": 25
},
"mcp_call_status": {
"matched_non_empty": 22,
"no_raw_rows": 2,
"skipped": 1
},
"limited_reason_category": {
"empty_match": 2,
"missing_anchor": 1
},
"route_health": {
"ok_or_factual": 22,
"partial_non_blocking": 2,
"blocked_missing_anchor": 1
}
}
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_Followup_Recheck_PostFix3_17-32-00
Generated at: 2026-04-02T17:34:01
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 25
- ok_200_count: 25
- semantic_pass_count: 25
- semantic_pass_rate: 1.0
- route_pass_count: 25
- route_pass_rate: 1.0
- strict_pass_count: 25
- strict_pass_rate: 1.0
- factual_count: 23
- partial_coverage_count: 2
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 14
- avg_elapsed_ms: 4875.2
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
# Response Audit: 2026-04-02_Address_Followup_Recheck_PostFix3_17-32-00
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
| F014 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой 62 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| F015 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | вернись на 2020-12-31 по 60 | В live-данных по текущему фильтру записи не найдены. |
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F020 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по этому же договору | Собран список документов по договору (live address lane). |
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |

View File

@ -0,0 +1,55 @@
{
"run_id": "2026-04-02_Address_Followup_Recheck_PostFix3_17-32-00",
"generated_at": "2026-04-02T17:34:01",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 25,
"ok_200_count": 25,
"semantic_pass_count": 25,
"semantic_pass_rate": 1.0,
"route_pass_count": 25,
"route_pass_rate": 1.0,
"strict_pass_count": 25,
"strict_pass_rate": 1.0,
"factual_count": 23,
"partial_coverage_count": 2,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 14,
"avg_elapsed_ms": 4875.2
},
"distributions": {
"reply_type": {
"factual": 23,
"partial_coverage": 2
},
"actual_intent": {
"list_documents_by_counterparty": 3,
"account_balance_snapshot": 9,
"documents_forming_balance": 2,
"bank_operations_by_counterparty": 2,
"list_documents_by_contract": 3,
"bank_operations_by_contract": 3,
"open_items_by_counterparty_or_contract": 3
},
"actual_mode": {
"address_query": 25
},
"mcp_call_status": {
"matched_non_empty": 23,
"no_raw_rows": 2
},
"limited_reason_category": {
"empty_match": 2
},
"route_health": {
"ok_or_factual": 23,
"partial_non_blocking": 2
}
}
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_Followup_Recheck_PostFix_17-20-05
Generated at: 2026-04-02T17:21:46
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 25
- ok_200_count: 25
- semantic_pass_count: 23
- semantic_pass_rate: 0.92
- route_pass_count: 22
- route_pass_rate: 0.88
- strict_pass_count: 22
- strict_pass_rate: 0.88
- factual_count: 23
- partial_coverage_count: 2
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 13
- avg_elapsed_ms: 4925.8
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
# Response Audit: 2026-04-02_Address_Followup_Recheck_PostFix_17-20-05
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
| F014 | False | ok_or_factual | factual | list_documents_by_counterparty | None | раскрой 62 документами на ту же дату | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F015 | False | ok_or_factual | factual | list_documents_by_counterparty | None | вернись на 2020-12-31 по 60 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F020 | False | blocked_missing_anchor | partial_coverage | list_documents_by_contract | missing_anchor | покажи документы по этому же договору | Для точного адресного поиска не хватает обязательного якоря. |
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |

View File

@ -0,0 +1,58 @@
{
"run_id": "2026-04-02_Address_Followup_Recheck_PostFix_17-20-05",
"generated_at": "2026-04-02T17:21:46",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 25,
"ok_200_count": 25,
"semantic_pass_count": 23,
"semantic_pass_rate": 0.92,
"route_pass_count": 22,
"route_pass_rate": 0.88,
"strict_pass_count": 22,
"strict_pass_rate": 0.88,
"factual_count": 23,
"partial_coverage_count": 2,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 13,
"avg_elapsed_ms": 4925.8
},
"distributions": {
"reply_type": {
"factual": 23,
"partial_coverage": 2
},
"actual_intent": {
"list_documents_by_counterparty": 5,
"account_balance_snapshot": 8,
"documents_forming_balance": 1,
"bank_operations_by_counterparty": 2,
"list_documents_by_contract": 3,
"bank_operations_by_contract": 3,
"open_items_by_counterparty_or_contract": 3
},
"actual_mode": {
"address_query": 25
},
"mcp_call_status": {
"matched_non_empty": 23,
"no_raw_rows": 1,
"skipped": 1
},
"limited_reason_category": {
"empty_match": 1,
"missing_anchor": 1
},
"route_health": {
"ok_or_factual": 23,
"partial_non_blocking": 1,
"blocked_missing_anchor": 1
}
}
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_Nightly_followup_25_16-45-27
Generated at: 2026-04-02T16:47:27
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 25
- ok_200_count: 25
- semantic_pass_count: 25
- semantic_pass_rate: 1.0
- route_pass_count: 25
- route_pass_rate: 1.0
- strict_pass_count: 25
- strict_pass_rate: 1.0
- factual_count: 23
- partial_coverage_count: 2
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 13
- avg_elapsed_ms: 4794
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

View File

@ -0,0 +1,29 @@
# Response Audit: 2026-04-02_Address_Nightly_followup_25_16-45-27
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
| F014 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой 62 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| F015 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | вернись на 2020-12-31 по 60 | В live-данных по текущему фильтру записи не найдены. |
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F020 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по этому же договору | Собран список документов по договору (live address lane). |
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |

View File

@ -0,0 +1,55 @@
{
"run_id": "2026-04-02_Address_Nightly_followup_25_16-45-27",
"generated_at": "2026-04-02T16:47:27",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 25,
"ok_200_count": 25,
"semantic_pass_count": 25,
"semantic_pass_rate": 1.0,
"route_pass_count": 25,
"route_pass_rate": 1.0,
"strict_pass_count": 25,
"strict_pass_rate": 1.0,
"factual_count": 23,
"partial_coverage_count": 2,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 13,
"avg_elapsed_ms": 4794
},
"distributions": {
"reply_type": {
"factual": 23,
"partial_coverage": 2
},
"actual_intent": {
"list_documents_by_counterparty": 3,
"account_balance_snapshot": 9,
"documents_forming_balance": 2,
"bank_operations_by_counterparty": 2,
"list_documents_by_contract": 3,
"bank_operations_by_contract": 3,
"open_items_by_counterparty_or_contract": 3
},
"actual_mode": {
"address_query": 25
},
"mcp_call_status": {
"matched_non_empty": 23,
"no_raw_rows": 2
},
"limited_reason_category": {
"empty_match": 2
},
"route_health": {
"ok_or_factual": 23,
"partial_non_blocking": 2
}
}
}

View File

@ -0,0 +1,67 @@
{
"generated_at": "2026-04-02T16:47:27",
"overall_pass": true,
"baseline": {
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5\\run_summary.json",
"run_id": "2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5",
"questions_total": 25,
"strict_pass_rate": 1.0,
"route_pass_rate": 1.0,
"execution_error_count": 0,
"false_factual_rate": 0.0,
"notes": [
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
"false_factual_rate derived from false_factual_count/questions_total"
]
},
"candidate": {
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_followup_25_16-45-27\\run_summary.json",
"run_id": "2026-04-02_Address_Nightly_followup_25_16-45-27",
"questions_total": 25,
"strict_pass_rate": 1.0,
"route_pass_rate": 1.0,
"execution_error_count": 0,
"false_factual_rate": 0.0,
"notes": [
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
"false_factual_rate derived from false_factual_count/questions_total"
]
},
"checks": [
{
"metric": "strict_pass_rate",
"passed": true,
"baseline": 1.0,
"candidate": 1.0,
"rule": "candidate >= baseline"
},
{
"metric": "route_pass_rate",
"passed": true,
"baseline": 1.0,
"candidate": 1.0,
"rule": "candidate >= baseline"
},
{
"metric": "execution_error_count",
"passed": true,
"baseline": 0,
"candidate": 0,
"rule": "candidate <= baseline"
},
{
"metric": "false_factual_rate",
"passed": true,
"baseline": 0.0,
"candidate": 0.0,
"rule": "candidate <= baseline"
},
{
"metric": "questions_total_match",
"passed": true,
"baseline": 25,
"candidate": 25,
"rule": "candidate == baseline"
}
]
}

View File

@ -0,0 +1,23 @@
{
"generated_at": "2026-04-02T16:47:27",
"total": 1,
"passed": 1,
"failed": 0,
"results": [
{
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_followup_25_16-45-27",
"valid": true,
"errors": [],
"warnings": [],
"metrics": {
"run_id": "2026-04-02_Address_Nightly_followup_25_16-45-27",
"questions_total": 25,
"route_pass_rate": 1.0,
"strict_pass_rate": 1.0,
"http_error_count": 0,
"rows_count": 25,
"failures_count": 0
}
}
]
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_Nightly_stress_102_16-35-15
Generated at: 2026-04-02T16:45:27
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_slang_stress_full_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 102
- ok_200_count: 102
- semantic_pass_count: 102
- semantic_pass_rate: 1.0
- route_pass_count: 102
- route_pass_rate: 1.0
- strict_pass_count: 102
- strict_pass_rate: 1.0
- factual_count: 97
- partial_coverage_count: 5
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 78
- avg_elapsed_ms: 5992.8
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

View File

@ -0,0 +1,106 @@
# Response Audit: 2026-04-02_Address_Nightly_stress_102_16-35-15
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| S001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк доки за 2020 покаж пж | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | покеж все доки по свк за 20 год | Собран список документов по контрагенту (live address lane). |
| S003 | True | ok_or_factual | factual | list_documents_by_counterparty | None | дай список документов по свк за 2020 | Собран список документов по контрагенту (live address lane). |
| S004 | True | ok_or_factual | factual | list_documents_by_counterparty | None | какие у свк есть доки за 2020? | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S005 | True | ok_or_factual | factual | list_documents_by_counterparty | None | че по свк по докам за 2020 год | Собран список документов по контрагенту (live address lane). |
| S006 | True | ok_or_factual | factual | list_documents_by_counterparty | None | ёпт покажи доки по свк за 2020 | Собран список документов по контрагенту (live address lane). |
| S007 | True | ok_or_factual | factual | list_documents_by_counterparty | None | бля, доки свк 2020 вывали | Собран список документов по контрагенту (live address lane). |
| S008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | svk docs for 2020 please | Собран список документов по контрагенту (live address lane). |
| S009 | True | ok_or_factual | factual | list_documents_by_counterparty | None | docs by counterparty svk year 2020 | Собран список документов по контрагенту (live address lane). |
| S010 | True | ok_or_factual | factual | list_documents_by_counterparty | None | по контрагенту свк покаж документы за 2020 | Собран список документов по контрагенту (live address lane). |
| S011 | True | ok_or_factual | factual | list_documents_by_counterparty | None | плс доки по свк 2020 | Собран список документов по контрагенту (live address lane). |
| S012 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк док за 2020 гони | Собран список документов по контрагенту (live address lane). |
| S013 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | по свк банковские операции за 2020 покаж | Собран список банковских операций по контрагенту (live address lane). |
| S014 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк выписка банка 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S015 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | платежи по свк за 2020 выведи | Собран список банковских операций по контрагенту (live address lane). |
| S016 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | оплаты по свк за 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S017 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк банк опер за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S018 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | че у свк по банку за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S019 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк списания/поступления за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S020 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | bank ops by svk for 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S021 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | transactions by counterparty svk 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S022 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | бля, по свк банковские платежки 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S023 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо по счету 60.01 на дату 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
| S024 | True | ok_or_factual | factual | account_balance_snapshot | None | остаток по счету 60.01 на 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
| S025 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи остаток по 60.01 за май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S026 | True | ok_or_factual | factual | account_balance_snapshot | None | счет 60 остаток на май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S027 | True | ok_or_factual | factual | account_balance_snapshot | None | баланс account 60.01 as of 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
| S028 | True | ok_or_factual | factual | account_balance_snapshot | None | 60.01 saldo на 31.07.2020 | Адресный срез по счету собран (по движениям live MCP). |
| S029 | True | ok_or_factual | factual | account_balance_snapshot | None | сколько на счете 60 на конец 2020-05 | Адресный срез по счету собран (по движениям live MCP). |
| S030 | True | ok_or_factual | factual | account_balance_snapshot | None | дай остаток 60.02 на 2020-12-31 | Адресный срез по счету собран (по движениям live MCP). |
| S031 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | епт, сальдо по счету 62.01 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| S032 | True | ok_or_factual | factual | account_balance_snapshot | None | плс остаток по счету 51 на 2020-06-30 | Адресный срез по счету собран (по движениям live MCP). |
| S033 | True | ok_or_factual | factual | account_balance_snapshot | None | как там по счету 60.01 на 2020.07? | Адресный срез по счету собран (по движениям live MCP). |
| S034 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо 60 на 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S035 | True | ok_or_factual | factual | documents_forming_balance | None | какие документы формируют остаток по счету 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S036 | True | ok_or_factual | factual | documents_forming_balance | None | из чего состоит остаток по счету 60 на 2020.05 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S037 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток 60.01 по документам на конец июля 2020 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S038 | True | ok_or_factual | factual | documents_forming_balance | None | доки под остатком 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S039 | True | ok_or_factual | factual | documents_forming_balance | None | documents forming balance for account 60.01 as of 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S040 | True | ok_or_factual | factual | documents_forming_balance | None | бля, какие доки формируют остаток 60.01 на 2020-05-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S041 | True | partial_non_blocking | partial_coverage | documents_forming_balance | empty_match | по счету 62.01 раскрой остаток документами на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| S042 | True | ok_or_factual | factual | documents_forming_balance | None | из чего остаток по счету 51 на 2020-06-30 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S043 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| S044 | True | ok_or_factual | factual | list_documents_by_contract | None | доки по дог. 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| S045 | True | ok_or_factual | factual | list_documents_by_contract | None | какие документы по контракту 19/15 | Собран список документов по договору (live address lane). |
| S046 | True | ok_or_factual | factual | list_documents_by_contract | None | docs by contract 19/15 year 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| S047 | True | ok_or_factual | factual | list_documents_by_contract | None | бля, покажи по договору 19/15 доки | Собран список документов по договору (live address lane). |
| S048 | True | ok_or_factual | factual | list_documents_by_contract | None | договор 19/15 документы | Собран список документов по договору (live address lane). |
| S049 | True | ok_or_factual | factual | list_documents_by_contract | None | плс документы договор №19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S050 | True | ok_or_factual | factual | list_documents_by_contract | None | покеж документы по 19/15 | Собран список документов по договору (live address lane). |
| S051 | True | ok_or_factual | factual | bank_operations_by_contract | None | банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| S052 | True | ok_or_factual | factual | bank_operations_by_contract | None | платежи по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| S053 | True | ok_or_factual | factual | bank_operations_by_contract | None | выписка по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| S054 | True | ok_or_factual | factual | bank_operations_by_contract | None | bank ops by contract 19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S055 | True | ok_or_factual | factual | bank_operations_by_contract | None | ёпт, покажи банк операции по дог 19/15 | Собран список банковских операций по договору (live address lane). |
| S056 | True | ok_or_factual | factual | bank_operations_by_contract | None | по контракту 19/15 платежки | Собран список банковских операций по договору (live address lane). |
| S057 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи сальдо по счету 60 за 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S058 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S059 | True | ok_or_factual | factual | account_balance_snapshot | None | ок, теперь 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
| S060 | True | ok_or_factual | factual | account_balance_snapshot | None | теперь на 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
| X001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк доки кинь за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | по свк все документы за 20й год | Собран список документов по контрагенту (live address lane). |
| X003 | True | ok_or_factual | factual | list_documents_by_counterparty | None | пж вывали доки контрагент свк 2020 | Собран список документов по контрагенту (live address lane). |
| X004 | True | ok_or_factual | factual | list_documents_by_counterparty | None | svk poka docy za 2020 | Собран список документов по контрагенту (live address lane). |
| X005 | True | ok_or_factual | factual | list_documents_by_counterparty | None | какие доки по компании свк за 2020 | Собран список документов по контрагенту (live address lane). |
| X006 | True | ok_or_factual | factual | list_documents_by_counterparty | None | бля покаж свк документы 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк банк операции за 2020 | Собран список банковских операций по контрагенту (live address lane). |
| X008 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | по свк выписку банка за 2020 выведи | Собран список банковских операций по контрагенту (live address lane). |
| X009 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк платежки за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X010 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | bank ops svk 2020 | Собран список банковских операций по контрагенту (live address lane). |
| X011 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | транзакции по свк за 2020 | Собран список банковских операций по контрагенту (live address lane). |
| X012 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | ёпт по свк че по банку 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X013 | True | ok_or_factual | factual | account_balance_snapshot | None | остаток по 60.01 на 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
| X014 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо 60.01 на 31.07.2020 | Адресный срез по счету собран (по движениям live MCP). |
| X015 | True | ok_or_factual | factual | account_balance_snapshot | None | что на счете 60 на 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
| X016 | True | ok_or_factual | factual | account_balance_snapshot | None | дай остаток 62.01 на 2020 май | Адресный срез по счету собран (по движениям live MCP). |
| X017 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | saldo account 60 as of 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| X018 | True | ok_or_factual | factual | account_balance_snapshot | None | плиз остаток по счету 51 на 2020-06-30 | Адресный срез по счету собран (по движениям live MCP). |
| X019 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | скока по 60.02 на конец 2020-12 | В live-данных по текущему фильтру записи не найдены. |
| X020 | True | ok_or_factual | factual | account_balance_snapshot | None | бля сальдо 60.01 на 2020-05-31 | Адресный срез по счету собран (по движениям live MCP). |
| X021 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток 60.01 по документам на конец июля 2020 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X022 | True | ok_or_factual | factual | documents_forming_balance | None | доки под остатком 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X023 | True | ok_or_factual | factual | documents_forming_balance | None | из чего остаток 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X024 | True | ok_or_factual | factual | documents_forming_balance | None | какие документы формируют остаток по 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X025 | True | ok_or_factual | factual | documents_forming_balance | None | docs forming balance 60.01 as of 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X026 | True | partial_non_blocking | partial_coverage | documents_forming_balance | empty_match | раскидай остаток 62.01 по докам на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| X027 | True | ok_or_factual | factual | documents_forming_balance | None | по счету 51 раскрой остаток документами на 2020-06-30 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X028 | True | ok_or_factual | factual | documents_forming_balance | None | бля из чего состоит остаток по 60.01 на 2020-05-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X029 | True | ok_or_factual | factual | list_documents_by_contract | None | доки по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| X030 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы контракт 19/15 | Собран список документов по договору (live address lane). |
| X031 | True | ok_or_factual | factual | list_documents_by_contract | None | docs by contract 19/15 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| X032 | True | ok_or_factual | factual | list_documents_by_contract | None | по дог 19/15 какие документы | Собран список документов по договору (live address lane). |
| X033 | True | ok_or_factual | factual | list_documents_by_contract | None | договор 19/15 выведи доки | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X034 | True | ok_or_factual | factual | list_documents_by_contract | None | нах покажи документы по 19/15 | Собран список документов по договору (live address lane). |
| X035 | True | ok_or_factual | factual | bank_operations_by_contract | None | банк операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| X036 | True | ok_or_factual | factual | bank_operations_by_contract | None | платежки по дог 19/15 | Собран список банковских операций по договору (live address lane). |
| X037 | True | ok_or_factual | factual | bank_operations_by_contract | None | выписка по контракту 19/15 | Собран список банковских операций по договору (live address lane). |
| X038 | True | ok_or_factual | factual | bank_operations_by_contract | None | bank ops by contract 19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X039 | True | ok_or_factual | factual | bank_operations_by_contract | None | покажи банк опер по дог 19/15 пж | Собран список банковских операций по договору (live address lane). |
| X040 | True | ok_or_factual | factual | bank_operations_by_contract | None | епт транзакции договор 19/15 | Собран список банковских операций по договору (live address lane). |
| X041 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи сальдо по счету 60 за 2020 | Адресный срез по счету собран (по движениям live MCP). |
| X042 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |

View File

@ -0,0 +1,54 @@
{
"run_id": "2026-04-02_Address_Nightly_stress_102_16-35-15",
"generated_at": "2026-04-02T16:45:27",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_slang_stress_full_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 102,
"ok_200_count": 102,
"semantic_pass_count": 102,
"semantic_pass_rate": 1.0,
"route_pass_count": 102,
"route_pass_rate": 1.0,
"strict_pass_count": 102,
"strict_pass_rate": 1.0,
"factual_count": 97,
"partial_coverage_count": 5,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 78,
"avg_elapsed_ms": 5992.8
},
"distributions": {
"reply_type": {
"factual": 97,
"partial_coverage": 5
},
"actual_intent": {
"list_documents_by_counterparty": 18,
"bank_operations_by_counterparty": 16,
"account_balance_snapshot": 26,
"documents_forming_balance": 16,
"list_documents_by_contract": 14,
"bank_operations_by_contract": 12
},
"actual_mode": {
"address_query": 102
},
"mcp_call_status": {
"matched_non_empty": 97,
"no_raw_rows": 5
},
"limited_reason_category": {
"empty_match": 5
},
"route_health": {
"ok_or_factual": 97,
"partial_non_blocking": 5
}
}
}

View File

@ -0,0 +1,67 @@
{
"generated_at": "2026-04-02T16:45:27",
"overall_pass": true,
"baseline": {
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27\\run_summary.json",
"run_id": "2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27",
"questions_total": 102,
"strict_pass_rate": 1.0,
"route_pass_rate": 1.0,
"execution_error_count": 0,
"false_factual_rate": 0.0,
"notes": [
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
"false_factual_rate derived from false_factual_count/questions_total"
]
},
"candidate": {
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_stress_102_16-35-15\\run_summary.json",
"run_id": "2026-04-02_Address_Nightly_stress_102_16-35-15",
"questions_total": 102,
"strict_pass_rate": 1.0,
"route_pass_rate": 1.0,
"execution_error_count": 0,
"false_factual_rate": 0.0,
"notes": [
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
"false_factual_rate derived from false_factual_count/questions_total"
]
},
"checks": [
{
"metric": "strict_pass_rate",
"passed": true,
"baseline": 1.0,
"candidate": 1.0,
"rule": "candidate >= baseline"
},
{
"metric": "route_pass_rate",
"passed": true,
"baseline": 1.0,
"candidate": 1.0,
"rule": "candidate >= baseline"
},
{
"metric": "execution_error_count",
"passed": true,
"baseline": 0,
"candidate": 0,
"rule": "candidate <= baseline"
},
{
"metric": "false_factual_rate",
"passed": true,
"baseline": 0.0,
"candidate": 0.0,
"rule": "candidate <= baseline"
},
{
"metric": "questions_total_match",
"passed": true,
"baseline": 102,
"candidate": 102,
"rule": "candidate == baseline"
}
]
}

View File

@ -0,0 +1,23 @@
{
"generated_at": "2026-04-02T16:45:27",
"total": 1,
"passed": 1,
"failed": 0,
"results": [
{
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_stress_102_16-35-15",
"valid": true,
"errors": [],
"warnings": [],
"metrics": {
"run_id": "2026-04-02_Address_Nightly_stress_102_16-35-15",
"questions_total": 102,
"route_pass_rate": 1.0,
"strict_pass_rate": 1.0,
"http_error_count": 0,
"rows_count": 102,
"failures_count": 0
}
}
]
}

View File

@ -0,0 +1,22 @@
# 2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15
Generated at: 2026-04-02T16:47:27
Dry run: False
Strict policy: route
Overall: PASS
## Packs
### stress_102
- run_id: 2026-04-02_Address_Nightly_stress_102_16-35-15
- runner_ok: True
- validator_ok: True
- comparator_ok: True
- run_dir: X:\1C\NDC_1C\docs\ADDRESS\runs\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\2026-04-02_Address_Nightly_stress_102_16-35-15
### followup_25
- run_id: 2026-04-02_Address_Nightly_followup_25_16-45-27
- runner_ok: True
- validator_ok: True
- comparator_ok: True
- run_dir: X:\1C\NDC_1C\docs\ADDRESS\runs\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\2026-04-02_Address_Nightly_followup_25_16-45-27

View File

@ -0,0 +1,35 @@
{
"nightly_run_id": "2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15",
"generated_at": "2026-04-02T16:47:27",
"dry_run": false,
"overall_ok": true,
"strict_policy": "route",
"packs": [
{
"pack": "stress_102",
"run_id": "2026-04-02_Address_Nightly_stress_102_16-35-15",
"questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_slang_stress_full_2026-04-02.json",
"baseline_summary": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27\\run_summary.json",
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_stress_102_16-35-15",
"runner_ok": true,
"validator_ok": true,
"comparator_ok": true,
"errors": [],
"validator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_stress_102_16-35-15_validator_report.json",
"comparator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_stress_102_16-35-15_comparator_report.json"
},
{
"pack": "followup_25",
"run_id": "2026-04-02_Address_Nightly_followup_25_16-45-27",
"questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
"baseline_summary": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5\\run_summary.json",
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_followup_25_16-45-27",
"runner_ok": true,
"validator_ok": true,
"comparator_ok": true,
"errors": [],
"validator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_followup_25_16-45-27_validator_report.json",
"comparator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-35-15\\2026-04-02_Address_Nightly_followup_25_16-45-27_comparator_report.json"
}
]
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_Nightly_followup_25_17-10-13
Generated at: 2026-04-02T17:12:20
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 25
- ok_200_count: 25
- semantic_pass_count: 23
- semantic_pass_rate: 0.92
- route_pass_count: 23
- route_pass_rate: 0.92
- strict_pass_count: 23
- strict_pass_rate: 0.92
- factual_count: 24
- partial_coverage_count: 1
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 13
- avg_elapsed_ms: 5077.5
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

View File

@ -0,0 +1,29 @@
# Response Audit: 2026-04-02_Address_Nightly_followup_25_17-10-13
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
| F014 | False | ok_or_factual | factual | list_documents_by_counterparty | None | раскрой 62 документами на ту же дату | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F015 | False | ok_or_factual | factual | list_documents_by_counterparty | None | вернись на 2020-12-31 по 60 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F020 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по этому же договору | Собран список документов по договору (live address lane). |
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |

View File

@ -0,0 +1,55 @@
{
"run_id": "2026-04-02_Address_Nightly_followup_25_17-10-13",
"generated_at": "2026-04-02T17:12:20",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 25,
"ok_200_count": 25,
"semantic_pass_count": 23,
"semantic_pass_rate": 0.92,
"route_pass_count": 23,
"route_pass_rate": 0.92,
"strict_pass_count": 23,
"strict_pass_rate": 0.92,
"factual_count": 24,
"partial_coverage_count": 1,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 13,
"avg_elapsed_ms": 5077.5
},
"distributions": {
"reply_type": {
"factual": 24,
"partial_coverage": 1
},
"actual_intent": {
"list_documents_by_counterparty": 5,
"account_balance_snapshot": 8,
"documents_forming_balance": 1,
"bank_operations_by_counterparty": 2,
"list_documents_by_contract": 3,
"bank_operations_by_contract": 3,
"open_items_by_counterparty_or_contract": 3
},
"actual_mode": {
"address_query": 25
},
"mcp_call_status": {
"matched_non_empty": 24,
"no_raw_rows": 1
},
"limited_reason_category": {
"empty_match": 1
},
"route_health": {
"ok_or_factual": 24,
"partial_non_blocking": 1
}
}
}

View File

@ -0,0 +1,67 @@
{
"generated_at": "2026-04-02T17:12:20",
"overall_pass": false,
"baseline": {
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5\\run_summary.json",
"run_id": "2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5",
"questions_total": 25,
"strict_pass_rate": 1.0,
"route_pass_rate": 1.0,
"execution_error_count": 0,
"false_factual_rate": 0.0,
"notes": [
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
"false_factual_rate derived from false_factual_count/questions_total"
]
},
"candidate": {
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_followup_25_17-10-13\\run_summary.json",
"run_id": "2026-04-02_Address_Nightly_followup_25_17-10-13",
"questions_total": 25,
"strict_pass_rate": 0.92,
"route_pass_rate": 0.92,
"execution_error_count": 0,
"false_factual_rate": 0.0,
"notes": [
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
"false_factual_rate derived from false_factual_count/questions_total"
]
},
"checks": [
{
"metric": "strict_pass_rate",
"passed": false,
"baseline": 1.0,
"candidate": 0.92,
"rule": "candidate >= baseline"
},
{
"metric": "route_pass_rate",
"passed": false,
"baseline": 1.0,
"candidate": 0.92,
"rule": "candidate >= baseline"
},
{
"metric": "execution_error_count",
"passed": true,
"baseline": 0,
"candidate": 0,
"rule": "candidate <= baseline"
},
{
"metric": "false_factual_rate",
"passed": true,
"baseline": 0.0,
"candidate": 0.0,
"rule": "candidate <= baseline"
},
{
"metric": "questions_total_match",
"passed": true,
"baseline": 25,
"candidate": 25,
"rule": "candidate == baseline"
}
]
}

View File

@ -0,0 +1,23 @@
{
"generated_at": "2026-04-02T17:12:20",
"total": 1,
"passed": 1,
"failed": 0,
"results": [
{
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_followup_25_17-10-13",
"valid": true,
"errors": [],
"warnings": [],
"metrics": {
"run_id": "2026-04-02_Address_Nightly_followup_25_17-10-13",
"questions_total": 25,
"route_pass_rate": 0.92,
"strict_pass_rate": 0.92,
"http_error_count": 0,
"rows_count": 25,
"failures_count": 2
}
}
]
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_Nightly_stress_102_16-59-46
Generated at: 2026-04-02T17:10:13
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_slang_stress_full_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 102
- ok_200_count: 102
- semantic_pass_count: 102
- semantic_pass_rate: 1.0
- route_pass_count: 102
- route_pass_rate: 1.0
- strict_pass_count: 102
- strict_pass_rate: 1.0
- factual_count: 96
- partial_coverage_count: 6
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 75
- avg_elapsed_ms: 6142.3
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

View File

@ -0,0 +1,106 @@
# Response Audit: 2026-04-02_Address_Nightly_stress_102_16-59-46
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| S001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк доки за 2020 покаж пж | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | покеж все доки по свк за 20 год | Собран список документов по контрагенту (live address lane). |
| S003 | True | ok_or_factual | factual | list_documents_by_counterparty | None | дай список документов по свк за 2020 | Собран список документов по контрагенту (live address lane). |
| S004 | True | ok_or_factual | factual | list_documents_by_counterparty | None | какие у свк есть доки за 2020? | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S005 | True | ok_or_factual | factual | list_documents_by_counterparty | None | че по свк по докам за 2020 год | Собран список документов по контрагенту (live address lane). |
| S006 | True | ok_or_factual | factual | list_documents_by_counterparty | None | ёпт покажи доки по свк за 2020 | Собран список документов по контрагенту (live address lane). |
| S007 | True | ok_or_factual | factual | list_documents_by_counterparty | None | бля, доки свк 2020 вывали | Собран список документов по контрагенту (live address lane). |
| S008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | svk docs for 2020 please | Собран список документов по контрагенту (live address lane). |
| S009 | True | ok_or_factual | factual | list_documents_by_counterparty | None | docs by counterparty svk year 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S010 | True | ok_or_factual | factual | list_documents_by_counterparty | None | по контрагенту свк покаж документы за 2020 | Собран список документов по контрагенту (live address lane). |
| S011 | True | ok_or_factual | factual | list_documents_by_counterparty | None | плс доки по свк 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S012 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк док за 2020 гони | Собран список документов по контрагенту (live address lane). |
| S013 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | по свк банковские операции за 2020 покаж | Собран список банковских операций по контрагенту (live address lane). |
| S014 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк выписка банка 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S015 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | платежи по свк за 2020 выведи | Собран список банковских операций по контрагенту (live address lane). |
| S016 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | оплаты по свк за 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S017 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк банк опер за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S018 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | че у свк по банку за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S019 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк списания/поступления за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S020 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | bank ops by svk for 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S021 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | transactions by counterparty svk 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S022 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | бля, по свк банковские платежки 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S023 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо по счету 60.01 на дату 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
| S024 | True | ok_or_factual | factual | account_balance_snapshot | None | остаток по счету 60.01 на 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
| S025 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи остаток по 60.01 за май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S026 | True | ok_or_factual | factual | account_balance_snapshot | None | счет 60 остаток на май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S027 | True | ok_or_factual | factual | account_balance_snapshot | None | баланс account 60.01 as of 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
| S028 | True | ok_or_factual | factual | account_balance_snapshot | None | 60.01 saldo на 31.07.2020 | Адресный срез по счету собран (по движениям live MCP). |
| S029 | True | ok_or_factual | factual | account_balance_snapshot | None | сколько на счете 60 на конец 2020-05 | Адресный срез по счету собран (по движениям live MCP). |
| S030 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | дай остаток 60.02 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| S031 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | епт, сальдо по счету 62.01 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| S032 | True | ok_or_factual | factual | account_balance_snapshot | None | плс остаток по счету 51 на 2020-06-30 | Адресный срез по счету собран (по движениям live MCP). |
| S033 | True | ok_or_factual | factual | account_balance_snapshot | None | как там по счету 60.01 на 2020.07? | Адресный срез по счету собран (по движениям live MCP). |
| S034 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо 60 на 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S035 | True | ok_or_factual | factual | documents_forming_balance | None | какие документы формируют остаток по счету 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S036 | True | ok_or_factual | factual | documents_forming_balance | None | из чего состоит остаток по счету 60 на 2020.05 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S037 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток 60.01 по документам на конец июля 2020 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S038 | True | ok_or_factual | factual | documents_forming_balance | None | доки под остатком 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S039 | True | ok_or_factual | factual | documents_forming_balance | None | documents forming balance for account 60.01 as of 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S040 | True | ok_or_factual | factual | documents_forming_balance | None | бля, какие доки формируют остаток 60.01 на 2020-05-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S041 | True | partial_non_blocking | partial_coverage | documents_forming_balance | empty_match | по счету 62.01 раскрой остаток документами на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| S042 | True | ok_or_factual | factual | documents_forming_balance | None | из чего остаток по счету 51 на 2020-06-30 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S043 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| S044 | True | ok_or_factual | factual | list_documents_by_contract | None | доки по дог. 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| S045 | True | ok_or_factual | factual | list_documents_by_contract | None | какие документы по контракту 19/15 | Собран список документов по договору (live address lane). |
| S046 | True | ok_or_factual | factual | list_documents_by_contract | None | docs by contract 19/15 year 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| S047 | True | ok_or_factual | factual | list_documents_by_contract | None | бля, покажи по договору 19/15 доки | Собран список документов по договору (live address lane). |
| S048 | True | ok_or_factual | factual | list_documents_by_contract | None | договор 19/15 документы | Собран список документов по договору (live address lane). |
| S049 | True | ok_or_factual | factual | list_documents_by_contract | None | плс документы договор №19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S050 | True | ok_or_factual | factual | list_documents_by_contract | None | покеж документы по 19/15 | Собран список документов по договору (live address lane). |
| S051 | True | ok_or_factual | factual | bank_operations_by_contract | None | банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| S052 | True | ok_or_factual | factual | bank_operations_by_contract | None | платежи по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| S053 | True | ok_or_factual | factual | bank_operations_by_contract | None | выписка по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| S054 | True | ok_or_factual | factual | bank_operations_by_contract | None | bank ops by contract 19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S055 | True | ok_or_factual | factual | bank_operations_by_contract | None | ёпт, покажи банк операции по дог 19/15 | Собран список банковских операций по договору (live address lane). |
| S056 | True | ok_or_factual | factual | bank_operations_by_contract | None | по контракту 19/15 платежки | Собран список банковских операций по договору (live address lane). |
| S057 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи сальдо по счету 60 за 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S058 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S059 | True | ok_or_factual | factual | account_balance_snapshot | None | ок, теперь 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
| S060 | True | ok_or_factual | factual | account_balance_snapshot | None | теперь на 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
| X001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк доки кинь за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | по свк все документы за 20й год | Собран список документов по контрагенту (live address lane). |
| X003 | True | ok_or_factual | factual | list_documents_by_counterparty | None | пж вывали доки контрагент свк 2020 | Собран список документов по контрагенту (live address lane). |
| X004 | True | ok_or_factual | factual | list_documents_by_counterparty | None | svk poka docy za 2020 | Собран список документов по контрагенту (live address lane). |
| X005 | True | ok_or_factual | factual | list_documents_by_counterparty | None | какие доки по компании свк за 2020 | Собран список документов по контрагенту (live address lane). |
| X006 | True | ok_or_factual | factual | list_documents_by_counterparty | None | бля покаж свк документы 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк банк операции за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X008 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | по свк выписку банка за 2020 выведи | Собран список банковских операций по контрагенту (live address lane). |
| X009 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк платежки за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X010 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | bank ops svk 2020 | Собран список банковских операций по контрагенту (live address lane). |
| X011 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | транзакции по свк за 2020 | Собран список банковских операций по контрагенту (live address lane). |
| X012 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | ёпт по свк че по банку 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X013 | True | ok_or_factual | factual | account_balance_snapshot | None | остаток по 60.01 на 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
| X014 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо 60.01 на 31.07.2020 | Адресный срез по счету собран (по движениям live MCP). |
| X015 | True | ok_or_factual | factual | account_balance_snapshot | None | что на счете 60 на 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
| X016 | True | ok_or_factual | factual | account_balance_snapshot | None | дай остаток 62.01 на 2020 май | Адресный срез по счету собран (по движениям live MCP). |
| X017 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | saldo account 60 as of 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| X018 | True | ok_or_factual | factual | account_balance_snapshot | None | плиз остаток по счету 51 на 2020-06-30 | Адресный срез по счету собран (по движениям live MCP). |
| X019 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | скока по 60.02 на конец 2020-12 | В live-данных по текущему фильтру записи не найдены. |
| X020 | True | ok_or_factual | factual | account_balance_snapshot | None | бля сальдо 60.01 на 2020-05-31 | Адресный срез по счету собран (по движениям live MCP). |
| X021 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток 60.01 по документам на конец июля 2020 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X022 | True | ok_or_factual | factual | documents_forming_balance | None | доки под остатком 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X023 | True | ok_or_factual | factual | documents_forming_balance | None | из чего остаток 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X024 | True | ok_or_factual | factual | documents_forming_balance | None | какие документы формируют остаток по 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X025 | True | ok_or_factual | factual | documents_forming_balance | None | docs forming balance 60.01 as of 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X026 | True | partial_non_blocking | partial_coverage | documents_forming_balance | empty_match | раскидай остаток 62.01 по докам на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| X027 | True | ok_or_factual | factual | documents_forming_balance | None | по счету 51 раскрой остаток документами на 2020-06-30 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X028 | True | ok_or_factual | factual | documents_forming_balance | None | бля из чего состоит остаток по 60.01 на 2020-05-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X029 | True | ok_or_factual | factual | list_documents_by_contract | None | доки по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| X030 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы контракт 19/15 | Собран список документов по договору (live address lane). |
| X031 | True | ok_or_factual | factual | list_documents_by_contract | None | docs by contract 19/15 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| X032 | True | ok_or_factual | factual | list_documents_by_contract | None | по дог 19/15 какие документы | Собран список документов по договору (live address lane). |
| X033 | True | ok_or_factual | factual | list_documents_by_contract | None | договор 19/15 выведи доки | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X034 | True | ok_or_factual | factual | list_documents_by_contract | None | нах покажи документы по 19/15 | Собран список документов по договору (live address lane). |
| X035 | True | ok_or_factual | factual | bank_operations_by_contract | None | банк операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| X036 | True | ok_or_factual | factual | bank_operations_by_contract | None | платежки по дог 19/15 | Собран список банковских операций по договору (live address lane). |
| X037 | True | ok_or_factual | factual | bank_operations_by_contract | None | выписка по контракту 19/15 | Собран список банковских операций по договору (live address lane). |
| X038 | True | ok_or_factual | factual | bank_operations_by_contract | None | bank ops by contract 19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X039 | True | ok_or_factual | factual | bank_operations_by_contract | None | покажи банк опер по дог 19/15 пж | Собран список банковских операций по договору (live address lane). |
| X040 | True | ok_or_factual | factual | bank_operations_by_contract | None | епт транзакции договор 19/15 | Собран список банковских операций по договору (live address lane). |
| X041 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи сальдо по счету 60 за 2020 | Адресный срез по счету собран (по движениям live MCP). |
| X042 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |

View File

@ -0,0 +1,54 @@
{
"run_id": "2026-04-02_Address_Nightly_stress_102_16-59-46",
"generated_at": "2026-04-02T17:10:13",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_slang_stress_full_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 102,
"ok_200_count": 102,
"semantic_pass_count": 102,
"semantic_pass_rate": 1.0,
"route_pass_count": 102,
"route_pass_rate": 1.0,
"strict_pass_count": 102,
"strict_pass_rate": 1.0,
"factual_count": 96,
"partial_coverage_count": 6,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 75,
"avg_elapsed_ms": 6142.3
},
"distributions": {
"reply_type": {
"factual": 96,
"partial_coverage": 6
},
"actual_intent": {
"list_documents_by_counterparty": 18,
"bank_operations_by_counterparty": 16,
"account_balance_snapshot": 26,
"documents_forming_balance": 16,
"list_documents_by_contract": 14,
"bank_operations_by_contract": 12
},
"actual_mode": {
"address_query": 102
},
"mcp_call_status": {
"matched_non_empty": 96,
"no_raw_rows": 6
},
"limited_reason_category": {
"empty_match": 6
},
"route_health": {
"ok_or_factual": 96,
"partial_non_blocking": 6
}
}
}

View File

@ -0,0 +1,67 @@
{
"generated_at": "2026-04-02T17:10:13",
"overall_pass": true,
"baseline": {
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27\\run_summary.json",
"run_id": "2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27",
"questions_total": 102,
"strict_pass_rate": 1.0,
"route_pass_rate": 1.0,
"execution_error_count": 0,
"false_factual_rate": 0.0,
"notes": [
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
"false_factual_rate derived from false_factual_count/questions_total"
]
},
"candidate": {
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_stress_102_16-59-46\\run_summary.json",
"run_id": "2026-04-02_Address_Nightly_stress_102_16-59-46",
"questions_total": 102,
"strict_pass_rate": 1.0,
"route_pass_rate": 1.0,
"execution_error_count": 0,
"false_factual_rate": 0.0,
"notes": [
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
"false_factual_rate derived from false_factual_count/questions_total"
]
},
"checks": [
{
"metric": "strict_pass_rate",
"passed": true,
"baseline": 1.0,
"candidate": 1.0,
"rule": "candidate >= baseline"
},
{
"metric": "route_pass_rate",
"passed": true,
"baseline": 1.0,
"candidate": 1.0,
"rule": "candidate >= baseline"
},
{
"metric": "execution_error_count",
"passed": true,
"baseline": 0,
"candidate": 0,
"rule": "candidate <= baseline"
},
{
"metric": "false_factual_rate",
"passed": true,
"baseline": 0.0,
"candidate": 0.0,
"rule": "candidate <= baseline"
},
{
"metric": "questions_total_match",
"passed": true,
"baseline": 102,
"candidate": 102,
"rule": "candidate == baseline"
}
]
}

View File

@ -0,0 +1,23 @@
{
"generated_at": "2026-04-02T17:10:13",
"total": 1,
"passed": 1,
"failed": 0,
"results": [
{
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_stress_102_16-59-46",
"valid": true,
"errors": [],
"warnings": [],
"metrics": {
"run_id": "2026-04-02_Address_Nightly_stress_102_16-59-46",
"questions_total": 102,
"route_pass_rate": 1.0,
"strict_pass_rate": 1.0,
"http_error_count": 0,
"rows_count": 102,
"failures_count": 0
}
}
]
}

View File

@ -0,0 +1,24 @@
# 2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46
Generated at: 2026-04-02T17:12:20
Dry run: False
Strict policy: route
Overall: FAIL
## Packs
### stress_102
- run_id: 2026-04-02_Address_Nightly_stress_102_16-59-46
- runner_ok: True
- validator_ok: True
- comparator_ok: True
- run_dir: X:\1C\NDC_1C\docs\ADDRESS\runs\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\2026-04-02_Address_Nightly_stress_102_16-59-46
### followup_25
- run_id: 2026-04-02_Address_Nightly_followup_25_17-10-13
- runner_ok: True
- validator_ok: True
- comparator_ok: False
- run_dir: X:\1C\NDC_1C\docs\ADDRESS\runs\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\2026-04-02_Address_Nightly_followup_25_17-10-13
- errors:
- comparator failed with exit code 1

View File

@ -0,0 +1,36 @@
{
"nightly_run_id": "2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46",
"generated_at": "2026-04-02T17:12:20",
"dry_run": false,
"overall_ok": false,
"strict_policy": "route",
"packs": [
{
"pack": "stress_102",
"run_id": "2026-04-02_Address_Nightly_stress_102_16-59-46",
"questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_slang_stress_full_2026-04-02.json",
"baseline_summary": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27\\run_summary.json",
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_stress_102_16-59-46",
"runner_ok": true,
"validator_ok": true,
"comparator_ok": true,
"errors": [],
"validator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_stress_102_16-59-46_validator_report.json",
"comparator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_stress_102_16-59-46_comparator_report.json"
},
{
"pack": "followup_25",
"run_id": "2026-04-02_Address_Nightly_followup_25_17-10-13",
"questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
"baseline_summary": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5\\run_summary.json",
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_followup_25_17-10-13",
"runner_ok": true,
"validator_ok": true,
"comparator_ok": false,
"errors": [
"comparator failed with exit code 1"
],
"validator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_16-59-46\\2026-04-02_Address_Nightly_followup_25_17-10-13_validator_report.json"
}
]
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_Nightly_followup_25_17-44-41
Generated at: 2026-04-02T17:46:43
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_followup_context_chains_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 25
- ok_200_count: 25
- semantic_pass_count: 25
- semantic_pass_rate: 1.0
- route_pass_count: 25
- route_pass_rate: 1.0
- strict_pass_count: 25
- strict_pass_rate: 1.0
- factual_count: 23
- partial_coverage_count: 2
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 14
- avg_elapsed_ms: 4880.4
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

View File

@ -0,0 +1,29 @@
# Response Audit: 2026-04-02_Address_Nightly_followup_25_17-44-41
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| F001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | Покажи документы по СВК за 2020 | Собран список документов по контрагенту (live address lane). |
| F002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь только за май 2020 | По окну 2020-05-01..2020-05-31 строк не найдено; показаны ближайшие доступные данные 2020-07-27..2021-11-10. |
| F003 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 60.01 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F004 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62.01 | Адресный срез по счету собран (по движениям live MCP). |
| F005 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток по 62.01 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| F006 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | Покажи банковские операции по СВК за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | а теперь только ноябрь 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | а теперь документы по нему | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| F009 | True | ok_or_factual | factual | account_balance_snapshot | None | и остаток по 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F010 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F011 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | Покажи сальдо по счету 60 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| F012 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| F013 | True | ok_or_factual | factual | account_balance_snapshot | None | а на ту же дату по 62 | Адресный срез по счету собран (по движениям live MCP). |
| F014 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой 62 документами на ту же дату | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| F015 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | вернись на 2020-12-31 по 60 | В live-данных по текущему фильтру записи не найдены. |
| F016 | True | ok_or_factual | factual | list_documents_by_contract | None | Покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F017 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь банковские операции | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F018 | True | ok_or_factual | factual | bank_operations_by_contract | None | а теперь только за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F019 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | есть ли открытые позиции по договору 19/15 на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F020 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по этому же договору | Собран список документов по договору (live address lane). |
| F021 | True | ok_or_factual | factual | bank_operations_by_contract | None | Покажи банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| F022 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь открытые позиции по нему | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F023 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | а теперь на 2020-12-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| F024 | True | ok_or_factual | factual | account_balance_snapshot | None | а по счету 51 на ту же дату | Адресный срез по счету собран (по движениям live MCP). |
| F025 | True | ok_or_factual | factual | list_documents_by_contract | None | а документы по этому же договору за тот же период | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |

View File

@ -0,0 +1,55 @@
{
"run_id": "2026-04-02_Address_Nightly_followup_25_17-44-41",
"generated_at": "2026-04-02T17:46:43",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 25,
"ok_200_count": 25,
"semantic_pass_count": 25,
"semantic_pass_rate": 1.0,
"route_pass_count": 25,
"route_pass_rate": 1.0,
"strict_pass_count": 25,
"strict_pass_rate": 1.0,
"factual_count": 23,
"partial_coverage_count": 2,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 14,
"avg_elapsed_ms": 4880.4
},
"distributions": {
"reply_type": {
"factual": 23,
"partial_coverage": 2
},
"actual_intent": {
"list_documents_by_counterparty": 3,
"account_balance_snapshot": 9,
"documents_forming_balance": 2,
"bank_operations_by_counterparty": 2,
"list_documents_by_contract": 3,
"bank_operations_by_contract": 3,
"open_items_by_counterparty_or_contract": 3
},
"actual_mode": {
"address_query": 25
},
"mcp_call_status": {
"matched_non_empty": 23,
"no_raw_rows": 2
},
"limited_reason_category": {
"empty_match": 2
},
"route_health": {
"ok_or_factual": 23,
"partial_non_blocking": 2
}
}
}

View File

@ -0,0 +1,67 @@
{
"generated_at": "2026-04-02T17:46:43",
"overall_pass": true,
"baseline": {
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5\\run_summary.json",
"run_id": "2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5",
"questions_total": 25,
"strict_pass_rate": 1.0,
"route_pass_rate": 1.0,
"execution_error_count": 0,
"false_factual_rate": 0.0,
"notes": [
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
"false_factual_rate derived from false_factual_count/questions_total"
]
},
"candidate": {
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_followup_25_17-44-41\\run_summary.json",
"run_id": "2026-04-02_Address_Nightly_followup_25_17-44-41",
"questions_total": 25,
"strict_pass_rate": 1.0,
"route_pass_rate": 1.0,
"execution_error_count": 0,
"false_factual_rate": 0.0,
"notes": [
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
"false_factual_rate derived from false_factual_count/questions_total"
]
},
"checks": [
{
"metric": "strict_pass_rate",
"passed": true,
"baseline": 1.0,
"candidate": 1.0,
"rule": "candidate >= baseline"
},
{
"metric": "route_pass_rate",
"passed": true,
"baseline": 1.0,
"candidate": 1.0,
"rule": "candidate >= baseline"
},
{
"metric": "execution_error_count",
"passed": true,
"baseline": 0,
"candidate": 0,
"rule": "candidate <= baseline"
},
{
"metric": "false_factual_rate",
"passed": true,
"baseline": 0.0,
"candidate": 0.0,
"rule": "candidate <= baseline"
},
{
"metric": "questions_total_match",
"passed": true,
"baseline": 25,
"candidate": 25,
"rule": "candidate == baseline"
}
]
}

View File

@ -0,0 +1,23 @@
{
"generated_at": "2026-04-02T17:46:43",
"total": 1,
"passed": 1,
"failed": 0,
"results": [
{
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_followup_25_17-44-41",
"valid": true,
"errors": [],
"warnings": [],
"metrics": {
"run_id": "2026-04-02_Address_Nightly_followup_25_17-44-41",
"questions_total": 25,
"route_pass_rate": 1.0,
"strict_pass_rate": 1.0,
"http_error_count": 0,
"rows_count": 25,
"failures_count": 0
}
}
]
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_Nightly_stress_102_17-34-13
Generated at: 2026-04-02T17:44:41
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_slang_stress_full_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 102
- ok_200_count: 102
- semantic_pass_count: 102
- semantic_pass_rate: 1.0
- route_pass_count: 102
- route_pass_rate: 1.0
- strict_pass_count: 102
- strict_pass_rate: 1.0
- factual_count: 96
- partial_coverage_count: 6
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 80
- avg_elapsed_ms: 6159.6
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

View File

@ -0,0 +1,106 @@
# Response Audit: 2026-04-02_Address_Nightly_stress_102_17-34-13
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| S001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк доки за 2020 покаж пж | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | покеж все доки по свк за 20 год | Собран список документов по контрагенту (live address lane). |
| S003 | True | ok_or_factual | factual | list_documents_by_counterparty | None | дай список документов по свк за 2020 | Собран список документов по контрагенту (live address lane). |
| S004 | True | ok_or_factual | factual | list_documents_by_counterparty | None | какие у свк есть доки за 2020? | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S005 | True | ok_or_factual | factual | list_documents_by_counterparty | None | че по свк по докам за 2020 год | Собран список документов по контрагенту (live address lane). |
| S006 | True | ok_or_factual | factual | list_documents_by_counterparty | None | ёпт покажи доки по свк за 2020 | Собран список документов по контрагенту (live address lane). |
| S007 | True | ok_or_factual | factual | list_documents_by_counterparty | None | бля, доки свк 2020 вывали | Собран список документов по контрагенту (live address lane). |
| S008 | True | ok_or_factual | factual | list_documents_by_counterparty | None | svk docs for 2020 please | Собран список документов по контрагенту (live address lane). |
| S009 | True | ok_or_factual | factual | list_documents_by_counterparty | None | docs by counterparty svk year 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S010 | True | ok_or_factual | factual | list_documents_by_counterparty | None | по контрагенту свк покаж документы за 2020 | Собран список документов по контрагенту (live address lane). |
| S011 | True | ok_or_factual | factual | list_documents_by_counterparty | None | плс доки по свк 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S012 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк док за 2020 гони | Собран список документов по контрагенту (live address lane). |
| S013 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | по свк банковские операции за 2020 покаж | Собран список банковских операций по контрагенту (live address lane). |
| S014 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк выписка банка 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S015 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | платежи по свк за 2020 выведи | Собран список банковских операций по контрагенту (live address lane). |
| S016 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | оплаты по свк за 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S017 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк банк опер за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S018 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | че у свк по банку за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S019 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк списания/поступления за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S020 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | bank ops by svk for 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S021 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | transactions by counterparty svk 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S022 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | бля, по свк банковские платежки 2020 | Собран список банковских операций по контрагенту (live address lane). |
| S023 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо по счету 60.01 на дату 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
| S024 | True | ok_or_factual | factual | account_balance_snapshot | None | остаток по счету 60.01 на 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
| S025 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи остаток по 60.01 за май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S026 | True | ok_or_factual | factual | account_balance_snapshot | None | счет 60 остаток на май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S027 | True | ok_or_factual | factual | account_balance_snapshot | None | баланс account 60.01 as of 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
| S028 | True | ok_or_factual | factual | account_balance_snapshot | None | 60.01 saldo на 31.07.2020 | Адресный срез по счету собран (по движениям live MCP). |
| S029 | True | ok_or_factual | factual | account_balance_snapshot | None | сколько на счете 60 на конец 2020-05 | Адресный срез по счету собран (по движениям live MCP). |
| S030 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | дай остаток 60.02 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| S031 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | епт, сальдо по счету 62.01 на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| S032 | True | ok_or_factual | factual | account_balance_snapshot | None | плс остаток по счету 51 на 2020-06-30 | Адресный срез по счету собран (по движениям live MCP). |
| S033 | True | ok_or_factual | factual | account_balance_snapshot | None | как там по счету 60.01 на 2020.07? | Адресный срез по счету собран (по движениям live MCP). |
| S034 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо 60 на 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S035 | True | ok_or_factual | factual | documents_forming_balance | None | какие документы формируют остаток по счету 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S036 | True | ok_or_factual | factual | documents_forming_balance | None | из чего состоит остаток по счету 60 на 2020.05 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S037 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток 60.01 по документам на конец июля 2020 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S038 | True | ok_or_factual | factual | documents_forming_balance | None | доки под остатком 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S039 | True | ok_or_factual | factual | documents_forming_balance | None | documents forming balance for account 60.01 as of 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S040 | True | ok_or_factual | factual | documents_forming_balance | None | бля, какие доки формируют остаток 60.01 на 2020-05-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S041 | True | partial_non_blocking | partial_coverage | documents_forming_balance | empty_match | по счету 62.01 раскрой остаток документами на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| S042 | True | ok_or_factual | factual | documents_forming_balance | None | из чего остаток по счету 51 на 2020-06-30 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| S043 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| S044 | True | ok_or_factual | factual | list_documents_by_contract | None | доки по дог. 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| S045 | True | ok_or_factual | factual | list_documents_by_contract | None | какие документы по контракту 19/15 | Собран список документов по договору (live address lane). |
| S046 | True | ok_or_factual | factual | list_documents_by_contract | None | docs by contract 19/15 year 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| S047 | True | ok_or_factual | factual | list_documents_by_contract | None | бля, покажи по договору 19/15 доки | Собран список документов по договору (live address lane). |
| S048 | True | ok_or_factual | factual | list_documents_by_contract | None | договор 19/15 документы | Собран список документов по договору (live address lane). |
| S049 | True | ok_or_factual | factual | list_documents_by_contract | None | плс документы договор №19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S050 | True | ok_or_factual | factual | list_documents_by_contract | None | покеж документы по 19/15 | Собран список документов по договору (live address lane). |
| S051 | True | ok_or_factual | factual | bank_operations_by_contract | None | банковские операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| S052 | True | ok_or_factual | factual | bank_operations_by_contract | None | платежи по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| S053 | True | ok_or_factual | factual | bank_operations_by_contract | None | выписка по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| S054 | True | ok_or_factual | factual | bank_operations_by_contract | None | bank ops by contract 19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| S055 | True | ok_or_factual | factual | bank_operations_by_contract | None | ёпт, покажи банк операции по дог 19/15 | Собран список банковских операций по договору (live address lane). |
| S056 | True | ok_or_factual | factual | bank_operations_by_contract | None | по контракту 19/15 платежки | Собран список банковских операций по договору (live address lane). |
| S057 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи сальдо по счету 60 за 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S058 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |
| S059 | True | ok_or_factual | factual | account_balance_snapshot | None | ок, теперь 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
| S060 | True | ok_or_factual | factual | account_balance_snapshot | None | теперь на 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
| X001 | True | ok_or_factual | factual | list_documents_by_counterparty | None | свк доки кинь за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X002 | True | ok_or_factual | factual | list_documents_by_counterparty | None | по свк все документы за 20й год | Собран список документов по контрагенту (live address lane). |
| X003 | True | ok_or_factual | factual | list_documents_by_counterparty | None | пж вывали доки контрагент свк 2020 | Собран список документов по контрагенту (live address lane). |
| X004 | True | ok_or_factual | factual | list_documents_by_counterparty | None | svk poka docy za 2020 | Собран список документов по контрагенту (live address lane). |
| X005 | True | ok_or_factual | factual | list_documents_by_counterparty | None | какие доки по компании свк за 2020 | Собран список документов по контрагенту (live address lane). |
| X006 | True | ok_or_factual | factual | list_documents_by_counterparty | None | бля покаж свк документы 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X007 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк банк операции за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X008 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | по свк выписку банка за 2020 выведи | Собран список банковских операций по контрагенту (live address lane). |
| X009 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | свк платежки за 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X010 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | bank ops svk 2020 | Собран список банковских операций по контрагенту (live address lane). |
| X011 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | транзакции по свк за 2020 | Собран список банковских операций по контрагенту (live address lane). |
| X012 | True | ok_or_factual | factual | bank_operations_by_counterparty | None | ёпт по свк че по банку 2020 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X013 | True | ok_or_factual | factual | account_balance_snapshot | None | остаток по 60.01 на 2020-07-31 | Адресный срез по счету собран (по движениям live MCP). |
| X014 | True | ok_or_factual | factual | account_balance_snapshot | None | сальдо 60.01 на 31.07.2020 | Адресный срез по счету собран (по движениям live MCP). |
| X015 | True | ok_or_factual | factual | account_balance_snapshot | None | что на счете 60 на 2020.05 | Адресный срез по счету собран (по движениям live MCP). |
| X016 | True | ok_or_factual | factual | account_balance_snapshot | None | дай остаток 62.01 на 2020 май | Адресный срез по счету собран (по движениям live MCP). |
| X017 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | saldo account 60 as of 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| X018 | True | ok_or_factual | factual | account_balance_snapshot | None | плиз остаток по счету 51 на 2020-06-30 | Адресный срез по счету собран (по движениям live MCP). |
| X019 | True | partial_non_blocking | partial_coverage | account_balance_snapshot | empty_match | скока по 60.02 на конец 2020-12 | В live-данных по текущему фильтру записи не найдены. |
| X020 | True | ok_or_factual | factual | account_balance_snapshot | None | бля сальдо 60.01 на 2020-05-31 | Адресный срез по счету собран (по движениям live MCP). |
| X021 | True | ok_or_factual | factual | documents_forming_balance | None | раскрой остаток 60.01 по документам на конец июля 2020 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X022 | True | ok_or_factual | factual | documents_forming_balance | None | доки под остатком 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X023 | True | ok_or_factual | factual | documents_forming_balance | None | из чего остаток 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X024 | True | ok_or_factual | factual | documents_forming_balance | None | какие документы формируют остаток по 60.01 на 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X025 | True | ok_or_factual | factual | documents_forming_balance | None | docs forming balance 60.01 as of 2020-07-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X026 | True | partial_non_blocking | partial_coverage | documents_forming_balance | empty_match | раскидай остаток 62.01 по докам на 2020-12-31 | В live-данных по текущему фильтру записи не найдены. |
| X027 | True | ok_or_factual | factual | documents_forming_balance | None | по счету 51 раскрой остаток документами на 2020-06-30 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X028 | True | ok_or_factual | factual | documents_forming_balance | None | бля из чего состоит остаток по 60.01 на 2020-05-31 | Собран drilldown документов, формирующих остаток по счету на указанную дату. |
| X029 | True | ok_or_factual | factual | list_documents_by_contract | None | доки по договору 19/15 за 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| X030 | True | ok_or_factual | factual | list_documents_by_contract | None | покажи документы контракт 19/15 | Собран список документов по договору (live address lane). |
| X031 | True | ok_or_factual | factual | list_documents_by_contract | None | docs by contract 19/15 2020 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| X032 | True | ok_or_factual | factual | list_documents_by_contract | None | по дог 19/15 какие документы | Собран список документов по договору (live address lane). |
| X033 | True | ok_or_factual | factual | list_documents_by_contract | None | договор 19/15 выведи доки | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X034 | True | ok_or_factual | factual | list_documents_by_contract | None | нах покажи документы по 19/15 | Собран список документов по договору (live address lane). |
| X035 | True | ok_or_factual | factual | bank_operations_by_contract | None | банк операции по договору 19/15 | Собран список банковских операций по договору (live address lane). |
| X036 | True | ok_or_factual | factual | bank_operations_by_contract | None | платежки по дог 19/15 | Собран список банковских операций по договору (live address lane). |
| X037 | True | ok_or_factual | factual | bank_operations_by_contract | None | выписка по контракту 19/15 | Собран список банковских операций по договору (live address lane). |
| X038 | True | ok_or_factual | factual | bank_operations_by_contract | None | bank ops by contract 19/15 | Точный якорь не подтвердился в текущем окне live-данных; показаны ближайшие доступные документы/операции по выбранному типу. |
| X039 | True | ok_or_factual | factual | bank_operations_by_contract | None | покажи банк опер по дог 19/15 пж | Собран список банковских операций по договору (live address lane). |
| X040 | True | ok_or_factual | factual | bank_operations_by_contract | None | епт транзакции договор 19/15 | Собран список банковских операций по договору (live address lane). |
| X041 | True | ok_or_factual | factual | account_balance_snapshot | None | покажи сальдо по счету 60 за 2020 | Адресный срез по счету собран (по движениям live MCP). |
| X042 | True | ok_or_factual | factual | account_balance_snapshot | None | а теперь только май 2020 | Адресный срез по счету собран (по движениям live MCP). |

View File

@ -0,0 +1,54 @@
{
"run_id": "2026-04-02_Address_Nightly_stress_102_17-34-13",
"generated_at": "2026-04-02T17:44:41",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_slang_stress_full_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 102,
"ok_200_count": 102,
"semantic_pass_count": 102,
"semantic_pass_rate": 1.0,
"route_pass_count": 102,
"route_pass_rate": 1.0,
"strict_pass_count": 102,
"strict_pass_rate": 1.0,
"factual_count": 96,
"partial_coverage_count": 6,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 80,
"avg_elapsed_ms": 6159.6
},
"distributions": {
"reply_type": {
"factual": 96,
"partial_coverage": 6
},
"actual_intent": {
"list_documents_by_counterparty": 18,
"bank_operations_by_counterparty": 16,
"account_balance_snapshot": 26,
"documents_forming_balance": 16,
"list_documents_by_contract": 14,
"bank_operations_by_contract": 12
},
"actual_mode": {
"address_query": 102
},
"mcp_call_status": {
"matched_non_empty": 96,
"no_raw_rows": 6
},
"limited_reason_category": {
"empty_match": 6
},
"route_health": {
"ok_or_factual": 96,
"partial_non_blocking": 6
}
}
}

View File

@ -0,0 +1,67 @@
{
"generated_at": "2026-04-02T17:44:41",
"overall_pass": true,
"baseline": {
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27\\run_summary.json",
"run_id": "2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27",
"questions_total": 102,
"strict_pass_rate": 1.0,
"route_pass_rate": 1.0,
"execution_error_count": 0,
"false_factual_rate": 0.0,
"notes": [
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
"false_factual_rate derived from false_factual_count/questions_total"
]
},
"candidate": {
"summary_path": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_stress_102_17-34-13\\run_summary.json",
"run_id": "2026-04-02_Address_Nightly_stress_102_17-34-13",
"questions_total": 102,
"strict_pass_rate": 1.0,
"route_pass_rate": 1.0,
"execution_error_count": 0,
"false_factual_rate": 0.0,
"notes": [
"execution_error_count derived as http_error_count + limited_reason_category.execution_error",
"false_factual_rate derived from false_factual_count/questions_total"
]
},
"checks": [
{
"metric": "strict_pass_rate",
"passed": true,
"baseline": 1.0,
"candidate": 1.0,
"rule": "candidate >= baseline"
},
{
"metric": "route_pass_rate",
"passed": true,
"baseline": 1.0,
"candidate": 1.0,
"rule": "candidate >= baseline"
},
{
"metric": "execution_error_count",
"passed": true,
"baseline": 0,
"candidate": 0,
"rule": "candidate <= baseline"
},
{
"metric": "false_factual_rate",
"passed": true,
"baseline": 0.0,
"candidate": 0.0,
"rule": "candidate <= baseline"
},
{
"metric": "questions_total_match",
"passed": true,
"baseline": 102,
"candidate": 102,
"rule": "candidate == baseline"
}
]
}

View File

@ -0,0 +1,23 @@
{
"generated_at": "2026-04-02T17:44:41",
"total": 1,
"passed": 1,
"failed": 0,
"results": [
{
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_stress_102_17-34-13",
"valid": true,
"errors": [],
"warnings": [],
"metrics": {
"run_id": "2026-04-02_Address_Nightly_stress_102_17-34-13",
"questions_total": 102,
"route_pass_rate": 1.0,
"strict_pass_rate": 1.0,
"http_error_count": 0,
"rows_count": 102,
"failures_count": 0
}
}
]
}

View File

@ -0,0 +1,22 @@
# 2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00
Generated at: 2026-04-02T17:46:44
Dry run: False
Strict policy: route
Overall: PASS
## Packs
### stress_102
- run_id: 2026-04-02_Address_Nightly_stress_102_17-34-13
- runner_ok: True
- validator_ok: True
- comparator_ok: True
- run_dir: X:\1C\NDC_1C\docs\ADDRESS\runs\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\2026-04-02_Address_Nightly_stress_102_17-34-13
### followup_25
- run_id: 2026-04-02_Address_Nightly_followup_25_17-44-41
- runner_ok: True
- validator_ok: True
- comparator_ok: True
- run_dir: X:\1C\NDC_1C\docs\ADDRESS\runs\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\2026-04-02_Address_Nightly_followup_25_17-44-41

View File

@ -0,0 +1,35 @@
{
"nightly_run_id": "2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00",
"generated_at": "2026-04-02T17:46:44",
"dry_run": false,
"overall_ok": true,
"strict_policy": "route",
"packs": [
{
"pack": "stress_102",
"run_id": "2026-04-02_Address_Nightly_stress_102_17-34-13",
"questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_slang_stress_full_2026-04-02.json",
"baseline_summary": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Slang_Live_Stress_2026-04-02_12-57-27\\run_summary.json",
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_stress_102_17-34-13",
"runner_ok": true,
"validator_ok": true,
"comparator_ok": true,
"errors": [],
"validator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_stress_102_17-34-13_validator_report.json",
"comparator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_stress_102_17-34-13_comparator_report.json"
},
{
"pack": "followup_25",
"run_id": "2026-04-02_Address_Nightly_followup_25_17-44-41",
"questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_followup_context_chains_2026-04-02.json",
"baseline_summary": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Followup_Context_Chains_2026-04-02_19-15-Run5\\run_summary.json",
"run_dir": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_followup_25_17-44-41",
"runner_ok": true,
"validator_ok": true,
"comparator_ok": true,
"errors": [],
"validator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_followup_25_17-44-41_validator_report.json",
"comparator_report": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\runs\\2026-04-02_Address_Nightly_Regression_2026-04-02_17-35-00\\2026-04-02_Address_Nightly_followup_25_17-44-41_comparator_report.json"
}
]
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick
Generated at: 2026-04-02T16:50:11
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_open_contracts_focus_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 3
- ok_200_count: 3
- semantic_pass_count: 3
- semantic_pass_rate: 1.0
- route_pass_count: 3
- route_pass_rate: 1.0
- strict_pass_count: 3
- strict_pass_rate: 1.0
- factual_count: 3
- partial_coverage_count: 0
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 2
- avg_elapsed_ms: 6561.7
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

View File

@ -0,0 +1,504 @@
{
"run_id": "2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick",
"generated_at": "2026-04-02T16:50:11",
"summary": {
"run_id": "2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick",
"generated_at": "2026-04-02T16:50:11",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_open_contracts_focus_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 3,
"ok_200_count": 3,
"semantic_pass_count": 3,
"semantic_pass_rate": 1.0,
"route_pass_count": 3,
"route_pass_rate": 1.0,
"strict_pass_count": 3,
"strict_pass_rate": 1.0,
"factual_count": 3,
"partial_coverage_count": 0,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 2,
"avg_elapsed_ms": 6561.7
},
"distributions": {
"reply_type": {
"factual": 3
},
"actual_intent": {
"list_open_contracts": 2,
"open_items_by_counterparty_or_contract": 1
},
"actual_mode": {
"address_query": 3
},
"mcp_call_status": {
"matched_non_empty": 3
},
"limited_reason_category": {},
"route_health": {
"ok_or_factual": 3
}
}
},
"rows": [
{
"index": 1,
"id": "OC001",
"question": "Покажи незакрытые договоры на 2020-12-31",
"session": null,
"session_id": "asst-2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick-oc001",
"status_code": 200,
"ok": true,
"elapsed_ms": 6465,
"reply_type": "factual",
"trace_id": "address-6KRuwoHvHf",
"assistant_reply": "Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76).\nСтрок движения: 20.\nДоговорных кандидатов: 0.\nДоговорные якоря в live-строках не выделены; показаны связанные движения как fallback.\n1. 2020-12-31T23:59:59Z | Формирование записей книги покупок 00000000004 от 31.12.2020 23:59:59 | 68.02 / 19.09 | 127216.46\n2. 2020-12-31T23:59:59Z | Формирование записей книги покупок 00000000004 от 31.12.2020 23:59:59 | 68.02 / 19.09 | 235682.42\n3. 2020-12-31T23:59:59Z | Формирование записей книги покупок 00000000004 от 31.12.2020 23:59:59 | 68.02 / 19.09 | 337318.8\n4. 2020-12-31T23:59:59Z | Регламентная операция 00000000097 от 31.12.2020 23:59:59 | 91.09 / 91.02 | 10615989.53\n5. 2020-12-31T23:59:59Z | Регламентная операция 00000000097 от 31.12.2020 23:59:59 | 91.01 / 91.09 | 1614344.98\n6. 2020-12-31T23:59:59Z | Регламентная операция 00000000097 от 31.12.2020 23:59:59 | 90.09 / 90.02.1 | 6430415.34",
"assistant_reply_first_line": "Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76).",
"expected_intent": "list_open_contracts",
"actual_intent": "list_open_contracts",
"intent_match": true,
"expected_mode": "address_query",
"actual_mode": "address_query",
"mode_match": true,
"expected_reply_type": "factual",
"reply_match": true,
"semantic_pass": true,
"route_pass": true,
"route_health": "ok_or_factual",
"strict_policy": "route",
"strict_pass": true,
"selected_recipe": "address_open_contracts_candidates_v1",
"missing_required_filters": [],
"match_failure_stage": "none",
"match_failure_reason": null,
"rows_fetched": 20,
"rows_matched": 20,
"mcp_call_status": "matched_non_empty",
"limited_reason_category": null,
"llm_decomposition_applied": true,
"llm_decomposition_reason": "normalized_fragment_applied",
"fallback_rule_hit": null,
"debug_payload": {
"trace_id": "address-6KRuwoHvHf",
"prompt_version": "address_query_runtime_v1",
"schema_version": "address_query_runtime_v1",
"fallback_type": "none",
"route_summary": null,
"fragments": [],
"requirements_extracted": [],
"coverage_report": {
"requirements_total": 0,
"requirements_covered": 0,
"requirements_uncovered": [],
"requirements_partially_covered": [],
"clarification_needed_for": [],
"out_of_scope_requirements": []
},
"routes": [],
"retrieval_status": [],
"retrieval_results": [],
"answer_grounding_check": {
"status": "grounded",
"route_subject_match": true,
"missing_requirements": [],
"reasons": [
"address_action_detected",
"address_entity_detected",
"object_signal_detected",
"open_contract_signal_detected"
],
"why_included_summary": [],
"selection_reason_summary": []
},
"dropped_intent_segments": [],
"detected_mode": "address_query",
"detected_mode_confidence": "high",
"query_shape": "OBJECT_LOOKUP",
"query_shape_confidence": "medium",
"detected_intent": "list_open_contracts",
"detected_intent_confidence": "medium",
"extracted_filters": {
"sort": "period_desc",
"limit": 20,
"period_from": "2020-12-01",
"period_to": "2020-12-31"
},
"missing_required_filters": [],
"selected_recipe": "address_open_contracts_candidates_v1",
"mcp_call_status_legacy": "matched_non_empty",
"account_scope_mode": "preferred",
"account_scope_fallback_applied": true,
"anchor_type": "unknown",
"anchor_value_raw": null,
"anchor_value_resolved": null,
"resolver_confidence": "low",
"ambiguity_count": 0,
"match_failure_stage": "none",
"match_failure_reason": null,
"mcp_call_status": "matched_non_empty",
"rows_fetched": 20,
"raw_rows_received": 20,
"rows_after_account_scope": 20,
"rows_after_recipe_filter": 20,
"rows_materialized": 20,
"rows_matched": 20,
"raw_row_keys_sample": [
"Период",
"Регистратор",
"СчетДт",
"СчетКт",
"Сумма",
"Period",
"Registrator",
"AccountDt",
"AccountKt",
"Amount"
],
"materialization_drop_reason": "none",
"account_token_raw": null,
"account_token_normalized": null,
"account_scope_fields_checked": [
"account_dt",
"account_kt",
"registrator",
"analytics"
],
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
"account_scope_drop_reason": "not_applicable",
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
"limited_reason_category": null,
"response_type": "FACTUAL_LIST",
"execution_lane": "address_query",
"llm_decomposition_applied": true,
"llm_decomposition_attempted": true,
"llm_provider_used": "local",
"llm_decomposition_trace_id": "Cr3wXdOb-ZBI6K",
"llm_decomposition_effective_message": "Показать незакрытые договоры по состоянию на конец декабря 2020 года.",
"llm_decomposition_reason": "normalized_fragment_applied",
"fallback_rule_hit": null,
"sanitized_user_message": "покажи незакрытые договоры на 2020-12-31",
"tool_gate_decision": "run_address_lane",
"tool_gate_reason": "address_mode_classifier_detected",
"answer_structure_v11": null,
"investigation_state_snapshot": null,
"normalized": null,
"normalizer_output": {
"trace_id": "Cr3wXdOb-ZBI6K",
"prompt_version": "normalizer_v2_0_2",
"applied": true,
"effective_message": "Показать незакрытые договоры по состоянию на конец декабря 2020 года."
}
},
"error_code": null,
"error_message": null
},
{
"index": 2,
"id": "OC002",
"question": "Есть ли долг по договору 19/15 на 2020-07-31",
"session": null,
"session_id": "asst-2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick-oc002",
"status_code": 200,
"ok": true,
"elapsed_ms": 7256,
"reply_type": "factual",
"trace_id": "address-DTm0Ml5bzU",
"assistant_reply": "Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк.\nСобраны открытые позиции по указанному фильтру (контрагент/договор).\nСтрок отобрано: 7.\n1. 2020-07-15T13:11:19Z | Реализация товаров и услуг 00000000008 от 15.07.2020 13:11:19 | 62.01 / 90.01.1 | 43804.8\n2. 2020-07-15T13:11:19Z | Реализация товаров и услуг 00000000008 от 15.07.2020 13:11:19 | 62.01 / 90.01.1 | 9776\n3. 2020-07-15T13:11:19Z | Реализация товаров и услуг 00000000008 от 15.07.2020 13:11:19 | 62.01 / 90.01.1 | 73968\n4. 2020-07-15T13:11:19Z | Реализация товаров и услуг 00000000008 от 15.07.2020 13:11:19 | 62.01 / 90.01.1 | 94924.8\n5. 2020-07-15T13:11:19Z | Реализация товаров и услуг 00000000008 от 15.07.2020 13:11:19 | 62.01 / 90.01.1 | 54400\n6. 2020-07-15T13:11:19Z | Реализация товаров и услуг 00000000008 от 15.07.2020 13:11:19 | 62.02 / 62.01 | 276873.6",
"assistant_reply_first_line": "Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк.",
"expected_intent": "open_items_by_counterparty_or_contract",
"actual_intent": "open_items_by_counterparty_or_contract",
"intent_match": true,
"expected_mode": "address_query",
"actual_mode": "address_query",
"mode_match": true,
"expected_reply_type": null,
"reply_match": true,
"semantic_pass": true,
"route_pass": true,
"route_health": "ok_or_factual",
"strict_policy": "route",
"strict_pass": true,
"selected_recipe": "address_open_items_by_party_or_contract_v1",
"missing_required_filters": [],
"match_failure_stage": "none",
"match_failure_reason": null,
"rows_fetched": 1000,
"rows_matched": 7,
"mcp_call_status": "matched_non_empty",
"limited_reason_category": null,
"llm_decomposition_applied": true,
"llm_decomposition_reason": "normalized_fragment_applied",
"fallback_rule_hit": null,
"debug_payload": {
"trace_id": "address-DTm0Ml5bzU",
"prompt_version": "address_query_runtime_v1",
"schema_version": "address_query_runtime_v1",
"fallback_type": "none",
"route_summary": null,
"fragments": [],
"requirements_extracted": [],
"coverage_report": {
"requirements_total": 0,
"requirements_covered": 0,
"requirements_uncovered": [],
"requirements_partially_covered": [],
"clarification_needed_for": [],
"out_of_scope_requirements": []
},
"routes": [],
"retrieval_status": [],
"retrieval_results": [],
"answer_grounding_check": {
"status": "grounded",
"route_subject_match": true,
"missing_requirements": [],
"reasons": [
"address_action_detected",
"address_entity_detected",
"verify_signal_detected",
"open_items_signal_detected",
"query_limit_auto_expanded_for_anchor_recovery"
],
"why_included_summary": [],
"selection_reason_summary": []
},
"dropped_intent_segments": [],
"detected_mode": "address_query",
"detected_mode_confidence": "high",
"query_shape": "VERIFY_FACTUAL",
"query_shape_confidence": "medium",
"detected_intent": "open_items_by_counterparty_or_contract",
"detected_intent_confidence": "medium",
"extracted_filters": {
"sort": "period_desc",
"limit": 20,
"contract": "19/15",
"as_of_date": "2020-07-31"
},
"missing_required_filters": [],
"selected_recipe": "address_open_items_by_party_or_contract_v1",
"mcp_call_status_legacy": "matched_non_empty",
"account_scope_mode": "preferred",
"account_scope_fallback_applied": false,
"anchor_type": "contract",
"anchor_value_raw": "19/15",
"anchor_value_resolved": "19/15",
"resolver_confidence": "medium",
"ambiguity_count": 0,
"match_failure_stage": "none",
"match_failure_reason": null,
"mcp_call_status": "matched_non_empty",
"rows_fetched": 1000,
"raw_rows_received": 1000,
"rows_after_account_scope": 305,
"rows_after_recipe_filter": 7,
"rows_materialized": 305,
"rows_matched": 7,
"raw_row_keys_sample": [
"Период",
"Регистратор",
"СчетДт",
"СчетКт",
"Сумма",
"Period",
"Registrator",
"AccountDt",
"AccountKt",
"Amount"
],
"materialization_drop_reason": "none",
"account_token_raw": null,
"account_token_normalized": null,
"account_scope_fields_checked": [
"account_dt",
"account_kt",
"registrator",
"analytics"
],
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
"account_scope_drop_reason": "not_applicable",
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
"limited_reason_category": null,
"response_type": "FACTUAL_LIST",
"execution_lane": "address_query",
"llm_decomposition_applied": true,
"llm_decomposition_attempted": true,
"llm_provider_used": "local",
"llm_decomposition_trace_id": "BtyrTpKprBeOoN",
"llm_decomposition_effective_message": "Проверить наличие долга по договору 19/15 на дату 2020-07-31.",
"llm_decomposition_reason": "normalized_fragment_applied",
"fallback_rule_hit": null,
"sanitized_user_message": "есть ли долг по договору 19/15 на 2020-07-31",
"tool_gate_decision": "run_address_lane",
"tool_gate_reason": "address_mode_classifier_detected",
"answer_structure_v11": null,
"investigation_state_snapshot": null,
"normalized": null,
"normalizer_output": {
"trace_id": "BtyrTpKprBeOoN",
"prompt_version": "normalizer_v2_0_2",
"applied": true,
"effective_message": "Проверить наличие долга по договору 19/15 на дату 2020-07-31."
}
},
"error_code": null,
"error_message": null
},
{
"index": 3,
"id": "OC003",
"question": "Show open contracts as of 2020-12-31",
"session": null,
"session_id": "asst-2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick-oc003",
"status_code": 200,
"ok": true,
"elapsed_ms": 5964,
"reply_type": "factual",
"trace_id": "address-2oqxYvLmuv",
"assistant_reply": "Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76).\nСтрок движения: 20.\nДоговорных кандидатов: 0.\nДоговорные якоря в live-строках не выделены; показаны связанные движения как fallback.\n1. 2020-12-31T23:59:59Z | Формирование записей книги покупок 00000000004 от 31.12.2020 23:59:59 | 68.02 / 19.09 | 127216.46\n2. 2020-12-31T23:59:59Z | Формирование записей книги покупок 00000000004 от 31.12.2020 23:59:59 | 68.02 / 19.09 | 235682.42\n3. 2020-12-31T23:59:59Z | Формирование записей книги покупок 00000000004 от 31.12.2020 23:59:59 | 68.02 / 19.09 | 337318.8\n4. 2020-12-31T23:59:59Z | Регламентная операция 00000000097 от 31.12.2020 23:59:59 | 91.09 / 91.02 | 10615989.53\n5. 2020-12-31T23:59:59Z | Регламентная операция 00000000097 от 31.12.2020 23:59:59 | 91.01 / 91.09 | 1614344.98\n6. 2020-12-31T23:59:59Z | Регламентная операция 00000000097 от 31.12.2020 23:59:59 | 90.09 / 90.02.1 | 6430415.34",
"assistant_reply_first_line": "Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76).",
"expected_intent": "list_open_contracts",
"actual_intent": "list_open_contracts",
"intent_match": true,
"expected_mode": "address_query",
"actual_mode": "address_query",
"mode_match": true,
"expected_reply_type": "factual",
"reply_match": true,
"semantic_pass": true,
"route_pass": true,
"route_health": "ok_or_factual",
"strict_policy": "route",
"strict_pass": true,
"selected_recipe": "address_open_contracts_candidates_v1",
"missing_required_filters": [],
"match_failure_stage": "none",
"match_failure_reason": null,
"rows_fetched": 20,
"rows_matched": 20,
"mcp_call_status": "matched_non_empty",
"limited_reason_category": null,
"llm_decomposition_applied": false,
"llm_decomposition_reason": "normalized_fragment_rejected_intent_drop",
"fallback_rule_hit": null,
"debug_payload": {
"trace_id": "address-2oqxYvLmuv",
"prompt_version": "address_query_runtime_v1",
"schema_version": "address_query_runtime_v1",
"fallback_type": "none",
"route_summary": null,
"fragments": [],
"requirements_extracted": [],
"coverage_report": {
"requirements_total": 0,
"requirements_covered": 0,
"requirements_uncovered": [],
"requirements_partially_covered": [],
"clarification_needed_for": [],
"out_of_scope_requirements": []
},
"routes": [],
"retrieval_status": [],
"retrieval_results": [],
"answer_grounding_check": {
"status": "grounded",
"route_subject_match": true,
"missing_requirements": [],
"reasons": [
"address_action_detected",
"address_entity_detected",
"object_signal_detected",
"open_contract_signal_detected"
],
"why_included_summary": [],
"selection_reason_summary": []
},
"dropped_intent_segments": [],
"detected_mode": "address_query",
"detected_mode_confidence": "high",
"query_shape": "OBJECT_LOOKUP",
"query_shape_confidence": "medium",
"detected_intent": "list_open_contracts",
"detected_intent_confidence": "medium",
"extracted_filters": {
"sort": "period_desc",
"limit": 20,
"as_of_date": "2020-12-31"
},
"missing_required_filters": [],
"selected_recipe": "address_open_contracts_candidates_v1",
"mcp_call_status_legacy": "matched_non_empty",
"account_scope_mode": "preferred",
"account_scope_fallback_applied": true,
"anchor_type": "unknown",
"anchor_value_raw": null,
"anchor_value_resolved": null,
"resolver_confidence": "low",
"ambiguity_count": 0,
"match_failure_stage": "none",
"match_failure_reason": null,
"mcp_call_status": "matched_non_empty",
"rows_fetched": 20,
"raw_rows_received": 20,
"rows_after_account_scope": 20,
"rows_after_recipe_filter": 20,
"rows_materialized": 20,
"rows_matched": 20,
"raw_row_keys_sample": [
"Период",
"Регистратор",
"СчетДт",
"СчетКт",
"Сумма",
"Period",
"Registrator",
"AccountDt",
"AccountKt",
"Amount"
],
"materialization_drop_reason": "none",
"account_token_raw": null,
"account_token_normalized": null,
"account_scope_fields_checked": [
"account_dt",
"account_kt",
"registrator",
"analytics"
],
"account_scope_match_strategy": "account_code_regex_plus_alias_map_v1",
"account_scope_drop_reason": "not_applicable",
"runtime_readiness": "LIVE_QUERYABLE_WITH_LIMITS",
"limited_reason_category": null,
"response_type": "FACTUAL_LIST",
"execution_lane": "address_query",
"llm_decomposition_applied": false,
"llm_decomposition_attempted": true,
"llm_provider_used": "local",
"llm_decomposition_trace_id": "55wfOyVVuepsR7",
"llm_decomposition_effective_message": "Show open contracts as of 2020-12-31",
"llm_decomposition_reason": "normalized_fragment_rejected_intent_drop",
"fallback_rule_hit": null,
"sanitized_user_message": "show open contracts as of 2020-12-31",
"tool_gate_decision": "run_address_lane",
"tool_gate_reason": "address_mode_classifier_detected",
"answer_structure_v11": null,
"investigation_state_snapshot": null,
"normalized": null,
"normalizer_output": {
"trace_id": "55wfOyVVuepsR7",
"prompt_version": "normalizer_v2_0_2",
"applied": false,
"effective_message": "Show open contracts as of 2020-12-31"
}
},
"error_code": null,
"error_message": null
}
]
}

View File

@ -0,0 +1,7 @@
# Response Audit: 2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick
| id | strict | route_health | reply_type | intent | limited_reason | question | assistant_first_line |
|---|---|---|---|---|---|---|---|
| OC001 | True | ok_or_factual | factual | list_open_contracts | None | Покажи незакрытые договоры на 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |
| OC002 | True | ok_or_factual | factual | open_items_by_counterparty_or_contract | None | Есть ли долг по договору 19/15 на 2020-07-31 | Период сохранен. Глубина live-выборки автоматически расширена до 1000 строк. |
| OC003 | True | ok_or_factual | factual | list_open_contracts | None | Show open contracts as of 2020-12-31 | Собраны кандидаты по незакрытым договорным позициям (по live движениям 60/62/76). |

View File

@ -0,0 +1,45 @@
{
"run_id": "2026-04-02_Address_RefDomain_Smoke_OpenContracts_Quick",
"generated_at": "2026-04-02T16:50:11",
"source_questions_file": "X:\\1C\\NDC_1C\\docs\\ADDRESS\\question_sets\\address_open_contracts_focus_2026-04-02.json",
"backend_url": "http://127.0.0.1:8787/api/assistant/message",
"llm_provider": "local",
"llm_model": "qwen2.5-14b-instruct-1m",
"llm_base_url": "http://127.0.0.1:1234",
"strict_policy": "route",
"totals": {
"questions_total": 3,
"ok_200_count": 3,
"semantic_pass_count": 3,
"semantic_pass_rate": 1.0,
"route_pass_count": 3,
"route_pass_rate": 1.0,
"strict_pass_count": 3,
"strict_pass_rate": 1.0,
"factual_count": 3,
"partial_coverage_count": 0,
"clarification_required_count": 0,
"http_error_count": 0,
"llm_decomposition_applied_count": 2,
"avg_elapsed_ms": 6561.7
},
"distributions": {
"reply_type": {
"factual": 3
},
"actual_intent": {
"list_open_contracts": 2,
"open_items_by_counterparty_or_contract": 1
},
"actual_mode": {
"address_query": 3
},
"mcp_call_status": {
"matched_non_empty": 3
},
"limited_reason_category": {},
"route_health": {
"ok_or_factual": 3
}
}
}

View File

@ -0,0 +1,28 @@
# 2026-04-02_Address_RefDomain_Smoke_OpenItems_Quick
Generated at: 2026-04-02T16:51:16
Questions file: X:\1C\NDC_1C\docs\ADDRESS\question_sets\address_open_items_focus_2026-04-02.json
Backend URL: http://127.0.0.1:8787/api/assistant/message
LLM: local / qwen2.5-14b-instruct-1m @ http://127.0.0.1:1234
Strict policy: route
## Totals
- questions_total: 7
- ok_200_count: 7
- semantic_pass_count: 7
- semantic_pass_rate: 1.0
- route_pass_count: 5
- route_pass_rate: 0.7143
- strict_pass_count: 5
- strict_pass_rate: 0.7143
- factual_count: 5
- partial_coverage_count: 2
- clarification_required_count: 0
- http_error_count: 0
- llm_decomposition_applied_count: 7
- avg_elapsed_ms: 7616.4
## Files
- run_summary.json
- full_live_results.json
- failures_only.json

Some files were not shown because too many files have changed in this diff Show More