Uh oh!
There was an error while loading. Please reload this page.
[fix/nanoid-osv-supply-chain] Bump postcss + run Supply Chain scan daily with Slack alerting - #670
Conversation
Supply Chain CI was failing on GHSA-2v37-7h3g-55p8 (high, nanoid 3.3.16), pulled in transitively through the pinned postcss@8.5.23 (nanoid ^3.3.16). Bumping the override to postcss@8.5.26 (nanoid ^3.3.17) resolves it. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…inal date Version didn't bump, but beta.13's changelog section was dated 2026-08-07; per repo convention (see the two 0.0.14-beta.1 sections a few days apart) a same-version entry landing later gets its own dated section. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
📝 WalkthroughWalkthroughThe PR updates the ChangesDependency and security workflow updates
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Line 6: Update the changelog entry’s trailing `#PR` placeholder with the actual
numeric pull request identifier, preserving the existing dependency-update
description and formatting.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: e07d41cb-9567-4d46-853c-ab7f72af5480
⛔ Files ignored due to path filters (1)
bun.lockis excluded by!**/*.lock
📒 Files selected for processing (2)
CHANGELOG.mdpackage.json
Uh oh!
There was an error while loading. Please reload this page.
Addresses CodeRabbit review comment on #670. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
NiveditJain
commented
Aug 10, 2026
@hermes-exosphere review this |
Weekly meant a red run on main sat unnoticed until the next PR happened to touch the lockfile - the reason this PR's own nanoid advisory was only caught via a PR check rather than earlier on main. PR/push runs stay silent (already visible to the PR author); only the schedule run (no lockfile change on main, nobody watching) posts to Slack, reusing the same webhook + node -e | curl idiom integration-suite/run.sh uses. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/osv-scanner.yml:
- Around line 9-17: Add an identifier to the OSV scan step, then update the
Slack notification step’s condition to run only when that scan failed and the
workflow event is scheduled. Ensure pull request, push, and workflow_dispatch
failures do not trigger Slack notifications.
In `@CHANGELOG.md`:
- Line 7: Update the changelog entry for the Supply Chain workflow to clarify
that Slack notifications for failed OSV-Scanner runs are optional, sent only for
non-pull_request events, and require SLACK_WEBHOOK_URL to be configured;
preserve the existing scheduling and failure context.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 86f6eb50-be27-49b9-89a6-bbc2abc163e4
📒 Files selected for processing (3)
.github/workflows/osv-scanner.ymlCHANGELOG.mdSECURITY.md
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
CodeRabbit caught the mismatch: the comment said push runs skip the alert, but the condition only excluded pull_request, so a failed push would have posted too. Narrows to `steps.scan.outcome == 'failure' && github.event_name == 'schedule'` (also pins the check to the scan step's own outcome rather than the whole job's), and reflects the optional/schedule-only framing in the CHANGELOG entry. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
.github/workflows/osv-scanner.yml (1)
80-84: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick winFail visibly when Slack delivery fails.
At Lines 80-84, network errors and non-200 responses only produce a warning. The final
echoreturns zero, so the notification step succeeds even when Slack does not accept the alert. Add bounded retries and exit nonzero after the final failed attempt.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/osv-scanner.yml around lines 80 - 84, Update the Slack webhook POST block in the workflow to retry delivery a bounded number of times, treating network errors and non-200 responses as failures; after the final unsuccessful attempt, exit nonzero so the notification step fails visibly, while preserving the success message and immediate success path.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/osv-scanner.yml:
- Around line 15-19: Update the Slack notification step’s if condition to
explicitly include failure() alongside the existing schedule and webhook-secret
checks, so it runs after scheduled OSV scan failures while remaining skipped for
non-scheduled runs or when the secret is unavailable.
---
Outside diff comments:
In @.github/workflows/osv-scanner.yml:
- Around line 80-84: Update the Slack webhook POST block in the workflow to
retry delivery a bounded number of times, treating network errors and non-200
responses as failures; after the final unsuccessful attempt, exit nonzero so the
notification step fails visibly, while preserving the success message and
immediate success path.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 6da11654-e460-40b7-b9bc-c8b03dcaa8a2
📒 Files selected for processing (2)
.github/workflows/osv-scanner.ymlCHANGELOG.md
🚧 Files skipped from review as they are similar to previous changes (1)
- CHANGELOG.md
Uh oh!
There was an error while loading. Please reload this page.
Two CodeRabbit findings on the Slack notify step, both real: 1. `if: steps.scan.outcome == 'failure' && ...` has no failure()/ always()/cancelled() in it, so GitHub implicitly ANDs it with success() - the step would have been skipped every time, since it only makes sense to run once the job has already failed. Added failure() explicitly. 2. A curl exit code was captured but never checked past a warning echo, so a non-200 response (or network failure) still exited 0. Added 3 bounded retries, exiting nonzero after the last one fails. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
NiveditJain
commented
Aug 10, 2026
@hermes-exosphere review this PR. |
hermes-exosphere
commented
Aug 10, 2026
Hermes
No summary yet. What this changesNo component map for this revision. RoundsNo review has finished on this pull request yet. FindingsNothing raised yet.
|
hermes-exosphere
commented
Aug 10, 2026
Hermes
No actionable defects found. The dependency override and lockfile consistently resolve the patched PostCSS/nanoid versions, and the scheduled-only Slack path correctly runs after an OSV scan failure, retries boundedly, and fails visibly after exhaustion. What this changesflowchart LR
n0Dependencyresolution["~ Dependency resolution"]
n1SupplychainCIworkflow["~ Supply-chain CI workflow"]
n2Slackwebhooknotification["Slack webhook notification"]
n3Securitydocumentation["~ Security documentation"]
n0Dependencyresolution -- "provides lockfiles to scan" --> n1SupplychainCIworkflow
n1SupplychainCIworkflow -- "posts scheduled scan failures" --> n2Slackwebhooknotification
n3Securitydocumentation -- "documents operation and setup" --> n1SupplychainCIworkflow
Rounds
FindingsNothing raised yet.
|
hermes-exosphere
left a comment
There was a problem hiding this comment.
Hermes found no blocking issues in this revision.
Uh oh!
There was an error while loading. Please reload this page.
Summary
mainand on open PRs:nanoid@3.3.16(transitively pinned via thepostcssoverride) has a high-severity advisory, GHSA-2v37-7h3g-55p8, fixed in3.3.17. Bumps thepostcssoverride inpackage.jsonfrom8.5.23→8.5.26, which itself requiresnanoid@^3.3.17—bun installresolvednanoid@3.3.18, no new direct dependency added.mainhad no PR author to notice it — this is literally how the nanoid advisory above went unseen until it happened to fail a PR..github/workflows/osv-scanner.ymlnow runs the scan daily. Only the schedule run posts to Slack on a failed scan — PR and push runs stay silent, since those failures are already visible to whoever opened or merged the PR. Posting is optional: it no-ops whenSLACK_WEBHOOK_URLisn't set, reusing the same webhook +node -e | curlidiomintegration-suite/run.shalready uses.SECURITY.mdandCHANGELOG.mdupdated to match.Test plan
bun install— lockfile diff is minimal (onlypostcss/nanoidbumped)ghcr.io/google/osv-scanner-action:v2.3.8) —No issues found, exit 0bun run test:run— same 15 pre-existing failures as on unmodifiedmain(unrelatedlocalStoragejsdom issue inproject-list.test.tsx), no new failures introduced by this changeosv-scanner.yml's YAML withyaml.parse, and the notify step's shell body withbash -n, after each editReview history (CodeRabbit)
CHANGELOG.md#PRplaceholder → filled in (#670).github.event_name == 'schedule'only, pinned to the scan step's own outcome.if:condition had nofailure()/always()/cancelled()in it, so GitHub implicitly ANDs any customif:withsuccess()— the step would have been silently skipped every time, since it's only meant to run once the job has already failed. Addedfailure()explicitly.echo, so a broken webhook still exited 0 — a failure this feature exists to catch would itself go unnoticed. Now retries 3× and exits nonzero after exhausting retries.🤖 Generated with Claude Code
Hermes review
a691442721ee8421a1535ddb643c428c1fa7d889e9d8b194ce8f3af9af7299a08c77fa993512814bgpt-5.6-terraSummary
No actionable defects found. The dependency override and lockfile consistently resolve the patched PostCSS/nanoid versions, and the scheduled-only Slack path correctly runs after an OSV scan failure, retries boundedly, and fails visibly after exhaustion.
Changes
Validation
Passeddocker run --rm --network=none -v /review/input/workspace:/workspace:ro -w /workspace oven/bun:latest bun -e '<parse osv-scanner.yml and assert notify condition>'— Workflow YAML parsed successfully and retained the intended failure(), scan-outcome, and schedule condition. (8s)Passeddocker run --rm --network=none -v /review/input/workspace:/workspace:ro node:22-bookworm-slim bash -lc '<extract notify body; bash -n>'— The added notification shell body passed Bash syntax validation. (9s)Passeddocker run --rm --network=none -v /review/input/workspace:/workspace:ro node:22-bookworm-slim bash -lc '<mock curl responses and execute notify body>'— The notification body exited successfully for HTTP 200 and failed after three mocked HTTP 500 responses. (0s)SkippedLive scheduled GitHub Actions OSV scan and Slack delivery— Requires GitHub event dispatch and the repository Slack secret, which are unavailable in this harness. (0s)Findings
None.
Open questions
None.
Policy overrides
None.