fix(ci): stop persisting a write-scoped git credential through npm ci - #41
wyre-agent-fleet[bot] wants to merge 1 commit into
Conversation
The release job declares `contents: write`, which overrides this repo's read-only default workflow permission, so actions/checkout's default persisted credential was write-scoped and stayed live in .git/config through npm ci / build / test -- readable by any compromised dependency lifecycle script. persist-credentials: false is semantic-release's own documented recipe; it authenticates its pushes from GITHUB_TOKEN directly. Part of the CWE-250 pattern-set fix across WYRE-AI/node-*. Sibling PRs: node-spanning#46, node-domotz#48, node-kaseya-quote-manager#16, node-alternative-payments#20 (already merged/merging), plus this repo and 17 others in the same follow-up set.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (2)
Included review availability: Your plan provides up to 10 included reviews per hour; 6 remain after this review. 📝 WalkthroughWalkthroughThe release workflow disables persisted checkout credentials. The changelog documents this behavior and semantic-release authentication through ChangesRelease credential handling
Priority: ➖ Normal Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix Suggested reviewers: Merge Risk: ⚪ Minimal · up to The change reduces credential exposure while preserving authenticated release operations. 🚥 Pre-merge checks | ✅ 6✅ Passed checks (6 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
✨ Simplify code
Comment |
|
Peer review (comment-only, per the shared-identity self-approval gate). Verdict: approve, no blockers. Verified independently against the actual diff content (not just warden's filing summary), as part of the 18-PR CWE-250 follow-up set-review:
Full batch (all independently verified): node-axcient#2, node-blumira#41, node-clio#2, node-connectwise-cpq#2, node-datto-bcdr#55, node-datto-saas-protection#55, node-huntress#43, node-iqms#39, node-kaseya-bms#48, node-kaseya-vsa#50, node-mailprotector#2, node-mimecast#44, node-ncentral#4, node-proofpoint-essentials#1, node-rootly#27, node-scalepad#2, node-threatlocker#31, node-unitrends#51 |
asachs01
left a comment
There was a problem hiding this comment.
Review Summary — Verdict: Approve
Correctness: Same pattern-set fix as the sibling node-* repos — adds persist-credentials: false to the pinned actions/checkout@3d3c42e... step in the release job. Correctly stops the write-scoped git credential (elevated by the job's contents: write permission) from persisting in .git/config through npm ci, build, and test. semantic-release authenticates independently via GITHUB_TOKEN, so no functional loss.
Security: This is the fix itself; reduces credential exposure window with no downside. No secrets introduced.
Code quality: Clean, minimal diff with a clear explanatory comment.
Tests: N/A for a CI workflow permission tweak; no regression risk to the checkout step's other behavior (fetch-depth: 0 retained).
Docs: CHANGELOG.md updated under [Unreleased] / Changed with an accurate description consistent with the PR body.
No issues found. LGTM.
Code Review Summary — Claude CodeVerdict: Approve CriticalNone WarningsNone SuggestionsNone Looks Good
|
asachs01
left a comment
There was a problem hiding this comment.
Reviewed by Claude Code. Adds persist-credentials: false to actions/checkout in the release workflow so the write-scoped git credential (from contents: write) isn't live in .git/config during npm ci; semantic-release pushes via GITHUB_TOKEN directly so no auth is lost. Correct, minimal, well-documented fix.
Code Review Summary (Reviewed by Hermes Agent)Critical: None. Warnings: None. Suggestions:
Looks Good: Sound, well-scoped credential-hardening fix. |
|
Reviewed against the verified fleet-wide fix pattern: this diff adds Reviewed by Hermes Agent |
Review — headRefOid
|
asachs01
left a comment
There was a problem hiding this comment.
Code Review Summary
Verdict: Approve
Correctness
Adds persist-credentials: false to the actions/checkout step in the release workflow. This is correct: the release job declares contents: write, which overrides the repo's read-only default GITHUB_TOKEN permission, so the checkout step's persisted credential was write-scoped and stayed live in .git/config for the whole job (dependency install, build, test) — readable by any compromised dependency lifecycle script (CWE-250). persist-credentials: false is semantic-release's own documented recipe; semantic-release authenticates its own push via GITHUB_TOKEN directly, so no functional regression is expected.
Security
This is the security fix — closes a credential-exposure window. No new secrets or credentials introduced. Scope is minimal (workflow file + changelog only).
Code Quality
Change is small, well-commented inline explaining the why, and consistent with the sibling fixes already merged in node-spanning#46 / node-domotz#48 / node-kaseya-quote-manager#16 / node-alternative-payments#20.
Tests
No test coverage for CI workflow YAML is expected/typical; nothing to add here. Recommend confirming the next automated release run on main still succeeds (semantic-release push, tag, npm publish) since that's the one behavior this touches at runtime.
Documentation
CHANGELOG.md entry accurately describes the change and rationale. Good.
Looks Good
- Root cause explanation is precise and matches GitHub Actions' documented permission-override behavior for job-level
contents: write. - No unrelated changes bundled in.
Reviewed SHA: f8896bf
Claude Code ReviewVerdict: Approve Looks Good
Suggestions
No tests needed for a workflow-permission-only change; nothing else in the diff to flag. |
Claude Code ReviewVerdict: Approve Small, well-scoped CI fix. Looks Good
Suggestions
|
asachs01
left a comment
There was a problem hiding this comment.
Hermes Agent Review
Verdict: Approve
Correct, minimal fix for CWE-250 (write-scoped git credential left live in .git/config through npm ci). persist-credentials: false is the documented semantic-release recipe since it authenticates its own pushes via GITHUB_TOKEN — no functional regression, changelog entry included, scoped to the affected job only.
Looks Good
- Fix is correctly scoped (only the release job, which is the one declaring
contents: write) - Rationale comment inline explains the CWE and why
persist-credentials: falseis safe here - Changelog entry present
No blocking issues.
Reviewed by Hermes Agent
Stops persisting a write-scoped git credential through
npm ci(CWE-250).The release job declares
contents: write, which overrides this repo'sread-only default workflow permission — so
actions/checkout's defaultpersisted credential was write-scoped and stayed live in
.git/configthrough dependency install, build and test, readable by any compromised
dependency lifecycle script during that window.
persist-credentials: falseis semantic-release's own documented GitHub Actions recipe: it authenticates
its own pushes from
GITHUB_TOKENdirectly and never needed the persistedcredential.
Part of a pattern-set fix across WYRE-AI/node-*. Originally found and
fixed on 4 repos (node-spanning#46, node-domotz#48,
node-kaseya-quote-manager#16, node-alternative-payments#20), then a
propagation scope-check found the same pattern on 18 more repos. Full set
(18, this repo included) so reviewers can see membership:
node-axcient, node-blumira, node-clio, node-connectwise-cpq, node-datto-bcdr, node-datto-saas-protection, node-huntress, node-iqms, node-kaseya-bms, node-kaseya-vsa, node-mailprotector, node-mimecast, node-ncentral, node-proofpoint-essentials, node-rootly, node-scalepad, node-threatlocker, node-unitrends
Generated by warden's Gate-3 CWE-250 review, per boss's set-completeness ruling.
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.Summary by CodeRabbit
Security
Documentation