Ralph Loop 2026-03-16: Candidate Review Event Stream
Change
Added a candidate_review_done event to the continuous research loop.
Files:
- research/continuous_loop.py
- research/README.md
- tests/test_continuous_loop.py
Why
The loop already wrote the live candidate-review packet into
research/latest_state.json, but the step-level event stream stopped at replay
evaluation. That meant Ralph could not see whether live review quality improved
from one cycle to the next without opening the latest-state handoff.
Result
Each successful cycle now emits a compact candidate-review summary with:
- deployable, review, and research candidate counts
- deployment-gate readiness
- latest scan timestamp
- top invalidation reason
- top deployable/review/research tickers
This keeps candidate-review quality observable in the same place as backfill, replay, and search diagnostics.
Validation
pytest -q tests/test_continuous_loop.pypython3 -m py_compile research/continuous_loop.py
Bottleneck After Change
This improves operator visibility, not candidate quality itself. The larger remaining issue is still weak eventful coverage and stale loop snapshots versus current replay/live scans.