Skip to content

馃敀 Harden dependency intake and monitoring - #16

Merged
IsaacInsoll merged 3 commits into
mainfrom
security/supply-chain-hardening
Aug 3, 2026
Merged

IsaacInsoll merged 3 commits into
mainfrom
security/supply-chain-hardening

Conversation

@IsaacInsoll

@IsaacInsoll IsaacInsoll commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Summary

  • apply a seven-day npm release-age gate for routine dependency resolution
  • configure grouped monthly npm and GitHub Actions updates with 30-day major and 7-day other routine npm cooldowns
  • add a SHA-pinned dependency-review check for moderate-or-higher runtime and development vulnerabilities
  • add a weekly/manual high-severity npm audit without making every pull request rerun npm audit
  • document emergency package-age exceptions and publishing recovery, release authority, permanent workflow identity, and ResizeObserver fallback behavior

GitHub settings

The repository already had Dependabot alerts, private vulnerability reporting, secret scanning, push protection, protected main, least-privilege CI, and rebase-only merging. Dependabot security updates were enabled during this work. Repository auto-merge remains disabled.

GitHub initially reported dependency review as unsupported despite alerts being active. Reapplying the documented vulnerability-alerts endpoint explicitly enabled/refreshed the dependency graph; the rerun passed, and Dependency review is now a required main check bound to the GitHub Actions app.

Enabling alerts surfaced stale findings for deleted examples/**/package-lock.json manifests. None reference the current root or maintained fixture lockfiles; the next default-branch graph refresh will be checked before any alert is dismissed.

npm age-gate evidence

Pinned npm 12.0.2 was tested against release-it@21.0.1, published three days earlier:

  • normal resolution with min-release-age=7 failed as expected
  • exact min-release-age-exclude[]=release-it resolution succeeded
  • a subsequent integrity-locked npm ci succeeded without the exclusion
  • both repository lockfiles remained byte-identical after a normal lockfile-only install

Dependabot Core v0.379.0 reads npm's age setting for routine updates and explicitly overrides it for security updates: https://github.com/dependabot/dependabot-core/releases/tag/v0.379.0

Verification

  • clean npm ci: zero vulnerabilities
  • npm run security:audit: zero vulnerabilities
  • npm run format:check
  • npm run lint
  • npm run typecheck
  • npm test: 63 tests
  • npm run test:types: all 12 compiler, React type, and resolution combinations
  • npm run test:consumer
  • npm run package:check
  • npm run test:browser:container: 23 tests

The first browser run had one intermittent Ctrl-click popup timeout with 22 other tests passing. An immediate unchanged rerun passed all 23; this branch does not modify browser code or fixtures.

The release guide explicitly describes pre-release target controls: release-it, the permanent workflow, the GitHub environment, and npm trusted publishing remain assigned to the next release-tooling steps.

Apply a seven-day npm release-age gate, configure reviewed monthly Dependabot updates, add required dependency review and scheduled high-severity auditing, and document release authority and emergency exceptions.
State that browser and test environments must provide ResizeObserver because the package does not bundle a polyfill.
Align documented cooldowns with the seven-day npm gate, describe ResizeObserver fallback behavior accurately, and distinguish planned release controls from configured machinery while documenting emergency recovery.
@IsaacInsoll
IsaacInsoll merged commit ec2204a into main Aug 3, 2026
8 of 9 checks passed
@IsaacInsoll
IsaacInsoll deleted the security/supply-chain-hardening branch August 3, 2026 03:03
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.

2 participants