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:
- Proposed version equals current version →
"version not bumped" - Reviewer falsy →
"no reviewer"; otherwise reviewer equals drafter →"reviewer is the drafter" - 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
.getfor both keys) →f"step {n} safety step unreviewed"
- model-filled and unverified →
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