Уточнить агентный pack-loop для ограниченных срезов
This commit is contained in:
@@ -7,6 +7,7 @@ from pathlib import Path
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
||||
|
||||
from scripts.domain_case_loop import (
|
||||
build_analyst_loop_prompt,
|
||||
build_coder_loop_prompt,
|
||||
build_coder_snapshot_paths,
|
||||
build_deterministic_repair_targets,
|
||||
@@ -18,6 +19,7 @@ from scripts.domain_case_loop import (
|
||||
evaluate_deterministic_loop_gate,
|
||||
load_scenario_pack,
|
||||
load_shared_local_llm_defaults,
|
||||
merge_analyst_priority_repair_targets,
|
||||
merge_scenario_date_scope,
|
||||
select_primary_repair_focus,
|
||||
restore_line_collapsed_files_from_snapshot,
|
||||
@@ -840,7 +842,7 @@ def test_evaluate_deterministic_loop_gate_rejects_partial_pack_even_without_targ
|
||||
)
|
||||
|
||||
assert gate_ok is False
|
||||
assert reason == "pack_final_status=partial"
|
||||
assert reason == "pack_acceptance_status=partial;pack_final_status=partial"
|
||||
|
||||
|
||||
def test_evaluate_deterministic_loop_gate_rejects_remaining_p1_targets() -> None:
|
||||
@@ -863,6 +865,62 @@ def test_evaluate_deterministic_loop_gate_accepts_clean_pack_without_remaining_p
|
||||
assert reason == "deterministic_gate_passed"
|
||||
|
||||
|
||||
def test_build_analyst_loop_prompt_treats_limited_slice_as_coverage_scope(tmp_path: Path) -> None:
|
||||
prompt = build_analyst_loop_prompt(
|
||||
loop_dir=tmp_path / "loop",
|
||||
iteration_dir=tmp_path / "loop" / "iterations" / "iteration_00",
|
||||
pack_dir=tmp_path / "loop" / "iterations" / "iteration_00" / "pack_output" / "pack_run",
|
||||
repair_targets_path=tmp_path / "loop" / "iterations" / "iteration_00" / "repair_targets.json",
|
||||
previous_pack_dir=None,
|
||||
previous_verdict_path=None,
|
||||
target_score=90,
|
||||
review_bundle_json=json.dumps(
|
||||
{
|
||||
"pack_state": {
|
||||
"coverage_mode": "limited_slice",
|
||||
"selected_scenario_ids": ["inventory_snapshot_roots"],
|
||||
"unexecuted_scenario_ids": ["inventory_selected_item_provenance"],
|
||||
"acceptance_status": "partial",
|
||||
}
|
||||
},
|
||||
ensure_ascii=False,
|
||||
),
|
||||
repair_targets_json=json.dumps({"targets": []}),
|
||||
previous_verdict_json=None,
|
||||
)
|
||||
|
||||
assert "pack_state.coverage_mode = limited_slice" in prompt
|
||||
assert "do not create priority targets" in prompt
|
||||
assert "pack_state.unexecuted_scenario_ids" in prompt
|
||||
|
||||
|
||||
def test_merge_analyst_priority_targets_suppresses_unexecuted_limited_slice_scenarios() -> None:
|
||||
merged = merge_analyst_priority_repair_targets(
|
||||
{
|
||||
"coverage_mode": "limited_slice",
|
||||
"selected_scenario_ids": ["inventory_snapshot_roots"],
|
||||
"unexecuted_scenario_ids": ["inventory_selected_item_provenance"],
|
||||
"targets": [],
|
||||
"step_validation_index": {},
|
||||
},
|
||||
{
|
||||
"priority_targets": [
|
||||
{
|
||||
"scenario_id": "inventory_selected_item_provenance",
|
||||
"step_id": "step_02_selected_item_supplier_ui",
|
||||
"severity": "P1",
|
||||
"problem_type": "loop_coverage_gap",
|
||||
"fix_goal": "run the selected item scenario",
|
||||
}
|
||||
]
|
||||
},
|
||||
)
|
||||
|
||||
assert merged["targets"] == []
|
||||
assert merged["suppressed_analyst_priority_target_count"] == 1
|
||||
assert merged["suppressed_analyst_priority_targets"][0]["reason"] == "analyst_target_outside_limited_slice"
|
||||
|
||||
|
||||
def test_build_scenario_step_state_uses_effective_analysis_context_from_turn_artifact() -> None:
|
||||
step_state = build_scenario_step_state(
|
||||
scenario_id="inventory_snapshot_roots",
|
||||
|
||||
Reference in New Issue
Block a user