Appearance
Dependency auditing and updates
This project includes helper scripts and CI automation to keep runtime and build dependencies current and secure.
Quick checks
npm run deps:outdatedprints available updates with current, wanted, and latest versions.npm run deps:auditrunsnpm auditwith--audit-level=highand--omit=devto fail fast on high-severity production vulnerabilities.npm run deps:reportruns both checks together viascripts/dependency-report.sh.
Automated coverage
The Dependency audit GitHub Actions workflow runs weekly, on pull requests targeting main, on pushes to staging and main, and on demand via Run workflow. It:
- Installs dependencies with
npm ci --ignore-scriptsto ensure consistency with the lockfile. - Runs
npm outdatedandnpm audit --omit=dev --audit-level=highin a single report streamed to the workflow logs and uploaded as thedependency-report.txtartifact. - Fails the job when actionable high-severity runtime vulnerabilities are detected, ensuring they are surfaced quickly while still allowing reports to be downloaded for triage.
Dependabot policy (noise-controlled)
Dependabot is configured to minimize branch/PR churn while keeping baseline maintenance active:
- Cadence: monthly on Monday morning (America/New_York).
- Open PR caps:
- npm: 1
- github-actions: 1
- Grouping: all minor+patch updates are grouped into one PR per ecosystem.
- Major-version updates: suppressed (
ignoresemver-major) and handled manually in dedicated upgrade passes. - Rebase behavior: disabled to reduce notification/commit churn on already-open Dependabot PRs.
Recommended workflow
- Run
npm run deps:reportbefore releases or infrastructure upgrades to surface dependency drift early. - When upgrades are needed, prefer bumping the primary version pins in
dependencies/devDependenciesand then remove matching entries fromresolutions/overrideswhere safe to reduce maintenance burden. - After upgrades, regenerate the lockfile and run the existing test suites (
npm test,npm run lint,npm run test:e2ewhen applicable). - Document any pinned resolutions you must keep (for example, due to vendor compatibility) in the PR description.
Handling known vulnerabilities
If a vulnerability cannot be addressed immediately:
- Capture the current findings for tracking:bash
npm audit --omit=dev --audit-level=high --json > audit-findings.json - Use
npm audit resolveto explicitly acknowledge the advisory and generate or updateaudit-resolve.json:bashSelect reviewed for advisories you have validated and documented, and commit the resultingnpm audit resolve --omit=dev --audit-level=highaudit-resolve.jsonalongside a short rationale (issue link, upstream PR, or planned upgrade version). - Track the follow-up in an issue so the allowlist remains intentional. Remove the
audit-resolve.jsonentry once the dependency is upgraded or the advisory is withdrawn.
Notes on existing pins
- The project currently pins several GraphQL codegen packages and Vite via
resolutionsandoverrides. When upstream compatibility improves, review and remove these pins to simplify future updates. - The Node engines constraint is defined in
package.json. Confirm CI and deployment targets meet these versions before introducing new dependencies that rely on newer Node features.