mirror of
https://github.com/norandom/OpenUltraSAST.git
synced 2026-10-16 03:49:26 +00:00
Serial extraction at ~147s/repo made a 300-repo pool take days, and ~626 lazy per-file blob faults per clone pushed slow repos past the 240s deadline (a draw reached 21 entries from 347 attempts, 160 of them extraction_timeout). Both fixed. Parallel: a bounded ThreadPoolExecutor (--extract-workers, default 6) runs clones concurrently, each into its own clone with a private counter. The main thread alone owns the journal, REST (license via finish_license), counters, and acceptance. Entries are accepted in STRICT SEED ORDER with the fork-network dedup applied at acceptance, so the pool is byte- identical to the serial draw (tested: workers=6 == workers=1, including fork collisions, out-of-order completion, and resume). The systemic guard and resilient skips are unchanged; a graceful stop drains started work to the journal for resume. Batched blobs: repository_changes fetches the fixes together and Git.materialize fetches all missing blobs for the read revisions in one `fetch --no-filter --stdin` (rev-list --missing=print), instead of per- file promisor faults. Content is byte-identical (tested; >=12 fetches collapsed to 1). 202 unseen tests pass, ruff clean. Co-Authored-By: Claude Opus 4.8 <[email protected]>