v2.172.30
fix: bash 3.2 compatibility — unblock pulse dispatch and add automated checker
Root cause: headless-runtime-helper.sh passed the opencode command array as a single escaped string to the sandbox, which tried to exec it as a file path. Every pulse cycle failed silently — 0 workers dispatched despite 25+ runnable tasks.
Fixes:
- headless-runtime-helper.sh: pass cmd array as separate args; exit code via temp file
- setup.sh, mission-dashboard-helper.sh: replace declare -A with string dedup
- aidevops-update-check.sh, quality-feedback-helper.sh: replace ${var,,} with tr
Prevention:
- build.txt: comprehensive bash 3.2 compatibility rules
- linters-local.sh: new check_bash32_compat() gate in quality pipeline