pam ▸ docs/generated/ralph_loop_2026-03-16_unmatched_candidate_sleeves.md
updated 2026-03-28
Ralph Loop 2026-03-16: Unmatched Candidate Sleeves
Why
research/latest_state.json showed top_research_candidate_sleeves=economics_band_follow=16, but the top research rows were mostly Elections, World, and Companies markets with no semantically valid sleeve match. Candidate review was forcing those rows into the nearest low-blocker sleeve, which made the concentration diagnostic misleading.
Change
- Updated
research/candidate_review.pyto label rows asno_semantic_sleeve_matchwhen every sleeve check fails on semantic blockers (category,market_family,model_source,signal_action,heuristic_direction, or missing live price). - Kept the existing blocker list and ranking logic intact so this is a diagnostics-quality change, not a strategy-threshold change.
- Added a regression test in
tests/test_candidate_review.pyfor an unmatchedElectionsrow. - Documented the new attribution behavior in
research/README.md.
Validation
pytest -q tests/test_candidate_review.py-7 passed in 0.03spython3 research/candidate_review.py --db data/unicorn.db --recent-runs 6 --max-per-state 5-top_research_candidate_sleeveschanged fromeconomics_band_follow=16tono_semantic_sleeve_match=16-top_review_candidate_sleevesnow showspolitics_midprice_reversal=1, no_semantic_sleeve_match=1
Outcome
Ralph now sees that the live packet is bottlenecked by unmatched rows rather than a falsely dominant sleeve family. That points the next bounded iteration toward adding a real sleeve for those rows or improving row filtering, instead of tuning the economics band sleeve for the wrong problem.