Problem
Recording a skipped verification via porch verify <id> --skip "reason" then porch done advances the SPIR protocol straight to complete (verified) WITHOUT ever firing the verify-approval gate:
status.yaml gates.verify-approval : still 'pending'
porch gate <id> : 'No gate required for this phase'
porch pending : project absent
porch next : {"status": "complete", "phase": "verified"}
So the human-approval checkpoint that the gate represents is silently skipped along with the verification step, and nothing offers it to a human. If the final sign-off matters as a recorded artifact, an operator must know to run porch approve <id> verify-approval unprompted — porch will not ask, and the protocol already reports complete.
A skip of the verification WORK is a legitimate branch (that's what --skip is for); skipping the human APPROVAL of that decision as a side effect conflates two different checkpoints.
Observed: cluesmith/shannon project 3358, 2026-07-27. Caught because the builder refused to treat 'porch says complete' as equivalent to 'the owner's sign-off happened' and reported the pending-but-unrequested gate rather than letting it pass.
Problem
Recording a skipped verification via
porch verify <id> --skip "reason"thenporch doneadvances the SPIR protocol straight tocomplete (verified)WITHOUT ever firing theverify-approvalgate:So the human-approval checkpoint that the gate represents is silently skipped along with the verification step, and nothing offers it to a human. If the final sign-off matters as a recorded artifact, an operator must know to run
porch approve <id> verify-approvalunprompted — porch will not ask, and the protocol already reports complete.A skip of the verification WORK is a legitimate branch (that's what --skip is for); skipping the human APPROVAL of that decision as a side effect conflates two different checkpoints.
Observed: cluesmith/shannon project 3358, 2026-07-27. Caught because the builder refused to treat 'porch says complete' as equivalent to 'the owner's sign-off happened' and reported the pending-but-unrequested gate rather than letting it pass.