|
| 1 | +--- |
| 2 | +name: github-dependabot |
| 3 | +description: Use the GitHub CLI to retrieve current open `Dependabot` alerts for a repository, inspect affected dependencies and patched versions, update manifests and lock files, and verify the local fixes. Use whenever a user asks to inspect, address, resolve, remediate, or fix `Dependabot` alerts or dependency security vulnerabilities reported by GitHub. Use `gh`, rather than a browser or GitHub connector, for alert discovery. |
| 4 | +--- |
| 5 | + |
| 6 | +# Fix `Dependabot` Alerts |
| 7 | + |
| 8 | +Use `gh api` to get live alert data, then make the smallest safe dependency changes that resolve the current open alerts. |
| 9 | + |
| 10 | +## Workflow |
| 11 | + |
| 12 | +### 1. Establish the repository context |
| 13 | + |
| 14 | +1. Read `AGENTS.md` and the instructions for every affected project. |
| 15 | +2. Inspect `git status --short` and the relevant diffs. Preserve unrelated user changes. |
| 16 | +3. If GitHub access fails, run `gh auth status`. Treat `403` and `404` responses as possible permission or feature-availability problems, not proof that the repository has no alerts. Do not change authentication or repository settings without the user's approval. |
| 17 | + |
| 18 | +### 2. Fetch the current alerts |
| 19 | + |
| 20 | +Always query GitHub at the start of the task. Treat "latest alerts" as the current open alerts unless the user gives a narrower scope. |
| 21 | + |
| 22 | +```shell |
| 23 | +gh api --paginate -X GET \ |
| 24 | +'repos/{owner}/{repo}/dependabot/alerts' \ |
| 25 | + -f state=open \ |
| 26 | + -f sort=created \ |
| 27 | + -f direction=desc \ |
| 28 | + -f per_page=100 \ |
| 29 | + --jq '.[] | { |
| 30 | + number, |
| 31 | + created_at, |
| 32 | + updated_at, |
| 33 | + package: .dependency.package.name, |
| 34 | + ecosystem: .dependency.package.ecosystem, |
| 35 | + manifest: .dependency.manifest_path, |
| 36 | + scope: .dependency.scope, |
| 37 | + severity: .security_advisory.severity, |
| 38 | + ghsa: .security_advisory.ghsa_id, |
| 39 | + cve: .security_advisory.cve_id, |
| 40 | + vulnerable_range: .security_vulnerability.vulnerable_version_range, |
| 41 | + patched_version: .security_vulnerability.first_patched_version.identifier, |
| 42 | + url: .html_url |
| 43 | + }' |
| 44 | +``` |
| 45 | + |
| 46 | +Keep `--paginate`; repositories can have more than one page of alerts. If the user asks for only the newest alert, select the first result. Otherwise, address every open alert in scope. |
| 47 | + |
| 48 | +Fetch complete data for an individual alert when necessary: |
| 49 | + |
| 50 | +```shell |
| 51 | +gh api -X GET 'repos/{owner}/{repo}/dependabot/alerts/<number>' |
| 52 | +``` |
| 53 | + |
| 54 | +Do not dismiss alerts or change their state through the API. GitHub closes resolved alerts after it processes the updated dependency graph. |
| 55 | + |
| 56 | +### 3. Plan the dependency changes |
| 57 | + |
| 58 | +1. Group alerts by ecosystem, manifest, and package. One dependency update can resolve more than one advisory. |
| 59 | +2. Record each alert number, vulnerable range, first patched version, and affected manifest before editing. |
| 60 | +3. Locate the canonical version declaration. In this repository, check `pnpm-workspace.yaml` catalogs and overrides before changing individual `package.json` files. |
| 61 | +4. For a transitive dependency, use the ecosystem's dependency-inspection command to find which direct dependency introduces it. Prefer updating that direct dependency. Add or change an override only when a direct update cannot resolve the advisory safely and the repository already supports that mechanism. |
| 62 | +5. Choose the smallest compatible version that satisfies every patched-version floor for the grouped alerts. Avoid unrelated major-version or toolchain upgrades unless the security fix requires them. |
| 63 | +6. If GitHub reports no patched version, investigate whether upgrading or removing the introducing dependency resolves the vulnerable range. Do not invent a safe version or conceal an unresolved alert. |
| 64 | + |
| 65 | +### 4. Apply the fixes |
| 66 | + |
| 67 | +Use the package manager and toolchain pinned by the repository. Run Elements repository commands through `mise exec --`. |
| 68 | + |
| 69 | +- Update the canonical dependency declaration and every required lockfile together. |
| 70 | +- Preserve workspace protocols, catalogs, overrides, peer ranges, and published dependency ranges unless the fix requires a deliberate change. |
| 71 | +- Use targeted package-manager update commands when possible. For pnpm workspaces, scope the update to the affected workspace or edit the central catalog and run `mise exec -- pnpm install` to refresh `pnpm-lock.yaml`. |
| 72 | +- Inspect package release notes when the safe version crosses a major version or changes runtime behavior. |
| 73 | +- Do not weaken `minimumReleaseAge`, allowed-build, integrity, or other supply chain controls merely to make installation succeed. If a security release needs an exception, keep it exact and narrow and explain the need. |
| 74 | +- Make necessary compatibility changes in source, configuration, tests, or examples when the dependency update changes an API. |
| 75 | + |
| 76 | +Do not overwrite unrelated work or broaden the dependency update beyond the alerts in scope. |
| 77 | + |
| 78 | +### 5. Verify the fixes |
| 79 | + |
| 80 | +1. Inspect the final diff and confirm that every changed dependency addresses an alert or supports a necessary compatibility fix. |
| 81 | +2. Confirm that the resolved versions no longer match the vulnerable ranges. Use the package manager's dependency tree command when checking transitive versions. |
| 82 | +3. Read the affected project's `DEVELOPMENT.md`, then run its relevant build, lint, and test commands through `mise exec --`. |
| 83 | +4. Run broader repository checks when a shared catalog, override, lockfile, build tool, or runtime dependency affects two or more projects. |
| 84 | +5. Re-query open alerts for situational awareness, but do not treat an unchanged GitHub result as a failed local fix; dependency-graph processing is asynchronous. |
| 85 | + |
| 86 | +If verification fails, diagnose whether the dependency update, a compatibility change, or an unrelated existing failure caused it. Continue fixing in-scope failures and separate unrelated failures. |
| 87 | + |
| 88 | +## Result |
| 89 | + |
| 90 | +Report: |
| 91 | + |
| 92 | +- alert numbers, advisories, packages, and severity levels addressed; |
| 93 | +- old vulnerable versions or ranges and the resolved versions; |
| 94 | +- files changed and any compatibility work required; |
| 95 | +- validation commands and outcomes; and |
| 96 | +- alerts that remain open, including the exact blocker for each one. |
0 commit comments