githubnext / githubnext/gh-aw-cao
[aw-maintenance:compiler-security] Compiler exit 1 on daily-runtime-threat-scan.md: zizmor strict mode fails despite 0 findings
- Dominant language
- JavaScript
- Stars
- 3
- Forks
- 1
- Avg merge
- 48m
- Merged PRs (30d)
- 853
Description
**Executive summary**: Compiling `github/gh-aw-actions` failed (exit code 1) on the single workflow source `.github/workflows/daily-runtime-threat-scan.md`. actionlint passed with no reported errors, but zizmor's strict-mode gate reported failure while explicitly stating "0 security warnings/errors" were found — an internal contradiction suggesting a compiler/zizmor-invocation bug rather than an actual security finding. Recommended next action: investigate the zizmor strict-mode check logic (likely a non-zero exit code from the zizmor process being misinterpreted as "findings present" even when it reports zero), then rerun the local fixing loop below to confirm.
- **Target repository**: `github/gh-aw-actions`
- **Compiler exit code**: `1`
- **Workflow sources checked**: `1`
- **Generated lock files checked**: `1`
- **Result**: `findings`
### Findings
| Tool | Workflow/Image | Severity | Finding | Remediation |
|------|-----------------|----------|---------|-------------|
| zizmor (via gh-aw compile, strict mode) | `daily-runtime-threat-scan.lock.yml` | unknown | Strict-mode gate reports failure ("zizmor found 0 security warnings/errors ... workflows must have no zizmor findings in strict mode") despite explicitly stating 0 findings — likely a compiler bug misinterpreting zizmor's exit status rather than a real vulnerability | Investigate gh-aw's strict-mode zizmor result parsing; confirm whether zizmor itself exited non-zero for an unrelated reason (e.g. tool error) vs. the wrapper mis-flagging a clean scan as failing |
| actionlint | `daily-runtime-threat-scan.lock.yml` | n/a | No errors reported | none needed |
The generated lock file diff also shows substantial unrelated regeneration churn (399 insertions / 231 deletions), consistent with a normal recompile against a newer gh-aw compiler version rather than a source edit.
### Local fixing loop
1. Install or update the gh-aw extension, then configure the coding agent's MCP client to launch `gh aw mcp-server` over stdio from the target repository (`github/gh-aw-actions`).
2. Give the agent the prompt below and require it to use the `fix` and `compile` MCP tools rather than editing generated `.lock.yml` files.
3. Require the agent to repeat the same full compiler validation and security scan until it passes, or stop and explain any finding that needs human action.
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. In particular, determine why zizmor's strict-mode check fails even though it reports 0 findings for `daily-runtime-threat-scan.lock.yml`, and confirm whether this is a compiler-side bug rather than an actual security issue.
Raw compiler output (report.txt)
```
✓ .github/workflows/daily-runtime-threat-scan.md (99.2 KB)
i Using actionlint 1.7.12
i Running actionlint (with shellcheck/pyflakes) on .github/workflows/daily-runtime-threat-scan.lock.yml
i Running zizmor security scanner on .github/workflows/daily-runtime-threat-scan.lock.yml
✗ zizmor failed
strict mode: zizmor found 0 security warnings/errors in daily-runtime-threat-scan.lock.yml - workflows must have no zizmor findings in strict mode
```
Diff summary
```
.github/workflows/daily-runtime-threat-scan.lock.yml | 630 +++++++++++++--------
1 file changed, 399 insertions(+), 231 deletions(-)
```
Git status:
```
M .github/workflows/daily-runtime-threat-scan.lock.yml
?? .github/aw/logs/
```
### Control Plane
- Correlation ID: `33808856057-28`
- Central repository: `githubnext/gh-aw-cao`
- Control plane run URL: https://github.com/githubnext/gh-aw-cao/actions/runs/33808856057
> Generated by [:shield: AW Maintenance / Compiler Security](https://github.com/githubnext/gh-aw-cao/actions/runs/33809434377) · copilot · auto · 16.1 AIC · ⌖ 8.97 AIC · ⊞ 13.9K · [◷](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 17, 2026, 9:49 PM UTC
Contributor guide
Research direction
Start by reproducing the failure with `gh aw compile` for `.github/workflows/daily-runtime-threat-scan.md`, using the generated `daily-runtime-threat-scan.lock.yml` and the reported zizmor output. Trace how strict mode handles zizmor's process result versus its reported finding count. Done means a clean zero-finding scan no longer causes a compiler exit of 1, while genuine zizmor findings still fail strict mode.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github-actions, javascript
- Domain
- ci-cd, security, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100