From 83bc13cf6a3ddbbcaebc020633c67f6569655c51 Mon Sep 17 00:00:00 2001 From: Pigbibi <20649888+Pigbibi@users.noreply.github.com> Date: Sun, 24 May 2026 18:06:08 +0800 Subject: [PATCH] fix: reject empty monthly track summaries --- scripts/run_monthly_review_briefing.py | 4 +--- tests/test_monthly_review_briefing.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/scripts/run_monthly_review_briefing.py b/scripts/run_monthly_review_briefing.py index 9525f73..32ab293 100644 --- a/scripts/run_monthly_review_briefing.py +++ b/scripts/run_monthly_review_briefing.py @@ -52,9 +52,7 @@ def load_track_summary(path: Path) -> list[dict[str, str]]: def load_optional_track_summary(path: Path) -> list[dict[str, str]]: if not path.exists(): return [] - with path.open("r", encoding="utf-8", newline="") as handle: - reader = csv.DictReader(handle) - return list(reader) + return load_track_summary(path) def _safe_int(value: Any, default: int = 0) -> int: diff --git a/tests/test_monthly_review_briefing.py b/tests/test_monthly_review_briefing.py index ee6ae6e..1dceea3 100644 --- a/tests/test_monthly_review_briefing.py +++ b/tests/test_monthly_review_briefing.py @@ -123,6 +123,18 @@ def test_build_review_payload_requires_shadow_outputs(self) -> None: with self.assertRaisesRegex(RuntimeError, "monthly shadow build outputs are required"): MODULE.require_shadow_outputs(inputs) + def test_build_review_inputs_rejects_empty_track_summary(self) -> None: + with tempfile.TemporaryDirectory() as tmp_dir: + output_dir = self.write_fixture_files(Path(tmp_dir)) + track_summary = output_dir / "shadow_candidate_tracks" / "track_summary.csv" + track_summary.write_text( + "track_id,profile_name,target_mode,source_track,candidate_status,release_count,first_as_of_date,last_as_of_date,release_index_path\n", + encoding="utf-8", + ) + + with self.assertRaisesRegex(ValueError, "CSV is empty"): + MODULE.build_review_inputs(output_dir) + if __name__ == "__main__": unittest.main()