ОРРКЕСТРАЦИЯ - Усилить agent loop object-centric аудитом и добить pronoun follow-up по документам закупки

This commit is contained in:
2026-04-14 18:47:38 +03:00
parent cb0eb450d7
commit 97b2a9b028
19 changed files with 469 additions and 44 deletions
+107 -3
View File
@@ -9,6 +9,7 @@ sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from scripts.domain_case_loop import (
build_scenario_acceptance_matrix,
carry_forward_analysis_context,
derive_pack_final_status,
load_scenario_pack,
merge_scenario_date_scope,
)
@@ -148,7 +149,7 @@ def test_build_scenario_acceptance_matrix_marks_green_edge_when_covering_scenari
{
"node_id": "N03_selected_item_supplier",
"covers_question_ids": ["Q19"],
"required_wording_families": ["canonical", "ui_selected_object_colloquial"],
"required_wording_families": ["canonical"],
}
],
"critical_edges": [
@@ -168,8 +169,18 @@ def test_build_scenario_acceptance_matrix_marks_green_edge_when_covering_scenari
"scenario_id": "inventory_selected_item_provenance",
"question_ids": ["Q01", "Q19"],
"steps": [
{"step_id": "step_01_snapshot", "question_id": "Q01", "node_id": "N01_stock_snapshot"},
{"step_id": "step_02_supplier", "question_id": "Q19", "node_id": "N03_selected_item_supplier"},
{
"step_id": "step_01_snapshot",
"question_id": "Q01",
"node_id": "N01_stock_snapshot",
"paraphrase_family": "canonical",
},
{
"step_id": "step_02_supplier",
"question_id": "Q19",
"node_id": "N03_selected_item_supplier",
"paraphrase_family": "canonical",
},
],
}
],
@@ -188,3 +199,96 @@ def test_build_scenario_acceptance_matrix_marks_green_edge_when_covering_scenari
assert "E01_snapshot_to_selected_item_supplier" in matrix
assert "| E01_snapshot_to_selected_item_supplier | green |" in matrix
assert "| P01_snapshot_to_supplier | green |" in matrix
def test_build_scenario_acceptance_matrix_marks_partial_when_wording_family_is_missing() -> None:
pack = {
"pack_id": "inventory_active_contract_smoke",
"domain": "inventory_stock",
"source_contract": {"domain_id": "inventory_stock_supplier_provenance", "title": "Warehouse domain"},
"question_pool": {
"questions": [
{"question_id": "Q19", "node_id": "N03_selected_item_supplier"},
]
},
"scenario_tree": {
"critical_nodes": [
{
"node_id": "N03_selected_item_supplier",
"covers_question_ids": ["Q19"],
"required_wording_families": ["canonical", "ui_selected_object_colloquial"],
}
]
},
"scenarios": [
{
"scenario_id": "inventory_selected_item_provenance",
"question_ids": ["Q19"],
"steps": [
{
"step_id": "step_01_supplier",
"question_id": "Q19",
"node_id": "N03_selected_item_supplier",
"paraphrase_family": "canonical",
}
],
}
],
}
scenario_results = [
{
"scenario_id": "inventory_selected_item_provenance",
"final_status": "accepted",
"session_id": "asst-demo",
"artifact_dir": "artifacts/domain_runs/demo",
}
]
matrix = build_scenario_acceptance_matrix(pack, scenario_results)
assert "| N03_selected_item_supplier | partial |" in matrix
def test_derive_pack_final_status_downgrades_accepted_when_matrix_contains_partial_coverage() -> None:
pack = {
"pack_id": "inventory_active_contract_smoke",
"domain": "inventory_stock",
"scenarios": [
{
"scenario_id": "inventory_selected_item_provenance",
"question_ids": ["Q19"],
"steps": [
{
"step_id": "step_01_supplier",
"question_id": "Q19",
"node_id": "N03_selected_item_supplier",
"paraphrase_family": "canonical",
}
],
},
],
"scenario_tree": {
"critical_nodes": [
{
"node_id": "N03_selected_item_supplier",
"covers_question_ids": ["Q19"],
"required_wording_families": ["canonical", "ui_selected_object_colloquial"],
}
]
},
"question_pool": {
"questions": [
{"question_id": "Q19", "node_id": "N03_selected_item_supplier"},
]
},
}
scenario_results = [
{
"scenario_id": "inventory_selected_item_provenance",
"final_status": "accepted",
"session_id": "asst-demo",
"artifact_dir": "artifacts/domain_runs/demo",
}
]
assert derive_pack_final_status(pack, scenario_results) == "partial"