Skip to content

test: verify dependency snapshots on clean temporary base - #2495

Closed
groupthinking wants to merge 1 commit into
codex/verify-clean-snapshot-basefrom
codex/verify-clean-snapshot-fast-uri
Closed

groupthinking wants to merge 1 commit into
codex/verify-clean-snapshot-basefrom
codex/verify-clean-snapshot-fast-uri

Conversation

@groupthinking

@groupthinking groupthinking commented Oct 28, 2026 •

Copy link
Copy Markdown
Owner

Result — failed off-main diagnostic, closed unmerged

The temporary base push run 40673726423 completed and submitted a full-tree snapshot for 15ec6562630fd8362a694f2b872946d6063e3040. The draft PR run 40674075576 submitted a head snapshot for b358718206353a5479554cee1bc36c39762672f6 and the dependency-review action displayed only the expected package-lock.json fast-uri 3.1.7 → 3.1.9 replacement, with no detected moderate-or-higher vulnerability or denied package.

The independent compare API still returned “No snapshots were found for the head SHA” more than five minutes after submission. It returned the two expected change records, but the snapshot warning means the result cannot be accepted as complete evidence. The evidence recorder rejected it and uploaded no artifact. The dependency-review check failed.

Hosted checks finished 23 passed, 12 skipped, 5 failed. Three other failures (test (Python 3.11), test (Python 3.12), and Generate and Upload Coverage) came from the deliberate temporary push-trigger widening, which violated the repository guard that limits push workflows to main/develop; this trigger was solely for the diagnostic branch. The issue-closing check failed by design because the canary does not close #2490.

This branch-to-branch test does not establish what will happen against main; whether the non-default base affects snapshot indexing is unverified. The canary is closed without merging. Issue #2490 and draft fix #2492 remain open, and no warning-free real update against main has been proven.

Original diagnostic plan

Diagnostic purpose

Refs #2490 and draft fix #2492. Temporary draft test; do not merge. This tests the full-tree dependency submission proposal against a newly created base SHA, separately from the inconsistent main snapshot state.

The base branch at 15ec6562630fd8362a694f2b872946d6063e3040 contains #2487's evidence recorder, #2492's full-tree scan change, and a temporary push trigger for this base branch. The head at b358718206353a5479554cee1bc36c39762672f6 changes only package-lock.json, updating fast-uri 3.1.7 to 3.1.9 with the same three-line lockfile delta as bot PR #2452. The temporary branch trigger and its unit expectation will not be merged into main.

Validation and required readback

  • The base-branch workflow tests passed: 13 focused tests; diff check passed.
  • The head differs from that base only in the fast-uri lockfile entry; diff check passed.
  • Base-branch push submits its full-tree snapshot successfully.
  • Hosted PR dependency review compares these exact SHAs without a snapshot warning and saves a complete evidence artifact.
  • Record the actual vulnerability/license verdict and close this draft unmerged.

This experiment does not establish that the current main dependency graph is clean; #2490 remains open until a real update against main is verified.

@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 10:41am 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

✅ E2E Test Results: ALL TESTS PASSED

Metric Value
Status 🟢 GREEN
Total Tests
Passed 16
Failed
Deployment https://v0-uvai-kjxoisyo1-garv1.vercel.app
Test Output
pass on every request without persisting it�[32m 1�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mTemplate Gallery�[2m > �[22mhomepage returns 200 with HTML�[32m 67�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mTemplate Gallery�[2m > �[22mfeatures page contains template/workflow markup�[32m 156�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mTemplate Gallery�[2m > �[22mfeatures page surfaces at least 5 workflow/template indicators�[32m 91�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mVideo Pack Pipeline�[2m > �[22mPOST /api/video/pack accepts a YouTube URL without hanging�[33m 1730�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mVideo Pack Pipeline�[2m > �[22mGET /api/video/pack resolves to a ready pack with evidence lineage�[33m 625�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mError Handling�[2m > �[22mmissing URL returns 400, not a hang�[32m 54�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mError Handling�[2m > �[22minvalid URL returns 400 quickly, not a hang�[32m 55�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mError Handling�[2m > �[22mPOST /api/video/pack with no body returns 400�[32m 58�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mDashboard�[2m > �[22m/dashboard returns 200�[32m 133�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mDashboard�[2m > �[22m/dashboard contains agent or pipeline visualization markup�[32m 78�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mAPI Health�[2m > �[22mGET /api returns a response (not 404)�[32m 224�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mAPI Health�[2m > �[22mretired /api/pipeline routes are gone (no pipeline served)�[32m 39�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mStatic Assets�[2m > �[22mhomepage has proper meta tags�[32m 69�[2mms�[22m�[39m
 �[32m✓�[39m tests/e2e/pipeline.test.ts�[2m > �[22mEventRelay E2E — Live Deployment�[2m > �[22mStatic Assets�[2m > �[22m/features page returns 200�[32m 81�[2mms�[22m�[39m

�[2m Test Files �[22m �[1m�[32m1 passed�[39m�[22m�[90m (1)�[39m
�[2m      Tests �[22m �[1m�[32m16 passed�[39m�[22m�[90m (16)�[39m
�[2m   Start at �[22m 10:41:48
�[2m   Duration �[22m 4.96s�[2m (transform 54ms, setup 0ms, import 69ms, tests 4.75s, environment 0ms)�[22m


@github-actions

Copy link
Copy Markdown
Contributor

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

OpenSSF Scorecard

PackageVersionScoreDetails
npm/fast-uri 3.1.9 🟢 8.1
Details
CheckScoreReason
Maintained🟢 1030 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
Dependency-Update-Tool🟢 10update tool detected
Binary-Artifacts🟢 10no binaries found in the repo
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Packaging⚠️ -1packaging workflow not detected
Code-Review🟢 3Found 9/29 approved changesets -- score normalized to 3
Token-Permissions🟢 10GitHub workflow tokens follow principle of least privilege
Security-Policy🟢 10security policy file detected
Pinned-Dependencies🟢 5dependency not pinned by hash detected -- score normalized to 5
Vulnerabilities🟢 100 existing vulnerabilities detected
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Signed-Releases⚠️ -1no releases found
License🟢 9license file detected
Fuzzing⚠️ 0project is not fuzzed
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🟢 1010 out of 10 merged PRs checked by a CI test -- score normalized to 10
Contributors🟢 10project has 33 contributing companies or organizations

Scanned Files

  • package-lock.json

@groupthinking
groupthinking deleted the codex/verify-clean-snapshot-fast-uri branch October 28, 2026 10:50
groupthinking added a commit that referenced this pull request Oct 29, 2026
## 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.

This branch was successfully deployed

1 active deployment
Preview — b3587182 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