{ "schema_version": "domain_scenario_pack_v1", "pack_id": "active_phase108_settlement_pivot_debt_boundary_20260615", "domain": "address_phase108_settlement_pivot_debt_boundary", "runtime_domain": "settlement_document_payment_contract_pivots", "title": "Settlement pivot and debt boundary replay", "description": "Active slice for dogfooding the autonomous agent loop on a settlement-heavy path: counterparty document root, repeated payments/contracts/documents pivots, year switch carryover, debt due-date boundary, and off-domain recovery.", "status": "active", "source_of_truth_policy": { "purpose": "single mutable domain source for the current orchestration target", "switching_rule": "when the project switches to another domain, replace this file instead of rewriting the stable agent canon", "stable_layers": [ "AGENTS.md", ".codex/skills/domain-case-loop", ".codex/agents/domain_analyst.toml", ".codex/agents/orchestrator.toml" ], "mutable_layer": [ "docs/orchestration/active_domain_contract.json" ] }, "analysis_context": { "as_of_date": "2026-06-15", "source": "phase108_after_phase107_mixed_planner_brain_dogfood", "known_previous_anchors": [ "phase75_contracts_to_payments_year_switch", "phase79_payments_to_contracts_to_documents_year_switch", "phase81_payments_contracts_documents_back_to_payments_year_switch", "phase94_debt_due_date_aging_reviewed_route", "phase107_mixed_planner_brain_dogfood_20260615_p11_loop" ], "why_now": "Phase107 hardened counterparty money-flow memory. Phase108 moves to settlement pivots: documents, payments, contracts, repeated pronoun reuse, year-switch carryover, and honest debt due-date boundaries." }, "target_score": 88, "bindings": { "main_organization": "ООО Альтернатива Плюс", "pivot_counterparty": "Жуковка 51", "control_year": "2021", "debt_boundary_year_end": "2020-12-31" }, "issue_codes_under_test": [ "technical_garbage_in_answer", "business_direct_answer_missing", "business_next_step_missing", "business_utility_gap" ], "detectors_under_test": [ "runtime_tokens_in_user_answer", "capability_ids_in_user_answer", "first_line_not_direct_answer", "top_level_scaffold_before_answer", "limited_answer_without_next_action", "business_answer_too_verbose_output" ], "agent_audit_expectations": { "semantic_answer_review_first": true, "direct_answer_first": true, "business_utility_required": true, "selected_counterparty_memory_required": true, "pivot_action_memory_required": true, "year_switch_keeps_last_action_required": true, "debt_due_date_boundary_must_be_honest": true, "off_domain_living_chat_must_not_replay_business_context": true, "technical_garbage_forbidden": true, "do_not_accept_if": [ "a pronoun follow-up over 'по нему' loses Жуковка 51", "the year switch asks again for a counterparty instead of reusing the active settlement object", "a payment/contracts/documents pivot answers with a different object family without saying so", "the debt due-date answer claims proven overdue debt without payment-term evidence", "the final answer leaks route ids, capability ids, runtime enums, or debug payload", "off-domain living chat is hijacked by stale 1C business context" ] }, "scenarios": [ { "scenario_id": "settlement_pivot_year_switch_and_debt_boundary", "title": "Documents, payments, contracts, year switch, and debt boundary", "description": "Validate repeated settlement pivots over the same counterparty and a debt due-date boundary canary in one session.", "steps": [ { "step_id": "step_01_documents_by_counterparty", "title": "Open documents for the counterparty", "node_role": "root", "question": "Покажи документы по Жуковке 51.", "allowed_reply_types": [ "factual", "factual_with_explanation", "partial_coverage" ], "semantic_tags": [ "documents_by_counterparty", "counterparty_root", "pivot_seed", "integrity_guard" ], "required_answer_shape": "direct_answer_first", "required_answer_patterns_all": [ "(?i)жуковк", "(?i)документ|сч[её]т|акт|накладн|строк" ], "forbidden_answer_patterns": [ "(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery", "(?i)уточните.*контрагент|какого контрагента" ], "criticality": "critical" }, { "step_id": "step_02_payments_by_pronoun_followup", "title": "Pivot from documents to payments", "question": "А по нему платежи?", "depends_on": [ "step_01_documents_by_counterparty" ], "allowed_reply_types": [ "factual", "factual_with_explanation", "partial_coverage" ], "semantic_tags": [ "payments_followup", "counterparty_pronoun_resolution", "document_to_payments_pivot", "integrity_guard" ], "required_answer_shape": "direct_answer_first", "required_answer_patterns_all": [ "(?i)жуковк|контрагент", "(?i)плат[её]ж|операц|банк|поступлен|списан" ], "forbidden_answer_patterns": [ "(?i)уточните.*контрагент|какого контрагента", "(?i)документы по всем контрагентам", "(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery" ], "criticality": "critical" }, { "step_id": "step_03_contracts_after_payments_pivot", "title": "Pivot from payments to contracts", "question": "А по нему договоры?", "depends_on": [ "step_02_payments_by_pronoun_followup" ], "allowed_reply_types": [ "factual", "factual_with_explanation", "partial_coverage" ], "semantic_tags": [ "contracts_followup", "second_pivot", "counterparty_pronoun_resolution", "integrity_guard" ], "required_answer_shape": "direct_answer_first", "required_answer_patterns_all": [ "(?i)жуковк|контрагент", "(?i)договор|контракт|соглаш" ], "forbidden_answer_patterns": [ "(?i)уточните.*контрагент|какого контрагента", "(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery" ], "criticality": "critical" }, { "step_id": "step_04_documents_after_contracts_pivot", "title": "Pivot back from contracts to documents", "question": "А по нему документы?", "depends_on": [ "step_03_contracts_after_payments_pivot" ], "allowed_reply_types": [ "factual", "factual_with_explanation", "partial_coverage" ], "semantic_tags": [ "documents_followup", "third_pivot", "counterparty_pronoun_resolution", "integrity_guard" ], "required_answer_shape": "direct_answer_first", "required_answer_patterns_all": [ "(?i)жуковк|контрагент", "(?i)документ|сч[её]т|акт|накладн|строк" ], "forbidden_answer_patterns": [ "(?i)уточните.*контрагент|какого контрагента", "(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery" ], "criticality": "critical" }, { "step_id": "step_05_payments_after_documents_pivot", "title": "Pivot back again to payments", "question": "А по нему платежи?", "depends_on": [ "step_04_documents_after_contracts_pivot" ], "allowed_reply_types": [ "factual", "factual_with_explanation", "partial_coverage" ], "semantic_tags": [ "payments_followup", "fourth_pivot", "counterparty_pronoun_resolution", "integrity_guard" ], "required_answer_shape": "direct_answer_first", "required_answer_patterns_all": [ "(?i)жуковк|контрагент", "(?i)плат[её]ж|операц|банк|поступлен|списан" ], "forbidden_answer_patterns": [ "(?i)уточните.*контрагент|какого контрагента", "(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery" ], "criticality": "critical" }, { "step_id": "step_06_year_switch_after_payments", "title": "Year switch keeps counterparty and payment action", "question": "А за 2021?", "depends_on": [ "step_05_payments_after_documents_pivot" ], "allowed_reply_types": [ "factual", "factual_with_explanation", "partial_coverage" ], "semantic_tags": [ "year_switch_after_fourth_pivot", "payments_followup", "period_followup_reuse", "integrity_guard" ], "required_answer_shape": "direct_answer_first", "required_answer_patterns_all": [ "(?i)2021", "(?i)жуковк|контрагент", "(?i)плат[её]ж|операц|банк|поступлен|списан" ], "forbidden_answer_patterns": [ "(?i)уточните.*контрагент|какого контрагента|за какой год", "(?i)метадан|схем|объект[а-я]* 1с", "(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery" ], "criticality": "critical" }, { "step_id": "step_07_debt_due_date_boundary", "title": "Debt due-date ask stays honest about overdue evidence", "question": "По ООО Альтернатива Плюс на конец 2020 можно точно понять, какая дебиторка просрочена?", "allowed_reply_types": [ "factual", "factual_with_explanation", "partial_coverage" ], "semantic_tags": [ "business_overview", "debt_due_date_boundary", "checked_negative", "honest_boundary" ], "required_answer_shape": "direct_answer_first", "required_answer_patterns_all": [ "(?i)дебитор|долг|открыт.*расчет|остат", "(?i)2020|2020-12-31|конец 2020", "(?i)срок.*оплат|due[- ]?date|просроч", "(?i)не установлен|не подтвержд|не доказ|нет подтвержденной просроч", "(?i)1С|проверенн|найденн|подтвержд" ], "forbidden_answer_patterns": [ "(?i)точно подтверждаю.*просроч", "(?i)просроч.*подтвержден.*без.*срок", "(?i)route_candidate|query_movements|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery" ], "criticality": "critical" }, { "step_id": "step_08_debt_boundary_short_followup", "title": "Short follow-up keeps the debt due-date boundary", "question": "То есть просрочку доказать нельзя, коротко почему?", "depends_on": [ "step_07_debt_due_date_boundary" ], "allowed_reply_types": [ "factual", "factual_with_explanation", "partial_coverage" ], "semantic_tags": [ "context_carryover", "debt_due_date_boundary", "checked_negative", "short_followup" ], "required_answer_shape": "direct_answer_first", "required_answer_patterns_all": [ "(?i)срок.*оплат|due[- ]?date|договор", "(?i)не установлен|не хватает|не подтвержд|не доказ", "(?i)просроч", "(?i)2020|2020-12-31|конец 2020" ], "forbidden_answer_patterns": [ "(?i)уточните организац|какую компанию", "(?i)точно подтверждаю.*просроч", "(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery" ], "criticality": "critical" }, { "step_id": "step_09_off_domain_living_chat_not_hijacked", "title": "Off-domain chat recovers after settlement and debt context", "question": "Ок, а пингвины умеют летать?", "allowed_reply_types": [ "factual", "factual_with_explanation", "partial_coverage" ], "semantic_tags": [ "off_domain_living_chat", "context_boundary", "human_answer" ], "required_answer_shape": "direct_answer_first", "required_answer_patterns_any": [ "(?i)пингвин", "(?i)не умеют летать|не летают|большинство.*не летает" ], "forbidden_answer_patterns": [ "(?i)1С|контрагент|дебитор|договор|плат[её]ж|документ|Жуковк|Альтернатива", "(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object|capability_id|mcp_discovery" ], "criticality": "info" } ] } ] }