Repository navigation
Conversation
openabdev#1571 was merged before these review follow-ups landed. This applies the remaining suggestions from its round-1 review. - F5: report an image or pin on a different Node major than its line as "major mismatch" and count it as behind. Before this change, an image on a higher major than its Dockerfile line was reported "current". - F7: bound every curl call with connect and total timeouts. - F8: mark the tracker issue with <!-- node-security-check -->, act only on labeled issues that carry the marker, and document the label and Dockerfile contracts next to the code that relies on them. - F9: exempt node-security issues from issue-check.yml, so a maintainer edit or relabel does not mark the tracker incomplete. Refs openabdev#1567 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Picks up the NODE<major>_VERSION pins from openabdev#1570 so the PR-time dry-run job can parse Dockerfile.unified.
This comment has been minimized.
This comment has been minimized.
… reserved label - issue_title: fall back to 'Node <m> major mismatch' when the line has no security release, so the title never ends empty or with ' / ' - issue body: intro and Next steps cover major-mismatch rows - LABEL comment: label is reserved for this script's tracker - reconcile: null-safe body match, explicit --limit - issue-check.yml: note GITHUB_TOKEN writes do not retrigger it
|
Note LGTM ✅ - Both round-1 blockers are resolved at What This PR DoesApplies the remaining round-1 suggestions from #1571 to the daily Node.js security check. Images or pins on the wrong Node major are reported as How It Works
Round 1 Resolution
Findings
Finding Details🟢 F1: Title fallbackRan
The output never ends empty or with 🟢 F2: Reserved label and merge stepDeclaring 🟢 F3: Mismatch call to actionNext steps item 2 tells the operator to fix the 🟢 F4: Optional title wordingFor a mismatch-only line, the title reads Baseline Check
What's Good (🟢)
Addressing External Reviewer FeedbackNo external review comments or inline threads exist on this PR at the reviewed SHA. 5. Three Reasons We Might Not Need This PR
|
What problem does this solve?
#1571 was merged at d956672 while its remaining review suggestions were still in flight. This PR applies them: F5, F7, F8, and F9 from the round-1 review on #1571. Without them, three problems remain. An image on a higher Node major than its Dockerfile line reads
current. A hung connection can use the job's whole 10-minute timeout. Any open issue with thenode-securitylabel, including a hand-labeled one, is treated as the tracker and can get closed. In addition, a maintainer edit to the tracker triggersissue-check.yml, which addsincomplete/needs-triageand a comment.Part of #1567. Follow-up to #1571. Merge after #1570. The
dry-runjob from #1571 runs on this PR, and it needs theNODE<major>_VERSIONARGs from #1570.Discord Discussion URL: https://discord.com/channels/1491295327620169908/1491365158868619404/1562955032012398712
Review Contract
Goal
The daily check opens or updates the issue when any image or pin is on the wrong Node major. It fails fast on a hung endpoint. It only touches the tracker issue it created. Maintainer edits to that issue do not trigger issue-check.
Non-goals
beta-<agent>tag as a problem (F6). This and thepre-beta-*/openab-ptycoverage stay as follow-ups.Accepted Residual Risks
node-securityissue created before this change has no marker, so the check would ignore it and open a new tracker. Node.js security release pending: 22.23.4 #1575 is such an issue. Merge step: right after merge, before the next scheduled run, prepend<!-- node-security-check -->to Node.js security release pending: 22.23.4 #1575's body so the script adopts it. (Doing it earlier is pointless: the pre-marker script onmainrewrites the body daily.)node-securitylabel is reserved for the script's tracker. A hand-labeled issue without the marker is skipped by all three automations; that is accepted, since applying the label needs triage permission.NODE22_VERSION=24.x, also readsmajor mismatch. That is the intended signal.Acceptance Criteria
DRY_RUN=1against a pinnedDockerfile.unifiedexits 0, and the body starts with<!-- node-security-check -->.image_node_version,beta-claudeon 24.x reportsmajor mismatchand the decision is create or update. Onmainthe same input reportscurrent.gh, a marked issue is updated or closed and an unmarked labeled issue is ignored.issue-check.ymlmakes no API calls for an issue labelednode-security.Follow-ups
missingstatus for absentbeta-<agent>tags.pre-beta-*andopenab-ptycoverage.At a Glance
Prior Art & Industry Research
Not applicable. This is a CI hardening follow-up to #1571.
Proposed Solution
.github/scripts/node_security_check.shchanges:status_ofgains themajor mismatchcase. The newis_behindhelper counts it withstale.--connect-timeout 10 --max-time 30.MARKERis the first line of the issue body, andreconcilefilters the labeled issues on it.LABELnames the two workflows that exempt the label..github/workflows/issue-check.ymlreturns early for issues labelednode-security.Why this approach?
Each change is the fix the #1571 review proposed, applied with the smallest edit. The marker makes ownership explicit without needing the bot's author name, so the logic works the same in forks and tests.
Alternatives Considered
--author github-actions[bot]instead of a marker. Rejected because it ties the logic to the token identity, and the marker is simpler to test.Validation
All runs used
ubuntu:24.04(bash 5.2) in Docker against live nodejs.org and ghcr.io data.DRY_RUN=1against a pinnedDockerfile.unifiedexits 0. The body starts with the marker.stable-*is 22.23.1 stale andbeta-*is current.image_node_version:beta-claudeon 24.22.1 reportsmajor mismatch, and the decision is create or update. At d956672 the same input reportedcurrent.beta-kimion 22.23.4 reportsmajor mismatch.ghstub that applies the script's real--jqfilter:issue-check.ymlscript with a stubbedgithub. A labeled issue makes no API calls. Without the label, the calls are listComments, createComment, and addLabels.🤖 Generated with Claude Code