NODEDC_1C/docs/orchestration/active_domain_contract.json

192 lines
8.7 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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"
]
}
]
}
]
}