Skip to content

bug(ci-standards): dev-lead.yml caller stub missing SonarCloud S7637 exemption — blocks ring-pinned consumers (bmad #334) #546

Description

@don-petry

Problem

The dev-lead caller-stub .github/workflows/dev-lead.yml, once channel-pinned to a ring tag (@dev-lead/ring0|ring1|next, per the canary-rings rollout #495/#500), trips SonarCloud rule githubactions:S7637 ("External GitHub Actions and workflows should be pinned to a commit hash") at HIGH severity. That drives new_security_ratingC, failing the SonarCloud Quality Gate ≥ A condition, so the required SonarCloud check goes red and the PR cannot merge.

This is a known false-positive class: the ref is a first-party @<agent>/<channel> tag we own and intentionally keep mutable (the basis of the ring model) — exactly the case the org already exempts for the agent (#871), for check_action_pinning, and in standards/ci-standards.md §SonarCloud Exemption: First-Party Reusable-Ref S7637. "Fixing" it the way S7637 wants (SHA-pin) would defeat the moving-channel design.

Live blocker (confirmation case)

petry-projects/bmad-bgreat-suite#334 (bmad → @dev-lead/ring1) is stuck on exactly this:

  • Alert: githubactions:S7637 HIGH on .github/workflows/dev-lead.yml:51"Use full commit SHA hash for this dependency."
  • Quality Gate: new_security_rating actual 3 (C) vs required 1 (A) → ERROR.

Root cause

The S7637 standard already exists (ci-standards.md §SonarCloud Exemption), and other stubs are exempted (e.g. google-app-scripts: pr-auto-review.yml, agent-shield.yml, auto-rebase.yml). But dev-lead.yml was never added to consumers' sonar-project.properties when it got channel-pinned, and the dev-lead caller-stub adoption guidance doesn't require the exemption — so every ring-pinned consumer (bmad/TalkTerm ring1, .github ring0, .github-private next, future adopters) hits this.

Fix

Per the existing standard — suppress only githubactions:S7637 only on the dev-lead.yml stub file (per-file sonar.issue.ignore.multicriteria keyed to **/dev-lead.yml; no blanket resourceKey — third-party actions must stay SHA-pinned):

  1. Adoption guidance — make the dev-lead caller-stub adoption docs + ci-standards.md dev-lead section require the s7637_devlead exemption whenever dev-lead.yml is channel-pinned (mirror how the other stubs are handled), so future adoptions include it.
  2. Confirm on the live PR — add the s7637_devlead exemption to bmad's sonar-project.properties (on the #334 branch — keep the @dev-lead/ring1 pin, the do-NOT-SHA-pin guard comment, and the dev-lead:hands-off label intact), and verify SonarCloud re-runs green (new_security_rating back to A, Quality Gate pass, required SonarCloud check ✅).
  3. Propagate — apply the same s7637_devlead exemption to every other dev-lead + SonarCloud consumer that channel-pinned dev-lead.yml.

Acceptance criteria

  • dev-lead stub adoption guidance / ci-standards.md require the per-file S7637 exemption for dev-lead.yml
  • bmad sonar-project.properties exempts S7637 on **/dev-lead.yml (only); SonarCloud Quality Gate on [Fleet Monitor] petry-projects/.github — daily-org-status.yml #334 passes and #334 becomes mergeable
  • All other ring-pinned dev-lead consumers carry the same exemption
  • No blanket resourceKey; third-party actions remain SHA-pinned (S7637 still enforced elsewhere)

Refs: #495 #500 #871 · ci-standards.md §"SonarCloud Exemption: First-Party Reusable-Ref S7637" · blocks bmad-bgreat-suite#334

Metadata

Metadata

Assignees

No one assigned

    Labels

    dev-leadFor dev-lead agent pickup

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions