pam ▸ docs/generated/ralph_loop_2026-03-16_matched_research_share.md
updated 2026-03-28

Ralph Loop 2026-03-16: Matched Research Share

Why

research/latest_state.json currently shows research_candidate=18, matched_research_candidate_count=3, and unmatched_research_candidate_count=15. That is the candidate-review quality bottleneck, but the packet and event stream still force the operator to do the division manually.

Change

  1. Updated research/candidate_review.py to expose: - matched_research_candidate_share - unmatched_research_candidate_share
  2. Updated research/continuous_loop.py so candidate_review_done events carry both share fields.
  3. Updated research/status.py and research/discord_status.py so candidate-review summaries render these as count/total@share.
  4. Documented the operator-facing schema addition in research/README.md.
  5. Added focused regression coverage in tests/test_candidate_review.py, tests/test_continuous_loop.py, and tests/test_research_status.py.

Validation

  1. pytest -q tests/test_candidate_review.py tests/test_continuous_loop.py tests/test_research_status.py
  2. python3 -m py_compile research/candidate_review.py research/continuous_loop.py research/status.py research/discord_status.py
  3. python3 research/candidate_review.py --db data/unicorn.db --recent-runs 6 --max-per-state 3 | python3 -c 'import json,sys; payload=json.load(sys.stdin); print(payload.get("matched_research_candidate_count"), payload.get("matched_research_candidate_share"), payload.get("unmatched_research_candidate_count"), payload.get("unmatched_research_candidate_share"))'