Verify Changes
Comprehensive verification after code changes. Uses Boris Cherny's multi-subagent adversarial approach.
Verify Changes
Run comprehensive verification of recent code changes using multi-subagent adversarial approach.
Phase 1: Gather Context
Run these commands to understand what changed:
git diff HEAD~1 --stat
git log -3 --oneline
git diff --name-only HEAD~1
Identify affected files and their corresponding test files.
Phase 2: Spawn Verification Subagents (Parallel)
Use the Task tool with run_in_background: true to spawn subagents in parallel.
CRITICAL: Launch ALL subagents in a SINGLE message for true parallelism:
[All Task calls in ONE message]
Task 1: {
description: "Syntax & Type Check",
prompt: "Run language-specific type checker (tsc, mypy, go vet)...",
run_in_background: true
}
Task 2: {
description: "Test Runner",
prompt: "Run tests for affected files first, then integration tests...",
run_in_background: true
}
Task 3: {
description: "Lint & Style Check",
prompt: "Run project linter (eslint, ruff, golangci-lint)...",
run_in_background: true
}
Task 4: {
description: "Security Scan",
prompt: "Grep for hardcoded secrets, check for vulnerabilities...",
run_in_background: true
}
Task 5: {
description: "Build Validator",
prompt: "Run build command, verify artifacts exist...",
run_in_background: true
}
After all complete, use TaskOutput to retrieve each result:
TaskOutput: task_1_id
TaskOutput: task_2_id
TaskOutput: task_3_id
TaskOutput: task_4_id
TaskOutput: task_5_id
Subagent Details
Subagent 1: Syntax & Type Check
- Run language-specific type checker (tsc, mypy, go vet)
- Report any type errors or warnings
- Exit with list of issues found
Subagent 2: Test Runner
- Run tests for affected files first
- Run related integration tests
- Report failures with file:line context
Subagent 3: Lint & Style Check
- Run project linter (eslint, ruff, golangci-lint)
- Check for formatting issues
- Report violations with severity
Subagent 4: Security Scan
- Grep for hardcoded secrets (passwords, API keys, tokens)
- Check for common vulnerabilities in new code
- Review any new dependencies
Subagent 5: Build Validator
- Run build command
- Verify build artifacts exist
- Check for build warnings
Phase 3: Adversarial Review
Spawn 3 adversarial subagents to review Phase 2 findings:
Adversarial A: False Positive Filter
- Review each finding from Phase 2
- Determine if it's a real issue or false alarm
- Provide reasoning for each determination
Adversarial B: Missing Issues Finder
- Look for issues the first pass might have missed
- Check edge cases in changed code
- Verify error handling is adequate
Adversarial C: Context Validator
- Verify findings make sense in project context
- Check if "issues" are actually intentional patterns
- Consider project conventions
Phase 4: Synthesize Results
Combine all subagent outputs into final report:
## Verification Results: [PASS/FAIL]
### Confirmed Issues
1. [Issue] - [Location] - [Why it's confirmed real]
### Warnings (Review Recommended)
1. [Warning] - [Location] - [Context]
### All Checks
- [ ] Type checking: [PASS/FAIL]
- [ ] Tests: [PASS/FAIL]
- [ ] Linting: [PASS/FAIL]
- [ ] Security: [PASS/FAIL]
- [ ] Build: [PASS/FAIL]
### Subagent Summary
- Initial findings: X issues
- After adversarial review: Y confirmed issues
- False positives filtered: Z
Usage
Copy this file to your project's .claude/commands/ directory:
cp templates/subagents/verify-changes.md .claude/commands/
Then invoke with: /project:verify-changes