regression-triage — Claude Code command: find the commit behind a failure
A slash command that walks a regression backwards: reruns the failing test, reads history around the broken path, and names the commit that did it.
npx claude-code-templates@latest --command testing/regression-triageWhat regression-triage does
You hand it a failing test or a bug report, and it works through the triage in order. First it checks the working tree: any uncommitted change and it stops, asking you to commit or stash. Then it records the branch and short HEAD hash as the comparison point.
The argument is treated as a selector, not as something to paste into a shell. The command knows which test runner the repo documents, so it appends a validated selector and starts with the narrowest run it can. From there it reads git log for the broken area, digs into suspicious commits with git show, and falls back to git bisect when the window is murky. The bisect wrapper separates a genuine failure from an environment problem: pass, reproducible fail, or skip.
Its tool list is deliberately small — file reads, search, git, and test scripts for npm, pnpm and yarn. What comes back: the failing command, the error, a suspect commit, the smallest fix, and the tests that should go green afterwards. Bisect only runs on fast, deterministic tests. When a test needs a service you don't have, the command notes the missing dependency and keeps going with static reading.
What it helps with
- pin down the commit that first broke a test
- reproduce a bug with one narrow run instead of the whole suite
- keep
git bisectfrom blaming a flaky environment for a real failure - get a short report with a minimal fix and the tests to recheck
Example prompts for the agent
- Triage this regression:
packages/foo/test/foo.test.tsfails since the last merge /regression-triagelogin form started returning 500 for users- Find what broke the build in
packages/core, last good commit isa1b2c3d
How to install regression-triage
1claude-code-templates
npx claude-code-templates@latest --command testing/regression-triage2Manually: put the files in place
.claude/commands/regression-triage.mdCall it with /regression-triage. For all projects use ~/.claude/commands/
Manually: put the files in place
~/.codex/prompts/regression-triage.mdCall it with /prompts:regression-triage. Codex marks this format deprecated in favour of skills
Manually: put the files in place
.github/prompts/regression-triage.prompt.mdManually: put the files in place
.gemini/commands/regression-triage.tomlGemini stores commands as TOML: the prompt text goes into the prompt field
Questions about regression-triage
How do I install regression-triage in Claude Code?
Run npx claude-code-templates@latest --command testing/regression-triage. The command lands at .claude/commands/regression-triage.md.
What does regression-triage do?
It hunts for the smallest code change that caused a failing test or a broken workflow. History around the failing path gets compared, and you get a report with a suspect commit and a suggested fix.
What has to be true before running it?
Your working tree must be clean, otherwise the command halts. The failing test also has to be deterministic and quick enough for bisect to say anything useful.
Source text
regression-triage.md · MIT
---
allowed-tools: Read, Glob, Grep, Bash(git:*), Bash(npm test:*), Bash(npm run:*), Bash(pnpm test:*), Bash(yarn test:*)
argument-hint: <failing-test-or-issue>
description: Triage a regression by comparing the failing path against the last known good commit
---
# Regression Triage
Investigate a regression for: **$ARGUMENTS**
## Purpose
Find the smallest code change that introduced a failing test, broken workflow, or user-reported regression.
## Pre-flight
1. Confirm the working tree is clean. If this prints anything, stop and ask the user to commit or stash the changes before continuing:
```bash
test -z "$(git status --porcelain)" || { echo "Working tree is dirty; commit or stash changes first."; exit 1; }
```
2. Record the current branch and commit:
```bash
git branch --show-current
git rev-parse --short HEAD
```
3. Identify the failing command or reproduction steps from `$ARGUMENTS`.
## Triage Workflow
### 1. Reproduce the failure
Run the narrowest available command first. Treat `$ARGUMENTS` as a description or test selector, not as a shell command: identify the reproduction/test command from the issue and repository documentation, then append only a validated selector (quoted as needed).
For example, after identifying `packages/foo/test/foo.test.ts` as the selector:
```bash
npm test -- packages/foo/test/foo.test.ts
```
If no narrow command exists, run the documented test command from the repository README or CONTRIBUTING guide.
### 2. Compare against recent history
Inspect recent commits that touched the failing area:
```bash
git log --oneline --decorate --max-count=20 -- <path-to-failing-area>
```
For each suspicious commit, inspect the focused diff:
```bash
git show --stat <commit>
git show <commit> -- <path-to-failing-area>
```
### 3. Isolate the change
If the regression window is unclear, use `git bisect` only with a wrapper that distinguishes a real test failure from an indeterminate environment failure. The wrapper must exit 0 for pass, 1 for a reproducible failure, and 125 when the test cannot run:
```bash
cat > /tmp/triage-bisect.sh <<'EOF'
#!/usr/bin/env bash
set -o pipefail
<validated-test-command>
status=$?
# Replace this classification with the repository-specific environment errors.
case "$status" in 0) exit 0;; 1) exit 1;; *) exit 125;; esac
EOF
chmod +x /tmp/triage-bisect.sh
git bisect start
git bisect bad
git bisect good <known-good-commit>
git bisect run /tmp/triage-bisect.sh
git bisect reset
```
Stop and report the environment failure if it cannot be classified reliably. Only run bisect when the test command is deterministic and reasonably fast.
### 4. Report findings
Return a concise report with:
- Failing command and observed error
- Suspected commit or code path
- Minimal fix recommendation
- Tests that should pass after the fix
## Safety Notes
- Do not discard user changes.
- Do not run destructive git commands.
- Prefer narrow tests before full suites.
- If tests require unavailable services, document the missing dependency and continue with static analysis.
© davila7 · MIT · davila7/claude-code-templates