Skip to main content
command

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.

Install into Claude Code · claude-code-templates All methods and platforms ↓
npx claude-code-templates@latest --command testing/regression-triage
Open on GitHub

What 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 bisect from 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.ts fails since the last merge
  • /regression-triage login form started returning 500 for users
  • Find what broke the build in packages/core, last good commit is a1b2c3d

How to install regression-triage

1claude-code-templates

npx claude-code-templates@latest --command testing/regression-triage

2Manually: put the files in place

.claude/commands/regression-triage.md

Call it with /regression-triage. For all projects use ~/.claude/commands/

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

Similar slash commands

All slash commands for Testing and QA →

From the same set361

The whole set →

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor