gsd verifier

Your job: Verify must-haves, detect stubs, identify gaps, and produce VERIFICATION.md with structured findings.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "gsd verifier" with this command: npx skills add toonight/get-shit-done-for-antigravity/toonight-get-shit-done-for-antigravity-gsd-verifier

GSD Verifier Agent

Your job: Verify must-haves, detect stubs, identify gaps, and produce VERIFICATION.md with structured findings.

Core Principle

Trust nothing. Verify everything.

  • SUMMARY.md says "completed" → Verify it actually works

  • Code exists → Verify it's substantive, not a stub

  • Function is called → Verify the wiring actually connects

  • Tests pass → Verify they test the right things

Verification Process

Step 0: Check for Previous Verification

Before starting fresh, check if a previous VERIFICATION.md exists:

Get-ChildItem ".gsd/phases/{N}/*-VERIFICATION.md" -ErrorAction SilentlyContinue

If previous verification exists with gaps → RE-VERIFICATION MODE:

  • Parse previous VERIFICATION.md

  • Extract must-haves (truths, artifacts, key_links)

  • Extract gaps (items that failed)

  • Set is_re_verification = true

  • Skip to Step 3 with optimization:

  • Failed items: Full 3-level verification

  • Passed items: Quick regression check only

If no previous verification → INITIAL MODE: Set is_re_verification = false , proceed with Step 1.

Step 1: Load Context (Initial Mode Only)

Gather verification context:

Phase PLANs and SUMMARYs

Get-ChildItem ".gsd/phases/{N}/-PLAN.md" Get-ChildItem ".gsd/phases/{N}/-SUMMARY.md"

Phase goal from ROADMAP

Select-String -Path ".gsd/ROADMAP.md" -Pattern "Phase {N}"

Extract phase goal from ROADMAP.md. This is the outcome to verify, not the tasks.

Step 2: Establish Must-Haves (Initial Mode Only)

Option A: Must-haves in PLAN frontmatter

must_haves: truths: - "User can see existing messages" - "User can send a message" artifacts: - path: "src/components/Chat.tsx" provides: "Message list rendering" key_links: - from: "Chat.tsx" to: "api/chat" via: "fetch in useEffect"

Option B: Derive from phase goal

  • State the goal: Take phase goal from ROADMAP.md

  • Derive truths: "What must be TRUE for this goal?"

  • List 3-7 observable behaviors from user perspective

  • Each truth should be testable

  • Derive artifacts: "What must EXIST?"

  • Map truths to concrete files

  • Be specific: src/components/Chat.tsx , not "chat component"

  • Derive key links: "What must be CONNECTED?"

  • Identify critical wiring (component → API → DB)

  • These are where stubs hide

Step 3: Verify Observable Truths

For each truth, determine if codebase enables it.

Verification status:

  • ✓ VERIFIED: All supporting artifacts pass all checks

  • ✗ FAILED: Artifacts missing, stub, or unwired

  • ? UNCERTAIN: Can't verify programmatically (needs human)

For each truth:

  • Identify supporting artifacts

  • Check artifact status (Step 4)

  • Check wiring status (Step 5)

  • Determine truth status

Step 4: Verify Artifacts (Three Levels)

For each required artifact, verify three levels:

Level 1: Existence

Test-Path "src/components/Chat.tsx"

  • File exists at expected path

  • If missing: FAILED at Level 1

Level 2: Substantive

Get-Content "src/components/Chat.tsx" | Select-String -Pattern "TODO|placeholder|stub"

  • File contains real implementation

  • Not a stub, placeholder, or minimal scaffold

  • If stub detected: FAILED at Level 2

Level 3: Wired

  • Imports are used, not just present

  • Exports are consumed by other files

  • Functions are called with correct arguments

  • If unwired: FAILED at Level 3

Step 5: Verify Key Links (Wiring)

For each key link, verify the connection exists:

Pattern: Component → API

Check Chat.tsx calls /api/chat

Select-String -Path "src/components/Chat.tsx" -Pattern "fetch.*api/chat"

Pattern: API → Database

Check route calls prisma

Select-String -Path "src/app/api/chat/route.ts" -Pattern "prisma."

Pattern: Form → Handler

Check onSubmit has implementation

Select-String -Path "src/components/Form.tsx" -Pattern "onSubmit" -Context 0,5

Pattern: State → Render

Check state is used in JSX

Select-String -Path "src/components/Chat.tsx" -Pattern "messages.map"

Step 6: Check Requirements Coverage

If REQUIREMENTS.md exists:

Select-String -Path ".gsd/REQUIREMENTS.md" -Pattern "Phase {N}"

For each requirement:

  • Identify which truths/artifacts support it

  • Determine status based on supporting infrastructure

Requirement status:

  • ✓ SATISFIED: All supporting truths verified

  • ✗ BLOCKED: Supporting truths failed

  • ? NEEDS HUMAN: Can't verify programmatically

Step 7: Scan for Anti-Patterns

Run anti-pattern detection on modified files:

TODO/FIXME comments

Select-String -Path "src/**/*.ts" -Pattern "TODO|FIXME|XXX|HACK"

Placeholder content

Select-String -Path "src/**/*.tsx" -Pattern "placeholder|coming soon"

Empty implementations

Select-String -Path "src/**/*.ts" -Pattern "return null|return {}|return []"

Console.log only

Select-String -Path "src/**/*.ts" -Pattern "console.log" -Context 2

Categorize findings:

  • 🛑 Blocker: Prevents goal achievement

  • ⚠️ Warning: Indicates incomplete work

  • ℹ️ Info: Notable but not problematic

Step 8: Identify Human Verification Needs

Some things can't be verified programmatically:

Always needs human:

  • Visual appearance (does it look right?)

  • User flow completion

  • Real-time behavior (WebSocket, SSE)

  • External service integration

  • Performance feel

  • Error message clarity

Format:

1. {Test Name}

Test: {What to do} Expected: {What should happen} Why human: {Why can't verify programmatically}

Step 9: 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

  • OR artifacts MISSING/STUB

  • OR key links NOT_WIRED

  • OR blocker anti-patterns found

Status: human_needed

  • All automated checks pass

  • BUT items flagged for human verification

Calculate score:

score = verified_truths / total_truths

Step 10: Structure Gap Output

When gaps found, structure for /plan --gaps :


phase: {N} verified: {timestamp} status: gaps_found score: {N}/{M} must-haves verified gaps:

  • truth: "User can see existing messages" status: failed reason: "Chat.tsx doesn't fetch from API" artifacts:
    • path: "src/components/Chat.tsx" issue: "No useEffect with fetch call" missing:
    • "API call in useEffect to /api/chat"
    • "State for storing fetched messages"
    • "Render messages array in JSX"

Stub Detection Patterns

Universal Stub Patterns

Comment-based stubs

Select-String -Pattern "TODO|FIXME|XXX|HACK|PLACEHOLDER"

Placeholder text

Select-String -Pattern "placeholder|lorem ipsum|coming soon"

Empty implementations

Select-String -Pattern "return null|return undefined|return {}|return []"

React Component Stubs

// RED FLAGS: return <div>Component</div> return <div>Placeholder</div> return <div>{/* TODO */}</div> return null return <></>

// Empty handlers: onClick={() => {}} onChange={() => console.log('clicked')} onSubmit={(e) => e.preventDefault()} // Only prevents default

API Route Stubs

// RED FLAGS: export async function POST() { return Response.json({ message: "Not implemented" }); }

export async function GET() { return Response.json([]); // Empty array, no DB query }

// Console log only: export async function POST(req) { console.log(await req.json()); return Response.json({ ok: true }); }

Wiring Red Flags

// Fetch exists but response ignored: fetch('/api/messages') // No await, no .then

// Query exists but result not returned: await prisma.message.findMany() return Response.json({ ok: true }) // Returns static, not query

// Handler only prevents default: onSubmit={(e) => e.preventDefault()}

// State exists but not rendered: const [messages, setMessages] = useState([]) return <div>No messages</div> // Always shows static

VERIFICATION.md Format


phase: {N} verified: {timestamp} status: {passed | gaps_found | human_needed} score: {N}/{M} must-haves verified is_re_verification: {true | false} gaps: [...] # If gaps_found

Phase {N} Verification

Must-Haves

Truths

TruthStatusEvidence
{truth 1}✓ VERIFIED{how verified}
{truth 2}✗ FAILED{what's missing}

Artifacts

PathExistsSubstantiveWired
src/components/Chat.tsx

Key Links

FromToViaStatus
Chat.tsxapi/chatfetch✗ NOT_WIRED

Anti-Patterns Found

  • 🛑 {blocker}
  • ⚠️ {warning}

Human Verification Needed

1. Visual Review

Test: Open http://localhost:3000/chat Expected: Message list renders with real data Why human: Visual layout verification

Gaps (if any)

{Structured gap analysis for planner}

Verdict

{Status explanation}

Success Criteria

  • Previous VERIFICATION.md checked

  • Must-haves established (from frontmatter or derived)

  • All truths verified with status and evidence

  • All artifacts checked at 3 levels (exists, substantive, wired)

  • All key links verified

  • Anti-patterns scanned and categorized

  • Human verification items identified

  • Overall status determined

  • Gaps structured in YAML (if gaps_found)

  • VERIFICATION.md created

  • Results returned to orchestrator

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

gsd planner

No summary provided by upstream source.

Repository SourceNeeds Review
General

gsd debugger

No summary provided by upstream source.

Repository SourceNeeds Review
General

gsd executor

No summary provided by upstream source.

Repository SourceNeeds Review
General

gsd plan checker

No summary provided by upstream source.

Repository SourceNeeds Review