PR Pipeline — Authorize → Validate → Review → Merge / auth (pull_request) Successful in 6s
PR Pipeline — Authorize → Validate → Review → Merge / validate (pull_request) Successful in 4s
PR Pipeline — Authorize → Validate → Review → Merge / lint (pull_request) Successful in 2s
PR Pipeline — Authorize → Validate → Review → Merge / ai-review (pull_request) Successful in 2s
PR Pipeline — Authorize → Validate → Review → Merge / gate (pull_request) Successful in 1s
The validate job runs with bash -e -o pipefail. `echo "$FM" | grep -q '^name:'` lets grep exit on first match, which can SIGPIPE the echo; pipefail then reports the pipeline non-zero and the || branch raises a false "Missing name/description". The flagged file set varied run to run (and included files untouched by the PR) while a fresh clone of the same commit passes the identical check. Reproduced: the old form failed 3 of 5 local runs under the same shell flags, the herestring form passed 5 of 5. Use herestrings so no pipe can be broken.