Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
8cd846d
test(supply-chain): add RED lock provenance contracts
seonghobae Aug 16, 2026
89dec0a
feat(supply-chain): implement offline Python lock provenance receipt
seonghobae Aug 16, 2026
00d4673
ci(supply-chain): publish Python lock provenance receipt
seonghobae Aug 16, 2026
f0828fc
test(supply-chain): harden lock provenance branch coverage
seonghobae Aug 16, 2026
165fcee
fix(supply-chain): fail closed on incomplete lock generators
seonghobae Aug 16, 2026
dbe6d53
docs(supply-chain): record Python lock provenance evidence boundary
seonghobae Aug 16, 2026
eaa570a
fix(supply-chain): fail closed when lock hashes disappear
seonghobae Aug 16, 2026
e73823f
test(supply-chain): cover provenance review regressions
seonghobae Aug 16, 2026
1b45e12
fix(supply-chain): contain lock provenance reads
seonghobae Aug 16, 2026
7a950e0
fix(ci): publish failed lock provenance receipts
seonghobae Aug 16, 2026
a62ee7e
docs(supply-chain): document contained provenance reads
seonghobae Aug 16, 2026
1dbe07f
test(supply-chain): expose recursive requirements include bypass
seonghobae Aug 16, 2026
61a39ff
fix(supply-chain): validate recursive requirements includes
seonghobae Aug 16, 2026
ef40bfe
docs(supply-chain): record recursive include boundary
seonghobae Aug 16, 2026
aafa170
fix(supply-chain): honor inline source comments
seonghobae Aug 20, 2026
f6eeb69
fix(supply-chain): skip non-file lock candidates
seonghobae Aug 20, 2026
cd72417
feat(supply-chain): verify locked hashes against PyPI releases (#1370)
seonghobae Aug 25, 2026
9ce0b87
Merge branch 'develop' into feat/dependency-lock-provenance-receipt
seonghobae Aug 25, 2026
40a2845
Merge commit '042b0c70531b229af3acbd0421a2f23098d848b3' into codex/pr…
seonghobae Sep 5, 2026
3a3628d
test(ci): pin registry provenance scope contract
seonghobae Sep 5, 2026
3f76039
fix(ci): scope live PyPI provenance to supply-chain changes
seonghobae Sep 5, 2026
58fe470
docs(supply-chain): record scoped registry gate boundary
seonghobae Sep 5, 2026
f4b2cbb
style(test): keep registry scope regression lint-clean
seonghobae Sep 5, 2026
32cdf3b
test(supply-chain): pin provenance review edge failures
seonghobae Sep 5, 2026
5d29d5f
fix(supply-chain): close provenance review edge gaps
seonghobae Sep 5, 2026
8892d0f
docs(supply-chain): reconcile offline provenance review edges
seonghobae Sep 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions .github/workflows/app-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,49 @@ jobs:
cache: pip
cache-dependency-path: backend/requirements-hashes.txt

- name: Validate Python lock provenance
run: |
status=0
receipt="$(python scripts/ci/python_lock_provenance.py --json)" || status=$?
printf '%s\n' "$receipt"
{
echo '### Python lock provenance'
echo '```json'
printf '%s\n' "$receipt"
echo '```'
} >> "$GITHUB_STEP_SUMMARY"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
exit "$status"
Comment thread
seonghobae marked this conversation as resolved.

- name: Determine whether PyPI registry provenance is required
id: registry_scope
env:
BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.before }}
run: |
set -euo pipefail
required=true
if [[ -n "${BASE_SHA:-}" && "$BASE_SHA" != "0000000000000000000000000000000000000000" ]]; then
git fetch --no-tags --depth=1 origin "$BASE_SHA"
changed_files="$(git diff --name-only "$BASE_SHA" HEAD)"
if ! grep -Eq '(^|/)requirements[^/]*\.txt$|^scripts/ci/python_lock_(registry_)?provenance\.py$|^backend/tests/test_python_lock_|^docs/doctoring/python-lock-|^\.github/workflows/app-ci\.yml$' <<<"$changed_files"; then
required=false
fi
fi
echo "required=$required" >> "$GITHUB_OUTPUT"

- name: Validate PyPI release hash provenance
if: steps.registry_scope.outputs.required == 'true'
run: |
status=0
receipt="$(python scripts/ci/python_lock_registry_provenance.py --json)" || status=$?
printf '%s\n' "$receipt"
{
echo '### PyPI release hash provenance'
echo '```json'
printf '%s\n' "$receipt"
echo '```'
} >> "$GITHUB_STEP_SUMMARY"
exit "$status"
Comment thread
seonghobae marked this conversation as resolved.

- name: Install backend dependencies
run: |
python -m pip install --disable-pip-version-check --require-hashes -r backend/requirements-hashes.txt
Expand Down
Loading
Loading