Status: Accepted
Date: 2026-07-06
Context
.plumber.yaml’s actionsMustBePinnedByCommitSha control shipped (ADR-036 / ADR-037)
with the tool’s default trustedOwners: [actions, github], which exempts first-party
actions from the pin-by-SHA requirement. The original finding
(plumber-cicd-security-2026-07-04.md) scoped SHA-pinning to the five third-party actions
only. The node24 migration then bumped actions/* to current majors but left them on
floating tags (@v7), which plumber accepted because of the exemption.
The tj-actions/changed-files compromise (CVE-2025-30066) is a mutable-ref supply-chain
attack: a retagged or compromised release runs with the caller workflow’s secrets. That
vector applies to any mutable ref — a floating @v7 on a first-party action is
silently repointable too. Leaving the exemption in place means the policy is followed by
convention but not enforced, so tag pins can drift back unnoticed.
Decision
- Every
uses:reference in.github/workflows/**is pinned by a 40-char commit
SHA — first-partyactions/*included — with an exact-version trailing comment
(# v7.0.0). .plumber.yamlsetsactionsMustBePinnedByCommitSha.trustedOwners: []so the control
enforces SHA-pinning on all owners, not just third-party.- Dependabot (
.github/dependabot.yml, github-actions ecosystem) keeps the SHA pins and
their version comments fresh viasha-and-versionbehaviour.
This tightens, and supersedes in scope, the third-party-only SHA-pinning posture recorded
in ADR-036 (Decision 6) and the default exemption noted in
plumber-cicd-security-2026-07-04.md.
Consequences
- Easier: a compromised/retagged release of a first-party action can no longer be
silently pulled into CI; every action runs a reviewed, immutable commit. - Easier: the policy is machine-enforced —
plumber analyzefails if any ref
(any owner) is not SHA-pinned, so drift is caught in CI rather than by convention. - Harder: SHAs are opaque; readers rely on the
# vX.Y.Zcomment for the human-readable
version. Dependabot must stay enabled to keep pins current, otherwise they ossify. plumber analyzescores 100/100 withtrustedOwners: [], confirming no ref was missed.