The rollback check's trap now attempts its clean-up whatever happens, keeps a failed clean-up as a nonzero status and prints "check FAILED" on every nonzero exit. Both checks install their trap before the first command that can fail. Deploy step 1, both rollback paths and the script-writing block now chain with && so a failed checkout, fetch, build or write stops the block with its status, instead of a later command restarting the wrong release or masking the failure. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>