Checkpoint acceptance sweep & hard cases #96

Closed
opened 2026-08-26 07:36:17 +02:00 by SirStone · 1 comment
Owner

Parent

Spec #92 (round-end checkpointing).

What to build

Confidence at the edges of the finished wiring: injected write failure at checkpoint time preserves the previous best; death mid-game still checkpoints (dead bots receive round end); a legacy headerless file upgrades naturally on the first improved candidate; assertion sets written for the old game-end semantics migrate to round-end expectations; the full suite runs green.

Acceptance criteria

  • Injected write failure at checkpoint leaves previous best intact and loadable
  • Death mid-game still yields that round's checkpoint
  • Legacy headerless file upgraded by the first improved candidate, no manual migration
  • Old game-end assertion sets migrated to round-end semantics
  • Full regression suite green

Blocked by

  • #95 — round-end checkpoint wiring
## Parent Spec #92 (round-end checkpointing). ## What to build Confidence at the edges of the finished wiring: injected write failure at checkpoint time preserves the previous best; death mid-game still checkpoints (dead bots receive round end); a legacy headerless file upgrades naturally on the first improved candidate; assertion sets written for the old game-end semantics migrate to round-end expectations; the full suite runs green. ## Acceptance criteria - [ ] Injected write failure at checkpoint leaves previous best intact and loadable - [ ] Death mid-game still yields that round's checkpoint - [ ] Legacy headerless file upgraded by the first improved candidate, no manual migration - [ ] Old game-end assertion sets migrated to round-end semantics - [ ] Full regression suite green ## Blocked by - #95 — round-end checkpoint wiring
SirStone added the ready-for-agent label 2026-08-26 07:36:17 +02:00
Author
Owner

Acceptance sweep #96 — verifier pass (fresh re-verification, threads:on)

All 5 ACs green. Nothing was broken → no production fixes needed; only test-side additions/migration.

  1. Kill-during-write — handler_seam_v2.nim K1/K2: dir-level write-permission injection through real onRoundEnded; previous best byte-identical AND loadable (K1-crashed-save-preserves-best, K2-previous-best-loadable-after-crash PASS).
  2. Death mid-game — D1: fresh game, key heal, then zero events between "death" and round end; gated checkpoint still lands for dead bot (D1-death-round-still-checkpoints PASS; enemy slot updated 60>50, global correctly kept @100).
  3. Legacy upgrade — L1: headerless 745-float per-enemy plant ranks −Inf; first strictly-better candidate (3.5) via normal lifecycle rewrites to #evo-champ header format, no manual steps (L1-legacy-upgraded-by-first-better-candidate PASS).
  4. Assertion migration — key_lag_repro.nim save-side migrated from legacy unconditional saveChampion game-end mirror to mirrored onRoundEnded + saveChampionIfBetter; A1 now asserts gated replacement in header format with stored fitness. Key-heal coverage untouched (A0/G1-key-selfheals/G2/A2 all PASS). Clean separation achieved — no legacy block retained.
  5. Full suite (final lines verbatim):
    • ann self-check PASS (NumWeights=745)
    • data self-check PASS
    • ga: initial_best=-57.48508290593695 final_best=-52.54165227073674
    • gun self-check PASS
    • persistence self-check PASS (NumWeights=745)
    • vguns self-check PASS
    • key_lag_repro: GREEN — all assertions passed
    • handler_seam_v2: GREEN — real handler wiring reproduces neither symptom (19/19 PASS)
    • prod typecheck: SuccessX exit 0

Commit: ee0b7eb test(evo,#96): acceptance sweep — hard-case coverage and assertion migration

**Acceptance sweep #96 — verifier pass (fresh re-verification, threads:on)** All 5 ACs green. Nothing was broken → no production fixes needed; only test-side additions/migration. 1. **Kill-during-write** — `handler_seam_v2.nim` K1/K2: dir-level write-permission injection through real `onRoundEnded`; previous best byte-identical AND loadable (`K1-crashed-save-preserves-best`, `K2-previous-best-loadable-after-crash` PASS). 2. **Death mid-game** — D1: fresh game, key heal, then zero events between "death" and round end; gated checkpoint still lands for dead bot (`D1-death-round-still-checkpoints` PASS; enemy slot updated 60>50, global correctly kept @100). 3. **Legacy upgrade** — L1: headerless 745-float per-enemy plant ranks −Inf; first strictly-better candidate (3.5) via normal lifecycle rewrites to `#evo-champ` header format, no manual steps (`L1-legacy-upgraded-by-first-better-candidate` PASS). 4. **Assertion migration** — `key_lag_repro.nim` save-side migrated from legacy unconditional `saveChampion` game-end mirror to mirrored `onRoundEnded` + `saveChampionIfBetter`; A1 now asserts gated replacement in header format with stored fitness. Key-heal coverage untouched (A0/G1-key-selfheals/G2/A2 all PASS). Clean separation achieved — no legacy block retained. 5. **Full suite (final lines verbatim):** - `ann self-check PASS (NumWeights=745)` - `data self-check PASS` - ga: `initial_best=-57.48508290593695 final_best=-52.54165227073674` - `gun self-check PASS` - `persistence self-check PASS (NumWeights=745)` - `vguns self-check PASS` - key_lag_repro: `GREEN — all assertions passed` - handler_seam_v2: `GREEN — real handler wiring reproduces neither symptom` (19/19 PASS) - prod typecheck: `SuccessX` exit 0 Commit: ee0b7eb `test(evo,#96): acceptance sweep — hard-case coverage and assertion migration`
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: SirStone/SirRoboGarage#96