Skip to content

fix(scorecard): exempt first-party channel-tag refs from Pinned-Dependencies (#709) - #716

Merged
don-petry merged 5 commits into
mainfrom
fix/org-scorecard-firstparty-pin-exemption
Jul 14, 2026
Merged

fix(scorecard): exempt first-party channel-tag refs from Pinned-Dependencies (#709)#716
don-petry merged 5 commits into
mainfrom
fix/org-scorecard-firstparty-pin-exemption

Conversation

@don-petry

Copy link
Copy Markdown
Contributor

Problem

org-scorecard.yml creates a Scorecard: Pinned-Dependencies issue per repo scoring <10/10 and only closes it at 10/10. Our first-party reusable refs deliberately use mutable channel tags (ci-standards#action-pinning-policy), so that check can never reach 10/10 — the issue never self-closes and recreates after any manual close (the 11 closed on 2026-07-13 would reappear on the next Monday scan). Full write-up: #709.

Why not just skip the check

Scorecard Pinned-Dependencies also covers non-Actions deps (container images, pip/npm/go), which nothing else tracks — so a blanket SKIP_CHECKS entry would lose real signal. And third-party action pinning is already enforced by check_action_pinning in compliance-audit.sh (which exempts first-party), so the Actions portion is pure noise.

Fix

Scorecard's per-detail messages name the dependency type (GitHubAction, containerImage, pipCommand, …). For Pinned-Dependencies:

  • Suppress the issue (and close any existing one) when every not pinned by hash detail is a GitHubAction → covered by compliance-audit (third-party) + deliberate (first-party).
  • Keep the issue whenever there's a non-Actions gap (container/pip/npm/go).
  • Errs toward keeping if the wording is unexpected (safe failure mode).

Documented the exemption in ci-standards.md.

Validation

  • YAML parses; extracted run-script bash -n clean; yamllint clean (repo config, max 200); markdown lines well under MD013 (200).
  • No scorecard bats suite exists (workflow-embedded script, matches existing untested pattern).

Effect

Next Monday's scan will not recreate the 11 closed Pinned-Dependencies issues (unless a repo has a genuine non-Actions pinning gap, which is correctly surfaced).

🤖 Generated with Claude Code

https://claude.ai/code/session_01Juznz5V6su81ffSND8fg7s

…dencies (#709)

org-scorecard created a 'Scorecard: Pinned-Dependencies' issue per repo below
10/10 and only closed it at 10/10. Our first-party reusable refs deliberately use
mutable channel tags (ci-standards#action-pinning-policy), so that check can never
reach 10/10 — the issue never closed and recreated after any manual close (the 11
closed on 2026-07-13 would reappear on the next Monday scan).

Third-party ACTION pinning is already enforced by compliance-audit.sh
check_action_pinning (which exempts first-party), so an Actions-only
Pinned-Dependencies finding is redundant noise. Suppress the issue (and close any
existing one) only when EVERY 'not pinned by hash' detail is a GitHubAction; keep
it whenever there's a non-Actions gap (container image / pip / npm / go) that
nothing else tracks — keying off Scorecard's per-detail dependency type. Errs
toward keeping the issue if the detail wording is unexpected. Documented in
ci-standards.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Juznz5V6su81ffSND8fg7s
@don-petry
don-petry requested a review from a team as a code owner July 14, 2026 03:05
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@don-petry, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 3 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: e9c9889e-bf17-4f31-829f-e2c2afad1c48

📥 Commits

Reviewing files that changed from the base of the PR and between 6b5111d and fd293a6.

⛔ Files ignored due to path filters (2)
  • node_modules/.package-lock.json is excluded by !**/node_modules/**
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (2)
  • .github/workflows/org-scorecard.yml
  • standards/ci-standards.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/org-scorecard-firstparty-pin-exemption

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@don-petry

Copy link
Copy Markdown
Contributor Author

Dev-Lead — review-changes (no-changes)

No changes were needed for this PR.

@don-petry
don-petry enabled auto-merge (squash) July 14, 2026 03:06

@gemini-code-assist gemini-code-assist 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.

Code Review

This pull request updates standards/ci-standards.md to document a first-party exemption for the Pinned-Dependencies check, explaining how mutable channel tags are handled and how third-party action pinning is already enforced. The review feedback suggests a minor terminology change from 'mutable channel tags' to 'moving channel tags' to maintain consistency with the rest of the document.

Comment thread standards/ci-standards.md Outdated
@don-petry
don-petry disabled auto-merge July 14, 2026 03:07
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 14, 2026
@don-petry

Copy link
Copy Markdown
Contributor Author

Dev-Lead — fix-reviews (applied)

Changes committed and pushed.

Copilot AI review requested due to automatic review settings July 14, 2026 03:14
@don-petry
don-petry enabled auto-merge (squash) July 14, 2026 03:14
@don-petry
don-petry disabled auto-merge July 14, 2026 03:15

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.

Pull request overview

Adjusts the org-wide Scorecard issue automation to stop “Pinned-Dependencies” issues from looping forever when the only unpinned items are GitHub Actions (impacted by the deliberate first-party channel-tag strategy), while preserving signal for non-Actions dependency pinning gaps.

Changes:

  • Adds a Pinned-Dependencies exemption in org-scorecard.yml to suppress/auto-close the issue when all “not pinned” details are Actions-only.
  • Documents the first-party exemption rationale in standards/ci-standards.md.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
standards/ci-standards.md Documents why Actions-only Pinned-Dependencies findings are suppressed and what remains enforced.
.github/workflows/org-scorecard.yml Implements suppression/auto-close logic for Actions-only Pinned-Dependencies findings to prevent recurring noise.

Comment thread .github/workflows/org-scorecard.yml Outdated
@don-petry

Copy link
Copy Markdown
Contributor Author

Dev-Lead — review-changes (applied)

Changes committed and pushed.

@don-petry
don-petry enabled auto-merge (squash) July 14, 2026 03:24
@don-petry
don-petry disabled auto-merge July 14, 2026 03:25
@don-petry

Copy link
Copy Markdown
Contributor Author

Dev-Lead — review-changes (applied)

Changes committed and pushed.

@don-petry
don-petry enabled auto-merge (squash) July 14, 2026 03:33
@don-petry
don-petry disabled auto-merge July 14, 2026 03:36
@don-petry

Copy link
Copy Markdown
Contributor Author

Dev-Lead — review-changes (no-changes)

No changes were needed for this PR.

@don-petry
don-petry enabled auto-merge (squash) July 14, 2026 03:38
@sonarqubecloud

Copy link
Copy Markdown

@donpetry-bot donpetry-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.

Automated review — APPROVED ✓

Risk: MEDIUM
Reviewed commit: b5415470ad965826b55768fcda1f977a1288555f
Review mode: triage-approved (single reviewer)

Summary

Adds a narrowly-scoped exemption to org-scorecard.yml so Pinned-Dependencies issues are suppressed (and auto-closed) only when every 'not pinned by hash' detail is a GitHubAction — covered by compliance-audit.sh for third-party and deliberate for first-party channel tags. Non-Actions gaps (container/pip/npm/go) still raise issues. Documented in ci-standards.md.

Linked issue analysis

References #709 (Pinned-Dependencies issue loop). The fix directly addresses the root cause: the issue could never reach 10/10 due to deliberate first-party channel tags, so it recreated after every manual close. The suppression is conditional on the finding being Actions-only, preserving signal for non-Actions pinning gaps that nothing else tracks. Substantively addressed.

Findings

  • Logic verified in context: TOTAL_WARN > 0 guard ensures the expected detail format is present before suppressing (addresses Copilot's prior zero-details concern); both jq error fallbacks (TOTAL_WARN=0, NON_ACTION_WARN=1) fail toward keeping the issue. CLOSED_COUNT/EXISTING_ISSUE defined upstream; MALFORMED_WORKFLOW path cannot reach the new block with unset ROW.
  • No injection surface: scorecard details flow only into jq; the auto-close comment is static text; issue numbers come from gh --json output.
  • Both prior review threads (gemini-code-assist terminology, copilot-pull-request-reviewer zero-details suppression) are resolved and fixed in the current head.
  • Minor, non-blocking: package-lock.json and node_modules/.package-lock.json name field changed pr-681 → pr-716 (cosmetic, matches pre-existing bot-managed lockfile pattern).
  • Secret scanning MCP tool unavailable in this environment; gitleaks CI check passed at head SHA.

CI status

All checks green at head SHA b541547: Lint, ShellCheck, CodeQL, gitleaks, Agent Security Scan, AgentShield, SonarCloud (quality gate passed, 0 issues), Dependency audit, CodeRabbit (approved). Two CANCELLED dev-lead runs are superseded duplicates of a later successful run.


Reviewed automatically by the PR-review agent (single-reviewer mode: fable 5). Reply if you need a human review.

@don-petry
don-petry disabled auto-merge July 14, 2026 03:47
@don-petry

Copy link
Copy Markdown
Contributor Author

Dev-Lead — review-changes (no-changes)

No changes were needed for this PR.

@don-petry
don-petry enabled auto-merge (squash) July 14, 2026 03:47
@don-petry
don-petry merged commit 56eaffd into main Jul 14, 2026
22 of 24 checks passed
@don-petry
don-petry deleted the fix/org-scorecard-firstparty-pin-exemption branch July 14, 2026 03:48

@donpetry-bot donpetry-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.

Automated review — APPROVED ✓

Risk: MEDIUM
Reviewed commit: fd293a69e1fa067ab0cd52f5db4f6dc68ed00c19
Review mode: triage-approved (single reviewer)

Summary

Adds a narrowly-scoped exemption in org-scorecard.yml so a Pinned-Dependencies finding is suppressed (and any existing issue auto-closed) only when at least one 'not pinned by hash' detail exists AND every such detail is a GitHubAction — third-party action pinning is already enforced by compliance-audit.sh and first-party channel tags are deliberate policy. Non-Actions gaps (container/pip/npm/go) still raise issues, and unexpected detail formats err toward keeping the issue. Documents the exemption in ci-standards.md. Since the prior approval at b541547, the only change is a merge of main (PR #717); the PR's own diff is unchanged.

Linked issue analysis

References #709 (org-scorecard: exempt first-party channel-tag reusable refs from Pinned-Dependencies findings). The PR substantively addresses it: the never-self-closing issue loop is broken for Actions-only findings while preserving Scorecard signal for non-Actions dependency types that nothing else tracks. Not in closingIssuesReferences, so #709 will need manual closure after the next scan validates the behavior.

Findings

  • Exemption block verified in context at the PR head: ROW, EXISTING_ISSUE, and CLOSED_COUNT are all in scope at the insertion point, and the malformed-workflow path cannot reach it (CHECK_NAME differs). .details[]? handles null details (TOTAL_WARN=0 → issue kept), and both jq fallbacks default to the safe "keep the issue" outcome.
  • Both review threads are resolved and the fixes are verified in the diff: Copilot's zero-details suppression bug → fixed with the TOTAL_WARN -gt 0 gate; gemini's terminology nit → "moving channel tags" now used in ci-standards.md.
  • No new shell-injection surface: the auto-close comment is a static string; $EXISTING_ISSUE, $ORG, $REPO follow the pre-existing pattern in this script.
  • Informational: package-lock.json / node_modules/.package-lock.json name field changed pr-681pr-716 (repo automation artifact); no dependency changes, npm audit green.
  • Secret scanning MCP tool not available in this run; gitleaks CI check passed (no fabricated MCP result).

CI status

All checks green: Lint, ShellCheck, CodeQL, SonarCloud (quality gate passed, 0 new issues), agent-shield, Agent Security Scan, gitleaks, npm audit all SUCCESS; ecosystem audits skipped (not applicable). Two early dev-lead dispatch/ci-relay entries show CANCELLED but were superseded by later SUCCESS runs.


Reviewed automatically by the PR-review agent (single-reviewer mode: fable 5). Reply if you need a human review.

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.

3 participants