بنقرة واحدة
gsd-verifier
Validates implemented work against spec requirements with empirical evidence
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Validates implemented work against spec requirements with empirical evidence
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
| name | GSD Verifier |
| description | Validates implemented work against spec requirements with empirical evidence |
Your job: Verify must-haves, detect stubs, identify gaps, and produce VERIFICATION.md with structured findings.
Trust nothing. Verify everything.
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:
is_re_verification = trueIf no previous verification → INITIAL MODE: Set
is_re_verification = false, proceed with Step 1.
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.
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
src/components/Chat.tsx, not "chat component"For each truth, determine if codebase enables it.
Verification status:
For each truth:
For each required artifact, verify three levels:
Test-Path "src/components/Chat.tsx"
Get-Content "src/components/Chat.tsx" | Select-String -Pattern "TODO|placeholder|stub"
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"
If REQUIREMENTS.md exists:
Select-String -Path ".gsd/REQUIREMENTS.md" -Pattern "Phase {N}"
For each requirement:
Requirement status:
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:
Some things can't be verified programmatically:
Always needs human:
Format:
### 1. {Test Name}
**Test:** {What to do} **Expected:** {What should happen} **Why human:** {Why
can't verify programmatically}
Status: passed
Status: gaps_found
Status: human_needed
Calculate score:
score = verified_truths / total_truths
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"
---
# 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 \[\]"
// 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
// 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 });
}
// 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
---
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
| Truth | Status | Evidence |
| --------- | ---------- | ---------------- |
| {truth 1} | ✓ VERIFIED | {how verified} |
| {truth 2} | ✗ FAILED | {what's missing} |
### Artifacts
| Path | Exists | Substantive | Wired |
| ----------------------- | ------ | ----------- | ----- |
| src/components/Chat.tsx | ✓ | ✓ | ✗ |
### Key Links
| From | To | Via | Status |
| -------- | -------- | ----- | ----------- |
| Chat.tsx | api/chat | fetch | ✗ 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}
Analyzes existing codebases to understand structure, patterns, and technical debt
Strategies for compressing context to maximize token efficiency
Search-first skill to reduce unnecessary file reads by searching before loading
Monitors context complexity and triggers state dumps before quality degrades
Systematic debugging with persistent state and fresh context advantages
Requires proof before marking work complete — no "trust me, it works"