346 lines
15 KiB
JSON
346 lines
15 KiB
JSON
{
|
||
"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"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|