import json from content_agent.run_service import RunService from content_agent.schemas import RunStartRequest from tests.p1_helpers import FakeQueryVariantClient, REAL_SOURCE_FIXTURE def _start_mock_run(tmp_path): service = RunService( runtime_root=tmp_path / "runtime" / "v1", query_variant_client=FakeQueryVariantClient(), ) state = service.start_run( RunStartRequest(platform_mode="mock", source=str(REAL_SOURCE_FIXTURE)) ) assert state["status"] == "success" return service, state["run_id"] def test_keep_content_for_review_is_visible_but_not_pooled(tmp_path): service, run_id = _start_mock_run(tmp_path) final_output = service.read_json(run_id, "final_output.json") content_ids = {asset["platform_content_id"] for asset in final_output["content_assets"]} review_ids = {record["platform_content_id"] for record in final_output["review_records"]} assert final_output["summary"]["review_content_count"] == len(final_output["review_records"]) assert review_ids assert not review_ids & content_ids assert {record["review_status"] for record in final_output["review_records"]} == { "pending_review" } assert {record["final_asset_status"] for record in final_output["review_records"]} == { "review_only" } assert final_output["validation_status"] == "pass" assert final_output["summary"]["run_path_complete"] is True assert final_output["summary"]["trace_complete"] is True def test_review_record_path_refs_are_validated(tmp_path): service, run_id = _start_mock_run(tmp_path) final_output_path = service.runtime.run_dir(run_id) / "final_output.json" final_output = json.loads(final_output_path.read_text(encoding="utf-8")) final_output["review_records"][0]["source_path_record_ids"] = ["missing_path"] final_output_path.write_text( json.dumps(final_output, ensure_ascii=False, indent=2) + "\n", encoding="utf-8", ) validation = service.validate_run(run_id) assert validation["status"] == "fail" assert any(finding["check_id"] == "missing_path_ref" for finding in validation["findings"]) assert any( finding["check_id"] == "completeness_mismatch" for finding in validation["findings"] ) def test_run_service_rewrites_final_output_with_final_validation_status(tmp_path): service, run_id = _start_mock_run(tmp_path) final_output = service.read_json(run_id, "final_output.json") validation = service.validate_run(run_id) assert validation["status"] == "pass" assert final_output["validation_status"] == validation["status"] assert final_output["summary"]["run_path_complete"] is True assert final_output["summary"]["trace_complete"] is True