UNPKG

paqad-ai

Version:

Spec-driven development framework — AI agents that think before they type

58 lines (42 loc) • 3.75 kB
--- name: design-system-coverage description: 'Grades the design-system contract for completeness and writes the coverage inventory every later design-test skill reads. Use when a design-test run starts; it always runs first and its tier gates the run.' metadata: model_tier: reasoning cacheable: 'false' output_format: json paqad-meta: skill.meta.yaml --- ## What It Does Grades `docs/instructions/design-system/` for completeness, produces a coverage inventory, and emits the **tier** (`missing | bare | adequate | strong`) the rest of the workflow uses to decide whether to stop, warn, or proceed in strict mode. Runs as Step 0 (readiness gate) and as the first skill in Step 1: every downstream skill consumes this inventory. ## Use This When As the **first skill in every design-test run**. The tier it emits gates the entire workflow. Never skip it; never run other design-test skills without it. ## Inputs - Read every file under `docs/instructions/design-system/` (typically `tokens.md`, `components.md`, `accessibility.md`, `motion.md`, `patterns.md`, `responsive.md`). - Read `references/contract-clauses.md` before grading. ## Procedure The decisions in steps 1–3 are deterministic: drive them with the scripts in `scripts/` rather than re-deriving the logic from prose each run. 1. Run `scripts/list-contract-files.sh` to enumerate which contract files exist and which are empty/stub. 2. For each file, run `scripts/count-clauses.sh <file>` to count contract clauses (the file emits `<path>\t<count>` and skips headings, blank lines, frontmatter delimiters, and lines inside fenced code blocks). Concatenate the rows. 3. Pipe the concatenated counts into `scripts/derive-tier.sh`: it emits a single `tier=<missing|bare|adequate|strong>` line. This is the gate decision: don't second-guess it. 4. Emit the coverage inventory per `assets/output.template.json` to `.paqad/design-test/runs/<run_id>/artifacts/contract-summary.json`. 5. Validate with `scripts/validate-contract.sh`: enforces required fields, allowed tier vocabulary, and rejects empty clause arrays when the tier is `adequate` or `strong`. 6. If tier is `missing`, raise a Decision Pause Contract packet asking the user whether to invoke the `documentation-update` workflow inline for `design-system` before resuming. If tier is `bare`, additionally run `scripts/gap-report.sh` and emit each row as a `DT-DS-XXXX` `documentation-drift` finding (the script's id sequence is stable across runs so retests preserve ids). ## Output Contract - Match `assets/output.template.json`: `{ tier, files: [{ path, present, empty, clause_count }], clauses: { tokens: [...], components: [...], accessibility: [...], responsive: [...], motion: [...], patterns: [...] } }`. - `tier` ∈ `missing | bare | adequate | strong`. - Output must pass `scripts/validate-contract.sh` (exit 0). ## Escalate / Stop Conditions - Stop and prompt when tier is `missing`. Offer inline invocation of the `documentation-update` workflow for the design-system. - Warn when tier is `bare`. Run downstream skills in exploratory mode and tag findings `confidence: low`. - Do not auto-engage `design_test.strict` when tier is `strong`: strict mode is explicit opt-in only. ## Resources - `references/contract-clauses.md` - `scripts/list-contract-files.sh`: enumerate contract files (present/empty/non-empty). - `scripts/count-clauses.sh`: count clauses in one contract file. - `scripts/derive-tier.sh`: derive the tier from per-file counts (pure function of counts). - `scripts/gap-report.sh`: enumerate contract gaps as `DT-DS-XXXX` rows with stable ids. - `scripts/validate-contract.sh`: schema-check the emitted coverage inventory. - `assets/output.template.json` - `agents/openai.yaml`