v2.3.0 (migrated from Codeberg)
Features
- --format=interpret: print the LLM prompt locally; no LLM call. Works with scan and ps.
- SCAN_FORMAT env var sets default output format.
- SCAN_NO_ANALYSIS_CACHE=1 disables all analysis caches.
- Reports record provenance: registry sidecars, fetch URLs, embedded file id/sha256.
- Machine formats now emit all files; --show only filters the terminal view.
Fixes
- Trait floor read the wrong JSON key and never fired on current cleave reports.
- Crit-5 traits now escalate a benign model verdict to hostile, not suspicious.
- Benign archive members no longer inherit their container's hostile verdict.
- Hostile transitive dependencies now surface at the archive root, not just the manifest.
- Unparseable PURLs no longer produce bloom-filter keys.
- All PURL spellings normalize to one canonical form.
- FreeBSD worker stop no longer hangs or orphans the scanning child.
Optimizations
- 30-60 MB lower peak RSS via jemalloc arena cap.
- 800 MB less retained worker memory: dependency reports kept as text, not parsed trees.
- Capped uploader sha set; prune stale cache versions.
- Worker shutdown drain: 60s to 15s.