Enforces quality verification gates with four-step validation (tests pass, build succeeds, checklist complete, no blockers) before task completion, PR creation, or status updates. Auto-activates when user says "done", "complete", "finished", "ready to merge", or runs /ccpm:verify or /ccpm:done commands. Provides systematic verification workflow that prevents false completion claims and ensures production readiness. Blocks external system writes (Jira, Slack) until evidence collected. Integrates with external-system-safety for confirmation workflow. When verification fails, suggests /ccpm:verify to debug issues systematically.
Enforces four-step verification (tests, build, checklist, blockers) before task completion or PR creation. Auto-activates when user says "done" or runs `/ccpm:verify`/`/ccpm:done` commands to prevent false completion claims.
/plugin marketplace add duongdev/ccpm/plugin install ccpm@duongdev-ccpm-marketplaceThis skill is limited to using the following tools:
Structured code review workflow integrated with CCPM's Linear-based project management system. Enforces "no completion claims without verification evidence" principle.
This skill auto-activates when:
/ccpm:verify command (natural workflow - recommended)/ccpm:done command (includes pre-flight verification)/ccpm:verify command (advanced)CCPM provides a streamlined 3-step verification process:
Run linting, tests, and build checks to ensure technical correctness:
/ccpm:verify [issue-id] # Auto-detects issue from git branch
What it checks:
If checks fail: Command automatically suggests /ccpm:verify to debug systematically.
After quality checks pass, agent review analyzes:
Four verification gates must pass:
Only after all gates pass can task proceed to finalization with /ccpm:done.
Forbidden performative agreement:
Required rigorous verification:
When receiving feedback:
Required evidence before any "done" claim:
/ccpm:verify (Natural Workflow - Recommended)This skill enforces verification during the streamlined verify command:
# User runs natural verification command
/ccpm:verify
# Or with explicit issue ID
/ccpm:verify AUTH-123
Flow:
User: "I'm done, let me verify"
Claude: [ccpm-code-review activates]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔍 Smart Verify Command
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 Issue: AUTH-123 - Add user authentication
📊 Status: In Progress
📋 Checklist: 100% (5/5 items)
Verification Flow:
──────────────────
1. Quality Checks (linting, tests, build)
2. Final Verification (code review, security)
═══════════════════════════════════════
Step 1/2: Running Quality Checks
═══════════════════════════════════════
🔍 Running linting...
✅ All files pass linting
🧪 Running tests...
✅ All tests passed (28/28)
🏗️ Running build...
✅ Build successful
📊 Quality Check Results:
✅ Linting
✅ Tests
✅ Build
═══════════════════════════════════════
Step 2/2: Running Final Verification
═══════════════════════════════════════
[Code reviewer agent analyzes changes...]
✅ All requirements met
✅ Code quality standards met
✅ Security best practices followed
✅ Performance acceptable
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ All Verification Complete!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
All verifications passed! Ready to finalize.
💡 What's Next?
⭐ Recommended: /ccpm:done AUTH-123
If verification fails:
❌ Quality Checks Failed
📊 Quality Check Results:
✅ Linting
❌ Tests (3 failures)
✅ Build
To debug and fix issues:
/ccpm:verify AUTH-123
Then run verification again:
/ccpm:verify AUTH-123
/ccpm:done (Pre-Flight Verification)This skill ensures quality before finalization:
# User attempts to finalize task
/ccpm:done
# Or with explicit issue ID
/ccpm:done AUTH-123
Pre-flight checks enforced by ccpm-code-review:
User: "/ccpm:done AUTH-123"
Claude: [ccpm-code-review activates for pre-flight]
✅ All pre-flight checks passed!
Checking completion readiness:
□ Tests passing?
→ ✅ All 52 tests passed
□ Build successful?
→ ✅ Build completed (exit 0)
□ Linear checklist complete?
→ ✅ 7/7 items checked
□ No blockers?
→ ✅ No blockers found
VERIFICATION COMPLETE ✅
📝 Creating GitHub Pull Request...
✅ Pull Request created
[Prompts for Jira/Slack updates with confirmation]
✅ Linear issue updated to Done
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎉 Task Finalized: AUTH-123
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
If pre-flight fails:
⛔ Cannot Finalize: Checklist Incomplete
Progress: 80% (4/5 completed)
❌ Remaining Items:
- [ ] Write integration tests
🔧 Actions Required:
1. Complete remaining checklist items
2. Update checklist: /ccpm:sync AUTH-123
3. Then run: /ccpm:done AUTH-123
/ccpm:verifyFor manual verification step (advanced users):
Claude runs /ccpm:verify AUTH-123
[ccpm-code-review activates during verification]
Checking verification evidence:
□ Tests passing?
→ ✅ All 47 tests passed
□ Build successful?
→ ✅ Build completed with exit code 0
□ Linear checklist complete?
→ ❌ 3 of 5 items checked
□ No blockers?
→ ⚠️ 1 blocker found: "Redis connection failing in staging"
VERIFICATION FAILED:
- Linear checklist incomplete (3/5)
- Blocker unresolved: Redis connection issue
Cannot proceed with completion until:
1. Complete remaining checklist items
2. Resolve Redis blocker or document as out-of-scope
Would you like to:
A. Update checklist now
B. Investigate Redis blocker
C. Update task scope to exclude Redis
Scenario: Reviewer says "Add error handling to login function"
❌ Wrong approach (performative):
"Great point! I'll add error handling right away."
[Immediately adds try-catch without understanding]
✅ Correct approach (verification-first):
Claude: [ccpm-code-review activates]
Let me verify this feedback:
1. Checking current error handling...
```typescript
// login.ts
async function login(email, password) {
const user = await db.findUser(email); // ← No error handling
return generateToken(user); // ← No error handling
}
Potential issues:
Verification: Feedback is VALID
Implementation approach:
async function login(email, password) {
try {
const user = await db.findUser(email);
if (!user) {
throw new UnauthorizedError('Invalid credentials');
}
return generateToken(user);
} catch (error) {
if (error instanceof DatabaseError) {
logger.error('Database error during login', error);
throw new ServiceUnavailableError();
}
throw error;
}
}
Testing the fix:
Update Linear:
Implementing fix now...
### When Feedback Seems Wrong
**Scenario**: Reviewer says "Use var instead of const"
**❌ Wrong approach**:
"Okay, I'll change it!" [Blindly makes change]
**✅ Correct approach**:
Claude: [ccpm-code-review activates]
Let me verify this feedback:
Current code uses const (ES6+)
Feedback suggests var (ES5)
Technical analysis:
const: Block-scoped, immutable binding, prevents reassignment bugsvar: Function-scoped, allows reassignment, hoisting issuesProject standards check:
const/let, disallows varconst/letVerification: Feedback appears INCORRECT
Response to reviewer:
"I checked our ESLint config and existing codebase. We enforce const/let
and disallow var for block-scoping safety. Changing to var would:
Did you mean something else, or is there a specific reason for var here?"
Waiting for reviewer clarification before making changes...
## Verification Gates
### Gate 1: Tests Must Pass
**Requirement**: Zero test failures
✅ PASS: 52 tests, 0 failures ❌ FAIL: 48 tests passed, 4 failures
If failures exist:
### Gate 2: Build Must Succeed
**Requirement**: Exit status 0
✅ PASS: Build completed successfully (exit 0) ❌ FAIL: Build failed with 3 TypeScript errors (exit 1)
If build fails:
### Gate 3: Linear Checklist Must Be Complete
**Requirement**: 100% of checklist items checked
✅ PASS: 7/7 checklist items complete ❌ FAIL: 5/7 checklist items complete
Incomplete items:
Action required:
### Gate 4: No Unresolved Blockers
**Requirement**: Zero blocker comments in Linear
✅ PASS: No blockers found ❌ FAIL: 2 blockers in Linear comments
Blockers:
Action required:
## Integration with CCPM Safety Rules
### Works with `external-system-safety` Skill
This skill focuses on **verification**, `external-system-safety` focuses on **confirmation**.
**Division of responsibility:**
| Concern | Skill | Check |
|---------|-------|-------|
| Are tests passing? | ccpm-code-review | ✓ |
| Is build successful? | ccpm-code-review | ✓ |
| Is checklist complete? | ccpm-code-review | ✓ |
| User confirms Jira update? | external-system-safety | ✓ |
| User confirms Slack post? | external-system-safety | ✓ |
**Together they ensure**:
1. Quality standards met (ccpm-code-review)
2. User approves external writes (external-system-safety)
### References SAFETY_RULES.md
All external writes follow `../commands/SAFETY_RULES.md`:
**⛔ Require confirmation**:
- Jira status updates
- Confluence page edits
- BitBucket PR creation
- Slack notifications
**✅ Always allowed**:
- Linear status updates (internal tracking)
- Local file modifications
- Read operations
## Examples
### Example 1: Successful Completion Flow (Natural Workflow)
User: "Done with AUTH-123, ready to ship!"
Claude: [ccpm-code-review activates]
Let me run verification first:
Running /ccpm:verify AUTH-123...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔍 Smart Verify Command ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 Checklist: 100% (7/7 items)
═══════════════════════════════════════ Step 1/2: Running Quality Checks ═══════════════════════════════════════
✅ Tests: 52/52 passing ✅ Build: Successful (exit 0) ✅ Linting: No errors
═══════════════════════════════════════ Step 2/2: Running Final Verification ═══════════════════════════════════════
✅ Code review: Passed ✅ Security audit: Passed ✅ Requirements met: Passed
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ✅ All Verification Complete! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
💡 What's Next? ⭐ Recommended: /ccpm:done AUTH-123
Ready to finalize! Shall I run /ccpm:done now?
### Example 2: Failed Verification (Natural Workflow)
User: "I'm done, let's merge"
Claude: [ccpm-code-review activates]
Running /ccpm:verify...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔍 Smart Verify Command ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
═══════════════════════════════════════ Step 1/2: Running Quality Checks ═══════════════════════════════════════
🧪 Running tests... ❌ 3 tests failing:
🏗️ Running build... ❌ TypeScript error: src/auth/jwt.ts:45:12 - error TS2345
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ❌ Verification Failed ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
To debug and fix issues: /ccpm:verify AUTH-123
Then run verification again: /ccpm:verify AUTH-123
Would you like me to start debugging these issues?
### Example 3: Incomplete Checklist (Pre-Flight with /ccpm:done)
User: "/ccpm:done AUTH-456"
Claude: [ccpm-code-review activates for pre-flight]
✅ All git pre-flight checks passed!
Checking completion readiness:
✅ Tests passing (41/41) ✅ Build successful ❌ Linear checklist incomplete (4/6): ✓ Implement JWT generation ✓ Add login endpoint ✓ Add logout endpoint ✓ Write unit tests ✗ Add integration tests ✗ Update API documentation
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ⛔ Cannot Finalize: Checklist Incomplete ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Progress: 67% (4/6 completed)
🔧 Actions Required:
Or update scope with /ccpm:plan AUTH-456 "mark items as Phase 2"
Which would you like to do?
### Example 4: Complete Natural Workflow (End-to-End)
User: "I finished the authentication feature"
Claude: [ccpm-code-review guides through workflow]
Great! Let's verify your work before finalizing.
Step 1: Verification ──────────────────── /ccpm:verify
✅ All quality checks passed ✅ Code review complete ✅ Security validated
Step 2: Finalization ──────────────────── /ccpm:done
✅ Git pre-flight checks passed ✅ Checklist complete (5/5) ✅ No blockers 📝 GitHub PR created ✅ Linear updated to Done
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🎉 Task Finalized: AUTH-456 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
All done! Task completed successfully. 🎊
## Verification Checklist Template
Before claiming "done":
- [ ] Tests executed
- [ ] All tests passing (0 failures)
- [ ] Coverage meets requirements
- [ ] New tests added for new code
- [ ] Build verified
- [ ] Build successful (exit 0)
- [ ] No compilation errors
- [ ] No linting errors
- [ ] Linear task complete
- [ ] All checklist items checked
- [ ] No unresolved blockers
- [ ] Work summary added
- [ ] Code quality
- [ ] Code reviewed (by human or code-reviewer agent)
- [ ] Security checked (if applicable)
- [ ] Performance acceptable
- [ ] Documentation
- [ ] Code comments added where needed
- [ ] API docs updated (if API changed)
- [ ] README updated (if user-facing)
Only after ALL checked:
- [ ] Ready for /ccpm:done
## Integration with Other CCPM Skills
**Works alongside**:
- **external-system-safety**: Enforces confirmation for external writes (Jira/Slack)
- **pm-workflow-guide**: Suggests `/ccpm:verify` and `/ccpm:done` at right time
- **ccpm-debugging**: Invoked via `/ccpm:verify` when checks fail
- **sequential-thinking**: For complex verification scenarios
**Example combined activation**:
User: "Ready to merge AUTH-123" ↓ ccpm-code-review → Suggests /ccpm:verify first ↓ /ccpm:verify → Runs quality checks + agent review ↓ [If gates pass] ↓ Suggests /ccpm:done ↓ /ccpm:done → Pre-flight checks + PR creation ↓ external-system-safety → Confirms Jira/Slack writes ↓ [If user confirms] ↓ Complete! ✅
## Natural Workflow Commands
CCPM provides streamlined commands for the complete verification and finalization workflow:
| Command | Purpose | Auto-detects Issue |
|---------|---------|-------------------|
| `/ccpm:verify` | Quality checks + agent review | ✅ From git branch |
| `/ccpm:done` | Pre-flight + PR + finalize | ✅ From git branch |
| `/ccpm:verify` | Debug failed checks | ❌ Explicit ID required |
**Recommended workflow:**
```bash
# 1. Complete implementation
/ccpm:work
# 2. Commit changes
/ccpm:commit
# 3. Verify quality (this skill activates)
/ccpm:verify
# 4. Finalize task (this skill activates for pre-flight)
/ccpm:done
This skill ensures:
Philosophy: Verification before completion, evidence over claims, quality over speed.
Key Features:
/ccpm:verify and /ccpm:done/ccpm:verify for failuresSource: Adapted from claudekit-skills/code-review
License: MIT
CCPM Integration: /ccpm:verify, /ccpm:done, /ccpm:verify, quality-gate hook
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.