{ "schema_version": "domain_scenario_pack_v1", "pack_id": "active_phase104_generic_role_tail_anchor_hygiene_20260615", "domain": "address_phase104_generic_role_tail_anchor_hygiene", "runtime_domain": "business_overview_role_tail_anchor_hygiene", "title": "Generic role-tail anchor hygiene", "description": "Active slice for the autonomous agent loop: broad company overview wording may mention customer/supplier roles, but generic role tails must not become counterparty anchors or poison later bank/counterparty drilldowns.", "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": "phase104_generic_role_tail_anchor_hygiene_after_value_flow_p06" }, "target_score": 88, "bindings": { "main_organization": "ООО Альтернатива Плюс", "control_year": "2020", "bank_counterparty": "СБЕРБАНК", "svk_counterparty": "Группа СВК" }, "issue_codes_under_test": [ "bank_counterparty_misclassified_as_business_partner", "technical_garbage_in_answer", "business_next_step_missing" ], "detectors_under_test": [ "bank_counterparty_boundary_required", "runtime_tokens_in_user_answer", "capability_ids_in_user_answer", "limited_answer_without_next_action" ], "agent_audit_expectations": { "semantic_answer_review_first": true, "direct_answer_first": true, "business_utility_required": true, "generic_role_tail_must_not_be_anchor": true, "bank_role_boundary_required": true, "technical_garbage_forbidden": true, "do_not_accept_if": [ "generic role wording such as 'client or supplier' becomes extracted_filters.counterparty", "the Sberbank follow-up is answered for a stale role-tail instead of Sberbank", "Sberbank is presented as an ordinary customer/supplier without a bank/financial-role caveat", "the real supplier prefix for Группа СВК is erased by the role-tail guard", "final answer leaks route ids, capability ids, runtime enums, or debug payload" ] }, "scenarios": [ { "scenario_id": "generic_role_tail_anchor_hygiene", "title": "Role-tail overview, bank drilldown, and real supplier canary", "description": "Validate that business overview role words stay semantic-only, Sberbank remains a bank-role drilldown, and an explicit supplier prefix still preserves a real counterparty.", "steps": [ { "step_id": "step_01_choose_company_scope", "title": "Bare organization choice binds active company scope", "node_role": "root", "question": "{{bindings.main_organization}}", "allowed_reply_types": [ "factual_with_explanation", "partial_coverage" ], "semantic_tags": [ "bare_org_scope", "company_scope" ], "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" ] }, { "step_id": "step_02_business_overview_role_tail_not_counterparty", "title": "Business overview role words do not become counterparty anchors", "question": "Теперь дай взрослый обзор за {{bindings.control_year}} по компании: входящие, исходящие, нетто, топы, но банк в топах отдельно объясни как финансовый поток, если по назначению он не обычный клиент или поставщик.", "depends_on": [ "step_01_choose_company_scope" ], "expected_intents": [ "business_overview" ], "semantic_tags": [ "business_overview", "generic_role_tail_anchor_hygiene", "financial_role_purpose" ], "required_answer_shape": "direct_answer_first", "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" ] }, { "step_id": "step_03_sberbank_role_after_role_tail_overview", "title": "Bank-role drilldown still resolves Sberbank after role-tail overview", "question": "А отдельно по {{bindings.bank_counterparty}}У: он для нас клиент, поставщик или финансовый поток? Дай коротко по подтвержденным строкам.", "depends_on": [ "step_02_business_overview_role_tail_not_counterparty" ], "semantic_tags": [ "bank_like_counterparty", "financial_role_purpose", "post_overview_anchor_integrity" ], "required_answer_shape": "direct_answer_first", "required_filters": { "counterparty": "{{bindings.bank_counterparty}}" }, "required_answer_patterns_all": [ "(?i)сбербанк|банк", "(?i)финансов|банковск|кредит|комисс|возврат|назначен|вид операц", "(?i)не.*обычн.*клиент|не.*обычн.*поставщик|не.*клиентск.*выручк|нельзя.*читать" ], "forbidden_answer_patterns": [ "(?i)или поставщик", "(?i)сбербанк.*обычный поставщик", "(?i)сбербанк.*обычный клиент", "(?i)route_candidate|primitive|planner_|catalog_|snapshot_items|answer_object" ] }, { "step_id": "step_04_real_supplier_prefix_still_keeps_counterparty", "title": "Explicit supplier prefix still preserves a real counterparty", "question": "А теперь по поставщику {{bindings.svk_counterparty}} за {{bindings.control_year}}: сколько мы ему заплатили и какой общий денежный смысл?", "depends_on": [ "step_03_sberbank_role_after_role_tail_overview" ], "expected_intents": [ "value_flow" ], "semantic_tags": [ "counterparty_net_cash_flow", "supplier_prefix_canary", "stale_scope_guard" ], "required_answer_shape": "direct_answer_first", "required_filters": { "counterparty": "{{bindings.svk_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" ] } ] } ] }