diff --git a/deployment/aliyun/host-bybit-options-shadow-gate.sh b/deployment/aliyun/host-bybit-options-shadow-gate.sh index 5ff299d9..0eb2056c 100755 --- a/deployment/aliyun/host-bybit-options-shadow-gate.sh +++ b/deployment/aliyun/host-bybit-options-shadow-gate.sh @@ -401,6 +401,7 @@ jq -n \ --argjson disk_free_gb "$disk_free_gb" \ --argjson upload_failure_count "$upload_failure_count" \ --argjson last_upload_success_at "$last_upload_success_at" \ + --arg SHADOW_SPOOL "$SHADOW_SPOOL" \ '{schema:$schema,run_id:$run_id,created_at:$created_at,completed_at:$completed_at, candidate_sha256:$candidate_sha256, deployment_bundle_sha256:$deployment_bundle_sha256, diff --git a/deployment/aliyun/test-bybit-options-shadow-gate.sh b/deployment/aliyun/test-bybit-options-shadow-gate.sh index 1ba4bd70..09f2343e 100755 --- a/deployment/aliyun/test-bybit-options-shadow-gate.sh +++ b/deployment/aliyun/test-bybit-options-shadow-gate.sh @@ -146,6 +146,11 @@ grep -Fq 'bybit-options-shadow-gate-policy.jq' "$shadow_gate" grep -Fq 'bybit-options-control-plane-lib.sh' "$shadow_gate" grep -Fq 'spool_drained:true' "$shadow_gate" grep -Fq 'upload_status:{failure_count:' "$shadow_gate" +# The receipt jq program references $SHADOW_SPOOL in the service block; the +# argument must actually be passed or the gate dies after a passing +# observation window with "jq: $SHADOW_SPOOL is not defined". +# shellcheck disable=SC2016 # literal contract assertion, $SHADOW_SPOOL must not expand +grep -Fq -- '--arg SHADOW_SPOOL "$SHADOW_SPOOL"' "$shadow_gate" # Cutover contract: the candidate must clear a full shadow gate before the # production unit can be started, and the production env must stay fail-closed.