Skip to content

test: verify exact uv lock delta under repaired dependency review - #2499

Closed
groupthinking wants to merge 4 commits into
codex/uv-lock-parity-canary-basefrom
codex/uv-lock-parity-canary-head
Closed

groupthinking wants to merge 4 commits into
codex/uv-lock-parity-canary-basefrom
codex/uv-lock-parity-canary-head

Conversation

@groupthinking

@groupthinking groupthinking commented Oct 28, 2026 •

Copy link
Copy Markdown
Owner

Completed exact-lock dependency diagnostic — closed without merge

Refs #2486, #2492, #2498, and issue #2490. This temporary off-main PR compared only the exact uv.lock bytes from #2486 under the proposed dependency-review and locked-Python-CI repairs. It was closed unmerged and both temporary branches were deleted after verification. It does not prove snapshot parity against current main or clear #2486's existing red check.

The final temporary base 3db6bc716e3fe8e7c03e9cf19bfd039aef89e643 combined #2492's full-tree and scoped uv snapshot workflow with #2498's locked Python CI, plus a temporary push trigger/test used only for this diagnostic. Its uv.lock was byte-identical to main at ba2777d1b008c2148d413e07cc497791966310e0. The final head 9ac578ea17c47b6109f5cd7cc271d222fb3dc0fd differed from that base only in root uv.lock, byte-identical to #2486 head b9c38d461c2cd8bccbb60024ab427fa2965d3589. The delta comprised 31 version replacements and three newly added transitive packages.

Result

  • The initial hosted check was green but mislabeled all 65 changed uv dependency rows as runtime. Direct dev-only packages black, notebook, and pyjwt were among those mislabeled, so that green check was not a reliable verdict. The upstream uv detector recognizes virtual project roots; EventRelay's root uses source.editable, leaving its development reachability unclassified. The correction in draft fix: match dependency snapshots on update pull requests #2492 submits a scoped uv.lock snapshot and checks the full GitHub diff against the exact lockfiles.
  • Final base run 40738262187 successfully submitted both full-tree and scoped uv snapshots. Final head run 40738274345, attempt 2 completed successfully in dependency review, evidence recording, and artifact upload at the exact head above. Its review_outcome: success artifact contains 65 uv.lock rows: 34 added and 31 removed. All package names, versions, manifests, and scopes match the exact lockfiles, including 11 development-only changed package names. Independent GitHub API readback had an empty snapshot-warning header and byte-identical diff (SHA-256 3b645b716661271d36003b1850827cb09510a7610830eeb1ddd346b58b51fa5b). No vulnerabilities were reported; ddtrace-internal has unknown license metadata.
  • Attempt 1 of the final head run started before the base snapshots were available. Its dependency step exhausted the 300-second warning retry on an incomplete comparison and failed. The recorder later saved the correct 65-row diff with review_outcome: failure. The unchanged exact commit passed on attempt 2 after both base snapshots were available.
  • Python 3.11 and 3.12 hosted jobs on the earlier canary head each passed 2,973 tests and failed one repository workflow guard because this diagnostic deliberately added a temporary push branch. That is a diagnostic setup failure, not a failure caused by fix: bump the uv group across 1 directory with 16 updates #2486's lockfile. Local focused workflow/snapshot tests passed 25 on the final repair; uv lock --check --offline, Ruff, and diff check passed. The earlier exact-lock local full unit selection passed 2,960 tests plus 118 subtests on each Python version with two pre-existing macOS-specific tests excluded; the offline MCP selection passed 38 tests plus 20 subtests on each.

Scope and cleanup

This is an off-main confirmation of snapshot scope and artifact accuracy. The original dependency PRs still need their bases refreshed and their hosted checks rerun after the shared repairs are merged. No approval or merge of #2486, #2487, #2492, or #2498 is claimed by this diagnostic. #2499 is closed unmerged; codex/uv-lock-parity-canary-base and codex/uv-lock-parity-canary-head were deleted. The exact hosted result and remaining main-based gate are recorded on draft #2492.

@vercel

vercel Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
v0-uvai Ready Ready Preview, v0 Oct 28, 2026 5:43pm UTC

@coderabbitai

coderabbitai Bot commented Oct 28, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

🔍 PR Validation

⚠️ Large PR detected (631 lines changed)

@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 1 package(s) with unknown licenses.
See the Details below.

License Issues

uv.lock

PackageVersionLicenseIssue Type
ddtrace-internal0.1.0NullUnknown License
Allowed Licenses: MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, Python-2.0, BlueOak-1.0.0, MPL-2.0, CC0-1.0, 0BSD, MIT-CMU, Unlicense
Excluded from license check: pkg:pypi/regex, pkg:pypi/torch, pkg:npm/caniuse-lite, pkg:npm/@sentry/nextjs, pkg:npm/@sentry/cli, pkg:npm/@sentry/cli-darwin, pkg:npm/@sentry/cli-linux-arm, pkg:npm/@sentry/cli-linux-arm64, pkg:npm/@sentry/cli-linux-i686, pkg:npm/@sentry/cli-linux-x64, pkg:npm/@sentry/cli-win32-arm64, pkg:npm/@sentry/cli-win32-i686, pkg:npm/@sentry/cli-win32-x64, pkg:npm/@sentry/bundler-plugin-core, pkg:npm/@sentry/babel-plugin-component-annotate, pkg:npm/@img/sharp-libvips-darwin-arm64, pkg:npm/@img/sharp-libvips-darwin-x64, pkg:npm/@img/sharp-libvips-linux-arm, pkg:npm/@img/sharp-libvips-linux-arm64, pkg:npm/@img/sharp-libvips-linux-ppc64, pkg:npm/@img/sharp-libvips-linux-riscv64, pkg:npm/@img/sharp-libvips-linux-s390x, pkg:npm/@img/sharp-libvips-linux-x64, pkg:npm/@img/sharp-libvips-linuxmusl-arm64, pkg:npm/@img/sharp-libvips-linuxmusl-x64, pkg:npm/@img/sharp-wasm32, pkg:npm/@img/sharp-win32-arm64, pkg:npm/@img/sharp-win32-ia32, pkg:npm/@img/sharp-win32-x64

OpenSSF Scorecard

Scorecard details
PackageVersionScoreDetails
pip/accelerate 1.15.0 🟢 6.7
Details
CheckScoreReason
Maintained🟢 1030 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
Code-Review🟢 8Found 24/28 approved changesets -- score normalized to 8
Security-Policy🟢 10security policy file detected
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing⚠️ 0project is not fuzzed
License🟢 10license file detected
Packaging🟢 10packaging workflow detected
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
Pinned-Dependencies🟢 4dependency not pinned by hash detected -- score normalized to 4
SAST🟢 3SAST tool is not run on all commits -- score normalized to 3
pip/aiohttp 3.14.4 UnknownUnknown
pip/black 26.10.1 UnknownUnknown
pip/brotli 1.2.1 🟢 7.7
Details
CheckScoreReason
Token-Permissions⚠️ -1No tokens found
Maintained🟢 1030 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow⚠️ -1no workflows found
Security-Policy🟢 10security policy file detected
Packaging⚠️ -1packaging workflow not detected
Binary-Artifacts🟢 10no binaries found in the repo
Code-Review⚠️ 2Found 5/18 approved changesets -- score normalized to 2
Pinned-Dependencies⚠️ -1no dependencies found
CII-Best-Practices⚠️ 2badge detected: InProgress
Dependency-Update-Tool🟢 10update tool detected
Vulnerabilities🟢 100 existing vulnerabilities detected
License🟢 10license file detected
Fuzzing🟢 10project is fuzzed
Signed-Releases⚠️ 0Project has not signed or included provenance with any releases.
SAST🟢 9SAST tool is not run on all commits -- score normalized to 9
Branch-Protection⚠️ -1internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
CI-Tests🟢 1020 out of 20 merged PRs checked by a CI test -- score normalized to 10
Contributors🟢 10project has 16 contributing companies or organizations
pip/ddtrace 4.15.6 UnknownUnknown
pip/ddtrace-internal 0.1.0 UnknownUnknown
pip/filelock 4.2.1 UnknownUnknown
pip/gitpython 3.2.1 UnknownUnknown
pip/jupyterlab 4.6.4 UnknownUnknown
pip/mako 1.4.2 UnknownUnknown
pip/msgpack 1.2.3 UnknownUnknown
pip/multidict 6.9.1 🟢 6.6
Details
CheckScoreReason
Code-Review⚠️ 0Found 0/22 approved changesets -- score normalized to 0
Maintained🟢 1030 commit(s) and 26 issue activity found in the last 90 days -- score normalized to 10
Binary-Artifacts🟢 10no binaries found in the repo
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
License🟢 10license file detected
Fuzzing🟢 10project is fuzzed
Security-Policy🟢 10security policy file detected
Packaging🟢 10packaging workflow detected
SAST🟢 10SAST tool is run on all commits
Branch-Protection🟢 3branch protection is not maximal on development and all release branches
Signed-Releases🟢 85 out of the last 5 releases have a total of 5 signed artifacts.
pip/nbconvert 7.17.2 UnknownUnknown
pip/notebook 7.6.3 UnknownUnknown
pip/oauthlib 4.0.0 🟢 7.8
Details
CheckScoreReason
Maintained🟢 1015 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Code-Review🟢 4Found 4/9 approved changesets -- score normalized to 4
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Security-Policy🟢 10security policy file detected
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
Binary-Artifacts🟢 10no binaries found in the repo
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Fuzzing🟢 10project is fuzzed
License🟢 10license file detected
Signed-Releases⚠️ -1no releases found
SAST⚠️ -1internal error: internal error: Client.Checks.ListCheckRunsForRef: error during graphqlHandler.setupCheckRuns: Although you appear to have the correct authorization credentials, the `mistralai` organization has an IP allow list enabled, and your IP address is not permitted to access this resource.
Branch-Protection🟢 6branch protection is not maximal on development and all release branches
Packaging🟢 10packaging workflow detected
pip/opentelemetry-api 1.45.1 UnknownUnknown
pip/opentelemetry-distro 0.66b1 UnknownUnknown
pip/opentelemetry-exporter-http-transport 0.66b1 UnknownUnknown
pip/opentelemetry-exporter-otlp 1.45.1 UnknownUnknown
pip/opentelemetry-exporter-otlp-common 0.66b1 UnknownUnknown
pip/opentelemetry-exporter-otlp-proto-common 1.45.1 UnknownUnknown
pip/opentelemetry-exporter-otlp-proto-grpc 1.45.1 UnknownUnknown
pip/opentelemetry-exporter-otlp-proto-http 1.45.1 UnknownUnknown
pip/opentelemetry-instrumentation 0.66b1 UnknownUnknown
pip/opentelemetry-proto 1.45.1 UnknownUnknown
pip/opentelemetry-sdk 1.45.1 UnknownUnknown
pip/opentelemetry-semantic-conventions 0.66b1 UnknownUnknown
pip/packaging 26.3 UnknownUnknown
pip/pyjwt 2.15.0 UnknownUnknown
pip/python-discovery 1.6.7 UnknownUnknown
pip/tornado 6.6 UnknownUnknown
pip/virtualenv 21.15.1 UnknownUnknown
pip/werkzeug 3.1.9 UnknownUnknown
pip/yarl 1.25.1 🟢 6.3
Details
CheckScoreReason
Code-Review⚠️ 0Found 1/14 approved changesets -- score normalized to 0
Maintained🟢 1030 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Binary-Artifacts🟢 10no binaries found in the repo
Token-Permissions⚠️ 0detected GitHub workflow tokens with excessive permissions
Pinned-Dependencies⚠️ 1dependency not pinned by hash detected -- score normalized to 1
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Fuzzing🟢 10project is fuzzed
License🟢 10license file detected
Security-Policy🟢 10security policy file detected
Packaging🟢 10packaging workflow detected
SAST🟢 10SAST tool is run on all commits
Branch-Protection🟢 3branch protection is not maximal on development and all release branches
Signed-Releases🟢 43 out of the last 5 releases have a total of 3 signed artifacts.

Scanned Files

  • uv.lock

@groupthinking
groupthinking deleted the codex/uv-lock-parity-canary-head branch October 28, 2026 18:02
groupthinking added a commit that referenced this pull request Oct 29, 2026
## Current status — approved exact-head repair

Head `85f1815ddb7ec121680d067d165e18eb40d90eda` targets `main` at merge
commit `e010c9f3cec5ae72be16814d0841578ea9f8ded2`, after
[#2487](#2487) merged at
exact head `148cbf55fdce412255d2a61780459143521fa4c4`. The verified
merge commit has the same tree as that head, so this PR's seven-file
diff is unchanged. It adds complete npm lockfile coverage, preserves the
scoped `uv.lock` classification, and combines both lock types into one
manual snapshot so GitHub's pinned review action can compare the full
base and head graphs. The controlled
[#2501](#2501) test
passed on an exact four-file dependency update. This has **not** yet
produced a passing dependency comparison against the current `main` or
cleared the original review queue.

The exact-head [dependency review run
40760369080](https://github.com/groupthinking/EventRelay/actions/runs/40760369080)
succeeded through its **code-only no-delta** path: the full-tree and
combined lock submissions were correctly skipped because this PR changes
workflow code and tests, not dependency inputs. Before the automatic
base retarget, all 30 hosted checks at this same code head finished:
**27 successful, 3 skipped, zero failed or pending**. The retarget did
not run a new dependency comparison. A green no-delta check does not
substitute for the controlled #2501 dependency test or a postmerge real
PR test. A description-only edit may rerun metadata checks.

## Canonical issue

Fixes #2505 on merge under the repository's issue-link rule. Parent
#2490 stays open until a repaired `main` snapshot and a refreshed real
dependency PR pass the full comparison. #2487 merged at the approved
head, and GitHub automatically retargeted this draft to `main` at
`e010c9f3cec5ae72be16814d0841578ea9f8ded2`. The head and seven-file diff
remain unchanged. Hayden approved marking this exact head ready and
merging it. Main-based dependency comparison remains a required
postmerge verification.

## Changes

- Remove focused one-ecosystem snapshot staging from
`.github/workflows/dependency-review.yml`. Submit the same full-tree
component-detection scan on `main` pushes and same-repository dependency
PR heads at the exact commit SHA and ref. Keep the verified upstream
component-detection v0.2.0 pin from #2397 and the existing severity,
license and advisory policy.
- Treat Dependabot configuration changes as configuration, and compare a
PR head to its merge base when detecting new dependency inputs. A stale
branch cannot turn a change made only on `main` into a dependency update
in that PR. Real changed manifests and locks remain subject to review.
- Include **every distinct name/version** from the tracked npm
lockfiles, including nested second versions that component detection can
omit. Group duplicate installed paths with runtime scope if any path is
runtime. Submit those npm manifests and the scoped root `uv.lock`
manifest in **one** manual snapshot after the full-tree scan. The scoped
uv manifest treats packages reached only through `dev` or `docs` as
development. The evidence recorder rejects missing, extra,
wrong-manifest, wrong-version or wrong-scope rows against the exact
changed lockfiles.
- Increase the bounded per-file Python `PipReport` scan from 120 to 240
seconds and the job window to 30 minutes after an observed timeout
produced unrelated requirements-file removals. A timeout still falls
back to declared dependencies and can omit transitive packages; the
guard rejects unrelated graph drift. Keep the 600-second
snapshot-warning retry and warning rejection.
- Add regression coverage for workflow selection, stale branches, npm
nested versions and duplicate scope, combined one-request submission,
scoped uv reachability, and exact evidence validation.

## Changed paths

- `.github/workflows/dependency-review.yml`
- `scripts/ci/record_dependency_review.py`
- `scripts/ci/submit_npm_lock_snapshot.py`
- `scripts/ci/submit_uv_lock_snapshot.py`
- `tests/unit/test_dependency_review_workflow.py`
- `tests/unit/test_submit_npm_lock_snapshot.py`
- `tests/unit/test_submit_uv_lock_snapshot.py`

## Validation

- Focused workflow, recorder, npm and uv snapshot suite: `uv run
--no-project --with pytest --with pyyaml python -m pytest -q -o
addopts='' tests/unit/test_submit_npm_lock_snapshot.py
tests/unit/test_submit_uv_lock_snapshot.py
tests/unit/test_dependency_review_workflow.py` — **31 passed in 3.10s**
at the source head. `uv run --no-project --with ruff ruff check` and
`ruff format --check` on those affected Python files, plus `git diff
--check`, passed.
- Controlled uv
[#2499](#2499) used the
exact `uv.lock` delta from original #2486 on matching off-main branches.
Final [hosted run 40738274345, attempt
2](https://github.com/groupthinking/EventRelay/actions/runs/40738274345)
passed policy, recorder and upload with **65 exact rows** (34 additions,
31 removals), correct package names, versions, manifests and development
scopes, and no reported vulnerabilities. `ddtrace-internal` had unknown
license metadata. The first attempt raced the base snapshot; the
unchanged rerun passed. #2499 was closed unmerged.
- Earlier controlled
[#2500](#2500) used
original #2355's exact two npm lockfile changes and exposed a **10/12
coverage gap** in component detection: nested development
`brace-expansion` 2.1.4→2.1.7 was missing. Independent local npm audits
of both lockfiles found no new advisory and fewer findings after the
update (fetch 18→14; SDK 10→9). That green hosted check was
insufficient; #2500 was closed unmerged.
- Final controlled
[#2501](#2501) used the
exact four-file #2355 patch between base
`eb6e556ef9eb8df80250613291c73abfb59b9f0e` and head
`050f211b9715918f52c488a912d3ae797e76d68e`. [Base run
40759330706](https://github.com/groupthinking/EventRelay/actions/runs/40759330706)
submitted the full-tree and combined lock snapshots; [head run
40759346059](https://github.com/groupthinking/EventRelay/actions/runs/40759346059)
passed policy, recorder and upload. Its artifact and independent GitHub
comparison contain **all 12 exact lock changes**, only from the two
changed npm locks, with the nested `brace-expansion` row, correct
scopes, zero added vulnerabilities, and added licenses MIT or
BSD-3-Clause. GitHub's comparison with the review action's `per_page=5`
request is also warning free. #2501 was closed unmerged; its temporary
refs were deleted.
- The final #2501 success followed two diagnosed issues: an unchanged
Python requirements file generated 83 false removals after a 120-second
fallback, and the pinned review action's five-item API page returned a
**0-base/3-head** warning when full-tree, uv and npm were submitted
separately (six snapshots across both sides). The same comparison with a
larger page was warning free and had the correct 12 rows. Combining uv
and npm manifests leaves two submissions per side and yielded the
passing hosted result. Earlier #2493–#2496 diagnostics documented the
initial main snapshot mismatch, the upstream manifest mapping update and
scope validation; those results remain historical evidence, not a
main-based pass.

## Remaining gates

- [x] #2487 merged at its approved head; this draft automatically
retargeted to `main`, and its unchanged seven-file diff was reviewed.
- [x] Complete npm lock coverage and correct uv scope demonstrated in
controlled hosted canaries, with the five-item review comparison warning
free on #2501.
- [x] Exact-head #2492 code-only dependency check and other hosted
checks passed or skipped before the base retarget (27 successful, 3
skipped). This does not prove a main-based dependency update comparison.
- [x] Hayden approved marking exact head
`85f1815ddb7ec121680d067d165e18eb40d90eda` ready and merging #2492 after
review of the main snapshot uncertainty.
- [ ] After the merge, confirm the new `main` full-tree and combined
lock submission, refresh one original manifest-changing PR onto that
main, and require a warning-free hosted policy verdict plus complete
artifact matching its actual dependency files. Then refresh and recheck
the remaining original dependency PRs. Do not claim the original 21
dependency failures are resolved until this passes.
- [ ] Resolve any outstanding review findings and merge decisions for
the original PRs independently of this shared repair.

This branch was successfully deployed

1 active deployment
Preview — 9ac578ea Deployed Oct 28, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant