| name | add-delivery-validation |
| description | Product validation: Requirements 100% implemented, prerequisites exist, acceptance criteria pass. |
Delivery Validation
Skill for PRODUCT validation โ checks whether requirements were 100% implemented.
When to Use
- Before
/add-done (final gate)
- After
/review (complementary)
- When the feature appears ready
Difference from code-review:
| code-review (Technical) | delivery-validation (Product) |
|---|
| IoC, SOLID, security | RF/RN implemented? |
| Type contracts | Acceptance criteria passing? |
| Build compiles? | Functionality works end-to-end? |
| Technical patterns | Implicit dependencies created? |
Runtime arm โ /add.qa: this skill validates delivery statically (reads the code/docs, checks the RF/RN checklist). /add.qa (the playwright plugin, opt-in) is the runtime arm of the same goal โ it drives the running app to prove functional delivery against about.md acceptance criteria (and UX fidelity vs design.md), producing a _tests/run-NNN/qa-validation-NNN.md audit. Use them together when the feature has UI: this skill confirms the requirements exist in code; /add.qa confirms they actually work in the browser.
When NOT to Use
- During development (run only when feature appears ready)
- To validate code quality (use
code-review instead)
- Without a defined
about.md
- For planning or discovery work
Workflow
Phase 1: Load Requirements
FEATURE_ID=$(bash .codeadd/scripts/status.sh)
cat docs/features/${FEATURE_ID}/about.md
cat docs/features/${FEATURE_ID}/plan.md 2>/dev/null
cat docs/features/${FEATURE_ID}/tasks.md 2>/dev/null
Extract from about.md:
- RF (Functional Requirements): What the system MUST do
- RN (Business Rules): Conditions and behaviors
- Acceptance Criteria: Testable checks
- Included Scope: What IS part of the delivery
Extract contracts from plan.md (prose) + tick state from tasks.md โ ## Acceptance Checklist:
From plan.md (prose): routes, services, DTOs, guards, migrations, queues โ as defined in the plan.
From tasks.md โ ## Acceptance Checklist: a checklist where each item ends with (RFNN/RNNN) reference and carries [ ]/[x]/[!] tick state set by add.build/add.autopilot validators.
Map each ## Acceptance Checklist item to the corresponding RF/RN from about.md. Use ## Requirements Coverage from tasks.md as a derived index โ every RF/RN must have coverage by โฅ1 item from ## Acceptance Checklist.
IF tasks.md or ## Acceptance Checklist does NOT exist (legacy feature, pre-PRD0014):
- BLOCK validation. The feature was not planned with the current schema; there is no automatic fallback.
- Warn: "tasks.md missing or has no ## Acceptance Checklist โ feature must be replanned via /add.plan."
Phase 2: Build Validation Checklist
For EACH requirement, create a verifiable item:
## Requirements Checklist
### Functional Requirements
- [ ] **RF01:** [description] โ [how to verify]
- [ ] **RF02:** [description] โ [how to verify]
### Business Rules
- [ ] **RN01:** [condition] โ [expected result]
- [ ] **RN02:** [condition] โ [expected result]
### Acceptance Criteria
- [ ] [criterion 1] โ [how to test]
- [ ] [criterion 2] โ [how to test]
Phase 3: Verify Prerequisites (CRITICAL)
For EACH requirement, analyze implicit dependencies:
## Prerequisites Analysis
### RF01: "Check product tier before allowing download"
**Dependency analysis:**
1. Does Product need a `tier` field? โ [VERIFY in model]
2. Is there a flow to assign tier? โ [VERIFY endpoints]
3. Is tier already populated? โ [VERIFY data]
**Status:**
- [ ] tier field exists on Product โ โ
/โ
- [ ] Assignment flow exists โ โ
/โ
- [ ] Data is consistent โ โ
/โ
Key questions for each requirement:
- "What MUST exist for this to work?"
- "What data/fields are needed?"
- "What dependent flows are needed?"
- "What integrations are needed?"
Phase 3.5: Validate Acceptance Checklist (tasks.md โ ## Acceptance Checklist)
For EACH item in ## Acceptance Checklist, cross-check tick state vs reality:
| Item (with RF/RN ref) | Tick state | Expected (from plan.md) | Found | Status |
|---|
| Route POST /billing/webhook/:provider returns 200 (RF02) | [x] | WebhookController.handleWebhook() | POST /webhook (fixed) | โ ๏ธ DIVERGENT |
| Service WebhookNormalizerService is provider-agnostic (RF02) | [!] | generic, provider-agnostic | StripeWebhookService | โ MISSING |
| DTO WebhookEventDto exposes {provider, payload, signature} (RF02) | [ ] | {provider, payload, signature} | WebhookDto {payload} | โ ๏ธ DIVERGENT |
Status per item:
- โ
COMPLIANT: tick
[x] AND implementation matches plan.md prose
- โ ๏ธ DIVERGENT: tick
[x] but implementation differs from plan.md (validator was wrong OR drift after tick)
- โ MISSING/FAILED: tick
[!] (validator already marked failure) OR tick [ ] still pending
- ๐จ STALE TICK: tick
[x] but code does not exist โ blocks delivery; reopen tick
Mandatory cross-reference: Do all RF/RN from ## Requirements Coverage (tasks.md ยง1) have a corresponding item in ## Acceptance Checklist (tasks.md ยง4)?
- IF yes โ validation is deterministic (checklist-driven)
- IF gap โ document which RF/RN are uncovered โ architect failure when generating tasks.md, requires regenerating via /add.plan
Phase 4: Validate Implementation
For EACH checklist item (about.md + tasks.md โ ## Acceptance Checklist):
- Locate code that implements it (
grep -r "[key-term]" apps/ libs/ --include="*.ts")
- Verify the logic is correct โ RN conditions implemented? Edge cases handled? Full end-to-end flow?
- Mark status:
- โ
Implemented: Code exists and is correct
- โ ๏ธ Partial: Implemented but incomplete
- โ Not implemented: Completely missing
- ๐ Missing prerequisite: Dependency does not exist
Phase 6: Generate Report
Output: validation-report.md
# Delivery Validation: [Feature]
**Date:** [date] | **Status:** โ
APPROVED / โ BLOCKED
## Summary
| Total | Implemented | Partial | Missing | Prerequisites OK |
|-------|-------------|---------|---------|------------------|
| N | N | N | N | true/false |
---
## Functional Requirements
| ID | Requirement | Status | Note |
|----|-------------|--------|------|
| RF01 | [desc] | โ
| Implemented at `path:line` |
| RF02 | [desc] | โ | Not found |
---
## Business Rules
| ID | Rule | Status | Note |
|----|------|--------|------|
| RN01 | [cond] โ [result] | โ
| Logic correct |
| RN02 | [cond] โ [result] | โ ๏ธ | Missing edge case X |
---
## Prerequisites Analysis
| Requirement | Prerequisite | Status | Required Action |
|-------------|--------------|--------|-----------------|
| RF01 | tier field on Product | โ | Create field |
| RF01 | Assignment flow | โ | Create endpoint |
---
## Acceptance Criteria
- [x] [Criterion 1] - Passed
- [ ] [Criterion 2] - Failed: [reason]
---
## Identified Gaps
### Gap 1: [Title]
**Requirement:** RF01
**Problem:** [gap description]
**Impact:** [what does not work]
**Action:** [what needs to be done]
---
## Decision
**Status:** โ
APPROVED / โ ๏ธ NEEDS WORK / โ BLOCKED
**If BLOCKED:**
- [ ] Implement [gap 1]
- [ ] Implement [gap 2]
**If APPROVED:**
Feature ready to merge.
Severities & Blocking Rules
| Severity | Meaning | Blocks merge? |
|---|
| โ
Implemented | Requirement 100% met | No |
| โ ๏ธ Partial | Implemented but incomplete | No โ may merge if documented (TODO for non-critical RN) |
| โ Missing | RF or critical RN not implemented | Yes โ feature incomplete / incorrect behavior |
| ๐ Prerequisite Missing | Dependency does not exist | Yes โ cannot work without it |
Checklist