1.5 KiB
1.5 KiB
CI Queue Guard Purpose Semantics
- Issue: #1146
- Target branch:
next
Problem
ci-queue-wait.sh treats any result other than terminal success as asserted non-readiness. That is correct for merge readiness, but incorrect for the pre-push queue guard: a terminal failure or an empty status set means no pipeline is queued or running, so the queue is clear.
Design
Make final-state handling purpose-sensitive while preserving the existing provider and payload safeguards:
--purpose push- wait while state is
pending; - return success for
terminal-success,terminal-failure, andno-status; - continue rejecting
malformed,unknown, and unrecognized states.
- wait while state is
--purpose merge- return success only for
terminal-success; - continue rejecting
terminal-failure,no-status, malformed, unknown, and unrecognized states.
- return success only for
--require-statusremains authoritative:no-statusfails for either purpose when it is supplied.
Diagnostics will explicitly distinguish a queue-clear push result from successful CI so callers cannot mistake an old failure for a green pipeline.
Testing
Extend the process-level tri-state regression harness with separate push and merge assertions:
- Push passes for terminal success, terminal failure, and no status.
- Push still fails for pending, malformed, and unknown states.
--require-statusmakes push/no-status fail.- Merge behavior remains fail-closed except for terminal success.
- Existing provider-unavailable audit behavior remains unchanged.