fix(strix): install hashed locks without pip re-resolution - #969
fix(strix): install hashed locks without pip re-resolution#969seonghobae wants to merge 6 commits into
Conversation
|
Warning Review limit reached
Next review available in: 97 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (11)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@cwl-noema-review please review this current head. Required Strix is pull_request_target, so @opencode-agent Independently review exact current head against protected main. Do not implement. |
A *-hashes.txt name is not a complete lock. Audit with --disable-pip only when the file contains --hash= or --require-hashes, and skip virtualenv trees during discovery.
|
@cwl-noema-review Please review this exact current head ( |
A lone --require-hashes directive without hash pins is an incomplete lock. pip-audit must not --disable-pip that file, or an empty/pin-only set is reported clean.
A mixed lock with one --hash= pin beside unhashed packages must not skip pip's resolver. Join continuation lines first, then require every package line to carry --hash=.
|
@cwl-noema-review Please review this exact current head ( |
Materialize a base Python lock only when every package line is an exact SHA-256 pin or a bounded relative -r include. A lone --require-hashes directive, ./lock.txt, or -r other-hashes.txt cannot enter the trusted build context (CWE-22).
There was a problem hiding this comment.
Pull request overview
OpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed.
Findings
1. HIGH Current-head GitHub Checks - Fix failed required checks before approval
- Problem: Failed same-head checks remain for
3caf51ffe625f0a6f2c9b945215175b12dc88973. - Root cause: The model-unavailable evidence fallback is allowed only when peer GitHub Checks are complete and clean.
- Fix: Read and fix the failed check logs below, then rerun the current-head checks.
- Regression test: Keep the model-unavailable fallback gated on an empty failed-check rollup.
Failed checks:
- Bandit (Python SAST) check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674328/job/94479294384)
- Close Empty PR/close-empty: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709672805/job/94479057414)
- CodeQL PR/Detect CodeQL languages: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674357/job/94479061356)
- Detect CodeQL languages check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674357/job/94479061356)
- Detect Python check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674328/job/94479060975)
- OSV-Scanner PR/osv-scan / osv-scan: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674869/job/94479062719)
- Python 3.10 compatibility contract check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674433/job/94479061939)
- Python 3.14 full quality gate check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674433/job/94479061985)
- Python Security/Bandit (Python SAST): CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674328/job/94479294384)
- Python Security/Detect Python: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674328/job/94479060975)
- Python Security/pip-audit (Python dependency audit): CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674328/job/94479294194)
- SAST Semgrep/Semgrep (multi-language SAST): CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674419/job/94479061345)
- SBOM Generation/generate-sbom: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674397/job/94479061544)
- Scorecard PR/Scorecard: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674377/job/94479061522)
- Scorecard check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674377/job/94479061522)
- Secret Scan/gitleaks (secret scan): CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674313/job/94479061452)
- Security Scan/dependency-review: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674547/job/94479062248)
- Security Scan/osv-scan: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674547/job/94479062504)
- Security Scan/scorecard: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674547/job/94479062323)
- Security Scan/trivy-fs: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674547/job/94479062106)
- Semgrep (multi-language SAST) check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674419/job/94479061345)
- Strix Changed Path Quality CI/exact-head-path-policy: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674409/job/94479062026)
- Trusted uv Materializer Quality CI/Python 3.10 compatibility contract: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674433/job/94479061939)
- Trusted uv Materializer Quality CI/Python 3.14 full quality gate: CANCELLED (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674433/job/94479061985)
- close-empty check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709672805/job/94479057414)
- coverage-source-tree check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709672847/job/94479332151)
- dependency-review check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674547/job/94479062248)
- exact-head-path-policy check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674409/job/94479062026)
- generate-sbom check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674397/job/94479061544)
- gitleaks (secret scan) check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674313/job/94479061452)
- osv-scan / osv-scan check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674869/job/94479062719)
- osv-scan check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674547/job/94479062504)
- pip-audit (Python dependency audit) check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674328/job/94479294194)
- required-workflow-bootstrap check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709672847/job/94479057859)
- scorecard check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674547/job/94479062323)
- trivy-fs check run: cancelled (https://github.com/ContextualWisdomLab/.github/actions/runs/31709674547/job/94479062106)
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow (2 files)"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow (2 files)"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Changed file (5 files)"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file (5 files)"]
R2 --> V2["required checks"]
Evidence --> S3["Docs: strix-hashed-lock-no-deps.md"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs: strix-hashed-lock-no-deps.md"]
R3 --> V3["docs review"]
Evidence --> S4["CI script (2 files)"]
S4 --> I4["review and security gate shell path"]
I4 --> R4["Review risk: CI script (2 files)"]
R4 --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test (2 files)"]
S5 --> I5["regression suite"]
I5 --> R5["Review risk: Test (2 files)"]
R5 --> V5["targeted test run"]
OpenCode Review Overview
Pull request overviewOpenCode could not approve from deterministic current-head evidence because GitHub Checks have failed. Findings1. HIGH Current-head GitHub Checks - Fix failed required checks before approval
Failed checks:
Changed-File Evidence Mapflowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Workflow (2 files)"]
S1 --> I1["GitHub Actions review job"]
I1 --> R1["Review risk: Workflow (2 files)"]
R1 --> V1["actionlint plus required checks"]
Evidence --> S2["Changed file (5 files)"]
S2 --> I2["repository behavior"]
I2 --> R2["Review risk: Changed file (5 files)"]
R2 --> V2["required checks"]
Evidence --> S3["Docs: strix-hashed-lock-no-deps.md"]
S3 --> I3["operator or user guidance"]
I3 --> R3["Review risk: Docs: strix-hashed-lock-no-deps.md"]
R3 --> V3["docs review"]
Evidence --> S4["CI script (2 files)"]
S4 --> I4["review and security gate shell path"]
I4 --> R4["Review risk: CI script (2 files)"]
R4 --> V4["bash -n plus Strix self-test"]
Evidence --> S5["Test (2 files)"]
S5 --> I5["regression suite"]
I5 --> R5["Review risk: Test (2 files)"]
R5 --> V5["targeted test run"]
|
|
Returned to Draft because this protected-main prerequisite mixes the hashed-lock/no-re-resolution policy with the common trusted-uv materializer branch and the duplicate Darwin test workaround. The intended dependency contract must remain independently reviewable: complete hash locks install with Rebuild from protected |
|
@coderabbitai review Review only exact current head |
|
|
|
@opencode-agent @cwl-noema-review @coderabbitai review Review exact head |
Rate Limit Exceeded
|
Summary
Required Strix is
pull_request_target, so the installer YAML comes from protected main. #961 already compiledstrix-agent==1.5.3+cryptography==50.0.0and added--no-depson the PR copy, but the live required job still ran main'spip install --require-hasheswithout--no-deps. pip re-appliedcryptography<49and failedResolutionImpossible. The same resolver path made pip-audit printknown-vulnerableeven though no advisory was returned.This PR lands
--require-hashes --no-depson main's installer without changing the lock (strix-agent==1.0.4stays). After merge, #961 can install.python-security.yml(pull_request) now audits hashed complete locks throughscripts/ci/pip_audit_requirements.py(pip-audit --disable-pip).Does not drop
cryptography==50.0.0. Does not weaken the missing-artifact fail-closed gate. Does not touch review-agent keys orCOPILOT_GITHUB_TOKEN.Refs #952
Refs #961
Developer experience
scripts/ci/pip_audit_requirements.pyis a small pure selector: hashed lock →--disable-pip; override/input with hashed sibling → skip; other files unchanged.strix-agent==1.5.3+cryptography==50.0.0hashes) and require--disable-pipfor that file.User experience
A buyer watching required security checks no longer sees a red pip-audit X that means "pip could not re-resolve a documented override lock." After this lands on main, required Strix can install the 1.5.3 crash-after-print fix without uninstalling cryptography 50.
Verification
Local (twice, consistent):
989 passed, 16 subtests passed; coveragefail_under = 100; interrogatefail-under = 100.