diff --git a/packages/mosaic/framework/tools/git/test-ci-queue-wait-tristate.sh b/packages/mosaic/framework/tools/git/test-ci-queue-wait-tristate.sh index 35ea0aee..2ff0465b 100644 --- a/packages/mosaic/framework/tools/git/test-ci-queue-wait-tristate.sh +++ b/packages/mosaic/framework/tools/git/test-ci-queue-wait-tristate.sh @@ -53,6 +53,7 @@ case "$url" in malformed) printf '%s' 'not-json' ;; malformed-statuses-type) printf '%s' '{"state":"success","statuses":"corrupt"}' ;; malformed-status-entry) printf '%s' '{"state":"success","statuses":[null]}' ;; + unknown) printf '%s' '{"state":"success","statuses":[{"status":"cancelled"}]}' ;; large-success) python3 -c 'import json; print(json.dumps({"state":"success", "statuses":[{"status":"success"}], "padding":"x" * (160 * 1024)}), end="")' ;; @@ -128,18 +129,27 @@ run_assertion() { set -e : > "$WORK_DIR/urls.log" -run_assertion success zero success 'state=terminal-success' -run_assertion pending nonzero pending 'ASSERTED_NOT_READY' -run_assertion failure nonzero failure 'ASSERTED_NOT_READY' -run_assertion no-status nonzero no-status 'ASSERTED_NOT_READY' -run_assertion aggregate-success-no-status nonzero aggregate-success-no-status 'ASSERTED_NOT_READY' -run_assertion malformed nonzero malformed 'ASSERTED_NOT_READY' -run_assertion malformed-statuses-type nonzero malformed-statuses-type 'ASSERTED_NOT_READY' -run_assertion malformed-status-entry nonzero malformed-status-entry 'ASSERTED_NOT_READY' -run_assertion large-payload not126 large-success 'state=terminal-success' +# Push readiness is queue clearance, not proof that prior CI succeeded. +run_assertion push-success zero success 'state=terminal-success' +run_assertion push-pending nonzero pending 'ASSERTED_NOT_READY' +run_assertion push-failure zero failure 'queue-clear state=terminal-failure purpose=push' +run_assertion push-no-status zero no-status 'queue-clear state=no-status purpose=push' +run_assertion push-aggregate-success-no-status zero aggregate-success-no-status 'queue-clear state=no-status purpose=push' +run_assertion push-require-status nonzero no-status 'ASSERTED_NOT_READY state=no-status' --require-status +run_assertion push-malformed nonzero malformed 'ASSERTED_NOT_READY' +run_assertion push-malformed-statuses-type nonzero malformed-statuses-type 'ASSERTED_NOT_READY' +run_assertion push-malformed-status-entry nonzero malformed-status-entry 'ASSERTED_NOT_READY' +run_assertion push-unknown nonzero unknown 'ASSERTED_NOT_READY' +run_assertion push-large-payload not126 large-success 'state=terminal-success' run_assertion credential-unresolvable zero credential-unresolvable 'CANNOT_ASSERT' run_assertion provider-unreachable zero unreachable 'CANNOT_ASSERT' +# Merge readiness remains fail-closed and requires exact-head terminal success. +MOSAIC_TEST_PURPOSE=merge run_assertion merge-success zero success 'state=terminal-success' +MOSAIC_TEST_PURPOSE=merge run_assertion merge-failure nonzero failure 'ASSERTED_NOT_READY state=terminal-failure' +MOSAIC_TEST_PURPOSE=merge run_assertion merge-no-status nonzero no-status 'ASSERTED_NOT_READY state=no-status' +MOSAIC_TEST_PURPOSE=merge run_assertion merge-unknown nonzero unknown 'ASSERTED_NOT_READY state=unknown' + if [[ ! -s "$AUDIT_LOG" ]] || ! grep -q '"outcome":"CANNOT_ASSERT"' "$AUDIT_LOG"; then echo "FAIL provider-unreachable-audit: expected durable CANNOT_ASSERT JSONL record" >&2 failures=$((failures + 1))