Feature-marker prd-validator
Phase 1.5 — Automatic PRD validation after generation. Verifies references exist in codebase, evaluates scope realism, classifies ACs as measurable or vague, and blocks on missing Non-Goals. Generates prd-validation.md in the state directory.
git clone https://github.com/Viniciuscarvalho/Feature-marker
T=$(mktemp -d) && git clone --depth=1 https://github.com/Viniciuscarvalho/Feature-marker "$T" && mkdir -p ~/.claude/skills && cp -r "$T/feature-marker-dist/feature-marker/resources/spec-workflow/skills/prd-validator" ~/.claude/skills/viniciuscarvalho-feature-marker-prd-validator && rm -rf "$T"
feature-marker-dist/feature-marker/resources/spec-workflow/skills/prd-validator/SKILL.mdPRD Validator
Runs automatically as Phase 1.5, between PRD generation and TechSpec generation. Purpose: catch problems in the PRD before they propagate into the TechSpec and Tasks.
Position in flow
[Prompt Enrichment] ↓ PRD generation ↓ [PRD Validation] ← THIS SKILL ↓ TechSpec generation
Entry conditions
must exist inprd.md
(run PRD generation first)tasks/prd-{slug}/- Generates
and saves toprd-validation.md.claude/feature-state/{slug}/ - Load if already exists (resume flow)
- Can be forced with
--revalidate
Validation 1: Reference Existence
Grep the codebase for every entity, service, path, endpoint, and component mentioned in the PRD.
What to check
- Services/classes: e.g., "uses the existing UserService" → grep for
UserService - API endpoints: e.g., "/api/users/connect" → grep for
orusers/connectusersConnect - Database collections/tables: e.g., "connections collection" → grep for
connections - UI components: e.g., "TrainerCard component" → grep for
TrainerCard - File paths: explicit paths mentioned → check they exist with Glob
Classification
- Found in codebase → ✅ Pass
- Not found, but PRD says "will be created" → ⚠️ Warning (document as new entity)
- Not found, PRD implies it exists → ❌ Blocker (misleading reference)
Search commands
# For each entity/service name extracted from PRD: grep -r "{term}" . \ --include="*.ts" --include="*.tsx" --include="*.swift" \ --include="*.rs" --include="*.py" --include="*.go" \ -l 2>/dev/null | head -10
Validation 2: Scope Realism
Requirement count
- Count bullet points or numbered items in functional requirements sections
- ≤8 requirements → ✅ Manageable
- 9–15 requirements → ⚠️ Warning: "This is a larger scope. Consider splitting into phases."
- >15 requirements → ❌ Blocker: "Scope too large. Break into sub-features."
Scope creep word detection
Scan for phrases that inflate scope without commitment:
| Pattern | Example | Action |
|---|---|---|
, , | "It should also support dark mode" | ⚠️ Warning |
, , | "In the future, add analytics" | ⚠️ Warning — move to Deferred |
, , | "Ideally the UX is seamless" | ⚠️ Warning — remove or commit |
, , | "Real-time dashboard" | ⚠️ Warning — clarify complexity |
, , , | "Works for any file type" | ⚠️ Warning — narrow the scope |
Comparison with existing features
If
context.md exists, compare requirement count with similar implemented features.
If similar feature had 6 tasks and this PRD has 18 requirements → flag the discrepancy.
Validation 3: Acceptance Criteria Quality
For each AC in the PRD, classify as measurable or vague:
Vague AC patterns (flag these)
| Pattern | Example |
|---|---|
| Subjective quality | "should feel fast", "good UX", "intuitive interface" |
| Unquantified performance | "loads quickly", "responds fast" |
| Vague compliance | "should be secure", "must be reliable" |
| Undefined success | "users should be happy", "works correctly" |
Measurable AC patterns (accept these)
| Pattern | Example |
|---|---|
| Specific metric | "responds in <500ms for 95% of requests" |
| Boolean condition | "returns 404 when user not found" |
| Explicit state change | "status changes to 'active' after approval" |
| Countable outcome | "displays all 10 items on first load" |
Auto-fix suggestions for vague ACs
When a vague AC is detected, propose a measurable version:
| Vague | Suggested replacement |
|---|---|
| "should be fast" | "page loads within 2 seconds on a 3G connection" |
| "good UX" | "task can be completed in ≤3 steps by a new user" |
| "must be secure" | "all endpoints validate auth token before processing" |
| "responsive design" | "layout is usable on screens ≥320px wide" |
Validation 4: Non-Goals Section
- PRD contains a
,Non-Goals
, orOut of Scope
section → ✅ PassYAGNI - PRD missing any such section → ❌ Blocker
When blocking on missing Non-Goals, suggest a starter list based on common exclusions for the detected feature type (from prompt-enricher keywords):
**Suggested Non-Goals for [feature type]:** - [Context-appropriate exclusion 1] - [Context-appropriate exclusion 2] - [Context-appropriate exclusion 3]
Validation 5: Conflict with Existing PRDs
Scan
tasks/prd-*/prd.md for other PRDs that cover the same domain:
- Extract the top 5 keywords from the current PRD's title and goals
- Check if any existing PRD contains ≥3 of those keywords
- If overlap found:
- ⚠️ Warning: "PRD
covers similar domain. Review for conflicts."prd-{other-slug} - List the overlapping keywords
- ⚠️ Warning: "PRD
Behavior
| Finding type | Effect |
|---|---|
| ✅ Pass | Continue silently |
| ⚠️ Warning | Present to user, ask if they want to fix before proceeding. Can be dismissed. |
| ❌ Blocker | Stop the flow. User must correct before TechSpec generation. Auto-fix suggested when possible. |
User interaction for blockers
❌ PRD Validation Failed — cannot proceed to TechSpec Blocker 1: AC #3 is not measurable Current: "the system should feel responsive" Suggested fix: "page loads within 2 seconds on 3G connection" Blocker 2: No Non-Goals section found Suggested Non-Goals: - Email notifications (requires separate notification service) - Mobile app changes (this feature is web-only) - Bulk operations (out of scope for v1) Would you like me to apply these fixes to the PRD? [Yes / Let me fix manually / Show full report]
User interaction for warnings only
⚠️ PRD Validation — warnings found (non-blocking) • Scope may be large (13 functional requirements) • "UserService" referenced but not found in codebase — confirm it will be created • "In the future, add analytics" → move this to Deferred section Continue to TechSpec generation? [Yes, continue / Let me address these first]
Output: prd-validation.md
Save to
.claude/feature-state/{slug}/prd-validation.md:
## PRD Validation Report Generated: {timestamp} PRD: tasks/prd-{slug}/prd.md ### ✅ Passed - Acceptance criteria are measurable - Non-goals section present - Scope is within reasonable bounds (7 requirements) ### ⚠️ Warnings (non-blocking) - Scope may be large (12 functional requirements) - "UserService" referenced but not found in codebase (will be created as new entity) - Scope creep phrase detected: "In the future, add analytics" → move to Deferred ### ❌ Blockers (must fix before proceeding) - AC #3 is not measurable: "system should feel responsive" → Suggested: "page loads within 2 seconds on 3G connection" - No Non-Goals section found → Suggested Non-Goals: [list] ### Reference Check | Entity | Found in codebase? | Notes | |--------|--------------------|-------| | UserService | ❌ Not found | Marked as new creation in PRD | | /api/users | ✅ Found | src/api/users.ts | | TrainerCard | ✅ Found | Presentation/Features/Trainer/ | ### Scope Analysis - Functional requirements: 12 - Scope creep phrases: 1 ("in the future") - Similar feature: prd-student-enrollment had 6 requirements → this is ~2x larger ### AC Quality | AC | Classification | Issue | |----|----------------|-------| | AC-1: returns 404 when not found | ✅ Measurable | — | | AC-2: fast response | ❌ Vague | "fast" is not quantified | | AC-3: users can connect | ⚠️ Borderline | Add: "within 2 clicks from the dashboard" | ### Verdict BLOCKED — fix 2 blocker(s) before proceeding to TechSpec generation.
Integration with spec-writer
When
prd-validation.md exists and has no blockers, spec-writer reads it for context:
- Use the Reference Check table to know which entities are NEW vs EXISTING
- Use Scope Analysis to calibrate TechSpec complexity
- Reference the passed ACs as the baseline for implementation criteria