Context
From discussion #17412 — Static Analysis Report 2026-02-21.
Problem
ShellCheck (via actionlint) reports 132 SC2086 warnings across 66 workflows: shell variables referenced without double-quotes, risking word splitting and glob expansion.
The most common pattern is unquoted $GITHUB_OUTPUT and similar special variables in compiled workflow steps:
# ❌ Unquoted - risks word splitting
echo "has_content=true" >> $GITHUB_OUTPUT
# ✅ Quoted - safe
echo "has_content=true" >> "$GITHUB_OUTPUT"
Additionally, 162 SC2129 style warnings across all 156 workflows suggest using grouped redirects:
# ❌ Individual redirects
echo "foo=bar" >> $GITHUB_OUTPUT
echo "baz=qux" >> $GITHUB_OUTPUT
# ✅ Grouped redirect
{
echo "foo=bar"
echo "baz=qux"
} >> "$GITHUB_OUTPUT"
Steps
- Search the workflow compiler (
pkg/workflow/) for generated shell script templates that use $GITHUB_OUTPUT, $GITHUB_ENV, $GITHUB_STEP_SUMMARY etc. without quotes
- Update the compiler templates to quote all variable references:
"$GITHUB_OUTPUT", "$GITHUB_ENV", "$GITHUB_STEP_SUMMARY"
- For grouped output patterns, update templates to use
{ ... } >> "$GITHUB_OUTPUT" syntax
- Run
make recompile to regenerate all .lock.yml files
- Verify with actionlint that SC2086/SC2129 warnings are reduced
- Run
make agent-finish before committing
Acceptance Criteria
Generated by Plan Command for issue #discussion #17412
Context
From discussion #17412 — Static Analysis Report 2026-02-21.
Problem
ShellCheck (via actionlint) reports 132 SC2086 warnings across 66 workflows: shell variables referenced without double-quotes, risking word splitting and glob expansion.
The most common pattern is unquoted
$GITHUB_OUTPUTand similar special variables in compiled workflow steps:Additionally, 162 SC2129 style warnings across all 156 workflows suggest using grouped redirects:
Steps
pkg/workflow/) for generated shell script templates that use$GITHUB_OUTPUT,$GITHUB_ENV,$GITHUB_STEP_SUMMARYetc. without quotes"$GITHUB_OUTPUT","$GITHUB_ENV","$GITHUB_STEP_SUMMARY"{ ... } >> "$GITHUB_OUTPUT"syntaxmake recompileto regenerate all.lock.ymlfilesmake agent-finishbefore committingAcceptance Criteria
make recompilesucceedsmake test-unit)