Завершить phase99-105 schema primitive closure

This commit is contained in:
2026-05-17 21:49:02 +03:00
parent b1a5e4435d
commit a5fa940953
83 changed files with 5289 additions and 111 deletions
@@ -0,0 +1,112 @@
{
"schema_version": "domain_truth_harness_spec_v1",
"scenario_id": "address_truth_harness_phase100_large_query_continuation_ux",
"domain": "address_phase100_large_query_continuation_ux",
"title": "Phase 100 large-query continuation UX replay",
"description": "Focused semantic replay for all-time or very broad business overview questions: the assistant should answer from checked evidence, disclose row-limit coverage honestly, offer a safe period-narrowing continuation path, and then recover the explicit-year follow-up through chunked evidence without leaking technical mechanics.",
"bindings": {},
"steps": [
{
"step_id": "step_01_all_time_overview_limit_becomes_continuation_path",
"title": "All-time overview gives checked partial answer plus safe continuation path",
"question": "Дай общий бизнес-обзор ООО Альтернатива Плюс за весь доступный период: входящие, исходящие, нетто, лучший год. Если срез слишком широкий, не выдумывай полный итог, а скажи как безопасно дособрать.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)альтернатива",
"(?i)входящ|поступлен",
"(?i)исходящ|списан|платеж",
"(?i)нетто|денежн",
"(?i)год|период",
"(?i)лимит строк|проверенн.*срез|не гарантия полного|не полный",
"(?i)конкретн.*год|год или квартал|дозапрос|собрать.*част"
],
"forbidden_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)catalog_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "critical",
"semantic_tags": [
"business_overview",
"large_query_continuation",
"limit_honesty"
]
},
{
"step_id": "step_02_user_narrows_to_2020_and_gets_recovered_year",
"title": "Explicit-year continuation recovers yearly money evidence",
"question": "Ок, тогда дособери конкретно 2020: входящие, исходящие и расчетное денежное нетто.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)2020",
"(?i)входящ|поступлен",
"(?i)исходящ|списан|платеж",
"(?i)нетто|денежн",
"(?i)47\\s*628\\s*853|47,?6",
"(?i)43\\s*763\\s*351|43,?7|43,?8"
],
"forbidden_answer_patterns": [
"(?i)уп[её]р.*лимит",
"(?i)лимит выборки",
"(?i)лимит строк",
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)catalog_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "critical",
"semantic_tags": [
"business_overview",
"large_query_budget",
"followup_continuation"
]
},
{
"step_id": "step_03_profit_followup_keeps_boundary_after_continuation",
"title": "Profit follow-up keeps cash-flow boundary after continuation",
"question": "Это можно считать прибылью за 2020 или нет? Ответь коротко и по делу.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)нет|нельзя|не стоит",
"(?i)прибыл",
"(?i)денежн|поток|нетто|поступлен",
"(?i)90/91/99|закрыт|финрезультат|себестоим|расход"
],
"forbidden_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)catalog_",
"(?i)snapshot_items",
"(?i)answer_object",
"(?i)бухгалтерскому маршруту"
],
"criticality": "critical",
"semantic_tags": [
"profit_boundary",
"followup_directness",
"business_language"
]
}
]
}
@@ -0,0 +1,267 @@
{
"schema_version": "domain_truth_harness_spec_v1",
"scenario_id": "address_truth_harness_phase101_inventory_root_scope_no_warehouse_clarification",
"domain": "address_phase101_inventory_root_scope_no_warehouse_clarification",
"title": "Phase 101 inventory root scope without warehouse clarification replay",
"description": "Focused semantic replay for the manual assistant-stage1-hyh1A1WR3j signal: after a broad stock-on-hand question and organization clarification, the assistant must resume the root inventory snapshot for the selected company across available warehouses instead of asking the user to name a warehouse, item, category, or material.",
"bindings": {},
"steps": [
{
"step_id": "step_01_smalltalk_entry",
"title": "Smalltalk entry stays human",
"question": "приветик - че как там дела",
"required_answer_patterns_all": [
"(?i)привет|дела|помочь|могу"
],
"forbidden_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "important",
"semantic_tags": [
"smalltalk_entry",
"human_answer_quality"
]
},
{
"step_id": "step_02_capability_meta_entry",
"title": "Capability meta entry stays human and business-oriented",
"question": "расскажи что можешь интересного",
"allowed_reply_types": [
"factual",
"factual_with_explanation"
],
"required_direct_answer_patterns_any": [
"(?i)могу|умею",
"(?i)ндс|документ|контрагент|долг|склад|остат"
],
"forbidden_direct_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "important",
"semantic_tags": [
"capability_meta",
"human_answer_quality"
]
},
{
"step_id": "step_03_inventory_root_requires_company_only",
"title": "Broad inventory root asks only for organization when company scope is ambiguous",
"question": "кайф - что там на складе по остаткам?",
"required_answer_patterns_all": [
"(?i)уточни|уточнить|выбери|какую компанию|какая компания|организац",
"(?i)альтернатива плюс|лайсвуд|райм"
],
"forbidden_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object",
"(?i)какой\\s+конкретн.*склад",
"(?i)какой\\s+склад",
"(?i)конкретн.*товар",
"(?i)названи[ея]\\s+товар",
"(?i)категор",
"(?i)материал"
],
"criticality": "critical",
"semantic_tags": [
"inventory_root",
"clarification_required",
"warehouse_not_required"
]
},
{
"step_id": "step_04_company_choice_resumes_inventory_without_warehouse",
"title": "Company choice resumes root inventory snapshot without asking for warehouse or item",
"question": "АЛЬТЕРНАТИВА",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_intents": [
"inventory_on_hand_as_of_date"
],
"required_filters": {
"as_of_date": "{{runtime.today_iso}}",
"organization": "ООО Альтернатива Плюс"
},
"forbidden_filter_keys": [
"warehouse",
"item",
"category"
],
"required_direct_answer_patterns_any": [
"(?i)на складе|остат",
"{{runtime.today_dot_regex}}"
],
"forbidden_direct_answer_patterns": [
"(?i)^отлично, фиксирую рабочую организацию",
"(?i)^фиксирую рабочую организацию",
"(?i)уточните организацию",
"(?i)какой\\s+конкретн.*склад",
"(?i)какой\\s+склад",
"(?i)конкретн.*товар",
"(?i)названи[ея]\\s+товар",
"(?i)категор",
"(?i)материал",
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "critical",
"semantic_tags": [
"clarification_resume",
"inventory_root",
"warehouse_not_required"
]
},
{
"step_id": "step_05_historical_inventory_capability_no_warehouse_reask",
"title": "Historical inventory capability follow-up stays human and does not ask for warehouse",
"question": "а исторические остатки на другие даты умеешь?",
"allowed_reply_types": [
"factual",
"factual_with_explanation"
],
"required_answer_patterns_any": [
"(?i)историческ|история",
"(?i)могу|умею"
],
"forbidden_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object",
"(?i)какой\\s+конкретн.*склад",
"(?i)какой\\s+склад",
"(?i)конкретн.*товар",
"(?i)названи[ея]\\s+товар",
"(?i)категор",
"(?i)материал"
],
"criticality": "important",
"semantic_tags": [
"inventory_capability_meta",
"warehouse_not_required"
]
},
{
"step_id": "step_06_inventory_june_2017_after_capability",
"title": "Month-only follow-up keeps inventory contour and selected organization",
"question": "давай на июнь 2017",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_intents": [
"inventory_on_hand_as_of_date"
],
"required_filters": {
"as_of_date": "2017-06-30",
"period_from": "2017-06-01",
"period_to": "2017-06-30",
"organization": "ООО Альтернатива Плюс"
},
"forbidden_filter_keys": [
"warehouse",
"item",
"category"
],
"required_direct_answer_patterns_any": [
"30\\.06\\.2017",
"(?i)на складе|остат"
],
"forbidden_direct_answer_patterns": [
"(?i)^отлично, фиксирую рабочую организацию",
"(?i)уточните организацию",
"(?i)какой\\s+конкретн.*склад",
"(?i)какой\\s+склад",
"(?i)конкретн.*товар",
"(?i)названи[ея]\\s+товар",
"(?i)категор",
"(?i)материал",
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "critical",
"semantic_tags": [
"historical_inventory",
"date_followup",
"warehouse_not_required"
]
},
{
"step_id": "step_07_inventory_march_2016_stays_root",
"title": "Another short month stays in inventory root and organization scope",
"question": "март 2016",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_intents": [
"inventory_on_hand_as_of_date"
],
"required_filters": {
"as_of_date": "2016-03-31",
"period_from": "2016-03-01",
"period_to": "2016-03-31",
"organization": "ООО Альтернатива Плюс"
},
"forbidden_filter_keys": [
"warehouse",
"item",
"category"
],
"required_direct_answer_patterns_any": [
"31\\.03\\.2016",
"(?i)на складе|остат"
],
"forbidden_direct_answer_patterns": [
"(?i)^отлично, фиксирую рабочую организацию",
"(?i)уточните организацию",
"(?i)какой\\s+конкретн.*склад",
"(?i)какой\\s+склад",
"(?i)конкретн.*товар",
"(?i)названи[ея]\\s+товар",
"(?i)категор",
"(?i)материал",
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "critical",
"semantic_tags": [
"historical_inventory",
"date_followup",
"warehouse_not_required"
]
}
]
}
@@ -0,0 +1,207 @@
{
"schema_version": "domain_truth_harness_spec_v1",
"scenario_id": "address_truth_harness_phase102_debt_mirror_clean_scope_polarity",
"domain": "address_phase102_debt_mirror_clean_scope_polarity",
"title": "Phase 102 debt mirror clean-scope polarity replay",
"description": "Focused semantic replay for the assistant-stage1-87gHJCwTI9 concern: mirrored 76.* settlement rows around Комитет государственных услуг must not look like the same clean debt in both directions. The assistant may disclose the mirrored/offset part, but the direct business answer must keep payables and receivables polarity clean.",
"bindings": {},
"steps": [
{
"step_id": "step_01_choose_company_scope",
"title": "Select Альтернатива Плюс as active organization",
"question": "Альтернатива Плюс",
"required_answer_patterns_all": [
"(?i)альтернатива плюс",
"(?i)зафиксир|работаем|организац"
],
"forbidden_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "important",
"semantic_tags": [
"company_selected",
"organization_scope"
]
},
{
"step_id": "step_02_clean_payables_today",
"title": "Clean payables root excludes mirrored settlement offset from direct answer",
"question": "мы кому реально должны денег на сегодня? коротко, чистый долг к оплате, без встречных обеспечений как основного долга",
"allowed_reply_types": [
"factual",
"factual_with_explanation"
],
"expected_intents": [
"payables_confirmed_as_of_date"
],
"required_filters": {
"as_of_date": "{{runtime.today_iso}}",
"organization": "ООО Альтернатива Плюс"
},
"required_direct_answer_patterns_any": [
"(?i)долг к оплате|должны|кредитор|к оплате"
],
"forbidden_direct_answer_patterns": [
"(?i)комитет.*3\\s*[\\.,]?\\s*677\\s*[\\.,]?\\s*454",
"(?i)3\\s*[\\.,]?\\s*677\\s*[\\.,]?\\s*454.*комитет"
],
"forbidden_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "critical",
"semantic_tags": [
"payables_snapshot",
"debt_mirror_clean_scope",
"direct_answer_first"
]
},
{
"step_id": "step_03_committee_payable_is_not_clean_debt",
"title": "Committee payable check explains mirrored/offset nature instead of clean debt overclaim",
"question": "а Комитету государственных услуг мы реально должны эти 3,6 млн или это встречное обеспечение/зачет? объясни именно по смыслу долга",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)комитет",
"(?i)встречн|обеспеч|зач[её]т|исключ|не.*чист|не.*основн"
],
"forbidden_direct_answer_patterns": [
"(?i)^.*мы\\s+должны.*комитет.*3\\s*[\\.,]?\\s*677\\s*[\\.,]?\\s*454",
"(?i)^.*комитет.*чист.*долг.*3\\s*[\\.,]?\\s*677\\s*[\\.,]?\\s*454"
],
"forbidden_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "critical",
"semantic_tags": [
"payables_counterparty_check",
"debt_mirror_clean_scope",
"polarity_honesty"
]
},
{
"step_id": "step_04_committee_receivable_is_not_clean_debt",
"title": "Mirrored receivable question does not present the same amount as clean customer debt",
"question": "а нам Комитет государственных услуг тоже должен 3,6 млн? это же та же сумма — скажи честно, это дебиторка или встречная часть?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)комитет",
"(?i)встречн|обеспеч|зач[её]т|исключ|не.*чист|не.*основн|не.*дебитор"
],
"forbidden_direct_answer_patterns": [
"(?i)^.*нам\\s+долж.*комитет.*3\\s*[\\.,]?\\s*677\\s*[\\.,]?\\s*454",
"(?i)^.*комитет.*чист.*дебитор.*3\\s*[\\.,]?\\s*677\\s*[\\.,]?\\s*454"
],
"forbidden_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "critical",
"semantic_tags": [
"receivables_counterparty_check",
"debt_mirror_clean_scope",
"polarity_honesty"
]
},
{
"step_id": "step_05_clean_receivables_today",
"title": "Clean receivables root excludes mirrored settlement offset from direct answer",
"question": "тогда кто нам реально должен денег на сегодня? именно чистая дебиторка",
"allowed_reply_types": [
"factual",
"factual_with_explanation"
],
"expected_intents": [
"receivables_confirmed_as_of_date"
],
"required_filters": {
"as_of_date": "{{runtime.today_iso}}",
"organization": "ООО Альтернатива Плюс"
},
"required_direct_answer_patterns_any": [
"(?i)нам должны|дебитор|задолж|долг"
],
"forbidden_direct_answer_patterns": [
"(?i)комитет.*3\\s*[\\.,]?\\s*677\\s*[\\.,]?\\s*454",
"(?i)3\\s*[\\.,]?\\s*677\\s*[\\.,]?\\s*454.*комитет"
],
"forbidden_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "critical",
"semantic_tags": [
"receivables_snapshot",
"debt_mirror_clean_scope",
"direct_answer_first"
]
},
{
"step_id": "step_06_payables_mirror_followup_keeps_clean_scope",
"title": "Short mirror follow-up returns clean payables again, not the mirrored Committee amount",
"question": "а мы кому?",
"allowed_reply_types": [
"factual",
"factual_with_explanation"
],
"expected_intents": [
"payables_confirmed_as_of_date"
],
"required_filters": {
"as_of_date": "{{runtime.today_iso}}",
"organization": "ООО Альтернатива Плюс"
},
"required_direct_answer_patterns_any": [
"(?i)долг к оплате|должны|кредитор|к оплате"
],
"forbidden_direct_answer_patterns": [
"(?i)комитет.*3\\s*[\\.,]?\\s*677\\s*[\\.,]?\\s*454",
"(?i)3\\s*[\\.,]?\\s*677\\s*[\\.,]?\\s*454.*комитет"
],
"forbidden_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "critical",
"semantic_tags": [
"settlements_mirror_followup",
"payables_snapshot",
"debt_mirror_clean_scope"
]
}
]
}
@@ -0,0 +1,176 @@
{
"schema_version": "domain_truth_harness_spec_v1",
"scenario_id": "address_truth_harness_phase103_financial_role_purpose_arbitration",
"domain": "address_phase103_financial_role_purpose_arbitration",
"title": "Phase 103 financial role and purpose arbitration replay",
"description": "Focused semantic replay for the Open-World Schema/Primitive Discovery slice: bank-like counterparties must be explained through confirmed 1C operation/purpose evidence and must not contaminate ordinary customer, supplier, revenue, or procurement semantics. The replay starts with a bare organization choice and ends with a normal counterparty value-flow canary.",
"bindings": {},
"steps": [
{
"step_id": "step_01_choose_company_scope",
"title": "Bare organization choice binds active company scope",
"question": "Альтернатива Плюс",
"allowed_reply_types": [
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)фиксир|рабоч.*организац|контур",
"(?i)альтернатива"
],
"forbidden_answer_patterns": [
"(?i)программ|продукт|услуг.*компан",
"(?i)не могу определить",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"bare_org_scope",
"phase102_canary"
]
},
{
"step_id": "step_02_sberbank_role_purpose_summary",
"title": "Sberbank role is answered by operation and purpose evidence",
"question": "По СБЕРБАНКУ за 2020 покажи коротко: сколько денег входило и уходило, и что это по смыслу в 1С — клиентская выручка, поставщик, комиссия, кредит или другой финансовый поток?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)сбербанк|банк|финансов",
"(?i)вход|поступ|исход|списан|ушл",
"(?i)комисс|кредит|возврат|вид операц|назначен|договор",
"(?i)не.*обычн.*клиент|не.*обычн.*поставщик|не.*клиентск.*выручк|нельзя.*читать"
],
"forbidden_answer_patterns": [
"(?i)обычный поставщик.*сбербанк",
"(?i)обычный клиент.*сбербанк",
"(?i)главный поставщик.*сбербанк",
"(?i)главный клиент.*сбербанк",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"financial_role_purpose",
"bank_like_counterparty",
"bank_operations_by_counterparty"
]
},
{
"step_id": "step_03_sberbank_incoming_customer_boundary",
"title": "Incoming Sberbank money is not overclaimed as customer revenue",
"question": "Если СБЕРБАНК есть во входящих поступлениях, можно ли считать его нашим клиентом и выручкой? Скажи по подтвержденным строкам, без притягивания.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)сбербанк|банк",
"(?i)не.*клиент|не.*выручк|нельзя.*считать|не подтвержд",
"(?i)поступ|вид операц|договор|возврат|кредит|депозит|финансов"
],
"forbidden_answer_patterns": [
"(?i)сбербанк.*обычный клиент",
"(?i)сбербанк.*клиентская выручка",
"(?i)точно.*выручка",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"bank_like_customer_boundary",
"customer_revenue_and_payments"
]
},
{
"step_id": "step_04_sberbank_outgoing_supplier_boundary",
"title": "Outgoing Sberbank money is not overclaimed as supplier dependency",
"question": "А если деньги уходили в СБЕРБАНК, это наш поставщик или финансовые списания? Раздели по смыслу и покажи основание.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)сбербанк|банк",
"(?i)не.*поставщик|не.*обычн.*поставщик|финансов|банковск",
"(?i)комисс|назначен|вид операц|списан|договор"
],
"forbidden_answer_patterns": [
"(?i)сбербанк.*обычный поставщик",
"(?i)главный поставщик.*сбербанк",
"(?i)точно.*закупк",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"bank_like_supplier_boundary",
"supplier_payouts_profile"
]
},
{
"step_id": "step_05_business_overview_excludes_bank_role_overclaim",
"title": "Business overview keeps bank leaders out of ordinary operating role overclaim",
"question": "Теперь дай взрослый обзор за 2020 по компании: входящие, исходящие, нетто, топы, но банк в топах отдельно объясни как финансовый поток, если по назначению он не обычный клиент или поставщик.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_catalog_alignment_status": "selected_matches_top",
"expected_catalog_chain_top_match": "business_overview",
"expected_catalog_selected_matches_top": true,
"required_answer_patterns_all": [
"(?i)2020|компан|организац",
"(?i)вход|поступ|исход|списан|нетто",
"(?i)банк|сбербанк|финансов",
"(?i)не.*обычн.*клиент|не.*обычн.*поставщик|не.*выручк|не.*закупк|назначен"
],
"forbidden_answer_patterns": [
"(?i)сбербанк.*обычный поставщик",
"(?i)сбербанк.*обычный клиент",
"(?i)чистая прибыль.*точно",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"business_overview",
"financial_role_purpose",
"bank_like_counterparty"
]
},
{
"step_id": "step_06_svk_value_flow_canary_after_bank_context",
"title": "Normal counterparty net flow survives after bank-role context",
"question": "А теперь отдельно по Группа СВК за 2020: сколько денег получили, сколько заплатили и какое нетто?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_catalog_alignment_status": "selected_matches_top",
"expected_catalog_chain_top_match": "value_flow_comparison",
"expected_catalog_selected_matches_top": true,
"required_answer_patterns_all": [
"(?i)свк|группа",
"(?i)2020",
"(?i)получ|вход|поступ",
"(?i)заплат|исход|списан",
"(?i)нетто|сальдо|разниц"
],
"forbidden_answer_patterns": [
"(?i)сбербанк",
"(?i)уточните организац|какую компанию",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"counterparty_net_cash_flow",
"stale_scope_guard",
"canary"
]
}
]
}
@@ -0,0 +1,138 @@
{
"schema_version": "domain_truth_harness_spec_v1",
"scenario_id": "address_truth_harness_phase104_generic_role_tail_anchor_hygiene",
"domain": "address_phase104_generic_role_tail_anchor_hygiene",
"title": "Phase 104 generic role-tail anchor hygiene replay",
"description": "Focused semantic replay for the Open-World Schema/Primitive Discovery slice: broad company overview wording may mention ordinary customer/supplier roles as business semantics, but generic role tails such as 'или поставщик' must not become a counterparty anchor or poison later bank/counterparty drilldowns.",
"bindings": {},
"steps": [
{
"step_id": "step_01_choose_company_scope",
"title": "Bare organization choice binds active company scope",
"question": "Альтернатива Плюс",
"allowed_reply_types": [
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)фиксир|рабоч.*организац|контур",
"(?i)альтернатива"
],
"forbidden_answer_patterns": [
"(?i)не могу определить",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"bare_org_scope",
"phase102_canary"
]
},
{
"step_id": "step_02_business_overview_role_tail_not_counterparty",
"title": "Business overview role words do not become counterparty anchors",
"question": "Теперь дай взрослый обзор за 2020 по компании: входящие, исходящие, нетто, топы, но банк в топах отдельно объясни как финансовый поток, если по назначению он не обычный клиент или поставщик.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_catalog_alignment_status": "selected_matches_top",
"expected_catalog_chain_top_match": "business_overview",
"expected_catalog_selected_matches_top": true,
"forbidden_filter_keys": [
"counterparty"
],
"forbidden_filter_values": {
"counterparty": [
"или поставщик",
"поставщик",
"клиент",
"обычный клиент",
"обычный клиент или поставщик"
]
},
"required_answer_patterns_all": [
"(?i)2020|компан|организац",
"(?i)вход|поступ|исход|списан|нетто",
"(?i)банк|сбербанк|финансов",
"(?i)не.*обычн.*клиент|не.*обычн.*поставщик|не.*выручк|не.*закупк|назначен"
],
"forbidden_answer_patterns": [
"(?i)сбербанк.*обычный поставщик",
"(?i)сбербанк.*обычный клиент",
"(?i)чистая прибыль.*точно",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"business_overview",
"generic_role_tail_anchor_hygiene",
"financial_role_purpose"
]
},
{
"step_id": "step_03_sberbank_role_after_role_tail_overview",
"title": "Bank-role drilldown still resolves Sberbank after role-tail overview",
"question": "А отдельно по СБЕРБАНКУ: он для нас клиент, поставщик или финансовый поток? Дай коротко по подтвержденным строкам.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_filters": {
"counterparty": "СБЕРБАНК"
},
"required_answer_patterns_all": [
"(?i)сбербанк|банк",
"(?i)финансов|банковск|кредит|комисс|возврат|назначен|вид операц",
"(?i)не.*обычн.*клиент|не.*обычн.*поставщик|не.*клиентск.*выручк|нельзя.*читать"
],
"forbidden_answer_patterns": [
"(?i)или поставщик",
"(?i)сбербанк.*обычный поставщик",
"(?i)сбербанк.*обычный клиент",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"bank_like_counterparty",
"financial_role_purpose",
"post_overview_anchor_integrity"
]
},
{
"step_id": "step_04_real_supplier_prefix_still_keeps_counterparty",
"title": "Explicit supplier prefix still preserves a real counterparty",
"question": "А теперь по поставщику Группа СВК за 2020: сколько мы ему заплатили и какой общий денежный смысл?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_catalog_alignment_status": "selected_matches_top",
"expected_catalog_chain_top_match": "value_flow",
"expected_catalog_selected_matches_top": true,
"required_filters": {
"counterparty": "Группа СВК"
},
"required_answer_patterns_all": [
"(?i)свк|группа",
"(?i)2020",
"(?i)заплат|исход|списан|получ|поступ|нетто|смысл"
],
"forbidden_answer_patterns": [
"(?i)или поставщик",
"(?i)сбербанк",
"(?i)уточните организац|какую компанию",
"(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"counterparty_net_cash_flow",
"supplier_prefix_canary",
"stale_scope_guard"
]
}
]
}
@@ -0,0 +1,429 @@
{
"schema_version": "domain_truth_harness_spec_v1",
"scenario_id": "address_truth_harness_phase105_mixed_schema_primitive_closure",
"domain": "address_phase105_mixed_schema_primitive_closure",
"title": "Phase 105 mixed schema/primitive closure replay",
"description": "A broad live semantic replay for the Open-World Schema/Primitive Discovery module. It intentionally crosses old and new seams: inventory root clarification, historical inventory carryover, business overview role-tail hygiene, bank role/purpose boundaries, supplier payout wording, bidirectional value-flow, clean debt polarity, VAT continuity, and cash-flow-vs-profit answer shape.",
"bindings": {},
"steps": [
{
"step_id": "step_01_inventory_root_requires_company_only",
"title": "Broad inventory root uses resolved organization and does not ask for warehouse",
"question": "кайф - что там на складе по остаткам?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_intents": [
"inventory_on_hand_as_of_date"
],
"required_filters": {
"as_of_date": "{{runtime.today_iso}}",
"organization": "ООО Альтернатива Плюс"
},
"forbidden_filter_keys": [
"warehouse",
"item",
"category",
"counterparty"
],
"required_direct_answer_patterns_any": [
"(?i)на складе|остат",
"{{runtime.today_dot_regex}}"
],
"forbidden_answer_patterns": [
"(?i)какой\\s+конкретн.*склад",
"(?i)какой\\s+склад",
"(?i)конкретн.*товар",
"(?i)названи[ея]\\s+товар",
"(?i)категор",
"(?i)материал",
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"inventory_root",
"resolved_organization_scope",
"warehouse_not_required"
]
},
{
"step_id": "step_02_redundant_company_choice_scope_ack",
"title": "Redundant company choice only updates organization scope",
"question": "АЛЬТЕРНАТИВА",
"allowed_reply_types": [
"factual_with_explanation",
"partial_coverage"
],
"forbidden_filter_keys": [
"warehouse",
"item",
"counterparty",
"category"
],
"required_answer_patterns_all": [
"(?i)альтернатива плюс",
"(?i)фиксир|организац|контур|компан"
],
"forbidden_direct_answer_patterns": [
"(?i)уточните организацию",
"(?i)какой\\s+конкретн.*склад",
"(?i)какой\\s+склад",
"(?i)конкретн.*товар",
"(?i)названи[ея]\\s+товар",
"(?i)категор",
"(?i)материал",
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"redundant_scope_selection",
"organization_scope",
"warehouse_not_required"
]
},
{
"step_id": "step_03_historical_inventory_meta",
"title": "Historical inventory capability follow-up stays human",
"question": "а исторические остатки на другие даты умеешь?",
"allowed_reply_types": [
"factual",
"factual_with_explanation"
],
"required_answer_patterns_any": [
"(?i)историческ|история",
"(?i)могу|умею"
],
"forbidden_answer_patterns": [
"(?i)какой\\s+конкретн.*склад",
"(?i)какой\\s+склад",
"(?i)конкретн.*товар",
"(?i)названи[ея]\\s+товар",
"(?i)категор",
"(?i)материал",
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "important",
"semantic_tags": [
"inventory_capability_meta",
"warehouse_not_required"
]
},
{
"step_id": "step_04_inventory_june_2017_followup",
"title": "Month-only follow-up keeps inventory contour and selected organization",
"question": "давай на июнь 2017",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_intents": [
"inventory_on_hand_as_of_date"
],
"required_filters": {
"as_of_date": "2017-06-30",
"period_from": "2017-06-01",
"period_to": "2017-06-30",
"organization": "ООО Альтернатива Плюс"
},
"forbidden_filter_keys": [
"warehouse",
"item",
"category"
],
"required_direct_answer_patterns_any": [
"30\\.06\\.2017",
"(?i)на складе|остат"
],
"forbidden_direct_answer_patterns": [
"(?i)уточните организацию",
"(?i)какой\\s+конкретн.*склад",
"(?i)какой\\s+склад",
"(?i)конкретн.*товар",
"(?i)названи[ея]\\s+товар",
"(?i)категор",
"(?i)материал",
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"historical_inventory",
"date_followup",
"warehouse_not_required"
]
},
{
"step_id": "step_05_business_overview_role_tail_hygiene",
"title": "Business overview keeps role-tail words out of counterparty filters",
"question": "Теперь дай взрослый обзор за 2020 по компании: входящие, исходящие, нетто, топы, но банк в топах отдельно объясни как финансовый поток, если по назначению он не обычный клиент или поставщик.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_catalog_alignment_status": "selected_matches_top",
"expected_catalog_chain_top_match": "business_overview",
"expected_catalog_selected_matches_top": true,
"forbidden_filter_keys": [
"counterparty"
],
"required_answer_patterns_all": [
"(?i)2020|компан|организац",
"(?i)вход|поступ|исход|списан|нетто",
"(?i)банк|сбербанк|финансов",
"(?i)не.*обычн.*клиент|не.*обычн.*поставщик|не.*выручк|не.*закупк|назначен"
],
"forbidden_answer_patterns": [
"(?i)сбербанк.*обычный поставщик",
"(?i)сбербанк.*обычный клиент",
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"business_overview",
"generic_role_tail_anchor_hygiene"
]
},
{
"step_id": "step_06_sberbank_role_after_overview",
"title": "Sberbank role drilldown stays on bank-operation evidence",
"question": "А отдельно по СБЕРБАНКУ: он для нас клиент, поставщик или финансовый поток? Дай коротко по подтвержденным строкам.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_filters": {
"counterparty": "СБЕРБАНК"
},
"required_answer_patterns_all": [
"(?i)сбербанк|банк",
"(?i)финансов|банковск|кредит|комисс|возврат|назначен|вид операц",
"(?i)не.*обычн.*клиент|не.*обычн.*поставщик|не.*клиентск.*выручк|нельзя.*читать"
],
"forbidden_answer_patterns": [
"(?i)или поставщик",
"(?i)сбербанк.*обычный поставщик",
"(?i)сбербанк.*обычный клиент",
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"bank_like_counterparty",
"financial_role_purpose"
]
},
{
"step_id": "step_07_supplier_payment_wording",
"title": "Supplier payment wording routes as supplier payout, not population",
"question": "А теперь по поставщику Группа СВК за 2020: сколько мы ему заплатили и какой общий денежный смысл?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_intents": [
"supplier_payouts_profile"
],
"expected_catalog_alignment_status": "selected_matches_top",
"expected_catalog_chain_top_match": "value_flow",
"expected_catalog_selected_matches_top": true,
"required_answer_patterns_all": [
"(?i)свк|группа",
"(?i)2020",
"(?i)заплат|исход|списан|платеж|платёж|денежн|смысл"
],
"forbidden_answer_patterns": [
"(?i)или поставщик",
"(?i)сбербанк",
"(?i)уточните организац|какую компанию",
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"supplier_prefix_canary",
"value_flow"
]
},
{
"step_id": "step_08_svk_bidirectional_value_flow",
"title": "Normal counterparty bidirectional value flow survives after supplier-only ask",
"question": "А теперь по Группа СВК за 2020: сколько денег получили, сколько заплатили и какое нетто?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_catalog_alignment_status": "selected_matches_top",
"expected_catalog_chain_top_match": "value_flow_comparison",
"expected_catalog_selected_matches_top": true,
"required_answer_patterns_all": [
"(?i)свк",
"(?i)2020",
"(?i)получ|вход|поступ",
"(?i)заплат|исход|списан",
"(?i)нетто|сальдо|разниц"
],
"forbidden_answer_patterns": [
"(?i)сбербанк",
"(?i)уточните организац|какую компанию",
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"counterparty_net_cash_flow",
"stale_scope_guard"
]
},
{
"step_id": "step_09_clean_payables_scope",
"title": "Clean payables question keeps organization scope and debt polarity",
"question": "кому мы должны на конец 2020?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_intents": [
"payables_confirmed_as_of_date"
],
"required_filters": {
"as_of_date": "2020-12-31",
"organization": "ООО Альтернатива Плюс"
},
"forbidden_filter_keys": [
"counterparty"
],
"required_answer_patterns_all": [
"(?i)должн|кредитор|кредиторск|поставщик|обязательств",
"(?i)2020|31\\.12\\.2020|конец"
],
"forbidden_answer_patterns": [
"(?i)нам должны.*мы должны",
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"debt_polarity",
"payables"
]
},
{
"step_id": "step_10_clean_receivables_scope",
"title": "Mirror receivables follow-up switches polarity cleanly",
"question": "а нам кто должен на конец 2020?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_intents": [
"receivables_confirmed_as_of_date"
],
"required_filters": {
"as_of_date": "2020-12-31",
"organization": "ООО Альтернатива Плюс"
},
"forbidden_filter_keys": [
"counterparty"
],
"required_answer_patterns_all": [
"(?i)нам.*долж|дебитор|дебиторск|покупател|заказчик",
"(?i)2020|31\\.12\\.2020|конец"
],
"forbidden_answer_patterns": [
"(?i)мы должны.*нам должны",
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"debt_polarity",
"receivables"
]
},
{
"step_id": "step_11_vat_tax_period_continuity",
"title": "VAT tax-period exact question survives after debt/value-flow pivots",
"question": "сколько НДС надо заплатить в налоговую за декабрь 2019?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_intents": [
"vat_liability_confirmed_for_tax_period"
],
"required_filters": {
"period_from": "2019-10-01",
"period_to": "2019-12-31",
"organization": "ООО Альтернатива Плюс"
},
"required_answer_patterns_all": [
"(?i)ндс",
"(?i)декабр|2019",
"(?i)налог|заплат|уплат|к уплате|не найден"
],
"forbidden_answer_patterns": [
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"vat_continuity",
"tax_period"
]
},
{
"step_id": "step_12_earnings_wording_to_business_overview",
"title": "Organization earnings slang routes to business overview, not customer ranking",
"question": "скока денег альтернатива заработала за 20 год?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"expected_catalog_alignment_status": "selected_matches_top",
"expected_catalog_chain_top_match": "business_overview",
"expected_catalog_selected_matches_top": true,
"required_answer_patterns_all": [
"(?i)альтернатива|компан|организац",
"(?i)2020",
"(?i)поступ|вход|денег|заработ",
"(?i)не.*прибыл|не.*чист"
],
"forbidden_answer_patterns": [
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"business_overview",
"earnings_wording"
]
},
{
"step_id": "step_13_profit_followup_boundary",
"title": "Profit follow-up distinguishes cash-flow net from clean profit",
"question": "а это чистая прибыль?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)не.*чист.*прибыл|не.*является.*прибыл|это.*не.*прибыл",
"(?i)поступ|денежн|cash|нетто|расход|себестоим|закрытие"
],
"forbidden_answer_patterns": [
"(?i)это чистая прибыль",
"(?i)точно.*прибыл",
"(?i)route_candidate|primitive|planner_|snapshot_items|answer_object"
],
"criticality": "critical",
"semantic_tags": [
"profit_boundary",
"business_overview_followup"
]
}
]
}
@@ -0,0 +1,144 @@
{
"schema_version": "domain_truth_harness_spec_v1",
"scenario_id": "address_truth_harness_phase99_large_query_budget_continuation",
"domain": "address_phase99_large_query_budget_continuation",
"title": "Phase 99 large-query budget and continuation policy replay",
"description": "Focused semantic replay for explicit-year large business questions: the assistant should use chunked 1C evidence where available, answer direct-first, avoid fake profit claims, keep bank/counterparty boundaries, and not collapse into row-limit refusal wording when yearly money coverage can be recovered.",
"bindings": {},
"steps": [
{
"step_id": "step_01_year_business_overview_uses_chunked_money_evidence",
"title": "Explicit-year business overview gives direct money summary without row-limit refusal",
"question": "Дай взрослый бизнес-обзор ООО Альтернатива Плюс за 2020: входящие, исходящие, нетто, кто основные источники денег и где важные ограничения.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)альтернатива",
"(?i)2020",
"(?i)входящ|поступлен",
"(?i)исходящ|списан|платеж",
"(?i)нетто|денежн",
"(?i)прибыл|не.*прибыл|не.*бухгалтерск"
],
"forbidden_answer_patterns": [
"(?i)уп[её]р.*лимит",
"(?i)лимит выборки",
"(?i)лимит строк",
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)catalog_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "critical",
"semantic_tags": [
"business_overview",
"large_query_budget",
"direct_answer_first"
]
},
{
"step_id": "step_02_followup_profit_boundary_stays_short",
"title": "Follow-up keeps cash-flow versus profit boundary",
"question": "То есть это можно считать прибылью за 2020 или нет? Коротко.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)нет|нельзя|не стоит",
"(?i)прибыл",
"(?i)денежн|поступлен|поток",
"(?i)себестоим|расход|финрезультат|бухгалтерск"
],
"forbidden_answer_patterns": [
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)catalog_",
"(?i)snapshot_items",
"(?i)answer_object"
],
"criticality": "critical",
"semantic_tags": [
"profit_boundary",
"followup_directness",
"business_language"
]
},
{
"step_id": "step_03_top_money_source_keeps_bank_boundary",
"title": "Top money source keeps bank boundary after broad overview",
"question": "А кто за 2020 принес больше всего денег, и если там банк, не называй его обычным клиентом.",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)2020",
"(?i)деньг|поступлен|входящ",
"(?i)сбербанк|банк|финансов|не.*обычн|не.*клиент"
],
"forbidden_answer_patterns": [
"(?i)сбербанк.*обычн.*клиент",
"(?i)сбербанк.*главн.*клиент",
"(?i)уп[её]р.*лимит",
"(?i)лимит выборки",
"(?i)лимит строк",
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)catalog_"
],
"criticality": "critical",
"semantic_tags": [
"financial_counterparty_flow_hint",
"large_query_budget",
"context_continuity"
]
},
{
"step_id": "step_04_supplier_dependency_uses_checked_outgoing_scope",
"title": "Supplier-dependency question uses checked outgoing scope and avoids hard audit overclaim",
"question": "По исходящим за 2020 есть зависимость от одного поставщика или это только денежная концентрация?",
"allowed_reply_types": [
"factual",
"factual_with_explanation",
"partial_coverage"
],
"required_answer_patterns_all": [
"(?i)2020",
"(?i)исходящ|платеж|списан",
"(?i)поставщик|получател|концентрац",
"(?i)не.*аудит|не.*полный|не.*надежност|не.*качество"
],
"forbidden_answer_patterns": [
"(?i)сбербанк.*обычн.*поставщик",
"(?i)сбербанк.*главн.*поставщик",
"(?i)уп[её]р.*лимит",
"(?i)лимит выборки",
"(?i)лимит строк",
"(?i)\\bMCP\\b",
"(?i)route_candidate",
"(?i)primitive",
"(?i)planner_",
"(?i)catalog_"
],
"criticality": "critical",
"semantic_tags": [
"vendor_risk_procurement_quality",
"large_query_budget",
"business_language"
]
}
]
}