Parent: #1057
Epic: #1052
Goal
Retain recent valid self-play samples in the smallest bounded replay implementation needed by the MVP.
Scope
- Append complete episode samples
- Sample mini-batches for both trainers
- Enforce a deterministic capacity and eviction rule
- Preserve schema/version metadata
- Exercise episode generation, serialization, replay insertion, and sampling together
Non-goals
- Prioritized replay
- A database service
- Distributed writers
- Long-term archival
Acceptance criteria
- Capacity is never exceeded.
- Eviction and fixed-seed sampling are reproducible.
- C++ and Python consume replay batches with the same values.
- Interrupted or invalid episode writes do not add partial samples.
- One complete mirror-match episode reaches both trainer batch loaders.
Verification
Add focused replay tests and one end-to-end self-play-to-batch smoke test.
Parent: #1057
Epic: #1052
Goal
Retain recent valid self-play samples in the smallest bounded replay implementation needed by the MVP.
Scope
Non-goals
Acceptance criteria
Verification
Add focused replay tests and one end-to-end self-play-to-batch smoke test.