promptdojo_

The SOP is data — get the process out of Vera's head without letting the model invent it — step 8 of 8

Checkpoint

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

Checkpoint: the release gate. Every proposed SOP change goes through release_sop(change) before it becomes the new version.

A change has id, drafter, reviewer, current (with version), and proposed (with version and steps). Collect reason strings in this order:

  1. Proposed version equals current version → "version not bumped"
  2. Reviewer falsy → "no reviewer"; otherwise reviewer equals drafter → "reviewer is the drafter"
  3. For each proposed step, both step rules from the lint:
    • model-filled and unverified → f"step {n} unverified model fill"
    • safety-touching without safety review (use .get for both keys) → f"step {n} safety step unreviewed"

Return the list. The call site prints RELEASED v{version} when empty, else BLOCKED — with reasons "; "-joined.

Expected output:

sop-receiving: RELEASED v1.1
sop-stuck-orders: BLOCKED — reviewer is the drafter
sop-hazmat-intake: BLOCKED — version not bumped; step 2 unverified model fill

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