Fix regressions in roster-only suites from A06/A07/P14-03

The formal collector's roster includes 46 suites the Makefile never ran;
the first formal attempt stopped on test_required_kitchen and a sweep found:
- v15 MIMI purchase saves could not be written once Runtime saves carried
  mana_reserve (P06-01): the format detector now validates that section and
  excludes it before the unchanged v15 allowlist, like special_peeping_rooms.
- test_required_kitchen's legacy14 exact-load comparison now maps the two
  approved migrations (fresh A06 reserve at the restored boundary, elevator
  snapshot v1->v2) after checking each against its contract, in Runtime key
  order; every other byte must still match.
- test_runtime_defense_autonomy allowed Mana to change only by the A06 flow.
- test_p08_normal_placement_ops expects 25 palette slots (two warps); its
  suite-policy pin is updated with flags unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Takeshi
2026-10-20 17:08:40 +09:00
co-authored by Claude Opus 5.5
parent 40364345ab
commit 83b170a4c7
5 changed files with 58 additions and 5 deletions
+6
View File
@@ -1055,6 +1055,12 @@ static func _snapshot_package_format(snapshot: Dictionary) -> int:
# Keep PurchaseQuotePlansV2's exact original allowlist and all format rules.
runtime_data = runtime_data.duplicate()
runtime_data.erase(&"special_peeping_rooms")
if runtime_data.has(&"mana_reserve"):
# A06 finite reserve: validate the section, then keep the exact original
# v15 purchase allowlist unchanged, as for the peeping-room extension.
if not preload("res://scripts/mana/mana_reserve_cycle.gd").new().restore_snapshot(runtime_data[&"mana_reserve"]): return -1
runtime_data = runtime_data.duplicate()
runtime_data.erase(&"mana_reserve")
if version >= 1 and version <= 14:
return -1 if PurchaseQuoteV2.has_history(runtime_data) else FORMAT_VERSION
if version != 15: return -1