You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The required strix check is failing on multiple open PRs in contextual-orchestrator with the same pattern: Strix completes its scan, prints a full Penetration test completed report to the console (including a real vulnerability list), and then the process itself exits non-zero (exit code 2, or 124/timeout on one occasion) before its report artifact is durably written. scripts/ci/strix_quick_gate.sh then correctly and conservatively fails closed ("No Strix vulnerability report artifact was produced; log-only severity markers are incomplete evidence") -- that fail-closed behavior is working as designed (see #891) and should not be weakened. The bug is upstream of the gate script.
Evidence
Reproduced identically across 4 independent PRs on contextual-orchestrator (all using nvidia_nim/nvidia/nemotron-3-super-120b-a12b, sometimes falling back to nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5):
Final attempt exits 124 (timeout) after ~15 min, following two prior exit-1 attempts
Root cause hypothesis
requirements-strix-ci.txt pins strix-agent==1.0.4. The upstream project's own release notes (https://github.com/usestrix/strix/releases) list two fixes directly matching this symptom, both shipped after 1.0.4:
v1.1.0: "Atomic CSV/MD writes to prevent corruption on crash" -- matches a report that was generated (visible in the console log) but not durably persisted as an artifact.
v1.4.0: "Quit after scan instead of hosting local viewer" -- prior versions apparently lingered/hosted a local viewer process after completing a scan; in a non-interactive CI container with a process timeout, that's a very plausible source of the hangs/non-zero exits observed here (including the exit 124 case in PR Allow central fix scheduler to scan target repositories #137, and the AsyncExitStack-style crash-after-print shape in the others).
Latest available is 1.5.3; none of 1.4.0 through 1.5.3 have relaxed the fix.
Why this isn't a one-line bump
strix-agent (every version 1.4.0 through the latest 1.5.3) requires cryptography<49,>=48.0.1. This repo's requirements-strix-ci.txt deliberately pins cryptography==50.0.0 (commit 7616fd80, "fix(security): refresh vulnerable Strix lock snapshot") to fix CVE-2026-39892 (a Bleichenbacher-style timing oracle in pkcs7_decrypt_der/pkcs7_decrypt_pem/pkcs7_decrypt_smime, present from cryptography 44.0.0 through <50.0.0, fixed in 50.0.0). uv pip compile --generate-hashes ... (the documented regeneration command in CLAUDE.md) correctly refuses to resolve strix-agent==1.5.3 + cryptography==50.0.0 together -- it is a genuine, currently-unresolved upstream constraint conflict, not a lockfile-generation mistake. I did not force an override past a declared dependency constraint without evidence that combination actually works at runtime.
Suggested next steps (not attempted here, needs a decision)
Open an upstream issue/PR against usestrix/strix asking them to relax the cryptography<49 upper bound (cryptography 48->50 does not appear to remove any API strix-agent would plausibly use, based on the changelog -- but this needs upstream confirmation, not a guess from this side).
As a stopgap, test whether strix-agent==1.5.3 actually runs correctly against cryptography==50.0.0 despite its declared range (an explicit uv pip compile --override + a real scan run, not just an install), and accept that combination deliberately with a comment explaining the override.
Alternative: if neither is viable soon, consider whether STRIX_TRANSIENT_RETRY_PER_MODEL should be raised as an interim mitigation -- note this only helps if the crash is retried, and none of is_transient_same_model_retry_error()'s four existing categories (rate limit, LLM API connection, LLM service unavailable, midstream fallback) currently match this failure signature, so the classifier would need a new, narrowly-scoped category first (e.g. "process exited non-zero after a complete Penetration test completed block was observed in the log") -- I'm flagging this option rather than implementing it, since it touches the fail-closed security logic itself and deserves review, not a drive-by change.
Impact
This is the org-wide central required workflow (ContextualWisdomLab/.github's strix.yml + scripts/ci/strix_quick_gate.sh), so it affects every repo with the Strix ruleset, not just contextual-orchestrator.
Problem
The required
strixcheck is failing on multiple open PRs incontextual-orchestratorwith the same pattern: Strix completes its scan, prints a fullPenetration test completedreport to the console (including a real vulnerability list), and then the process itself exits non-zero (exit code2, or124/timeout on one occasion) before its report artifact is durably written.scripts/ci/strix_quick_gate.shthen correctly and conservatively fails closed ("No Strix vulnerability report artifact was produced; log-only severity markers are incomplete evidence") -- that fail-closed behavior is working as designed (see #891) and should not be weakened. The bug is upstream of the gate script.Evidence
Reproduced identically across 4 independent PRs on
contextual-orchestrator(all usingnvidia_nim/nvidia/nemotron-3-super-120b-a12b, sometimes falling back tonvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5):Vulnerabilities LOW: 1printed, then exit code 2Vulnerabilities CRITICAL: 1printed, then exit code 2Vulnerabilities CRITICAL: 1printed (on fallback model), then exit code 2Root cause hypothesis
requirements-strix-ci.txtpinsstrix-agent==1.0.4. The upstream project's own release notes (https://github.com/usestrix/strix/releases) list two fixes directly matching this symptom, both shipped after 1.0.4:exit 124case in PR Allow central fix scheduler to scan target repositories #137, and theAsyncExitStack-style crash-after-print shape in the others).Latest available is
1.5.3; none of 1.4.0 through 1.5.3 have relaxed the fix.Why this isn't a one-line bump
strix-agent(every version 1.4.0 through the latest 1.5.3) requirescryptography<49,>=48.0.1. This repo'srequirements-strix-ci.txtdeliberately pinscryptography==50.0.0(commit7616fd80, "fix(security): refresh vulnerable Strix lock snapshot") to fix CVE-2026-39892 (a Bleichenbacher-style timing oracle inpkcs7_decrypt_der/pkcs7_decrypt_pem/pkcs7_decrypt_smime, present from cryptography 44.0.0 through <50.0.0, fixed in 50.0.0).uv pip compile --generate-hashes ...(the documented regeneration command inCLAUDE.md) correctly refuses to resolvestrix-agent==1.5.3+cryptography==50.0.0together -- it is a genuine, currently-unresolved upstream constraint conflict, not a lockfile-generation mistake. I did not force an override past a declared dependency constraint without evidence that combination actually works at runtime.Suggested next steps (not attempted here, needs a decision)
usestrix/strixasking them to relax thecryptography<49upper bound (cryptography 48->50 does not appear to remove any APIstrix-agentwould plausibly use, based on the changelog -- but this needs upstream confirmation, not a guess from this side).strix-agent==1.5.3actually runs correctly againstcryptography==50.0.0despite its declared range (an explicituv pip compile --override+ a real scan run, not just an install), and accept that combination deliberately with a comment explaining the override.STRIX_TRANSIENT_RETRY_PER_MODELshould be raised as an interim mitigation -- note this only helps if the crash is retried, and none ofis_transient_same_model_retry_error()'s four existing categories (rate limit, LLM API connection, LLM service unavailable, midstream fallback) currently match this failure signature, so the classifier would need a new, narrowly-scoped category first (e.g. "process exited non-zero after a completePenetration test completedblock was observed in the log") -- I'm flagging this option rather than implementing it, since it touches the fail-closed security logic itself and deserves review, not a drive-by change.Impact
This is the org-wide central required workflow (
ContextualWisdomLab/.github'sstrix.yml+scripts/ci/strix_quick_gate.sh), so it affects every repo with the Strix ruleset, not justcontextual-orchestrator.