mirror of
https://github.com/norandom/OpenUltraSAST.git
synced 2026-10-16 11:49:28 +00:00
Two defects stalled the draw at 40/300: 1. The systemic guard used an absolute `instrument_failures > 200` cap. At ~10% extraction yield, reaching 300 entries legitimately produces far more than 200 per-candidate failures, and the counter is rebuilt from the journal on resume -- so once past 200 the guard tripped immediately on every restart (permanent stall; the supervisor's no-progress guard then stopped). Drop the absolute cap; keep only `>=25 failures with zero entries`, which still catches a genuinely broken instrument (it yields no entries) without aborting a working low-yield draw. Bounded anyway by the population / max-hours. 2. repository_changes fetched all fixes in one `git fetch origin *fixes`, so a single unfetchable secondary fix ref failed the whole repo (extract_git_exit_1 was 166 of ~200 extract_ failures -- the dominant loss). Fetch the extra advisory fixes per-fix, best-effort, skipping a git_exit_ failure; candidate.fix stays strict (already fetched in extract_repository). Only resolved fixes are materialized and fix-site-indexed. 218 unseen tests pass (incl. 1000 failures after a success not tripping the guard, and fetch-error regressions), ruff clean. Co-Authored-By: Claude Opus 4.8 <[email protected]>