promptdojo_

The spec is the build — tickets an AI can execute without you in the room — step 7 of 8

Write lint_spec(spec) — the gate every ticket passes before any builder sees it. Return (verdict, reasons).

Build reasons in this rule order:

  1. no owner (missing or falsy) → append "no owner"
  2. no acceptance (missing or empty) → append "no acceptance checks"
  3. for each acceptance check, in list order: if any word from VAGUE appears in the lowercased check text, append "<id> vague: <first hit>" — first hit in VAGUE-list order
  4. no out_of_scope (missing or empty) → append "no scope fence"

verdict is "READY" if reasons is empty, else "BLOCKED".

Three tickets run. Expected output:

DS-401: READY
DS-402: BLOCKED — A2 vague: intuitive
DS-403: BLOCKED — no owner; no scope fence

full-screen editor opens — close anytime to keep reading.