"""Offline checks that reruns cannot overwrite archived evidence.""" from pathlib import Path import tempfile import unittest from unittest.mock import patch from reproduce import Experiment class OutputGuardTests(unittest.TestCase): def test_nonempty_output_is_rejected_before_any_work(self): with tempfile.TemporaryDirectory(prefix="asn-real-mcp-guard-", dir="/private/tmp") as temp: base = Path(temp) output = base / "evidence" output.mkdir() sentinel = output / "validation.json" original = '{"status":"previous-run"}\n' sentinel.write_text(original) root = base / "new-run" with patch("reproduce.subprocess.run") as process, \ patch("reproduce.urllib.request.urlopen") as download: with self.assertRaisesRegex(FileExistsError, "Refusing to overwrite evidence"): Experiment(root, output) process.assert_not_called() download.assert_not_called() self.assertFalse(root.exists()) self.assertEqual(sentinel.read_text(), original) self.assertEqual(list(output.iterdir()), [sentinel]) def test_fresh_empty_output_remains_compatible(self): with tempfile.TemporaryDirectory(prefix="asn-real-mcp-guard-", dir="/private/tmp") as temp: base = Path(temp) output = base / "evidence" output.mkdir() with patch.object(Experiment, "run", return_value="") as process: experiment = Experiment(base / "new-run", output) self.assertEqual(experiment.output, output.resolve()) process.assert_called_once() self.assertEqual(process.call_args.args[0][:3], ["git", "init", "--initial-branch=main"]) self.assertEqual(list(output.iterdir()), []) if __name__ == "__main__": unittest.main()