regression-bisect
Identify the commit that introduced a regression using git bisect with automated test execution and blame context
Best use case
regression-bisect is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
It is a strong fit for teams already working in Codex.
Identify the commit that introduced a regression using git bisect with automated test execution and blame context
Teams using regression-bisect should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/regression-bisect/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How regression-bisect Compares
| Feature / Agent | regression-bisect | Standard Approach |
|---|---|---|
| Platform Support | Codex | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Identify the commit that introduced a regression using git bisect with automated test execution and blame context
Which AI agents support this skill?
This skill is designed for Codex.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
AI Agents for Coding
Browse AI agent skills for coding, debugging, testing, refactoring, code review, and developer workflows across Claude, Cursor, and Codex.
Cursor vs Codex for AI Workflows
Compare Cursor and Codex for AI coding workflows, repository assistance, debugging, refactoring, and reusable developer skills.
AI Agents for Marketing
Discover AI agents for marketing workflows, from SEO and content production to campaign research, outreach, and analytics.
SKILL.md Source
# regression-bisect
Automatically identify the commit that introduced a regression using git bisect.
## Triggers
Alternate expressions and non-obvious activations (primary phrases are matched automatically from the skill description):
- "git bisect" → binary search for regression commit
- "when did this break" → regression commit discovery
## Purpose
This skill automates regression root cause analysis by:
- Using git bisect to binary search commit history
- Running automated tests at each bisect point
- Identifying the exact commit that introduced a failure
- Providing blame information and diff context
- Suggesting potential fixes based on the breaking change
## Behavior
When triggered, this skill:
1. **Validates prerequisites**:
- Confirms reproducible failure exists
- Verifies test automation is available
- Ensures clean working directory
- Identifies good and bad commits
2. **Executes git bisect**:
- Starts bisect with known good/bad commits
- Runs test suite at each bisect point
- Marks commits as good/bad based on test results
- Continues until breaking commit is found
3. **Analyzes breaking commit**:
- Shows commit message and metadata
- Displays full diff of the breaking change
- Identifies changed files and functions
- Maps to requirements/issues if available
4. **Provides context**:
- Shows blame information for affected code
- Lists related commits in the area
- Identifies potential reviewers (commit authors)
- Suggests rollback or fix strategies
5. **Documents findings**:
- Creates regression analysis report
- Links to issue tracker if available
- Updates regression baseline with findings
- Generates timeline of when regression was introduced
## Bisect Configuration
### Manual Bisect
```yaml
bisect_manual:
mode: interactive
good_commit: v1.2.0 # Known good state
bad_commit: HEAD # Known bad state
test_command: "npm test -- auth.test.ts"
workflow:
- git bisect start
- git bisect bad HEAD
- git bisect good v1.2.0
- git bisect run npm test -- auth.test.ts
```
### Automated Bisect
```yaml
bisect_automated:
mode: automated
detect_good: auto # Use last passing CI build
detect_bad: auto # Use current failing state
test_command: "npm test"
timeout: 600 # 10 minutes per commit test
auto_detection:
- check_ci_history
- find_last_green_build
- set_as_good_commit
- use_current_as_bad
```
### Bisect with Custom Test
```yaml
bisect_custom:
mode: custom
test_script: scripts/regression-test.sh
success_exit_code: 0
failure_exit_code: 1
test_script_template: |
#!/bin/bash
# Custom regression test
npm run build || exit 1
npm test -- specific-test.ts || exit 1
./validate-output.sh || exit 1
exit 0
```
## Bisect Report Format
```markdown
# Regression Bisect Report
**Date**: 2026-01-28
**Issue**: Authentication fails on login
**Analyzer**: regression-bisect skill
## Executive Summary
**Breaking Commit**: abc123def456
**Author**: John Developer <john@example.com>
**Date**: 2026-01-15 14:32:00
**Bisect Duration**: 8 commits tested, 12 minutes
**Root Cause**: Token validation logic changed to require `iss` claim
## Bisect Results
### Commit Range
- **Good**: v1.2.0 (2026-01-10) - 50 commits ago
- **Bad**: HEAD (2026-01-28) - Current state
- **Breaking**: abc123def456 (2026-01-15) - 25 commits into range
### Bisect Log
| Commit | Status | Test Result | Duration |
|--------|--------|-------------|----------|
| abc123 | ❌ Bad | auth.test.ts failed | 45s |
| def789 | ❌ Bad | auth.test.ts failed | 42s |
| ghi012 | ✅ Good | all tests passed | 48s |
| jkl345 | ✅ Good | all tests passed | 46s |
| mno678 | ❌ Bad | auth.test.ts failed | 44s |
| **pqr901** | **❌ Breaking** | **First failure** | **43s** |
| stu234 | ✅ Good | all tests passed | 47s |
| vwx567 | ✅ Good | all tests passed | 45s |
## Breaking Commit Analysis
### Commit Details
```
commit pqr901xyz
Author: John Developer <john@example.com>
Date: Mon Jan 15 14:32:00 2026 +0000
feat(auth): add JWT issuer validation
- Require `iss` claim in JWT tokens
- Validate issuer against whitelist
- Update token generation to include issuer
Closes #456
```
### Files Changed
| File | Changes | Impact |
|------|---------|--------|
| src/auth/validate-token.ts | +15/-5 | High - Core validation logic |
| src/auth/generate-token.ts | +8/-2 | Medium - Token generation |
| test/auth/token.test.ts | +25/-0 | Low - Test updates |
### Diff Analysis
```diff
diff --git a/src/auth/validate-token.ts b/src/auth/validate-token.ts
index abc123..def456 100644
--- a/src/auth/validate-token.ts
+++ b/src/auth/validate-token.ts
@@ -15,6 +15,11 @@ export function validateToken(token: string): TokenPayload {
throw new Error('Invalid token signature');
}
+ // NEW: Require issuer claim
+ if (!payload.iss) {
+ throw new Error('Token missing issuer claim');
+ }
+
return payload;
}
```
**Breaking Change**: The new validation requires `iss` claim, but existing tokens don't include it.
## Root Cause
The commit added mandatory `iss` (issuer) claim validation without:
1. Updating existing token generation (added in same commit but missed migration)
2. Providing backward compatibility for existing tokens
3. Coordinating with deployment to invalidate old sessions
**Impact**: All existing user sessions became invalid immediately.
## Affected Components
- **Authentication**: Token validation fails for all existing sessions
- **API Gateway**: 401 errors on all authenticated endpoints
- **User Experience**: Force logout of all active users
## Related Information
### Traceability
- **Issue**: #456 - "Add JWT issuer validation for security"
- **Requirement**: @.aiwg/requirements/use-cases/UC-AUTH-003-jwt-security.md
- **Review**: PR #789 - Merged without integration testing
### Similar Issues
Git history shows related changes:
- commit xyz789 (2026-01-10): Initial JWT implementation
- commit uvw456 (2026-01-12): Add JWT expiration validation
- commit pqr901 (2026-01-15): Add JWT issuer validation ← BREAKING
### Code Ownership
```
src/auth/validate-token.ts:
85% John Developer <john@example.com>
10% Jane Reviewer <jane@example.com>
5% Bob Maintainer <bob@example.com>
```
## Recommendations
### Immediate (Hotfix)
- [ ] **Option A**: Revert commit pqr901 to restore service
- [ ] **Option B**: Make `iss` validation optional with feature flag
- [ ] **Option C**: Deploy token refresh that includes `iss` claim
**Recommended**: Option B - Feature flag allows gradual rollout
### Short-term (This Sprint)
- [ ] Add integration tests for auth changes
- [ ] Add backward compatibility tests for token validation
- [ ] Update deployment runbook for auth changes
- [ ] Add session migration logic for breaking changes
### Ongoing
- [ ] Require integration tests for auth PRs
- [ ] Add "breaking change" checklist to PR template
- [ ] Schedule auth regression suite in CI
- [ ] Document token format in API docs
## Fix Strategy
### Proposed Fix
```typescript
// src/auth/validate-token.ts
export function validateToken(token: string): TokenPayload {
const payload = jwt.verify(token, SECRET_KEY);
if (!payload.sub) {
throw new Error('Invalid token signature');
}
// FIXED: Make issuer validation optional during migration
if (featureFlags.requireIssuer && !payload.iss) {
throw new Error('Token missing issuer claim');
}
return payload;
}
```
### Migration Path
1. Deploy fix with `requireIssuer: false`
2. Update token generation to include `iss`
3. Wait for all old tokens to expire (24 hours)
4. Enable `requireIssuer: true`
5. Remove feature flag after validation
## Timeline
```
2026-01-10: v1.2.0 released (working)
2026-01-15: Commit pqr901 merged (breaking change introduced)
2026-01-15: No CI failure (tests didn't catch integration issue)
2026-01-16: Deployed to production
2026-01-16: User reports started (authentication failures)
2026-01-28: Bisect identified root cause
```
**Time to Detection**: 13 days
**Time to Root Cause**: Immediate (via bisect)
## Prevention
This regression could have been prevented by:
1. Integration test covering token validation end-to-end
2. Staged rollout with feature flag
3. Backward compatibility review in PR checklist
4. Session invalidation notice to users
## References
- Bisect documentation: docs/debugging/git-bisect-guide.md
- Breaking change policy: docs/development/breaking-changes.md
- Auth architecture: @.aiwg/architecture/auth-architecture.md
```
## Usage Examples
### Basic Regression Bisect
```
User: "Find which commit broke authentication"
Skill executes:
1. Identify current failure: auth tests failing
2. Find last known good: v1.2.0 (CI history)
3. Run git bisect with test: npm test -- auth.test.ts
4. Test 8 commits in 12 minutes
5. Identify breaking commit: pqr901
Output:
"Regression Bisect Complete
Breaking Commit: pqr901xyz
Author: John Developer
Date: 2026-01-15 14:32:00
Message: feat(auth): add JWT issuer validation
Root Cause: Required `iss` claim without backward compatibility
Files Changed:
- src/auth/validate-token.ts (+15/-5)
- src/auth/generate-token.ts (+8/-2)
Recommendation: Make validation optional with feature flag
Full report: .aiwg/testing/regression-bisect-auth.md"
```
### Bisect with Custom Test
```
User: "Bisect the payment processing regression"
Skill asks:
"What is a good commit (when it worked)?"
User: "v2.1.0"
Skill executes:
1. git bisect start
2. git bisect bad HEAD
3. git bisect good v2.1.0
4. git bisect run scripts/payment-test.sh
Output:
"Breaking Commit: def456
Broke payment refund logic
Changed: src/payments/refund.ts
Bisected 45 commits in 32 minutes
See .aiwg/testing/regression-bisect-payment.md"
```
### Automatic Good/Bad Detection
```
User: "When did the API start returning 500 errors?"
Skill analyzes:
- Current state: 500 errors on /api/users
- CI history: Last green build was 2 days ago
- Auto-detect good: commit xyz789 (last green)
- Auto-detect bad: HEAD (current failing)
Runs bisect automatically.
Output:
"Regression introduced in commit abc123
2 days ago by Jane Developer
Changed database query logic
Breaking change: Added JOIN without NULL check
See full analysis in .aiwg/testing/regression-api-500.md"
```
## Integration
This skill uses:
- `regression-baseline`: Load known good states
- `project-awareness`: Detect test commands and CI configuration
- `test-coverage`: Identify relevant test suites
- Git tools: For bisect operations and history analysis
## Agent Orchestration
```yaml
agents:
analysis:
agent: debugger
focus: Root cause analysis and blame
testing:
agent: test-engineer
focus: Test execution and validation
documentation:
agent: technical-writer
focus: Report generation
```
## Configuration
### Bisect Presets
```yaml
bisect_presets:
auth_regression:
test_command: npm test -- auth.test.ts
timeout: 300
auto_detect_good: true
api_regression:
test_command: npm run test:api
timeout: 600
auto_detect_good: true
performance_regression:
test_command: npm run benchmark
threshold: "response_time < 1000ms"
timeout: 900
```
### Timeout Strategy
```yaml
timeout_config:
per_commit_test: 600 # 10 minutes
total_bisect: 3600 # 1 hour max
on_timeout: skip_commit # or fail_bisect
```
## Error Handling
### Unstable Tests
If test results are inconsistent:
1. Run test 3 times per commit
2. Require 2/3 passes to mark as good
3. Flag flaky tests in report
4. Recommend test stabilization
### Build Failures
If commit doesn't build:
1. Skip commit and mark as bad
2. Continue bisect with next commit
3. Flag build issues in report
4. Note potential false positive
### Timeout Exceeded
If bisect takes too long:
1. Stop bisect at timeout
2. Report progress so far
3. Suggest narrowing commit range
4. Offer to resume later
## Output Locations
- Bisect reports: `.aiwg/testing/regression-bisect-{issue}.md`
- Bisect logs: `.aiwg/testing/bisect-logs/`
- Fix recommendations: `.aiwg/working/regression-fixes/`
## References
- @$AIWG_ROOT/agentic/code/frameworks/sdlc-complete/schemas/test/regression-schema.yaml
- @$AIWG_ROOT/agentic/code/frameworks/sdlc-complete/commands/regression-test.md
- @$AIWG_ROOT/agentic/code/frameworks/sdlc-complete/agents/debugger.mdRelated Skills
regression-visual
Detect visual and UI regressions through screenshot comparison and pixel-diff analysis across browsers and viewports
regression-report
Generate comprehensive regression analysis reports combining bisect, baseline, and metrics data with actionable recommendations
regression-performance
Detect performance regressions by comparing benchmarks across versions with latency, throughput, and statistical significance analysis
regression-metrics
Track and analyze regression statistics, trends, hotspots, and health indicators across test suites
regression-learning
Improve regression detection over time through cross-task pattern recognition, test prioritization, and historical analysis
regression-cicd-hooks
Integrate regression testing into CI/CD pipelines with baseline comparison and merge blocking on failure
regression-check
Compare current behavior against baseline to detect regressions
regression-baseline
Create and maintain regression test baselines for comparison and drift detection across versioned snapshots
aiwg-orchestrate
Route structured artifact work to AIWG workflows via MCP with zero parent context cost
venv-manager
Create, manage, and validate Python virtual environments. Use for project isolation and dependency management.
pytest-runner
Execute Python tests with pytest, supporting fixtures, markers, coverage, and parallel execution. Use for Python test automation.
vitest-runner
Execute JavaScript/TypeScript tests with Vitest, supporting coverage, watch mode, and parallel execution. Use for JS/TS test automation.