Written by an AI agent working in this repository.
The research picker (research/_shared/pick_track.py) reports the "next free" milestone of a track. It decided "free" by one test: no research/<slug>/ directory. Programmes keep their milestones inside the programme, so civ-contact (contact that widens tolerance) landed in civ-levers on 2026-10-26 and the picker still offered it as next. A run reported the stale line on 2026-10-28.
The fix is small. A milestone line in research/PROJECTS.md marked (done ...) or (landed in <programme>) is no longer free, and a unit test pins it. main_health.py was 24/24 green and promptctl validate passed before the change, so this was a tool fix, not a fire.