Files
Dan Guido 2917b69a30 Update commands with upstream detection, CI-aware pipelines, and add merge-dependabot
- fix-issue: Add upstream remote detection, Exa research step, branch creation
  before implementation, CI-as-source-of-truth quality pipeline with per-language
  fallback tables, codegen sync checks, and self-review via pr-review-toolkit
- review-pr: Add upstream remote detection, two-pass parallel review
  (pr-review-toolkit + Codex + Gemini), CI-discovered quality pipeline, Exa for
  fix research, structured PR comment format
- merge-dependabot: New command for evaluating and merging dependabot PRs with
  config audit, transitive dependency analysis, parallel subagent evaluation,
  sequential merge with post-merge re-testing, and turn budget management
- README: Add merge-dependabot to install block and commands section

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 23:50:29 -05:00

226 lines
8.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Fix GitHub Issue
@description End-to-end: plan, implement, test, review, fix, push, and PR for a GitHub issue.
@arguments $ISSUE_NUMBER: GitHub issue number to fix
Read GitHub Issue #$ISSUE_NUMBER from the canonical repo
(`gh issue view $ISSUE_NUMBER --repo <owner/name>`) thoroughly.
Understand the full context: problem description, acceptance
criteria, linked PRs, and any discussion. Follow linked issues,
referenced PRs, and external documentation to build complete
understanding before planning.
Detect the upstream repository: if a git remote named `upstream`
exists, use it as the canonical repo (fetch from it, base branches
on it, and submit PRs to it). Otherwise, fall back to `origin`.
Resolve the canonical repo's `owner/name` (e.g. from `git remote
get-url upstream`) and store it — use `--repo <owner/name>` on
every `gh` command (issue views, PR creation, issue comments) to
ensure they target the correct repository. Run
`git fetch <upstream-remote>` to ensure you are working with
up-to-date code.
Execute every step below sequentially. Do not stop or ask for
confirmation at any step.
## 1. Research (if needed)
Before planning, determine if the issue requires external context
you don't already have — unfamiliar APIs, protocols, libraries,
error messages, or domain-specific concepts. If so, use Exa
(`mcp__exa__web_search_exa`) to search for:
- Official documentation for referenced libraries or APIs
- Known solutions for the error messages or symptoms described
- Implementation patterns used by similar projects
Skip this step for straightforward bugs where the fix is clear
from the codebase alone.
## 2. Plan
Write a detailed implementation plan to `plan-issue-$ISSUE_NUMBER.md`
in the repo root. The plan must:
- Summarize the issue requirements
- List every file to create or modify
- Describe the approach and key design decisions
- Call out risks or open questions
- Reference relevant code paths by file:line
## 3. Create branch
Create the working branch before writing any code so changes are
never left uncommitted on main.
- Determine the branch prefix from the issue type: `fix/` for
bugs, `feat/` for features, `refactor/` for refactors, `docs/`
for documentation. When ambiguous, use `fix/`.
- Create a branch named `{prefix}issue-$ISSUE_NUMBER` based on
the upstream remote's main branch (e.g. `upstream/main` if the
`upstream` remote exists, otherwise `origin/main`)
## 4. Implement
Implement the plan across all necessary files. Follow the
project's CLAUDE.md standards. Keep changes minimal and focused
on the issue requirements — no speculative features.
Add tests for the changed behavior as part of implementation —
tests are code, not a quality gate.
When stuck during implementation — a confusing error, an
unfamiliar API, or an approach that isn't working — use Exa
to search for solutions rather than spinning.
## 5. Build, test, lint
### 5a. Discover project checks (CI is the source of truth)
Before running anything, read the project's CI configuration to
learn what the project *actually* runs. This takes priority over
the fallback tables below.
1. **Read CI workflows.** Scan `.github/workflows/` for the main
CI workflow (typically `ci.yml`, `test.yml`, or `build.yml`).
Extract:
- Test commands with feature flags (e.g.
`cargo test --features foo,bar`)
- Lint/format commands with non-default flags
- Any step that runs a command then checks `git diff --exit-code`
— these are **codegen sync checks** (schema generation,
snapshot updates, help text, etc.). Record the command.
- Docs/site build commands (e.g. `make site`, `mkdocs build`)
2. **Read the Makefile** (if present). Cross-reference targets
used in CI — these are the ones that matter.
3. **Read CLAUDE.md** (if present at repo root or `.claude/`).
It may define project-specific quality gates.
Store the discovered commands. They override the fallback table
for any overlapping step.
### 5b. Run the quality pipeline
Detect the project language from manifest files (`Cargo.toml`
Rust, `pyproject.toml`/`setup.py` → Python, `package.json`
Node/TypeScript, `go.mod` → Go). A project may use multiple
languages; run checks for each.
Run checks in this order. For each step, use the CI-discovered
command if one was found; otherwise fall back to the default.
1. **Build** — compile or bundle
2. **Test** — run the full test suite with the same feature flags
CI uses. Iterate on failures until green.
3. **Lint and format** — fix any issues
4. **Extended checks** — per-language extras (see fallback table)
5. **Codegen sync** — for every codegen check discovered in 5a,
run the command and verify `git diff --exit-code`. If the diff
is non-empty, the generated files are stale — regenerate and
stage them.
6. **Docs build** — if the changes touch documentation files and a
docs build command exists, run it to verify the docs compile.
### Fallback defaults (when CI config is absent or unclear)
**Rust** (detected by `Cargo.toml`):
| step | command |
|--------------|------------------------------------------------|
| build | `cargo build` |
| test | `cargo test` |
| lint | `cargo clippy -- --deny warnings` |
| format | `cargo fmt --check` |
| supply chain | `cargo deny check` (if `deny.toml` exists) |
| careful | `cargo careful test` (if `cargo-careful` installed) |
**Python** (detected by `pyproject.toml` or `setup.py`):
| step | command |
|--------------|------------------------------------------------|
| test | `pytest -q` |
| lint | `ruff check` |
| format | `ruff format --check` |
| types | `ty check` (or `mypy` if configured) |
| supply chain | `pip-audit` |
**Node/TypeScript** (detected by `package.json`):
| step | command |
|--------------|------------------------------------------------|
| build | per project (`npm run build`, `tsc`, etc.) |
| test | `vitest` (or project test script) |
| lint | `oxlint` (or project lint script) |
| format | `oxfmt --check` (or project format script) |
| types | `tsc --noEmit` |
| supply chain | `pnpm audit --audit-level=moderate` |
**Go** (detected by `go.mod`):
| step | command |
|--------------|------------------------------------------------|
| build | `go build ./...` |
| test | `go test ./...` |
| lint | `golangci-lint run` |
| format | `gofmt -l .` |
| vet | `go vet ./...` |
If a tool is not installed, skip it with a note rather than
failing the pipeline.
## 6. Self-review
For docs-only changes, do a focused manual review (verify links,
check prose accuracy, confirm rendering). For code changes, use
`/pr-review-toolkit:review-pr` to run a deep review against the
diff (compare working tree to the upstream main branch). Produce a
list of findings ranked by severity (P1 = blocks merge,
P2 = important, P3 = nice to have).
## 7. Fix findings
Address all P1P3 findings. For each finding, either:
- **Fix it** — apply the change, or
- **Dismiss it** — explain why it's a false positive or not worth
the churn (e.g. a stylistic disagreement or an impossible edge
case). Document the reasoning inline.
After addressing all findings, review your own fixes: read the
diff of changes made in this step and verify each fix is correct,
doesn't introduce new issues, and doesn't regress other parts of
the implementation. If you spot a problem, fix it before
proceeding.
Then re-run the full quality pipeline (build, test, lint). Iterate
until clean.
## 8. Commit and push
- Delete the plan file (`plan-issue-$ISSUE_NUMBER.md`) — it was a
working artifact and should not be committed
- Commit all changes with a conventional commit message referencing
the issue
- Push the branch
## 9. Create PR
Create a PR with:
- A concise title (under 70 chars)
- A description that maps changes back to the issue requirements
- Link to the issue with "Closes #$ISSUE_NUMBER" (or "Refs" if it
doesn't fully close it)
- If an `upstream` remote exists, submit the PR to the upstream
repo using `gh pr create --repo <upstream-owner/repo>`
## 10. Comment on issue
Post a summary comment on Issue #$ISSUE_NUMBER in the canonical
repo (`gh issue comment $ISSUE_NUMBER --repo <owner/name>`)
linking to the PR. Include:
- What was implemented (13 bullet points)
- Key design decisions
- Link to the PR