一键导入
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 职业分类
Executes HXSK plans with atomic commits, deviation handling, checkpoint protocols, and state management
Memory operation rules — file-based recall/store protocol, field requirements, type registry
Creates executable phase plans with task breakdown, dependency analysis, and goal-backward verification
Validates implemented work against spec requirements with empirical evidence
Idempotent project setup — fresh install, update, or verify via convergence engine
| name | verifier |
| description | Validates implemented work against spec requirements with empirical evidence |
| trigger | 구현 검증, 완료 확인, 페이즈 검증, verify implementation, check phase completion, validate against spec |
TODO|FIXME|placeholder|return null|return {}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:
ls .hxsk/phases/{N}/*-VERIFICATION.md 2>/dev/null
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
ls .hxsk/phases/{N}/*-PLAN.md
ls .hxsk/phases/{N}/*-SUMMARY.md
# Phase goal from ROADMAP
grep "Phase {N}" .hxsk/ROADMAP.md
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 -f "src/components/Chat.tsx" && echo "exists" || echo "missing"
grep -E "TODO|placeholder|stub" "src/components/Chat.tsx"
For each key link, verify the connection exists:
Pattern: Component → API
# Check Chat.tsx calls /api/chat
grep "fetch.*api/chat" "src/components/Chat.tsx"
Pattern: API → Database
# Check route calls prisma
grep "prisma\." "src/app/api/chat/route.ts"
Pattern: Form → Handler
# Check onSubmit has implementation
grep -A5 "onSubmit" "src/components/Form.tsx"
Pattern: State → Render
# Check state is used in JSX
grep "messages\.map" "src/components/Chat.tsx"
If REQUIREMENTS.md exists:
grep "Phase {N}" .hxsk/REQUIREMENTS.md
For each requirement:
Requirement status:
Run anti-pattern detection on modified files:
# TODO/FIXME comments
grep -r -E "TODO|FIXME|XXX|HACK" src/**/*.ts
# Placeholder content
grep -r -E "placeholder|coming soon" src/**/*.tsx
# Empty implementations
grep -r -E "return null|return \{\}|return \[\]" src/**/*.ts
# Console.log only
grep -r -C2 "console\.log" src/**/*.ts
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
grep -r -E "TODO|FIXME|XXX|HACK|PLACEHOLDER" .
# Placeholder text
grep -r -E "placeholder|lorem ipsum|coming soon" .
# Empty implementations
grep -r -E "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}
Stub 탐지와 아티팩트 검증은 네이티브 도구로 수행:
# Stub/placeholder 패턴 탐지
Grep(pattern: "TODO|FIXME|NotImplementedError|pass$|return null|return \\{\\}", path: "src/", output_mode: "content")
# 파일 존재 확인
Glob(pattern: "src/**/*.{ts,js,py}")
# 파일 substance 확인 (빈 파일/최소 구현 탐지)
Read(file_path: "{file}") → 라인 수와 내용 확인