pam ▸ docs/generated/ralph_loop_2026-03-16_candidate_review_sleeve_tiebreak.md
updated 2026-03-28
Ralph Loop: Candidate Review Sleeve Tie-Break
Change
- Updated
research/candidate_review.pyso “best sleeve” selection prefers fewer hard semantic blockers before total blocker count. - Hard blockers now include sleeve disablement plus mismatches on
signal_action,model_source,market_family,category, neutral direction, and missing live price. - Candidate packets now expose
sleeve_hard_blocker_countandsleeve_soft_blocker_countfor easier debugging.
Why
- Candidate review used raw blocker count with alphabetical tie-breaks.
- That could label a row with the wrong sleeve family when one sleeve had a category/model mismatch and another sleeve only failed on tunable thresholds.
- Mislabeling hurts candidate review quality because Ralph can end up chasing the wrong sleeve family.
Validation
pytest -q tests/test_candidate_review.py tests/test_research_status.py- Result:
6 passed in 0.08s python3 main.py research-status- Confirmed status still renders normally after the classifier change.
- Smoke script over the latest 6 live runs
- Result:
{'rows': 36, 'changed': 0} - Interpretation: the fix closes a real tie-break bug without changing the current live packet mix.
Outcome
- Bounded PRD 003 quality fix: candidate review sleeve attribution is now more semantically faithful, even when no live deployable trades exist.