Skip to main content

Verifier Agent

The verifier agent verifies that a phase achieved its GOAL, not just completed its TASKS.

Purpose

Goal-backward verification. Start from what the phase SHOULD deliver, verify it actually exists and works in the codebase.
Critical mindset: Do NOT trust SUMMARY.md claims. SUMMARYs document what Claude SAID it did. You verify what ACTUALLY exists in the code. These often differ.

When Invoked

Spawned by /gsd:execute-phase orchestrator after all plans complete.

Core Principle

Task completion ≠ Goal achievement A task “create chat component” can be marked complete when the component is a placeholder. The task was done — a file was created — but the goal “working chat interface” was not achieved. Goal-backward verification starts from the outcome and works backwards:
  1. What must be TRUE for the goal to be achieved?
  2. What must EXIST for those truths to hold?
  3. What must be WIRED for those artifacts to function?
Then verify each level against the actual codebase.

What It Does

1. Establish Must-Haves

Option A: Must-haves in PLAN frontmatter Extract from plans:
Option B: Use Success Criteria from ROADMAP.md If no must_haves in frontmatter, check for Success Criteria:
  1. Use each Success Criterion directly as a truth
  2. Derive artifacts: For each truth, “What must EXIST?”
  3. Derive key links: For each artifact, “What must be CONNECTED?”
Option C: Derive from phase goal (fallback) If no must_haves AND no Success Criteria:
  1. State the goal from ROADMAP.md
  2. Derive truths: “What must be TRUE?” (3-7 observable behaviors)
  3. Derive artifacts: “What must EXIST?”
  4. Derive key links: “What must be CONNECTED?“

2. Verify Observable Truths

For each truth, determine if codebase enables it. Verification status:
  • ✓ VERIFIED: All supporting artifacts pass all checks
  • ✗ FAILED: One or more artifacts missing, stub, or unwired
  • ? UNCERTAIN: Can’t verify programmatically (needs human)

3. Verify Artifacts (Three Levels)

Use gsd-tools for artifact verification:
Parse JSON result: { all_passed, passed, total, artifacts: [{path, exists, issues, passed}] } For wiring verification (Level 3):
Wiring status:
  • WIRED: Imported AND used
  • ORPHANED: Exists but not imported/used
  • PARTIAL: Imported but not used (or vice versa)

Final Artifact Status

Use gsd-tools for key link verification:
For each link:
  • verified=true → WIRED
  • verified=false with “not found” in detail → NOT_WIRED
  • verified=false with “Pattern not found” → PARTIAL
Fallback patterns (if must_haves.key_links not defined):
Status: WIRED (call + response handling) | PARTIAL (call, no response use) | NOT_WIRED (no call)

5. Check Requirements Coverage

Extract requirement IDs from PLAN frontmatter:
For each requirement ID:
  1. Find its full description in REQUIREMENTS.md
  2. Map to supporting truths/artifacts verified
  3. Determine status:
    • ✓ SATISFIED: Implementation evidence found
    • ✗ BLOCKED: No evidence or contradicting evidence
    • ? NEEDS HUMAN: Can’t verify programmatically
Check for orphaned requirements: If REQUIREMENTS.md maps additional IDs to this phase that don’t appear in ANY plan’s requirements field, flag as ORPHANED.

6. Scan for Anti-Patterns

Identify files modified in this phase, then run anti-pattern detection:
Categorize: 🛑 Blocker (prevents goal) | ⚠️ Warning (incomplete) | ℹ️ Info (notable)

7. Identify Human Verification Needs

Always needs human:
  • Visual appearance
  • User flow completion
  • Real-time behavior
  • External service integration
  • Performance feel
  • Error message clarity
Format:

8. Determine Overall Status

Status: passed — All truths VERIFIED, all artifacts pass levels 1-3, all key links WIRED, no blocker anti-patterns. Status: gaps_found — One or more truths FAILED, artifacts MISSING/STUB, key links NOT_WIRED, or blocker anti-patterns found. Status: human_needed — All automated checks pass but items flagged for human verification. Score: verified_truths / total_truths

9. Structure Gap Output (If Gaps Found)

Structure gaps in YAML frontmatter for /gsd:plan-phase --gaps:

What It Produces

VERIFICATION.md

Stub Detection Patterns

React Component Stubs

API Route Stubs

Wiring Red Flags

Re-Verification Mode

If previous VERIFICATION.md exists with gaps: section:
  1. Parse previous VERIFICATION.md frontmatter
  2. Extract must_haves and gaps
  3. Set is_re_verification = true
  4. Optimization:
    • Failed items: Full 3-level verification
    • Passed items: Quick regression check (existence + basic sanity only)
  5. Include re-verification metadata in output

Philosophy

Don't Trust SUMMARY Claims

Verify the component actually renders messages, not a placeholder.

Don't Assume Existence = Implementation

Need level 2 (substantive) and level 3 (wired).

Don't Skip Key Link Verification

80% of stubs hide here — pieces exist but aren’t connected.

Structure Gaps in YAML

For /gsd:plan-phase --gaps to consume.

Flag for Human When Uncertain

Visual, real-time, external service integration.

Keep Verification Fast

Use grep/file checks, not running the app.

Executor

Implements the plans that verifier checks

Planner

Creates must-haves that verifier uses

Debugger

Investigates gaps found by verifier