-
Notifications
You must be signed in to change notification settings - Fork 0
fix(coverage): materialize trusted uv lock dependencies #743
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
101 commits
Select commit
Hold shift + click to select a range
9c02e28
fix(coverage): materialize trusted uv lock dependencies
seonghobae 59beb4b
fix(security): make trusted uv download URL statically provable
seonghobae e57ef51
test(security): pin the trusted uv URL sink contract
seonghobae 635bd7d
test(security): parse the trusted uv URL contract without code execution
seonghobae 2f6300c
test(coverage): require per-dependency hashes from uv export
seonghobae 59ad185
fix(coverage): require hashes on every uv export requirement
seonghobae 4a7a01d
docs(doctoring): record trusted uv materialization evidence
seonghobae 7a2528e
test(coverage): require isolated strict uv export
seonghobae ddd9d8e
fix(coverage): isolate and strictly validate uv export
seonghobae 229711d
docs(doctoring): record isolated uv export boundary
seonghobae 15c97c8
test(coverage): fail closed on tracked uv metadata read errors
seonghobae 7e66e5a
fix(coverage): distinguish orphan uv locks from Git read failures
seonghobae 2ef7a36
docs(doctoring): distinguish orphan metadata from read failure
seonghobae 3ff45c4
test(security): reject uv redirects before follow
seonghobae 41afe7b
test(coverage): enforce uv origin port and branch evidence
seonghobae 8ffc9cc
test(coverage): measure branch coverage at the 100 percent gate
seonghobae da6157a
fix(security): reject trusted uv redirects before follow
seonghobae 1739459
docs(doctoring): record no-proxy no-redirect uv transport
seonghobae 00642c2
fix(security): enforce fixed Astral HTTPS origin port
seonghobae 3a15594
docs(doctoring): record fixed origin port and branch coverage evidence
seonghobae c9560d3
test(security): require scoped urllib false-positive suppression
seonghobae 3259787
fix(security): scope urllib false-positive suppression
seonghobae 7616fd8
fix(security): refresh vulnerable Strix lock snapshot
seonghobae 07c81c0
fix(ci): align periodic CodeQL action revisions
seonghobae 8696d74
test(coverage): capture trusted uv portability gaps
seonghobae 83ea1d9
test(coverage): share deterministic HTTP response support
seonghobae 7865efd
test(coverage): support Python 3.10 TOML parsing
seonghobae 54d5927
build(test): support Python 3.10 TOML parsing
seonghobae a6a3a96
test(coverage): isolate trusted uv opener cache state
seonghobae df31da1
fix(coverage): harden trusted uv portability and streaming
seonghobae 41ba0f4
test(coverage): isolate trusted uv process caches
seonghobae b4ceeed
test(coverage): resolve trusted uv review findings
seonghobae 40e19c5
test(coverage): require explicit uv workspace rejection
seonghobae 5b52fea
fix(coverage): fail closed on uv workspaces
seonghobae f93a5c1
test(ci): require exact-head trusted uv quality evidence
seonghobae 44f15bb
ci(coverage): prove trusted uv materializer quality
seonghobae ba59139
test(coverage): close JavaScript and Noema branch gaps
seonghobae 20de52f
test(coverage): close review scheduler branch gaps
seonghobae e29be20
test(coverage): close execution and sandbox branch gaps
seonghobae 5925c8a
test(coverage): close reporting branch gaps
seonghobae 15c7cb3
test(coverage): remove unused scheduler test import
seonghobae 2424f7f
ci(coverage): prove complete central branch coverage
seonghobae 27f08e2
test(ci): lock the repository-wide coverage gate
seonghobae c2b987f
docs(doctoring): record complete coverage repair evidence
seonghobae edd9a37
fix(strix): integrate hosted NVIDIA fallback into trusted uv prerequi…
seonghobae 77fe2f2
test(ci): require exact-head trusted uv checkout
seonghobae 3813a96
fix(ci): bind trusted uv quality evidence to PR head
seonghobae 9c27d43
docs(changelog): record exact-head uv quality evidence
seonghobae d3b6c79
docs(doctoring): record exact-head checkout boundary
seonghobae 244efdd
ci: repair exact-head trusted uv quality regressions
seonghobae df74e97
test(ci): stabilize trusted uv quality contracts
github-actions[bot] 90dd9ae
docs(evidence): record trusted uv quality regression repair
seonghobae f57e5a9
ci: repair exact-head trusted uv quality regressions
seonghobae d5ff1d4
chore(ci): remove completed PR-specific repair workflow
seonghobae 5e57877
ci: externalize PR 743 repair patch
seonghobae add05d3
ci: simplify PR 743 verified repair runner
seonghobae 7384340
ci: make PR 743 repair idempotent with concurrent head fix
seonghobae 90e8cd8
ci: rebind PR 743 repair to concurrent hermetic head
seonghobae c14b87a
chore(ci): remove completed PR 743 repair workflow
seonghobae 7f270b3
chore(ci): remove completed PR 743 repair helper
seonghobae 2d223df
test(opencode-review): stage Git config isolation regression
seonghobae ba157b5
chore(ci): remove completed PR 743 repair workflow
seonghobae c31feb1
test(opencode-review): require PR 743 cleanup boundary
seonghobae 0edd9d4
ci: run bounded PR 743 Git configuration repair
seonghobae 56781fa
ci: retry bounded PR 743 Git configuration repair
seonghobae adbaaf7
fix(ci): bind PR 743 one-shot to reviewed parent
seonghobae 951c242
ci: make PR 743 repair invariant to metadata-only races
seonghobae 35e40ac
chore(ci): remove completed PR 743 Git isolation workflow
seonghobae 3865f99
ci: apply PR 743 Git isolation repair
seonghobae 0ff7e6b
ci: make PR 743 Git isolation repair self-cleaning
seonghobae 8b192fb
test(ci): require conftest changes to trigger uv quality evidence
seonghobae e21c97e
test(ci): anchor PR 743 cleanup contracts to repository root
seonghobae 3ca42fa
test(opencode-review): finalize Git isolation repair
seonghobae 6533e5f
fix(ci): trigger trusted uv evidence for shared fixtures
seonghobae c8a53dc
ci: execute PR 743 Git isolation repair as exact-head check
seonghobae 2f890f6
test(opencode-review): verify final Git isolation tree
seonghobae 5fe76ee
test(noema): distinguish review threads without line numbers
seonghobae 9b8d02a
test(uv): verify Python 3.10 fallback in production source
seonghobae ad3ec12
test(ci): require final PR 743 branch-writer cleanup
seonghobae 3a4e43e
fix(ci): make PR 743 repair self-contained
seonghobae 02ccdd1
ci: remove completed PR 743 Git isolation helper
seonghobae b0caf9d
fix(ci): complete bounded PR 743 review repair
seonghobae defba71
ci: remove completed PR 743 finalizer v2
seonghobae cfa2819
ci: remove completed PR 743 finalizer
seonghobae b2bebb1
fix(ci): make bounded PR 743 repair race-safe
seonghobae 3e477a9
ci: apply current PR 743 review fixes
seonghobae 26ddb7b
ci: finalize PR 743 with workflow-scoped token
seonghobae db4dc6c
fix(ci): use established workflow-capable repair credentials
seonghobae e70b088
fix(ci): complete bounded PR 743 review repairs
seonghobae e24dc06
chore(ci): remove completed PR 743 repair workflow
seonghobae 4614b44
fix(ci): materialize bounded repair without restricted ref writes
seonghobae b7f21a8
chore(ci): remove completed PR 743 repair workflow
seonghobae 95b6c3e
test(opencode-review): trigger PAT-scoped PR 743 finalization
seonghobae 1f75e13
fix(ci): distinguish already-isolated Git invocation blocks
seonghobae 133067e
chore(ci): remove completed PR 743 write workflow
seonghobae 112d5e0
test(ci): scope Git isolation assertions to complete blocks
seonghobae 59c5e0b
chore(ci): remove superseded PR 743 finalizer
seonghobae 1e2deb7
test(ci): make readiness clock deterministic
seonghobae 3c47966
test(ci): require trusted Git helper boundary marker
seonghobae 541f718
test(noema): assert complete line-free thread rendering
seonghobae 91f0e36
test(ci): verify complete safe-directory isolation values
seonghobae File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
165 changes: 165 additions & 0 deletions
165
.github/workflows/trusted-uv-materializer-quality-ci.yml
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,165 @@ | ||
| name: Trusted uv Materializer Quality CI | ||
|
|
||
| on: | ||
| pull_request: | ||
| branches: [main] | ||
| paths: | ||
| - ".github/workflows/trusted-uv-materializer-quality-ci.yml" | ||
| - "scripts/ci/materialize_base_python_requirements.py" | ||
| - "tests/conftest.py" | ||
| - "tests/test_materialize*.py" | ||
| - "tests/test_trusted_uv*.py" | ||
| - "tests/test_uv*.py" | ||
| - "tests/test_repository_branch_coverage_*.py" | ||
| - "requirements-opencode-review-ci-hashes.txt" | ||
| - "pyproject.toml" | ||
| push: | ||
| branches: [main] | ||
| paths: | ||
| - ".github/workflows/trusted-uv-materializer-quality-ci.yml" | ||
| - "scripts/ci/materialize_base_python_requirements.py" | ||
| - "tests/conftest.py" | ||
| - "tests/test_materialize*.py" | ||
| - "tests/test_trusted_uv*.py" | ||
| - "tests/test_uv*.py" | ||
| - "tests/test_repository_branch_coverage_*.py" | ||
| - "requirements-opencode-review-ci-hashes.txt" | ||
| - "pyproject.toml" | ||
|
|
||
| concurrency: | ||
| group: trusted-uv-materializer-quality-${{ github.event.pull_request.number || github.ref }} | ||
| cancel-in-progress: true | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| env: | ||
| FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true | ||
|
|
||
| jobs: | ||
| minimum-python-contract: | ||
| name: Python 3.10 compatibility contract | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 10 | ||
| steps: | ||
| - name: Harden runner | ||
| uses: step-security/harden-runner@bf7454d06d71f1098171f2acdf0cd4708d7b5920 # v2.20.0 | ||
| with: | ||
| egress-policy: audit | ||
|
|
||
| - name: Checkout | ||
| uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | ||
| with: | ||
| persist-credentials: false | ||
| ref: ${{ github.event.pull_request.head.sha }} | ||
|
|
||
| - name: Set up minimum supported Python | ||
| uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 | ||
| with: | ||
| python-version: "3.10" | ||
|
|
||
| - name: Compile production on Python 3.10 | ||
| run: python -m compileall -q scripts/ci/materialize_base_python_requirements.py | ||
|
|
||
| - name: Exercise the conditional tomli import | ||
| run: | | ||
| python - <<'PY' | ||
| import sys | ||
| import tempfile | ||
| from pathlib import Path | ||
|
|
||
| stub_root = Path(tempfile.mkdtemp(prefix="trusted-uv-tomli-stub-")) | ||
| (stub_root / "tomli.py").write_text( | ||
| "STUB_MARKER = True\n" | ||
| "class TOMLDecodeError(ValueError):\n" | ||
| " pass\n" | ||
| "def loads(_value):\n" | ||
| " return {}\n", | ||
| encoding="utf-8", | ||
| ) | ||
| sys.path.insert(0, str(stub_root)) | ||
| from scripts.ci import materialize_base_python_requirements as materializer | ||
|
|
||
| assert materializer.tomllib.STUB_MARKER is True | ||
| PY | ||
|
|
||
| full-quality-gate: | ||
| name: Python 3.14 full quality gate | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 20 | ||
| steps: | ||
| - name: Harden runner | ||
| uses: step-security/harden-runner@bf7454d06d71f1098171f2acdf0cd4708d7b5920 # v2.20.0 | ||
| with: | ||
| egress-policy: audit | ||
|
|
||
| - name: Checkout | ||
| uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | ||
| with: | ||
| persist-credentials: false | ||
| ref: ${{ github.event.pull_request.head.sha }} | ||
|
|
||
| - name: Set up current stable Python | ||
| uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 | ||
| with: | ||
| python-version: "3.14" | ||
| cache: pip | ||
| cache-dependency-path: requirements-opencode-review-ci-hashes.txt | ||
|
|
||
| - name: Install hash-locked quality tooling | ||
| run: python -m pip install --disable-pip-version-check --require-hashes -r requirements-opencode-review-ci-hashes.txt | ||
|
|
||
| - name: Run trusted uv tests with complete branch coverage | ||
| run: | | ||
| cat >"${RUNNER_TEMP}/trusted-uv-coveragerc" <<'EOF' | ||
| [run] | ||
| branch = True | ||
| include = | ||
| scripts/ci/materialize_base_python_requirements.py | ||
|
|
||
| [report] | ||
| fail_under = 100 | ||
| show_missing = True | ||
| EOF | ||
| export COVERAGE_RCFILE="${RUNNER_TEMP}/trusted-uv-coveragerc" | ||
| python -m coverage erase | ||
| python -m coverage run -m pytest \ | ||
| tests/test_materialize_base_python_requirements.py \ | ||
| tests/test_materialize_uv_export_hash_contract.py \ | ||
| tests/test_trusted_uv_download_contract.py \ | ||
| tests/test_trusted_uv_portability_and_streaming.py \ | ||
| tests/test_uv_export_isolation_contract.py \ | ||
| tests/test_uv_redirect_and_coverage_contract.py \ | ||
| tests/test_uv_redirect_boundary.py \ | ||
| tests/test_uv_workspace_fail_closed.py \ | ||
| tests/test_trusted_uv_materializer_quality_workflow_contract.py \ | ||
| -q | ||
| python -m coverage report | ||
|
|
||
| - name: Run complete central test and branch coverage gate | ||
| run: | | ||
| unset COVERAGE_RCFILE | ||
| python -m coverage erase | ||
| python -m coverage run -m pytest tests -q | ||
| python -m coverage report | ||
|
|
||
| - name: Enforce complete production docstrings | ||
| run: python -m interrogate --fail-under 100 scripts/ci/materialize_base_python_requirements.py | ||
|
|
||
| - name: Compile production and quality contracts | ||
| run: | | ||
| python -m compileall -q \ | ||
| scripts/ci/materialize_base_python_requirements.py \ | ||
| tests/test_materialize_base_python_requirements.py \ | ||
| tests/test_materialize_uv_export_hash_contract.py \ | ||
| tests/test_trusted_uv_download_contract.py \ | ||
| tests/test_trusted_uv_portability_and_streaming.py \ | ||
| tests/test_uv_export_isolation_contract.py \ | ||
| tests/test_uv_redirect_and_coverage_contract.py \ | ||
| tests/test_uv_redirect_boundary.py \ | ||
| tests/test_uv_workspace_fail_closed.py \ | ||
| tests/test_trusted_uv_materializer_quality_workflow_contract.py \ | ||
| tests/test_repository_branch_coverage_javascript_and_noema.py \ | ||
| tests/test_repository_branch_coverage_review_schedulers.py \ | ||
| tests/test_repository_branch_coverage_execution_sandboxes.py \ | ||
| tests/test_repository_branch_coverage_reporting_edges.py | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| # Changelog | ||
|
|
||
| All notable changes to the organization automation repository are documented in | ||
| this file. The format follows Keep a Changelog, and versioned releases follow | ||
| Semantic Versioning where the repository publishes a release. | ||
|
|
||
| ## [Unreleased] | ||
|
|
||
| ### Added | ||
|
|
||
| - Added exact-base `uv.lock` materialization that reconstructs standalone nested projects with a checksum-pinned official `uv` exporter, isolated frozen/offline execution, strict exact-pin and SHA-256 output validation, and complete Python 3.10/3.14 quality evidence. | ||
|
|
||
| ### Fixed | ||
|
|
||
| - Bound both trusted-uv quality jobs to `github.event.pull_request.head.sha` and added a permanent two-checkout regression contract so exact-head compatibility, coverage, docstring, and compilation claims cannot silently measure GitHub's generated pull-request merge revision. | ||
| - Made Strix treat only a single LiteLLM provider-error line containing NVIDIA NIM context and model-catalog 404 evidence as cross-model fallback evidence, rejecting cross-line signal assembly and provider-like target source literals; moved the public default to Nemotron 3 Super 120B and added a second NVIDIA hosted candidate before GitHub Models without neutralizing reported vulnerabilities. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,76 @@ | ||
| # Strix NVIDIA NIM model-catalog fallback: evidence and design record | ||
|
|
||
| ## Decision | ||
|
|
||
| Strix treats an authenticated NVIDIA NIM model-catalog `404 Not Found` as | ||
| provider availability evidence, not as a target-application vulnerability. The | ||
| gate does not retry the same unavailable model. It proceeds to a distinct | ||
| reviewed NVIDIA hosted model and only then to the existing GitHub Models | ||
| candidates. | ||
|
|
||
| Public-repository scans now default to | ||
| `nvidia/nemotron-3-super-120b-a12b`. The first fallback is | ||
| `nvidia/llama-3.3-nemotron-super-49b-v1.5`. Private repositories retain the | ||
| contracted provider because NVIDIA hosted trial inputs are restricted to public | ||
| repositories by the central workflow. | ||
|
|
||
| ## Trust boundary | ||
|
|
||
| The NVIDIA classifier accepts only a single bounded log line that contains all | ||
| three signals: a LiteLLM `NotFoundError`, NVIDIA NIM provider context, and | ||
| model-catalog not-found evidence. It does not assemble provider and `404` | ||
| signals from different lines. A bare application `404`, route miss, database | ||
| lookup miss, provider-like source literal, or other target-controlled output is | ||
| not enough to enter model fallback. | ||
|
|
||
| This same-line rule matters because scanner stdout can include text derived from | ||
| the repository under review. Requiring the trusted LiteLLM exception marker and | ||
| all provider-availability evidence on one line prevents repository content from | ||
| combining with an unrelated application `404` to spoof infrastructure fallback. | ||
| Provider-side failure also remains a fail-closed incomplete scan until a distinct | ||
| fallback produces complete evidence. | ||
|
|
||
| The outer workflow may classify exhausted provider infrastructure as neutral only | ||
| when the run log contains no vulnerability signal. Any reported severity or | ||
| non-zero vulnerability count remains blocking. Scanner reports and attempt logs | ||
| remain available as artifacts. | ||
|
|
||
| ## Verification contract | ||
|
|
||
| Regression evidence proves that: | ||
|
|
||
| 1. the exact LiteLLM `Nvidia_nimException` 404 observed in required CI is | ||
| recognized; | ||
| 2. an ordinary application 404 is not recognized; | ||
| 3. provider context and 404 evidence on different lines are not recognized; | ||
| 4. a provider-like source literal on one line without LiteLLM `NotFoundError` | ||
| context is not recognized; | ||
| 5. model-catalog 404s enter cross-model fallback but never same-model retry; | ||
| 6. the primary and first fallback are current NVIDIA hosted models; | ||
| 7. GitHub Models remain later cross-provider fallbacks; | ||
| 8. vulnerability signals prevent neutral infrastructure classification; and | ||
| 9. the required-workflow smoke contract pins these properties. | ||
|
|
||
| ## Limitations | ||
|
|
||
| Hosted model catalogs may change independently of this repository. A model-card | ||
| page or supported self-hosted NIM container does not guarantee indefinite hosted | ||
| trial availability. The ordered model plan must therefore be reviewed against | ||
| current NVIDIA documentation whenever a provider returns a catalog 404. This | ||
| change does not treat arbitrary provider errors as success and does not weaken | ||
| Strix severity, changed-file attribution, or independent approval requirements. | ||
|
|
||
| ## References | ||
|
|
||
| Fielding, R., Nottingham, M., & Reschke, J. (2022). *HTTP semantics* (RFC | ||
| 9110). Internet Engineering Task Force. https://doi.org/10.17487/RFC9110 | ||
|
|
||
| NVIDIA Corporation. (2025). *Llama-3.3-Nemotron-Super-49B-v1.5* [Model card]. | ||
| NVIDIA NIM. https://build.nvidia.com/nvidia/llama-3_3-nemotron-super-49b-v1_5/modelcard | ||
|
|
||
| NVIDIA Corporation. (2026a). *NVIDIA-Nemotron-3-Super-120B-A12B* [Model | ||
| card]. NVIDIA NIM. | ||
| https://build.nvidia.com/nvidia/nemotron-3-super-120b-a12b/modelcard | ||
|
|
||
| NVIDIA Corporation. (2026b). *Configuration reference*. NVIDIA AI-Q Blueprint. | ||
| https://docs.nvidia.com/aiq-blueprint/2.2.0-rc1/customization/configuration-reference.html |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.