Skip to content

fix: clear fixable Node image CVEs and correct burn-down tracking - #70615

Merged
pelikhan merged 6 commits into
mainfrom
pelikhan-issue-69880-aw-top-10-04-burn-down-container-image-480bb3
Oct 20, 2026
Merged

pelikhan merged 6 commits into
mainfrom
pelikhan-issue-69880-aw-top-10-04-burn-down-container-image-480bb3

Conversation

@pelikhan

@pelikhan pelikhan commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Refresh ghcr.io/github/gh-aw-node from digest 11c2c544876c... to verified published multi-platform digest 41835613992d..., clearing four fixable High CVEs in libexpat, zlib, and pcre2. Synchronize both embedded caches and all 345 generated workflow references; non-scan workflow changes are strictly mechanical digest replacements.
  • Raise brace-expansion and undici security floors for subsequent Node image builds, classify this repository-owned image correctly, and gate fixable High findings without turning upstream-owned findings into local scan failures. Gate checks avoid grep-pipeline SIGPIPE false negatives under the Actions shell.
  • Scan committed pins before refreshing. Keep refreshed candidate evidence separate so a clean candidate cannot clear shipped findings, and require committed pin/cache updates, regenerated committed workflows, and rescanning before reporting adoption.
  • Report exact-title family duplicates for maintainer review while preserving unresolved evidence and canonical trackers. Automated closure retains the restrictive legacy Container findings for ... title prefix, required labels, and duplicate state reason; family, index, operational-failure, and unrelated scan tracker titles are rejected by the runtime handler. A failed canonical update does not permit family closure.

Refs #69880 - partial remediation, not an automatic closure. The all-image acceptance criterion remains unverified, and no source burn-down issue was closed.

Evidence and validation

  • Fresh Grype 0.120.1, matching the compiler's pinned scanner version, reports 4 fixable High findings before -> 0 after. The replacement passes on both linux/amd64 and linux/arm64 using the 2026-10-20 vulnerability database. Remaining High GHSA-ch52-4w7c-c8xp in http-cache-semantics 4.2.0 is reported not-fixed.
  • Verified OCI image index supports amd64 and arm64. This adopts an existing published image, not a new image built by this session.
  • make agent-report-progress passed with compatible Bash, including formatting/lint, typecheck, focused JavaScript tests, schema checks, and full 345-workflow drift validation. make recompile passed; focused container-pin Go tests and 10 publisher tests passed. Scanner, close-issue, and close-helper suites passed all 161 tests.
  • Regressions cover vulnerable committed pins with a clean refreshed candidate, mixed-image/mixed-severity large logs under the Actions shell, runtime close authorization, and failed canonical-update processing.
  • Installed revised npm ranges in isolated prefixes and verified bundled modules load and npm remains functional.

Remaining limitations

The shared Docker VM returns ENOSPC when rebuilding the changed Dockerfile. Scanning was recovered using host storage and a checksum-verified native scanner. No unrelated Docker resources were pruned. Other scanned images are built upstream and still require verified fixed image releases/pins and rescans before #69880 can be completed. Family duplicate closure remains a maintainer action, not a prompt-only automated authorization. Investigation evidence is preserved in issue artifact #1.

Refresh the verified Node image digest across compiler caches and generated workflows, tighten dependency floors and fixable-High gates, and enable guarded family tracker deduplication.

Refs #69880

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@pelikhan
pelikhan marked this pull request as ready for review October 20, 2026 19:28
Copilot AI max review requested due to automatic review settings October 20, 2026 19:28
@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

✅ PR Code Quality Reviewer completed the code quality review.

🔎 Code quality review by PR Code Quality Reviewer

@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

✅ Ponytail Reviewer completed successfully!

Ponytail Reviewer

Outcome: reported_no_action

The agent completed and reported no action. A no-op output alone does not verify that all required work was completed or that publication was possible.

Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.

Generated from Ponytail Reviewer · gpt56 · 7.21 AIC · ⌖ 5.32 AIC · ⊞ 14.7K · ◷

Generated by Ponytail Reviewer for #70615

@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

✅ Test Quality Sentinel completed test quality analysis.

Test Quality Sentinel

Outcome: reported_no_action

The agent completed and reported no action. A no-op output alone does not verify that all required work was completed or that publication was possible.

Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.

Generated from Test Quality Sentinel · haiku45 · 5.13 AIC · ⌖ 14.2 AIC · ◇ 1.8 AIC · ⊞ 9.2K · ◷

🧪 Test quality analysis by Test Quality Sentinel

@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer

@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

✅ Design Decision Gate 🏗️ completed the design decision gate check. See the comment below for the result and any generated ADR draft.

Design Decision Gate 🏗️

Outcome: reported_no_action

The agent completed and reported no action. A no-op output alone does not verify that all required work was completed or that publication was possible.

Agent messages are omitted from this comment. The category uses structured run status, not interpretation of agent prose.

Generated from Design Decision Gate 🏗️ · opus55 · 10.1 AIC · ⌖ 31.8 AIC · ◇ 16.2 AIC · ⊞ 1.9K · ◷

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions

Copy link
Copy Markdown
Contributor

Comment Memory

Peek at saved memory (pr-code-quality-reviewer)
reviewed_at: 2026-10-20T19:31:57Z
review_event: REQUEST_CHANGES
top_themes:
  - broad safe-output close-issue title authorization
files_reviewed:
  - .github/workflows/daily-squid-image-scan.md
  - actions/setup/js/daily_squid_image_scan.test.cjs
  - actions/setup/js/Dockerfile.safe-outputs-mcp
  - .github/aw/actions-lock.json
  - pkg/actionpins/data/action_pins.json
  - pkg/workflow/data/action_pins.json
  - scripts/test_publish_safe_outputs_node.py
comment_count: 1

Note

This comment is managed by comment memory.

Expand the saved memory block to view or edit the persistent context for this thread.
Edit only the text inside the backtick fences; workflow metadata and the footer are regenerated automatically.

Learn more about comment memory

🔎 Code quality review by PR Code Quality Reviewer · copilot · gpt50 · 2.24 AIC · ⌖ 0.679 AIC · ⊞ 1.6K · ◷
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Request changes

The broadened close-issue title prefix weakens the safe-output authorization boundary: with target: "*", the workflow can close canonical or unrelated labeled trackers if the agent misidentifies a duplicate. Keep title matching restrictive or enforce exact-title/duplicate constraints in the tool configuration rather than relying solely on prompt instructions.

One blocking issue was found and posted inline.

🔎 Code quality review by PR Code Quality Reviewer · copilot · gpt50 · 2.24 AIC · ⌖ 0.679 AIC · ⊞ 1.6K
Comment /review to run again

Comment thread .github/workflows/daily-squid-image-scan.md
Regenerate workflow locks from merged sources, retaining the verified Node image pin and upstream package-install changes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skills-Based Review 🧠

Applied /diagnosing-bugs and /tdd — commenting with two actionable findings, no blockers.

📋 Key Themes & Highlights

Key Themes

  • Prompt-only safeguards for canonical-tracker protection: the new exact-title duplicate consolidation logic (step 5) relies entirely on prose instructions ("Never close the canonical tracker, #52657, or operational-failure issues") rather than a structural constraint in the close_issue safe-output config. The schema (required_title_prefix + required_labels) does not actually distinguish canonical vs. duplicate issues sharing the same title/labels — worth a follow-up hardening pass.
  • New gate regex test coverage is synthetic-only: daily_squid_image_scan.test.cjs adds a solid parametrized table for the [High].*(fix: ...) gate, but does not test the realistic multi-image/mixed-severity log shape grype will actually emit, which is where regex-anchoring bugs tend to surface.

Positive Highlights

  • ✅ Root-cause fix for the four fixable CVEs is a straightforward, verifiable digest bump synced consistently across all three pin caches (actions-lock.json, pkg/actionpins/data/action_pins.json, pkg/workflow/data/action_pins.json) — a new test (uses the same immutable Node image pin...) guards this invariant going forward.
  • ✅ npm bundled-dependency patch versions (brace-expansion@^5.0.11, undici@^6.28.1) are now also asserted in scripts/test_publish_safe_outputs_node.py, closing a gap where the Dockerfile comment and the actual npm install constraint could silently drift.
  • ✅ The new High-with-available-fix gate (grep -qE ': (error|warning): \[High\].* \(fix: [^)]+\)') correctly distinguishes "fixable" from "not-fixed" High findings (e.g. the documented GHSA-ch52-4w7c-c8xp exception in http-cache-semantics), avoiding over-blocking on upstream-unfixable issues.
  • ✅ PR description is transparent about scope limits (ENOSPC Docker rebuild workaround, partial remediation of #69880) — good faith accounting rather than overclaiming.

345 mechanically-generated .lock.yml digest-only diffs were excluded from detailed review as expected (low risk, verified by make recompile/drift checks per the PR description).

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · copilot · sonnet50 · 105.7 AIC · ⌖ 15.1 AIC · ⊞ 10.2K
Comment /matt to run again

Comments that could not be inline-anchored

.github/workflows/daily-squid-image-scan.md:217

Content redacted to fit size limit.

<details>
<summary>💡 Suggestion</summary>

Consider adding a structural guard — e.g. an explicit required-labels exclusion, or hard-coding #52657 as an excluded issue number in the safe-outputs config — so the "never close the canonical tracker" rule isn’t solely enforced by prompt instructions that an LLM could misread under ambiguous evidence.

</details>

@copilot please address this.

actions/setup/js/daily_squid_image_scan.test.cjs:62

[/tdd] Good gate-logic test table, but it only covers the [High].*(fix: ...) regex via synthetic log lines — there is no test asserting the end-to-end behavior when node:lts-alpine base-image CVEs (upstream, not vendored) appear alongside a vendored finding in the same log, which is the actual multi-line scenario grype will produce in production.

Content redacted to fit size limit.

@copilot please address this.

Restore an enforceable title-prefix boundary and report family duplicates for maintainer review. Exercise the compiled close handler against canonical, operational-failure, unrelated, and eligible legacy issues.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@pelikhan

Copy link
Copy Markdown
Collaborator Author

In reply to comment 6299495329:

No code change is needed for this completion notice. The concrete authorization finding from this review is addressed in 02e5b8d and its inline thread.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

In reply to comment 6299495466:

No code change is needed because this notice reports no actionable finding. I did not treat the no-action outcome as a substitute for validation.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

In reply to comment 6299499628:

No code change is requested by this test-analysis notice. Runtime close-handler regression tests and the final validation gate were run independently of the reported no-action outcome.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

In reply to comment 6299500219:

No code change is needed for a review-start notice containing no finding or change request. Concrete review feedback is handled separately.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

In reply to comment 6299506669:

No code change or ADR is requested by this no-action notice. I have not treated the reported outcome as independent evidence of ADR compliance.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

In reply to comment 6299650945:

Accepted the authorization concern recorded here. Family duplicates are now reported for maintainer review, and the restrictive legacy-only closure boundary is enforced and regression-tested in 02e5b8d.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The shared-image rollout remains independently unverified, and scan and issue-closure safeguards need correction.

2 open issues
What changed in this PR

Refreshes gh-aw’s shared Node image and improves container vulnerability tracking as partial remediation for #69880.

Changes:

  • Synchronizes Node image pins across caches and generated workflows.
  • Raises brace-expansion and undici security floors.
  • Adds fixable-High gating and clarifies ownership, duplicate consolidation, and remediation reporting.
File Description
scripts/​test_publish_safe_outputs_node.py Checks dependency security floors.
pkg/​workflow/​data/​action_pins.json Refreshes embedded Node pin.
pkg/​actionpins/​data/​action_pins.json Synchronizes embedded Node pin.
actions/​setup/​js/​Dockerfile.safe-outputs-mcp Raises npm dependency security floors.
actions/​setup/​js/​daily_squid_image_scan.test.cjs Covers pins, gates, and tracking constraints.
.github/​workflows/​smoke-pi-routed.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-pi-routed-claude.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-pi-auto.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-github-codex.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-copilot-sdk-routed.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-copilot-sdk-routed-claude.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-copilot-routed.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-copilot-routed-steering.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-copilot-routed-claude.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-codex-bare-auto.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-codex-auto.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-claude-routed.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-claude-dynamic.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-claude-copilot.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-claude-copilot-auto.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-claude-auto.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-azure-pi.lock.yml Refreshes Node image references.
.github/​workflows/​smoke-azure-codex.lock.yml Refreshes Node image references.
.github/​workflows/​schema-feature-coverage.lock.yml Refreshes Node image references.
.github/​workflows/​issue-triage-agent.lock.yml Refreshes Node image references.
.github/​workflows/​issue-arborist.lock.yml Refreshes Node image references.
.github/​workflows/​github-remote-mcp-auth-test.lock.yml Refreshes Node image references.
.github/​workflows/​dev.lock.yml Refreshes Node image references.
.github/​workflows/​daily-squid-image-scan.md Updates gating and burn-down tracking guidance.
.github/​workflows/​daily-github-docs-seo-optimizer.lock.yml Refreshes Node image references.
.github/​workflows/​copilot-pr-merged-report.lock.yml Refreshes Node image references.
.github/​workflows/​codex-github-remote-mcp-test.lock.yml Refreshes Node image references.
.github/​aw/​actions-lock.json Updates repository Node image pin.
.changeset/​patch-container-cve-burndown.md Documents the patch release.

Review effort: Max

Comment thread .github/workflows/daily-squid-image-scan.md Outdated
Comment thread .github/workflows/daily-squid-image-scan.md Outdated
Keep shipped and refreshed candidate evidence separate, require committed regeneration before reporting adoption, and cover failed canonical updates. Avoid grep pipeline SIGPIPE masking in large mixed-image gate logs under the Actions shell.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@pelikhan

Copy link
Copy Markdown
Collaborator Author

Follow-up to comment 6299495329:

No additional change is requested by this repeated completion notice. Its authorization finding was addressed by 02e5b8d and remains enforced.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

Follow-up to comment 6299495466:

No additional code change is requested by this repeated no-action notice. The final validation gate was run independently for this batch.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

Follow-up to comment 6299499628:

No additional code change is requested by this repeated test-analysis notice. This batch was independently checked with 161 focused tests and the final validation gate.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

Follow-up to comment 6299500219:

The completion notice itself requires no code change. The associated authorization and mixed-log coverage findings are addressed by the restricted close handler and large-log regression tests.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

Follow-up to comment 6299506669:

No additional code change or ADR is requested by this repeated no-action notice. Its outcome is not being used as independent evidence of ADR compliance.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

Follow-up to comment 6299650945:

The saved authorization concern remains addressed by the legacy-only close boundary in 02e5b8d. This batch preserves that restriction and verifies it even after a canonical update fails.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

Follow-up to comment 6299942420:

No additional fix is requested by this prior acknowledgement. The referenced authorization fix remains enforced in the current workflow.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

Follow-up to comment 6299942898:

No additional code change is needed; this already distinguishes the no-action notice from validation evidence. The current batch has been validated separately.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

Follow-up to comment 6299943490:

No additional code change is requested by this prior reply. Scanner and close-handler validation was rerun for the current batch.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

Follow-up to comment 6299943990:

Partially accepted: the underlying notice now reports review completion rather than review start. The notice itself needs no code change; concrete associated findings were addressed separately.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

Follow-up to comment 6299944496:

No additional code change or ADR is requested by this prior reply. The no-action status remains separate from compliance evidence.

@pelikhan

Copy link
Copy Markdown
Collaborator Author

Follow-up to comment 6299944946:

The authorization decision in this prior reply remains valid, and the legacy-only restriction is preserved. This batch adds a failed-canonical-update regression rather than reopening automatic family closure.

pelikhan and others added 2 commits October 20, 2026 13:20
Regenerate workflow conflicts from merged sources while retaining shipped-pin scan evidence, candidate isolation, and legacy-only close authorization.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Include the additional vendor-domain and MCP diagnostic fixes that landed during merge validation, regenerating workflow locks without changing the container scan safeguards.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@pelikhan
pelikhan merged commit e64a1ce into main Oct 20, 2026
40 checks passed
@pelikhan
pelikhan deleted the pelikhan-issue-69880-aw-top-10-04-burn-down-container-image-480bb3 branch October 20, 2026 20:27
@github-actions

Copy link
Copy Markdown
Contributor

🎉 This pull request is included in a new release.

Release: v0.93.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants