Verify — Teammate Verification
Overview
Verify teammate code delivery. Detects available context (feature.json with requirements, backlog TODO with description, or just a branch diff), checks completeness where possible, generates and runs tests, and produces structured feedback.
Trigger: /team-verify or /team-verify {feature-name} or /team-verify {feature-name} {feedback}
When to Use
- After teammate delivers code on a feature (with or without
/dev-ship (define phase)) - When teammate pushes code for a backlog TODO item
- When teammate branch code needs verification before merge
NOT for:
- Testing own code (use
/dev-ship (verify phase)) - Unit-level test writing during build (use
/dev-ship (build phase))
Input Formats
# Auto-detect context (recommended)
/team-verify
# Specific feature
/team-verify user-registration
# Inline feedback (skips automation)
/team-verify user-registration
1:PASS
2:FAIL no validation error
3:PASS
Workflow
Phase tracking — first action of the skill: call TaskCreate with these 12 items (status pending), then use TaskUpdate to set each phase in_progress at the start and completed at the end. During context compaction the task list remains visible — no risk of skipping phases.
- PHASE 0: Context Detection
- PHASE 0.5: Completeness Check
- PHASE 1: Research + Scenario Generation
- PHASE 2: Test Plan + Classification
- PHASE 3: Automated Test Execution
- PHASE 4: Manual Test Execution
- PHASE 4b: Combined Results
- PHASE 4c: Coverage Adequacy Analysis
- PHASE 5: Results Report + Action Choice
- PHASE 5c: Fix Loop
- PHASE 5d: Regression Check
- PHASE 6: Update + Feedback
PHASE 0: Context Detection
Todo: call
TaskCreatewith the 12 phase items (see above). Mark PHASE 0 →in_progressviaTaskUpdate.
Team-mode gate. Read
TEAM_MODEviashared/PROJECT-MODE.mdread pattern. If"solo"or absent → show AskUserQuestion (warn-only):header: "Solo project" question: "This project is marked solo (team.mode). /team-verify is meant for verifying teammate deliveries. Continue anyway?" options: - label: "Cancel (Recommended)" description: "Exit. Toggle to team via the ⚙ button in the backlog or run /core-setup to mark this as a team project." - label: "Yes, continue once" description: "Proceed with verification for this single invocation." multiSelect: falseCancel → exit. Continue → proceed with step 1.
Get branch and project info:
git branch --show-currentCapture git baseline (for scoped commit in PHASE 6):
mkdir -p .project/session git status --porcelain | sort > .project/session/pre-skill-status.txtFind context (in order of richness):
a. feature.json — if feature name given →
.project/features/{name}/feature.json. Otherwise → scan.project/features/*/feature.jsonfor features with status DOING + stage built, or withexternalRef.assigneesset.b. Backlog TODO — if no feature.json found, check
.project/backlog.jsonfor a TODO/DOING item matching the feature name or branch name. Extract the item's description/title.c. Nothing — no feature.json, no backlog match.
Determine mode:
Condition Mode Description feature.json exists with requirements[]BRIEF_REVIEWFull brief available — completeness check + test No feature.json, but backlog TODO with description TODO_REVIEWBacklog description as test basis No feature.json, no backlog match BRANCH_ONLYGit diff only — test what's visible Parse user input:
- Feature name only → proceed to PHASE 0.5
- Feature name + inline feedback → parse into structured results (item number, PASS/FAIL, notes); map to requirements where possible; show summary; skip directly to PHASE 5
- Feature name + free text → same as inline feedback above
Output:
CONTEXT DETECTION Mode: {BRIEF_REVIEW | TODO_REVIEW | BRANCH_ONLY} Feature: {name or branch name} Assignee: {name or "none"} Branch: {branch} Context: {feature.json | backlog TODO | git diff only} Status: {backlog status: DOING/DONE/etc or "unknown"}Use AskUserQuestion to confirm:
- header: "Test Mode"
- question: "Continue with {mode} for {feature}?"
- options:
- label: "Yes, continue (Recommended)", description: "{mode description}"
- label: "Different feature", description: "I want to test a different feature"
- label: "Cancel", description: "Stop"
- multiSelect: false
Signal active feature (after feature name is determined):
echo '{"skill":"team-verify"}' | node ~/.claude/scripts/ship-checkpoint.js signal {feature-name}Load stack & project context (for agent prompts):
Stack detection:
- Read CLAUDE.md
### Stacksection - Read
.claude/research/stack-baseline.md(if available) - Fallback: detect from package.json / go.mod / etc.
Project context: Read
.project/project.json(if it exists). Extract only:stack(framework, language, testing, packages)endpoints(method, path, auth)data.entities(names, fields, relations)
Read
.project/project-context.json(if it exists). Extract:context(structure, routing, patterns)
If project.json/project-context.json or stack-baseline does not exist → continue without (backwards compatible).
Assemble STACK_CONTEXT (passed to all agents in this skill):
STACK CONTEXT: Framework: {stack.framework} ({stack.language}) Testing: {stack testing info or stack-baseline testing conventions} Packages: {relevant packages} PROJECT CONTEXT: Structure: {context.structure or "not available"} Routing: {context.routing or "not available"} Patterns: {context.patterns or "not available"} Endpoints: {endpoints or "not available"} Entities: {data.entities or "not available"}- Read CLAUDE.md
PHASE 0.5: Completeness Check
Todo: mark PHASE 0 →
completed, PHASE 0.5 →in_progress. Skip ifBRANCH_ONLYmode. Otherwise read.claude/skills/team-verify/references/phase-0-5-completeness.mdand follow the agent prompts for the detected mode.
PHASE 1: Research + Scenario Generation (Explore agent)
Todo: mark PHASE 0.5 →
completed, PHASE 1 →in_progress. Read.claude/skills/team-verify/references/phase-1-scenario-agent.mdand spawn the Explore agent with the prompt template.
Goal: Research test strategies and generate scenarios. Runs in a single Explore agent to keep Context7 results and scenario details out of the main context.
PHASE 2: Test Plan + Classification
Todo: mark PHASE 1 →
completed, PHASE 2 →in_progress.
Goal: Classify scenarios into AUTO/MANUAL, generate test data, set up dev server.
Classification criteria: See
../shared/test-classification.mdfor AUTO/BROWSER, AUTO/CLI, and MANUAL criteria with pattern tables.
Generate test data (via Explore agent — zero source file reads in main context):
Feature: {feature-name} Scenarios from PHASE 1: {list of scenarios with requirement mapping} {STACK_CONTEXT} Read the source code and look for: - Form fields, validation rules, API endpoints relevant to the test items - Existing test files that can be reused - Test patterns matching the stack (e.g. Vitest for React, PHPUnit for Laravel) Return as structured overview: FEATURE_CONTEXT_START Existing tests: {path to test files, or "none"} Per scenario: - Item {N}: {title} Test data: {concrete values} Expected: {expected outcome} Recommended method: BROWSER | CLI | MANUAL Reason: {why this method} FEATURE_CONTEXT_ENDClassify each scenario using
test-classification.mdcriteria:TEST CLASSIFICATION: {feature-name} | # | Test | Type | Requirement | Reason | |---|--------------------------|--------------|-------------|-----------------------------------------| | 1 | Register with valid data | AUTO/BROWSER | REQ-001 | DOM: redirect + welcome message visible | | 2 | Without email | AUTO/BROWSER | REQ-002 | DOM: error message visible | | 3 | Welcome mail sent | MANUAL | REQ-004 | Email verification not via DOM | AUTO: {n} (BROWSER: {n}, CLI: {n}) MANUAL: {n}User override:
Use AskUserQuestion:
- header: "Test Plan"
- question: "Continue with test execution?"
- options:
- label: "Yes, run tests (Recommended)", description: "Start automated tests, then manual"
- label: "Automated only", description: "Skip manual tests"
- label: "All manual", description: "Skip automated tests"
- label: "Cancel", description: "Stop"
- multiSelect: false
Dev server + Cloudflare Tunnel:
Always start dev server + tunnel — needed for both AUTO and MANUAL items.
a) Check for existing tunnel:
grep -oE 'https://[a-z0-9-]+\.trycloudflare\.com' /tmp/cloudflared.log 2>/dev/null | head -1If found, verify it's live:
curl -s -o /dev/null -w "%{http_code}" {tunnel_url}. If HTTP 200 and serves correct project → use it.b) No tunnel running — start dev server + tunnel (same process as
/project-tunnel):# Detect framework from package.json and start # Wait for server ready for i in $(seq 1 15); do curl -s http://localhost:3000 > /dev/null 2>&1 && break || sleep 1; done # Start Cloudflare Tunnel cloudflared tunnel --url http://localhost:3000 > /tmp/cloudflared.log 2>&1 & sleep 8 grep -oE 'https://[a-z0-9-]+\.trycloudflare\.com' /tmp/cloudflared.log | head -1c) If server or tunnel fails:
⚠ Dev server + tunnel not started. All items will be MANUAL.Graceful fallback: reclassify ALL items as MANUAL, skip PHASE 3.
PHASE 3: Automated Test Execution (Task Agent)
Todo: mark PHASE 2 →
completed, PHASE 3 →in_progress. Skip if no AUTO items or dev server unavailable. Otherwise read.claude/skills/team-verify/references/phase-3-task-agent.mdand spawn the Task agent.
PHASE 4: Manual Test Execution (interactive)
Todo: mark PHASE 3 →
completed, PHASE 4 →in_progress. Skip if no MANUAL items. Otherwise read.claude/skills/team-verify/references/phase-4-manual.mdand follow the interactive loop.
PHASE 4b: Combined Results
Todo: mark PHASE 4 →
completed, PHASE 4b →in_progress.
Merge automated (PHASE 3) and manual (PHASE 4) results:
COMBINED RESULTS: {feature-name}
| # | Test | Type | Requirement | Result |
|---|-----------------------|--------|-------------|------------------------|
| 1 | Valid registration | AUTO | REQ-001 | ✓ PASS |
| 2 | Without email | AUTO | REQ-002 | ✗ FAIL: no error |
| 3 | Welcome mail | MANUAL | REQ-004 | ✗ FAIL: no mail |
AUTO PASS: {n} AUTO FAIL: {n}
MANUAL PASS: {n} MANUAL FAIL: {n} SKIP: {n}
TOTAL PASS: {n} TOTAL FAIL: {n}
PHASE 4c: Coverage Adequacy Analysis
Todo: mark PHASE 4b →
completed, PHASE 4c →in_progress.
Trigger: Always after PHASE 4b (regardless of whether everything is PASS or there are FAILs).
Goal: Analyze whether the generated test scenarios cover the code sufficiently, or whether there are blind spots.
Spawn Explore agent (subagent_type="Explore", model: "sonnet", thoroughness: "very thorough"):
Analyze whether the test scenarios fully cover the code.
{STACK_CONTEXT}
Feature: {feature-name}
Code diff: {diff summary}
Executed test scenarios:
{list of all scenarios with results from PHASE 4b}
ANALYZE:
1. Which code paths in the diff are NOT covered by the current scenarios?
2. Which error handling / edge cases have not been tested?
3. Are there security-relevant paths (auth, input validation, permissions) without a test?
4. Are there integration points with other components that have not been tested?
RETURN FORMAT:
ADEQUACY_START
Coverage: SUFFICIENT | INSUFFICIENT
Gaps: {list of missing scenarios, or "none"}
Suggested: {0-3 extra scenario proposals if gaps found}
ADEQUACY_END
If SUFFICIENT + no gaps:
COVERAGE ANALYSIS: ✓ Scenarios adequately cover the code
Continue to PHASE 5.
If INSUFFICIENT or gaps found:
COVERAGE ANALYSIS: {feature-name}
Gaps found:
1. {gap description}
2. {gap description}
Extra scenarios will be added and tested automatically...
Classify the proposed scenarios (PHASE 2 logic), execute them (PHASE 3/4 logic), and merge results back into the PHASE 4b table. No user interaction — Claude adds gaps automatically and tests them. Max 1 iteration (no repeat of PHASE 4c after the extra scenarios).
PHASE 5: Results Report + Action Choice
Todo: mark PHASE 4c →
completed, PHASE 5 →in_progress.
Goal: Combined report with requirement coverage, then choose: feedback or fix.
TEST RESULTS: {feature-name}
REQUIREMENT COVERAGE
| REQ | Description | In Code | Tested | Result |
|---------|---------------------|---------|--------|---------|
| REQ-001 | User can log in | ✓ | ✓ | PASS |
| REQ-002 | Email validation | ✓ | ✓ | FAIL |
| REQ-003 | Rate limiting | ✗ | — | MISSING |
| REQ-004 | Welcome mail | ✓ | ✓ | PASS |
Total: {pass}/{total} PASS | {fail} FAIL | {missing} MISSING
If all PASS + no MISSING → skip action choice, proceed to PHASE 6 (feedback = positive message).
If any FAIL or MISSING:
Use AskUserQuestion:
- header: "Action"
- question: "There are {fail} failed and {missing} missing items. What do you want to do?"
- options:
- label: "Send feedback (Recommended)", description: "Generate feedback for teammate — they fix it themselves"
- label: "Fix myself", description: "Fix the issues in their code and send back as working"
- label: "Both", description: "Fix what can be fixed, send back the rest as feedback"
- multiSelect: false
If "Send feedback" → proceed to PHASE 6 (feedback). If "Fix myself" → proceed to PHASE 5c (fix loop for ALL failed items). If "Both" → proceed to PHASE 5c (fix loop). After fixes, PHASE 6 generates feedback for remaining MISSING/unfixed items.
PHASE 5c: Fix Loop
Todo: mark PHASE 5 →
completed, PHASE 5c →in_progress. Skip if user chose "Send feedback". Read.claude/skills/team-verify/references/phase-5c-fix-loop.mdand follow the fix-iterate-retest flow.
PHASE 5d: Regression Check
Todo: mark PHASE 5c →
completed, PHASE 5d →in_progress.
Skip when:
- No fixes applied in PHASE 5c
- No previously-PASS AUTO items in PHASE 4b
- All fixes were MANUAL-only (config/styling — low chance of side effects)
Goal: Verify that fixes have not broken previously working functionality.
Collect all items from PHASE 4b that were PASS and had AUTO classification. Re-run these via Task agent (same approach as PHASE 3).
Display:
REGRESSION CHECK: {feature-name}
{n} previously-PASS AUTO items re-tested...
| # | Test | Was | Now |
|---|--------------------|--------|--------|
| 1 | Valid registration | ✓ PASS | ✓ PASS |
| 4 | Email format | ✓ PASS | ✗ FAIL |
Regressions: {n} | Stable: {n}
No regressions: Continue to PHASE 6.
Regressions found: Add FAIL items to results. Offer the same fix/feedback choice as PHASE 5:
Use AskUserQuestion:
- header: "Regression"
- question: "{n} previously working items are now failing. What do you want to do?"
- options:
- label: "Fix (Recommended)", description: "Fix the regressions (back to PHASE 5c for these items)"
- label: "Send feedback", description: "Report regressions in feedback to teammate"
- label: "Accept", description: "Mark as known issue"
- multiSelect: false
After regression fix: Do NOT repeat PHASE 5d (max 1 regression pass to prevent loops).
PHASE 6: Update + Feedback
Todo: mark PHASE 5d →
completed, PHASE 6 →in_progress.
Step 1: Parallel Sync (feature.json + backlog + dashboard) — follow shared/SYNC.md 3-File Sync Pattern
Update feature.json (
BRIEF_REVIEWmode only, skip if it does not exist):requirements[].status→"pass"/"fail"/"missing"per requirement- Add/update
testssection with session results - Update feature
statusif appropriate - Do NOT overwrite other sections
Update backlog (if
.project/backlog.jsonexists,BRIEF_REVIEWorTODO_REVIEWmode): (seeshared/BACKLOG.mdfor parse/write pattern)- Find feature in
data.features[]by name - All PASS + no MISSING →
.status = "DONE", removestage - Otherwise →
.statusstays"DOING",.stagestays"built" data.updated→ current date- Edit
.project/backlog.json
- Find feature in
Update project.json (if
.project/project.jsonexists,BRIEF_REVIEWorTODO_REVIEWmode): (seeshared/DASHBOARD.md)featuresarray: find feature by name, set status to"DONE"(all pass) or"DOING"+ stage"built"(fails remaining)stack.packages: merge if packages were installed during fix loopendpoints: merge if changed during fixesdata.entities: merge if changed during fixesarchitecture.componentsin.project/project-context.json— follow component-first model fromshared/DASHBOARD.md:- Confirm component status →
"done", merge test files from PHASE 3 into componenttest[], merge source fixes from PHASE 5c intosrc[] - Add new components if they were created during fixes
- Skip if no
architecture.componentsexists in project-context.json
- Confirm component status →
Scoped auto-commit — follow shared/SCOPED-COMMIT.md. team-verify deltas:
- Baseline: status form —
.project/session/pre-skill-status.txt. - OVERLAP policy: interactive.
- Fallback: stage known codebase skill-output files only (acceptance test files, source files modified during verification).
.project/is local-only — never stage it. - Commit:
git commit -m "test({feature}): {pass}/{total} requirements verified" - Cleanup:
rm -f .project/session/pre-skill-status.txt /tmp/current-status.txtplusnode ~/.claude/scripts/ship-checkpoint.js signal-clear {feature-name}
- Baseline: status form —
Step 2: Teammate Feedback
Todo: if not
BRANCH_ONLYmode → read.claude/skills/team-verify/references/phase-6-feedback.mdand generate feedback using the appropriate template.
Mode Comparison
See PHASE 0 step 4 for the mode definition table (BRIEF_REVIEW / TODO_REVIEW / BRANCH_ONLY). The behavioral differences per phase are documented inline at each phase that specifies a Skip if: or mode requirement.
References
Read these Just-In-Time during specific phases — do not load upfront.
| File | When to load |
|---|---|
references/phase-0-5-completeness.md |
PHASE 0.5 — completeness agent prompts for BRIEF_REVIEW and TODO_REVIEW |
references/phase-1-scenario-agent.md |
PHASE 1 — Explore agent prompt for scenario research |
references/phase-3-task-agent.md |
PHASE 3 — Task agent prompt + result parsing for AUTO test execution |
references/phase-4-manual.md |
PHASE 4 — interactive manual test loop |
references/phase-5c-fix-loop.md |
PHASE 5c — fix-iterate-retest flow (only when user chose Fix myself/Both) |
references/phase-6-feedback.md |
PHASE 6 Step 2 — feedback templates for BRIEF_REVIEW and TODO_REVIEW |
references/completeness-patterns.md |
PHASE 0.5 — matching patterns for Explore agent (load alongside phase-0-5) |
Todo: mark PHASE 6 →
completed.