githubnext / githubnext/gh-aw-cao
[aw-doctor:compiler-security] Strict-mode actionlint failures block compiler security scan (152 errors, 32 workflows)
- Dominant language
- JavaScript
- Stars
- 3
- Forks
- 1
- Avg merge
- 49m
- Merged PRs (30d)
- 837
Description
Compiling `githubnext/gh-aw-cao` (43 workflow sources, 43 generated locks) failed strict-mode `actionlint` validation with **152 errors across 32 lock files**; no vulnerable container images, license findings, or dedicated security-scanner (zizmor/poutine/runner-guard/grype/syft) findings were reported — the run never reached those stages because actionlint failed first. All 152 errors fall into 5 repeating root-cause patterns in the shared `.md` sources (not scanner false positives): (1) `github-mcp-app-token` step-output reference used in a job context where that step doesn't exist — 11 occurrences; (2) `github.aw.import-inputs.role` — `aw` is not a valid `github` context property — 33 occurrences; (3–5) `github.event.inputs.{central_repo,control_plane_run_url,correlation_id,max_repos,rollout_percent}` referenced on `workflow_dispatch` triggers whose input schema doesn't declare them — 73 occurrences; plus 34 unrelated `shellcheck SC2129` style warnings (safe to ignore or batch-fix). Highest-severity/highest-return fix: correct the dispatch-input schema and context references in the shared control/orchestrator workflow template, since that single template is reused by all 32 affected workflows.
**Action:** Assign this issue to Copilot using **Agent prompt** below; review its pull request and merge only after the full compiler and security scan passes.
Failure details
- **Target repository**: `githubnext/gh-aw-cao`
- **Compiler exit code**: `1`
- **Workflow sources checked**: `43`
- **Generated lock files checked**: `43`
- **Result**: `findings`
| Tool | Workflow(s) | Severity | Finding | Remediation |
|---|---|---|---|---|
| actionlint (expression) | 11 workflows incl. `aw-doctor`, `aw-failures-investigator`, `uk-ai-advisory-operational-resilience`, etc. | unknown (actionlint error) | `steps.github-mcp-app-token.outputs.token` referenced but no step with id `github-mcp-app-token` exists in that job | Fix the step id / conditional step reference in the shared MCP-token setup snippet so it matches the actual step id, or guard the reference with the step that defines it |
| actionlint (expression) | 33 occurrences across ~11 orchestrator/self-care/compliance workflows | unknown (actionlint error) | `github.aw.import-inputs.role` used — `aw` is not a defined property of the `github` context | Replace with the correct context path (e.g. an `env`/`steps.outputs` value populated earlier) instead of a nonexistent `github.aw` property |
| actionlint (expression) | 7 workflows incl. `aw-doctor`, `software-development-practices*`, `uk-ai-advisory*`, `eu-cra-compliance-vulnerability-handling-auditor` | unknown (actionlint error) | `github.event.inputs.{central_repo, control_plane_run_url, correlation_id}` read but not declared in the triggering `workflow_dispatch.inputs` schema (7 occurrences each) | Add the missing input declarations to the `workflow_dispatch:` trigger, or stop reading them from `github.event.inputs` if they are only ever passed via the dispatch envelope |
| actionlint (expression) | ~13 orchestrator workflows | unknown (actionlint error) | `github.event.inputs.{max_repos, rollout_percent}` read but undeclared (26 occurrences each) | Same as above — declare these inputs on `workflow_dispatch` or source them from the correct envelope field |
| actionlint (shellcheck SC2129) | 34 occurrences across most affected lock files | style | Multiple individual `>> file` redirects in a `run:` block; shellcheck suggests grouping with `{ ...; } >> file` | Batch the redirects in the shared shell snippet emitting these steps |
Compile output never reached container/image scanning (grype/syft), license scanning (grant), or `zizmor`/`poutine`/`runner-guard` static analysis stages because actionlint (strict mode) failed first — those stages are gated on a clean actionlint pass. Re-run the full suite after the fixes above to get coverage of the remaining scanners.
Agent prompt
1. Assign this issue to Copilot.
2. Configure its MCP client to launch `gh aw mcp-server` over stdio from the target repository, then give it the prompt below. Require the server's `fix` and `compile` tools; never allow direct edits to generated `.lock.yml` files.
3. Review the resulting pull request and require the same full compiler and security scan to pass before merge. If a finding needs human action, require the agent to stop and explain it.
**Agent prompt**
Fix the reported gh-aw compiler and security findings in this repository. Change only `.github/workflows/*.md` sources and directly related files; never edit generated `.lock.yml` files. Use the gh-aw MCP server's `fix` and `compile` tools, rerunning compilation with strict validation, model checks, actionlint, shellcheck, yamllint, zizmor, poutine, runner-guard, grant, grype, and syft until clean. Review generated lock-file diffs, preserve existing behavior, and stop with a concise explanation if a finding cannot be fixed safely.
Raw evidence
```
Target: githubnext/gh-aw-cao
Exit code: 1
Workflow sources: 43
Compiled locks: 43
```
Sample actionlint errors (full report contains 152 errors across 32 lock files; representative excerpt):
```
.github/workflows/aw-doctor.lock.yml:478:29: error: [expression] property "github-mcp-app-token" is not defined in object type {set-runtime-paths: {...}; setup: {...}}
478 | github-token: ${{ steps.github-mcp-app-token.outputs.token || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
.github/workflows/aw-doctor.lock.yml:1187:29: error: [expression] property "aw" is not defined in object type {action: string; ...; repository: string; ...}
1187 | if: ${{ always() && github.aw.import-inputs.role == 'orchestrator' }}
.github/workflows/aw-doctor.lock.yml:1628:39: error: [expression] property "central_repo" is not defined in object type {aw_context: string; max_repos: string; rollout_percent: string; safe_output_mode: string; safe_output_repo: string; target_repo: string}
1628 | CAO_CENTRAL_REPOSITORY: ${{ github.event.inputs.central_repo || '' }}
.github/workflows/aw-doctor.lock.yml:1505:9: error: [shellcheck] shellcheck reported issue in this script: SC2129:style:7:1: Consider using { cmd1; cmd2; } >> file instead of individual redirects
```
Final compiler verdict:
```
✗ actionlint failed
strict mode: actionlint found 152 errors in workflows - workflows must have no actionlint errors in strict mode
```
Control plane context
- Correlation ID: `34067803870-420`
- Central repository: `githubnext/gh-aw-cao`
- Control plane run URL: `https://github.com/githubnext/gh-aw-cao/actions/runs/34067803870`
> Generated by [:shield: AW Doctor / Compiler Security](https://github.com/githubnext/gh-aw-cao/actions/runs/34067803870) · copilot · auto · 53.1 AIC · ⌖ 11.9 AIC · ⊞ 14.2K · [◷](https://github.com/search?q=repo%3Agithubnext%2Fgh-aw-cao+is%3Aissue+%22gh-aw-workflow-call-id%3A+githubnext%2Fgh-aw-cao%2Faw-maintenance-compiler-security%22&type=issues)
> - [x] expires on Sep 20, 2026, 11:58 PM UTC
Contributor guide
Research direction
Start with the shared control/orchestrator workflow template under .github/workflows/*.md and compare its contexts and workflow_dispatch inputs with the reported actionlint errors. Use the gh-aw MCP server's fix and compile tools, without editing generated .lock.yml files, then rerun the full compiler and security scan. Done means strict actionlint and the gated security scanners pass.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github-actions, markdown
- Domain
- ci-cd, security
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100