promptdojo_

A gate that can't fail isn't a gate — step 7 of 7

Checkpoint

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

Final drill: the override path. Gates get overridden in real pipelines — the sin isn't overriding, it's overriding without a record. Write decide(gate_results, override):

  • gate_results is a list of {"name": str, "passed": bool}.
  • If every gate passed, return "SHIP".
  • If any failed and override is None, return "BLOCK (failed: <names>)" — failed gate names joined with ", ".
  • If any failed and override is a dict with who and reason, return "SHIP-OVERRIDE by <who>: <reason> (failed: <names>)" — the deploy happens, and the log names the human who owns it.

Expected output:

SHIP
BLOCK (failed: regression)
SHIP-OVERRIDE by maya (eng lead): regression is in a deprecated locale (failed: regression)

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