Release
v1.4.0
hundred eyesParallel POM qualification with cgroup-aware concurrency, cutting qualification wall time for large remediation runs on Kubernetes.
Highlights
- 01
Parallel qualification — up to 4× faster
Candidate POMs are now qualified concurrently. On a run with 12 qualifying POMs and a test gate, wall time drops from ~9 minutes to ~3 minutes. The worker count defaults to 4 and is configurable per runner shape.
Read the guide → - 02
Cgroup-aware concurrency for Kubernetes
Set ARGUS_QUALIFICATION_CONCURRENCY=-1 to let Argus auto-detect the pod's real CPU limit from the Linux cgroup quota — not the host node count that runtime.GOMAXPROCS would return. Powered by go.uber.org/automaxprocs.
Read the guide → - 03
Parallel OSV advisory hydration
Advisory metadata is now fetched from OSV.dev through a bounded worker pool (default 8, ARGUS_OSV_CONCURRENCY), collapsing the previously-serial per-advisory fetch chain on a cold cache. Rate-limit handling is preserved per request.
Read the guide → - 04
Dropped redundant mvn clean
The clean phase was removed from every qualification invocation. copyWorkspace already skips target/, so each workspace was already clean — the phase added JVM startup overhead with no benefit.
Read the guide →
Full notes
Added
- Parallel POM qualification using a bounded goroutine pool. Worker count controlled by
ARGUS_QUALIFICATION_CONCURRENCY(default 4). Qualification order is preserved so the priority set by the strategy ladder is respected. ARGUS_QUALIFICATION_CONCURRENCY=-1auto-detects the container's Linux cgroup CPU quota viago.uber.org/automaxprocs(v1.6.0). Recommended for Kubernetes runners whereruntime.GOMAXPROCSreflects the host node's CPU count rather than the pod's CFS limit.- ADR-018 documents the parallel qualification architecture, the GOMAXPROCS pitfall in containerised environments, and the automaxprocs integration decision.
- Parallel OSV advisory hydration via a bounded worker pool, controlled by
ARGUS_OSV_CONCURRENCY(default 8). Results preserve input order and the existing 429 Retry-After backoff applies per request. - Process-level advisory memoization so later pipeline phases reuse a parsed OSV record without a repeat disk read or unmarshal. ADR-019 documents the hydration changes and why a content-hash SBOM cache was evaluated and rejected.
Changed
- Dropped the
cleanphase from everymvn <phase>qualification invocation.copyWorkspaceskipstarget/so every workspace starts clean; the explicitcleanwas redundant overhead. - Updated the GitLab CI/CD component and documentation examples to default to Argus
1.4.0. The component now exposes aqualification_concurrencyinput that maps toARGUS_QUALIFICATION_CONCURRENCY.