{ "task": "P07-01", "spec": "docs/plans/original-completion-2026-10-02/execution/p07-01/SPEC.md", "rule": "SPEC F8: every changed expectation of an existing suite is listed with the value before and after and the reason. Only the natural-weather contract (A13, SPEC sections 4 and 5) causes these changes.", "changes": [ { "suite": "tests/environment/test_runtime_weather.gd", "check": "old neutral save migration preserves other state", "before": "runtime.create_snapshot() == original (the whole snapshot after migrating a version 10 save equals the original new game)", "after": "the whole snapshot without systems.runtime.weather equals the original without it, and the migrated weather has last_draw_day -1 and no drawn day", "reason": "A13: a new game opening at 06:00 draws its first day (SPEC 4.1), and a pre-weather save has no draw and must not draw for the past (SPEC 5.2). Only the weather section can differ; every other system stays byte-equal." }, { "suite": "tests/environment/test_runtime_weather.gd", "check": "future weather clock rejects atomically", "before": "the refused restore leaves runtime.create_snapshot() == original", "after": "the refused restore leaves runtime.create_snapshot() == the migrated snapshot taken just before", "reason": "The state before this refusal is the migrated state of the previous check, which now differs from the original only in the weather section; the check still proves the refusal is atomic." }, { "suite": "tests/environment/test_weather_timeline.gd", "check": "malformed or contradictory state rejects atomically (unknown version case)", "before": "{\"version\": 2} is an unknown version", "after": "{\"version\": 3} is an unknown version", "reason": "Version 2 is now the current weather snapshot (natural state and rain holds, SPEC 5.1); version 1 is read as the legacy format (SPEC 5.2)." }, { "suite": "tests/environment/test_weather_recovery.gd", "check": "disk-restored recovery occurs once at scheduled minute", "before": "after the recovery the pending weather list is empty", "after": "after the recovery the pending weather list equals only the opening day's natural draw (rain 16:30-22:30 for seed 424242)", "reason": "A13: the opening day's natural draw schedules its own start and return to clear (SPEC 4.1); the manually scheduled storm and recovery are still consumed exactly once." } ], "unchanged_related_suites_passing_locally": [ "tests/mvp/test_runtime_operations_integration.gd", "tests/s2/test_runtime_operations_cycle.gd", "tests/s2/test_runtime_mana_reserve.gd", "tests/s2/test_mana_reserve_cycle.gd", "tests/s3/test_guest_service.gd", "tests/s6/test_runtime_save_lifecycle.gd", "tests/s6/test_runtime_snapshot_serialization.gd", "tests/ui/test_main_dashboard.gd" ], "local_run_scope": "diagnostic direct runs on a scratch stage; the formal evidence is the submitted S native collection, the registered validation and the final full roster" }