## Summary
- Fetch the dependency diff from GitHub's compare API after the existing
review action, avoiding GitHub's template-object limit on large action
outputs.
- Save the raw response and a separate record with the exact base/head
commits, review outcome, count, and SHA-256 digest. Missing, malformed,
snapshot-warned, or graph-inconsistent API responses fail before
evidence is saved. For changed npm lockfiles, verify returned package
names, versions, and scopes against the exact base/head lockfile
revisions.
- Treat a change only to the dependency review workflow as a code change
with no dependency graph delta. CI tests still validate the workflow.
Actual manifest and lockfile changes still run dependency review.
- Keep the existing vulnerability and license policy unchanged.
Closes #2485
## Paths changed
- `.github/workflows/dependency-review.yml`
- `scripts/ci/record_dependency_review.py`
- `tests/unit/test_dependency_review_workflow.py`
## Validation
- Focused `tests/unit/test_dependency_review_workflow.py` suite — **19
passed** on the final head, including warned empty/partial responses, a
warning-free empty response, graph drift rejection, and a real Git
rename regression.
- `uvx ruff check scripts/ci/record_dependency_review.py
tests/unit/test_dependency_review_workflow.py` — passed.
- `git diff --check` — passed.
## Hosted validation and limits
The current head is `148cbf55fdce412255d2a61780459143521fa4c4`. Its
hosted checks are being verified on that exact head; see the live check
list for final status. The dependency-review job passes through its
no-delta path because this PR changes no dependency manifest or
lockfile. Its hosted run tests the code-only path, while a real
dependency PR must still validate the evidence recorder against a
warning-free comparison. The Vercel Agent Review found that Git rename
detection could omit an old manifest path; `--no-renames` and a real Git
rename regression test address that finding. The review thread is
resolved.
An earlier [hosted artifact on superseded head
`80fdf2b`](https://github.com/groupthinking/EventRelay/actions/runs/40657379137)
contained a raw 276-entry comparison whose bytes matched its recorded
digest. GitHub also warned that the base had 3 dependency snapshots and
the head had 1. That comparison may have unexpected removals and is
**not complete evidence** under the new guard. The prior local trial
against #2479 saved 1,390 raw changes before snapshot warnings were
checked; it likewise cannot establish a complete comparison.
## Live recorder check and graph scope limitation
At the current code head, the local recorder rejects the live,
warning-free #2495 comparison **without writing evidence**, because its
removed root fast-uri 3.1.7 entry is labeled `runtime` while the exact
base lockfile marks it `dev: true`. It also rejects current `main`
versus #2452 before writing evidence because GitHub reports a
3-base/1-head snapshot warning. In contrast, it accepts controlled
off-main [#2496](#2496):
the v0.2.0 comparison has only the intended root fast-uri 3.1.7 removal
and 3.1.9 addition, both `development`, and the saved raw bytes match
the recorded SHA-256. #2496 was closed unmerged.
The older v0.1.6 component-detection action caches packages by PURL and
can apply one development flag across manifests. The v0.2.0 action used
on #2496 maps each manifest's scope separately; that version is proposed
in stacked draft #2492. The new recorder validation reduces the risk of
accepting a wrong npm lockfile scope or a change attributed to an
unchanged manifest. It does **not** establish complete snapshot parity
or accurate non-npm package metadata for real updates against current
`main`. Inspect the full comparison, including manifests, packages,
scopes, vulnerabilities, and licenses, before a real dependency PR
verdict.
A fresh compare for #2452 still reports the base 3/head 1 snapshot
mismatch. Once this guard is on `main`, that update will require
complete matching snapshots before its dependency evidence can pass.
The previously approved per-file Python scan timeout and
declared-dependency fallback are unchanged. Python fallback can omit
transitive dependencies when a requirements scan times out.
Bumps fast-uri from 3.1.7 to 3.1.9.
Release notes
Sourced from fast-uri's releases.
Commits
0def703Bumped v3.1.9a1d0da2test: generate only relative path references9eb8759fix: preserve relative paths in suffix and relative resolution54c30f7docs: note suffix-reference authority ambiguity39e6493fix: escape a first-segment colon in suffix references745183ctest: cover first-segment colon in suffix referencesddfc6a5fix(SEC-03): reject non reg-name characters in domain hostsd86a8d2fix: keep a colon-first segment behind "./" in relative normalizationeb483b5test: cover colon-first relative references in normalizationb110a35fix(SEC-02): preserve meaning of relative references during normalizationMaintainer changes
This version was pushed to npm by GitHub Actions, a new releaser for fast-uri since your current version.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)You can disable automated security fix PRs for this repo from the Security Alerts page.