--- name: "validation-pipeline" description: "Runs multi-stage validation gates with per-step scoring, pass/fail verdicts, and aggregate quality reports. Use when validating requirements, code, or artifacts through structured gate enforcement before merge or release." trust_tier: 3 validation: schema_path: schemas/output.json validator_path: scripts/validate-config.json eval_path: evals/validation-pipeline.yaml --- # Validation Pipeline ## Purpose Run structured validation pipelines that execute steps sequentially, enforce gates at blocking failures, and produce scored reports. Uses `.claude/helpers/validation-pipeline.cjs` with 13 requirements validation steps (BMAD-003). ## Activation - When validating requirements documents - When running structured quality gates - When assessing document completeness, testability, or traceability - When invoked via `/validation-pipeline` ## Quick Start ```bash # Validate a requirements document (all 13 steps) /validation-pipeline requirements docs/requirements.md # Validate with specific steps only /validation-pipeline requirements docs/requirements.md --steps format-check,completeness-check,invest-criteria # Continue past blocking failures /validation-pipeline requirements docs/requirements.md --continue-on-failure # Output as JSON /validation-pipeline requirements docs/requirements.md --json ``` ## Workflow ### Step 1: Read the Target Document Read the file specified by the user. If no file is provided, ask for one. ``` Read the target document using the Read tool. Store the content for pipeline execution. ``` ### Step 2: Select Pipeline Choose the appropriate pipeline based on the user's request: | Pipeline | Steps | Use Case | |----------|-------|----------| | `requirements` | 13 | Requirements documents, PRDs, user stories | Additional pipelines can be added to `.claude/helpers/validation-pipeline.cjs`. ### Step 3: Execute Pipeline The pipeline helper (`.claude/helpers/validation-pipeline.cjs`) handles execution: 1. **Sequential execution** — steps run in order, each receiving results from prior steps 2. **Gate enforcement** — blocking steps that fail halt the pipeline (unless `--continue-on-failure`) 3. **Per-step scoring** — each step produces a 0-100 score with findings and evidence 4. **Weighted rollup** — overall score uses category weights (format=10%, content=30%, quality=25%, traceability=20%, compliance=15%) #### Requirements Pipeline Steps (13 total) | # | Step ID | Category | Severity | What It Checks | |---|---------|----------|----------|----------------| | 1 | `format-check` | format | blocking | Headings, required sections, document length | | 2 | `completeness-check` | content | blocking | Required fields populated, acceptance criteria present | | 3 | `invest-criteria` | quality | warning | Independent, Negotiable, Valuable, Estimable, Small, Testable | | 4 | `smart-acceptance` | quality | warning | Specific, Measurable, Achievable, Relevant, Time-bound | | 5 | `testability-score` | quality | warning | Can each requirement be tested? | | 6 | `vague-term-detection` | content | info | Flags "should", "might", "various", "etc." | | 7 | `information-density` | content | info | Every sentence carries weight, no filler | | 8 | `traceability-check` | traceability | warning | Requirements-to-tests mapping exists | | 9 | `implementation-leakage` | quality | warning | Requirements don't prescribe implementation | | 10 | `domain-compliance` | compliance | info | Alignment with domain model | | 11 | `dependency-analysis` | traceability | info | Cross-requirement dependencies identified | | 12 | `bdd-scenario-generation` | quality | warning | Can generate Given/When/Then for each requirement | | 13 | `holistic-quality` | compliance | blocking | Overall coherence, no contradictions | ### Step 4: Report Results Format the pipeline result as a structured report: ```markdown # Validation Report: Requirements Pipeline **Overall**: PASS/FAIL/WARN | **Score**: 85/100 | **Duration**: 42ms ## Step Results | # | Step | Status | Score | Findings | Duration | |---|------|--------|-------|----------|----------| | 1 | Format Check | PASS | 100 | 0 | 2ms | | 2 | Completeness | WARN | 60 | 2 | 5ms | ... ## Blockers - (blocking findings listed here) ## All Findings - [HIGH] Missing acceptance criteria: Requirement US-104 has no AC - [MEDIUM] Vague term: "should" used 5 times without specifics ... ``` ### Step 5: Record Learning After pipeline execution, record the outcome for learning: ```typescript // Store validation pattern memory store --namespace validation-pipeline --key "req-validation-{timestamp}" --value "{score, findings_count, halted}" ``` ## Parameters | Parameter | Type | Default | Description | |-----------|------|---------|-------------| | `pipeline` | string | `requirements` | Pipeline type to run | | `file` | string | required | Path to document to validate | | `--steps` | string | all | Comma-separated step IDs to run (e.g., `format-check,completeness-check`) | | `--continue-on-failure` | boolean | false | Skip blocking gates | | `--json` | boolean | false | Output as JSON instead of markdown | | `--metadata` | object | {} | Additional context for steps | ## Integration Points - **qe-requirements-validator agent** — delegates structured validation to this pipeline - **qe-quality-gate agent** — uses pipeline for gate evaluation - **YAML Pipelines** — can invoke validation steps as workflow actions - **MCP** — accessible via `pipeline_validate` tool ## Output Schema The pipeline produces a `PipelineResult` object (see `schemas/output.json`): ```typescript { pipelineId: string; pipelineName: string; overall: 'pass' | 'fail' | 'warn'; score: number; // 0-100 weighted average steps: StepResult[]; // per-step details blockers: Finding[]; // blocking findings halted: boolean; haltedAt?: string; // step ID where halted totalDuration: number; timestamp: string; } ``` ## Error Handling - **Step throws exception** — captured as a FAIL with critical finding, pipeline continues or halts per severity - **File not found** — report error, do not run pipeline - **Empty document** — format-check step will catch this as a blocking failure