import json from investibook.core.eval.eval_artifacts import resolve_run_bundle def _write_workspace_evidence_scope( scope_root, *, cluster_id: str = "10766841556523235152", report_cluster_id: str | None = None, start_ts: str = "1775039760", end_ts: str = "1775043360", include_report: bool = True, include_evidence_dir: bool = True, ): evidence_dir = scope_root / "evidences" if include_evidence_dir: evidence_dir.mkdir(parents=True, exist_ok=True) if include_report: if not include_evidence_dir: return evidence_dir (evidence_dir / "workspace_evidence_report.json").write_text( json.dumps( { "type": "workspace_evidence_report", "metadata": { "cluster_id": report_cluster_id or cluster_id, "cluster": {"cluster_id": cluster_id}, "time_range": {"start": start_ts, "end": end_ts}, "run_dir": str(evidence_dir), "evidence_dir": str(evidence_dir), }, "evidence": { "metrics": [], "queries": [], "logs": [], }, } ) ) if include_evidence_dir: (evidence_dir / "evidence_summary_for_agent.txt").write_text("summary\n") (evidence_dir / "evidence_summary_for_agent.json").write_text( json.dumps({"metadata": {"cluster_id": cluster_id}}) ) return evidence_dir def _write_clinic_download_scope( scope_root, *, cluster_id: str = "10766841556523235152", start_ts: str = "1775039760", end_ts: str = "1775043360", ): run_dir = scope_root / "clinic-downloads" / "2026-04-01" / "diagnosis-001" evidence_dir = run_dir / "evidence" evidence_dir.mkdir(parents=True, exist_ok=True) (run_dir / "diagnosis_report.json").write_text( json.dumps( { "type": "diagnosis_report", "metadata": { "cluster_id": cluster_id, "time_range": {"start": start_ts, "end": end_ts}, }, } ) ) (run_dir / "evidence_summary_for_agent.txt").write_text("summary\n") (run_dir / "evidence_summary_for_agent.json").write_text( json.dumps({"metadata": {"cluster_id": cluster_id, "run_dir": str(run_dir)}}) ) (evidence_dir / "queries.json").write_text(json.dumps({"slow_queries": [], "topsql": [], "decoded_plan": {}})) (evidence_dir / "metrics.json").write_text(json.dumps({"metrics": []})) (evidence_dir / "gate_checks.json").write_text(json.dumps({"infra": "INFRA CLEAR"})) (evidence_dir / "collection_errors.json").write_text(json.dumps({"errors": []})) return run_dir def test_resolve_run_bundle_prefers_audit_dir_over_workspace_dir(tmp_path): audit_dir = tmp_path / "audit" workspace_dir = tmp_path / "workspace" audit_run = _write_workspace_evidence_scope(audit_dir) _write_workspace_evidence_scope(workspace_dir, cluster_id="10322500445237050222") resolution = resolve_run_bundle(audit_dir=audit_dir, workspace_dir=workspace_dir) assert resolution.ok is True assert resolution.bundle is not None assert resolution.bundle.source_kind == "audit_dir" assert resolution.bundle.run_dir == audit_run assert resolution.audit["selected_scope"] == "audit_dir" def test_resolve_run_bundle_uses_workspace_evidence_root_contract(tmp_path): audit_dir = tmp_path / "audit" run_dir = _write_workspace_evidence_scope(audit_dir) resolution = resolve_run_bundle(audit_dir=audit_dir, workspace_dir=None) assert resolution.ok is True assert resolution.bundle is not None assert resolution.bundle.manifest_path is None assert resolution.bundle.resolution_mode == "workspace_evidence_root" assert resolution.bundle.run_dir == run_dir assert resolution.bundle.diagnosis_report_path == run_dir / "workspace_evidence_report.json" assert resolution.bundle.evidence_dir == run_dir assert resolution.bundle.summary_txt_path == run_dir / "evidence_summary_for_agent.txt" assert resolution.bundle.summary_json_path == run_dir / "evidence_summary_for_agent.json" def test_resolve_run_bundle_supports_clinic_download_run_contract(tmp_path): audit_dir = tmp_path / "audit" run_dir = _write_clinic_download_scope(audit_dir) resolution = resolve_run_bundle(audit_dir=audit_dir, workspace_dir=None) assert resolution.ok is True assert resolution.bundle is not None assert resolution.bundle.manifest_path is None assert resolution.bundle.resolution_mode == "clinic_download_run" assert resolution.bundle.run_dir == run_dir assert resolution.bundle.diagnosis_report_path == run_dir / "diagnosis_report.json" assert resolution.bundle.evidence_dir == run_dir / "evidence" assert resolution.bundle.summary_txt_path == run_dir / "evidence_summary_for_agent.txt" assert resolution.bundle.summary_json_path == run_dir / "evidence_summary_for_agent.json" def test_resolve_run_bundle_prefers_valid_workspace_evidence_over_clinic_download(tmp_path): audit_dir = tmp_path / "audit" workspace_run = _write_workspace_evidence_scope(audit_dir) _write_clinic_download_scope(audit_dir, cluster_id="10322500445237050222") resolution = resolve_run_bundle(audit_dir=audit_dir, workspace_dir=None) assert resolution.ok is True assert resolution.bundle is not None assert resolution.bundle.run_dir == workspace_run assert resolution.bundle.resolution_mode == "workspace_evidence_root" assert resolution.audit["selected_candidate"]["run_dir"] == "evidences" def test_resolve_run_bundle_supports_layered_selection_between_audit_and_workspace(tmp_path): audit_dir = tmp_path / "audit" workspace_dir = tmp_path / "workspace" contract_run = _write_workspace_evidence_scope( audit_dir, cluster_id="10322500445237050222", start_ts="1775551620", end_ts="1775558520", ) latest_run = _write_workspace_evidence_scope( workspace_dir, cluster_id="10322500445237050222", start_ts="1775554020", end_ts="1775556420", ) (latest_run / "analysis_patch.json").write_text("{}") resolution = resolve_run_bundle( audit_dir=audit_dir, workspace_dir=workspace_dir, expected_cluster_id="10322500445237050222", allowed_windows=[ { "id": "workspace_observed_window", "start_ts": 1775551620, "end_ts": 1775558520, } ], ) assert resolution.ok is True assert resolution.bundle is not None assert resolution.trace_bundle is not None assert resolution.bundle.run_dir == contract_run assert resolution.trace_bundle.run_dir == contract_run assert resolution.audit["selected_candidate"]["run_dir"] == "evidences" assert resolution.audit["selected_trace_candidate"]["run_dir"] == "evidences" def test_resolve_run_bundle_prefers_nested_cluster_id_for_trace_matching(tmp_path): audit_dir = tmp_path / "audit" _write_workspace_evidence_scope( audit_dir, cluster_id="10322500445237050222", report_cluster_id="2013516099403907072", start_ts="1775551620", end_ts="1775558520", ) resolution = resolve_run_bundle( audit_dir=audit_dir, workspace_dir=None, expected_cluster_id="10322500445237050222", allowed_windows=[ { "id": "workspace_observed_window", "start_ts": 1775551620, "end_ts": 1775558520, } ], ) assert resolution.ok is True assert resolution.trace_bundle is not None assert resolution.audit["selected_trace_candidate"]["actual_cluster_id"] == "10322500445237050222" def test_resolve_run_bundle_fails_when_workspace_report_missing(tmp_path): audit_dir = tmp_path / "audit" _write_workspace_evidence_scope(audit_dir, include_report=False) resolution = resolve_run_bundle(audit_dir=audit_dir, workspace_dir=None) assert resolution.ok is False assert resolution.primary_failure_code == "artifact_resolution_failed" candidate = resolution.audit["scanned_scopes"][0]["candidates"][0] assert "missing_workspace_evidence_report" in candidate["invalid_reasons"] def test_resolve_run_bundle_fails_when_workspace_report_json_invalid(tmp_path): audit_dir = tmp_path / "audit" evidence_dir = _write_workspace_evidence_scope(audit_dir) (evidence_dir / "workspace_evidence_report.json").write_text("{bad json") resolution = resolve_run_bundle(audit_dir=audit_dir, workspace_dir=None) assert resolution.ok is False assert resolution.primary_failure_code == "artifact_resolution_failed" candidate = resolution.audit["scanned_scopes"][0]["candidates"][0] assert candidate["manifest_valid_json"] is False assert "invalid_workspace_evidence_report_json" in candidate["invalid_reasons"] def test_resolve_run_bundle_fails_when_evidence_dir_missing(tmp_path): audit_dir = tmp_path / "audit" _write_workspace_evidence_scope(audit_dir, include_evidence_dir=False) resolution = resolve_run_bundle(audit_dir=audit_dir, workspace_dir=None) assert resolution.ok is False assert resolution.primary_failure_code == "artifact_resolution_failed" assert resolution.audit["scanned_scopes"][0]["candidate_count"] == 0 def test_resolve_run_bundle_falls_back_to_clinic_download_when_workspace_root_missing(tmp_path): audit_dir = tmp_path / "audit" _write_clinic_download_scope(audit_dir) resolution = resolve_run_bundle(audit_dir=audit_dir, workspace_dir=None) assert resolution.ok is True assert resolution.bundle is not None assert resolution.audit["selected_candidate"]["run_dir"] == "clinic-downloads/2026-04-01/diagnosis-001"