주기 회기 검증 격리 보강

This commit is contained in:
Yun Chan 2026-08-10 01:25:45 +09:00
parent 9a7dd98cb6
commit 4cd354881f
10 changed files with 181 additions and 69 deletions

View file

@ -30,6 +30,68 @@ class PeriodicRunnerStaticContractTests(unittest.TestCase):
def test_browser_failures_are_not_retried_automatically(self) -> None:
self.assertEqual(runner.PLAYWRIGHT_RETRIES, 0)
def test_browser_gates_prepare_distinct_zero_state_fixtures(self) -> None:
class FixtureController(FakeController):
def run(self, stage, argv, **kwargs):
result = super().run(stage, argv, **kwargs)
if stage.startswith("prepare_"):
output = Path(argv[argv.index("--out") + 1])
output.write_text(
json.dumps(
{
"fixture_id": stage,
"setup_proof": {
"source_review_ready": True,
"follow_up_review_ready": True,
"distinct_persona": True,
"initial_runtime_observation_count": 0,
"initial_actual_transfer_execution_count": 0,
}
}
),
encoding="utf-8",
)
return result
with tempfile.TemporaryDirectory() as raw:
root = Path(raw)
fake = FixtureController()
periodic = runner.PeriodicRunner(config(root / "receipt.json"), fake)
stack_env = {
"VIGNETTE_PRACTICE_INTERNAL_TOKEN": "practice-token",
"VIGNETTE_CALIBRATION_TRANSFER_INTERNAL_TOKEN": "transfer-token",
}
periodic_path = root / "periodic.json"
regression_path = root / "regression.json"
periodic_proof = periodic._prepare_returned_practice_fixture(
stage="prepare_periodic_learner_fixture",
base_url="http://127.0.0.1:18080",
database_url="postgresql://app:secret@127.0.0.1:15439/vignette",
database_admin_url="postgresql://owner:secret@127.0.0.1:15439/vignette",
stack_env=stack_env,
fixture_path=periodic_path,
)
regression_proof = periodic._prepare_returned_practice_fixture(
stage="prepare_returned_regression_fixture",
base_url="http://127.0.0.1:18080",
database_url="postgresql://app:secret@127.0.0.1:15439/vignette",
database_admin_url="postgresql://owner:secret@127.0.0.1:15439/vignette",
stack_env=stack_env,
fixture_path=regression_path,
)
self.assertNotEqual(periodic_path.name, regression_path.name)
self.assertEqual(
[stage for stage, _ in fake.commands if stage.startswith("prepare_")],
["prepare_periodic_learner_fixture", "prepare_returned_regression_fixture"],
)
self.assertEqual(periodic_proof["initial_runtime_observation_count"], 0)
self.assertEqual(regression_proof["initial_actual_transfer_execution_count"], 0)
self.assertNotEqual(
periodic_proof["fixture_sha256"],
regression_proof["fixture_sha256"],
)
class FakeController:
def __init__(self, *, tracked_status: str = "") -> None: