pam ▸ docs/generated/ralph_loop_2026-03-16_replay_metadata_side_split.md
updated 2026-03-28
Ralph Loop 2026-03-16: Replay Metadata Side Split
Change
Bounded replay-quality improvement for PRD 001 / PRD 004:
research/prepare_replay.pynow summarizes eventful metadata coverage for large-move replay pairs separately on the entry side and the later paired side: -large_move_entry_eventful_metadata_rows-large_move_next_eventful_metadata_rowsresearch/continuous_loop.pynow emits per-side metadata counts inreplay_prepare_doneevents.research/status.pyandresearch/discord_status.pynow print metadata coverage asentry/next/pairinstead of a single opaque pair count.research/README.mddocuments the new diagnostics.
Why
The current replay bottleneck is data quality, not sleeve aggressiveness. Live status after the change shows:
current replay inputs: eventful=2/1280 metadata(entry/next/pair)=5/5/2 actionable=0/1280 review=0
current replay move coverage: moved=28/1280 large_move=28 large_move_untagged=27 large_move_metadata(entry/next/pair)=0/1/0 missing_metadata(pair)=28 zero_score=0 scored=0 unscored=27 max_untagged_score=0.0
That makes the bottleneck explicit:
- pair-level eventful metadata is nearly absent
- large-move rows are not being missed because they are close to the threshold
- the missing metadata is concentrated on both sides of the large-move pair, with only
1/28large moves carrying later-snapshot metadata
Validation
Commands run:
PYTHONPATH=. pytest -q tests/test_prepare_replay.py tests/test_continuous_loop.py tests/test_research_status.py
python3 -m py_compile research/prepare_replay.py research/continuous_loop.py research/status.py research/discord_status.py
python3 research/status.py
python3 research/discord_status.py
Observed:
- Focused tests passed:
13 passed - Python compile check passed
- Operator status now exposes the metadata bottleneck directly without opening raw replay rows
Next Bottleneck
The next useful bounded change is likely upstream of replay evaluation:
- inspect why eventful metadata is absent on almost all large-move journal pairs
- determine whether the gap is backfill selection, journal persistence, or scanner payload construction