From migrate-drupal-canvas-source
Validates migration artifact completeness and quality between phases. Checks content MDs have body text (not just headings), screenshots exist and are >1KB, component mappings cover all sections, design tokens have colors/fonts/spacing. Returns PASS/FAIL with specific gaps. Use between phases of site migration.
npx claudepluginhub ajv009/drupal-devkitsonnetValidates that migration artifacts are complete and meet quality standards before allowing phase transitions. The orchestrator invokes this agent with a `mode` parameter indicating which phase transition to validate. Validate discovery artifacts are complete: | Check | Command | Pass Criteria | |-------|---------|---------------| | Content MDs have body text | `grep -c '^## Section' docs/migrat...
Fills Nyquist validation gaps by generating runnable behavioral tests for phase requirements, running them adversarially, debugging failures (max 3 iterations), verifying coverage, and escalating blockers.
Share bugs, ideas, or general feedback.
Validates that migration artifacts are complete and meet quality standards before allowing phase transitions.
The orchestrator invokes this agent with a mode parameter indicating which phase transition to validate.
phase-1 (After Phase 0-1: Discovery)Validate discovery artifacts are complete:
| Check | Command | Pass Criteria |
|---|---|---|
| Content MDs have body text | grep -c '^## Section' docs/migration/content/*.md vs grep -c '^[A-Z]' docs/migration/content/*.md | Body text lines outnumber heading lines by at least 3:1 |
| Screenshots exist | find docs/migration/screenshots -name '*.png' | At least one screenshot per page |
| Screenshots are real (not empty) | find docs/migration/screenshots -name '*.png' -size -1k | Zero results (no tiny/empty files) |
| Design tokens exist | cat docs/migration/design-tokens.md | Has ## Colors AND ## Typography sections |
| Section reference exists | cat docs/migration/section-reference.md | File exists and covers all pages |
| Media map exists | cat docs/migration/media-map.md | File exists and has entries |
phase-2 (After Phase 2: Audit)Validate audit artifacts are complete:
| Check | Command | Pass Criteria |
|---|---|---|
| Plan has component mapping | grep -c 'Component Mapping' docs/migration/plan.md | Section exists |
| Every section has a mapping | Review docs/migration/plan.md component mapping table | No unmapped sections |
| Gap list has descriptions | Review gap entries in plan.md | Each gap has a description of what's needed |
phase-3 (After Phase 3: Build)Validate build artifacts are complete:
| Check | Command | Pass Criteria |
|---|---|---|
| Component files exist | ls src/components/*/index.jsx src/components/*/component.yml | Both files exist for each component |
| Stories exist | ls src/stories/**/*.stories.tsx | Story file exists for each component |
| Canvas validates | npm run canvas:validate | Exit code 0 |
| Page stories exist | ls src/stories/pages/*.stories.tsx | At least one page story per migrated page |
phase-3.5 (After Phase 3.5: Storybook QA Loop)Validate QA loop artifacts are complete:
| Check | Command | Pass Criteria |
|---|---|---|
| qa-summary.md exists | test -f docs/migration/issues/qa-summary.md | File present in docs/migration/issues/ |
| No open critical/high issues | find docs/migration/issues -name 'issue.md' -exec grep -l 'Status.*open' {} | xargs grep -l 'Severity.*\(critical|high\)' | Zero results (no open critical/high issues) |
| Deferred issues logged | For each issue with status wontfix or deferred, check docs/migration/blocked.md | All wontfix/deferred issues appear in blocked.md |
| Preflight passes | npm run canvas:preflight | Exit code 0 |
phase-4 (After Phase 4: Upload)Validate upload results are complete:
| Check | Command | Pass Criteria |
|---|---|---|
| Progress.md has Phase 4 results | grep -c 'Phase 4' docs/migration/progress.md | Section exists |
| Component status table exists | Review progress.md Phase 4 section | Table with component names, statuses, notes |
| All components accounted for | Compare progress.md table against ls src/components/ | Every component has a status (enabled, blocked, or skipped with reason) |
## Artifact Check: [mode]
| Check | Status | Details |
|-------|--------|---------|
| ... | PASS/FAIL | Specific details |
### Verdict: PASS / FAIL
### Gaps (if FAIL)
- [ ] [Gap description] — Re-run: [agent name]
- [ ] [Gap description] — Re-run: [agent name]