promptdojo_

Fifty assets, one brand — locks, seeds, and the QA filter — step 9 of 9

Checkpoint

One last thing before we move on. Same surface as a write step — but the lesson doesn't complete until this passes.

Final gate: the full batch QA, exactly as it runs before a client review. Write qa_verdict(asset) applying three checks in this order — first failure wins, one reason per cut:

  1. asset["watermark"] is True → "CUT: watermark"
  2. aspect is not "4:5""CUT: wrong aspect ({aspect})"
  3. distance from the asset's dominant hex to the nearest kit color (largest per-channel difference, as in the last drill) is over 32 → "CUT: off-palette (d={d})"
  4. otherwise → "PASS"

Print {id}: {verdict} per asset, then a final line shipped {n}/{total}. Expected output:

C01: PASS
C02: CUT: watermark
C03: CUT: off-palette (d=81)
C04: CUT: wrong aspect (16:9)
C05: PASS
C06: CUT: watermark
shipped 2/6

(Note C04: its dominant color is a fine off-white — it dies on the crop check before palette is even consulted. Order matters.)

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