You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Pin all GitHub Actions workflow references and Dockerfile base images to immutable SHA hashes so the OpenSSF Scorecard Pinned-Dependencies check passes.
Root Cause
Four thin-caller workflow stubs reference reusable workflows using mutable tags (@v2, @main) instead of commit SHAs. The API Dockerfile also uses floating image tags without SHA digests.
TDD exception: This is a pure configuration change (YAML workflow files and Dockerfile FROM pins) with no observable code behavior change. There is no meaningful failing test stub to write before implementation. Verification is via the dev-lead-lint.sh check plus manual inspection of the changed files.
.github/workflows/pr-review.yml — pinned @main → @7b0426146444d97550dcca89d86984b809288506 # main
apps/api/Dockerfile — pinned golang:1.24-alpine with SHA digest
apps/api/Dockerfile — pinned gcr.io/distroless/static-debian12 with SHA digest
TDD Exception
This is a pure configuration change (YAML workflow files and Dockerfile FROM pins) with no observable code behavior change. No behavioral tests can be written before implementation per the Phase 2 exception clause.
Lint Results
[lint] shellcheck on 2 file(s)...
[lint] all checks passed
go vet ./... — passed (no output)
Files Changed
.github/workflows/dependency-audit.yml: Pinned reusable workflow ref from @v2 to SHA 376a4fcb...
.github/workflows/pr-auto-review.yml: Pinned reusable workflow ref from @v2 to SHA 376a4fcb...
.github/workflows/pr-review-mention.yml: Pinned reusable workflow ref from @v2 to SHA 376a4fcb...
.github/workflows/pr-review.yml: Pinned reusable workflow ref from @main to SHA 7b042614...
apps/api/Dockerfile: Pinned golang:1.24-alpine to @sha256:8bee1901... and gcr.io/distroless/static-debian12 to @sha256:9c346e4b...
Notes
The SHA 376a4fcb1117444595e3e702fa450873d0e54310 for petry-projects/.github@v2 is consistent with the SHA already used in auto-rebase.yml, agent-shield.yml, dependabot-automerge.yml, and feature-ideation.yml.
The SHA 7b0426146444d97550dcca89d86984b809288506 for petry-projects/.github-private@main was resolved via gh api repos/petry-projects/.github-private/git/refs/heads/main.
Docker image digests were resolved via skopeo inspect against the live registries.
The dependabot.yml already has github-actions ecosystem configured (weekly, limit 10 PRs), which will keep action SHAs updated via Dependabot PRs. Docker ecosystem is not currently in dependabot.yml; adding it is a follow-up if desired to automate SHA refreshes for the Dockerfile base images.
Closing as accepted exception. First-party reusable-workflow refs intentionally use mutable channel tags (<agent>/v<M>-<tier>) under the canary rollout strategy (#657), so Scorecard Pinned-Dependencies cannot reach 10/10 by design. Third-party actions remain pinned via dependabot + enforced by compliance-audit.sh. Recurrence fix (teach org-scorecard to skip first-party refs) tracked in combsmith/.github#709.
Activity
fix: address OpenSSF Scorecard findings
claude commentedon Apr 5, 2026
Claude Code is working…
I'll analyze this and get back to you.
View job run
don-petry commentedon May 17, 2026
Weekly update: Score is now 3/10. Finding: dependency not pinned by hash detected -- score normalized to 3
don-petry commentedon May 17, 2026
Weekly update: Score is now 3/10. Finding: dependency not pinned by hash detected -- score normalized to 3
don-petry commentedon May 17, 2026
Weekly update: Score is now 3/10. Finding: dependency not pinned by hash detected -- score normalized to 3
don-petry commentedon May 17, 2026
Weekly update: Score is now 3/10. Finding: dependency not pinned by hash detected -- score normalized to 3
don-petry commentedon May 18, 2026
Weekly update: Score is now 3/10. Finding: dependency not pinned by hash detected -- score normalized to 3
don-petry commentedon May 25, 2026
Weekly update: Score is now 7/10. Finding: dependency not pinned by hash detected -- score normalized to 7
don-petry commentedon Jun 1, 2026
Weekly update: Score is now 6/10. Finding: dependency not pinned by hash detected -- score normalized to 6
don-petry commentedon Jun 6, 2026
Dev-Lead Implementation Plan
Issue: #18 — Scorecard: Pinned-Dependencies (6/10)
Scope
Pin all GitHub Actions workflow references and Dockerfile base images to immutable SHA hashes so the OpenSSF Scorecard Pinned-Dependencies check passes.
Root Cause
Four thin-caller workflow stubs reference reusable workflows using mutable tags (
@v2,@main) instead of commit SHAs. The API Dockerfile also uses floating image tags without SHA digests.Implementation Checklist
.github/workflows/dependency-audit.yml— pinpetry-projects/.github/...@v2→@376a4fcb1117444595e3e702fa450873d0e54310 # v2.github/workflows/pr-auto-review.yml— pinpetry-projects/.github/...@v2→@376a4fcb1117444595e3e702fa450873d0e54310 # v2.github/workflows/pr-review-mention.yml— pinpetry-projects/.github/...@v2→@376a4fcb1117444595e3e702fa450873d0e54310 # v2.github/workflows/pr-review.yml— pinpetry-projects/.github-private/...@main→@7b0426146444d97550dcca89d86984b809288506 # mainapps/api/Dockerfile— pingolang:1.24-alpine→golang:1.24-alpine@sha256:8bee1901f1e530bfb4a7850aa7a479d17ae3a18beb6e09064ed54cfd245b7191apps/api/Dockerfile— pingcr.io/distroless/static-debian12→gcr.io/distroless/static-debian12@sha256:9c346e4be81b5ca7ff31a0d89eaeade58b0f95cfd3baed1f36083ddb47ca3160Tests to Write
TDD exception: This is a pure configuration change (YAML workflow files and Dockerfile FROM pins) with no observable code behavior change. There is no meaningful failing test stub to write before implementation. Verification is via the
dev-lead-lint.shcheck plus manual inspection of the changed files.Test Command
bash ".dev-lead/scripts/dev-lead-lint.sh"don-petry commentedon Jun 6, 2026
Dev-Lead: Implementation Complete
Plan Execution
.github/workflows/dependency-audit.yml— pinned@v2→@376a4fcb1117444595e3e702fa450873d0e54310 # v2.github/workflows/pr-auto-review.yml— pinned@v2→@376a4fcb1117444595e3e702fa450873d0e54310 # v2.github/workflows/pr-review-mention.yml— pinned@v2→@376a4fcb1117444595e3e702fa450873d0e54310 # v2.github/workflows/pr-review.yml— pinned@main→@7b0426146444d97550dcca89d86984b809288506 # mainapps/api/Dockerfile— pinnedgolang:1.24-alpinewith SHA digestapps/api/Dockerfile— pinnedgcr.io/distroless/static-debian12with SHA digestTDD Exception
This is a pure configuration change (YAML workflow files and Dockerfile FROM pins) with no observable code behavior change. No behavioral tests can be written before implementation per the Phase 2 exception clause.
Lint Results
go vet ./...— passed (no output)Files Changed
.github/workflows/dependency-audit.yml: Pinned reusable workflow ref from@v2to SHA376a4fcb....github/workflows/pr-auto-review.yml: Pinned reusable workflow ref from@v2to SHA376a4fcb....github/workflows/pr-review-mention.yml: Pinned reusable workflow ref from@v2to SHA376a4fcb....github/workflows/pr-review.yml: Pinned reusable workflow ref from@mainto SHA7b042614...apps/api/Dockerfile: Pinnedgolang:1.24-alpineto@sha256:8bee1901...andgcr.io/distroless/static-debian12to@sha256:9c346e4b...Notes
376a4fcb1117444595e3e702fa450873d0e54310forpetry-projects/.github@v2is consistent with the SHA already used inauto-rebase.yml,agent-shield.yml,dependabot-automerge.yml, andfeature-ideation.yml.7b0426146444d97550dcca89d86984b809288506forpetry-projects/.github-private@mainwas resolved viagh api repos/petry-projects/.github-private/git/refs/heads/main.skopeo inspectagainst the live registries.dependabot.ymlalready hasgithub-actionsecosystem configured (weekly, limit 10 PRs), which will keep action SHAs updated via Dependabot PRs. Docker ecosystem is not currently independabot.yml; adding it is a follow-up if desired to automate SHA refreshes for the Dockerfile base images.7 remaining items
feat: implement issue #18 — Scorecard: Pinned-Dependencies (6/10)
fix: address OpenSSF Scorecard findings
feat: implement issue #18 — Scorecard: Pinned-Dependencies (6/10)
don-petry commentedon Jun 22, 2026
Weekly update: Score is now 4/10. Finding: dependency not pinned by hash detected -- score normalized to 4
don-petry commentedon Jun 29, 2026
Weekly update: Score is now 4/10. Finding: dependency not pinned by hash detected -- score normalized to 4
don-petry commentedon Jul 6, 2026
Weekly update: Score is now 5/10. Finding: dependency not pinned by hash detected -- score normalized to 5
don-petry commentedon Jul 13, 2026
Weekly update: Score is now 5/10. Finding: dependency not pinned by hash detected -- score normalized to 5
don-petry commentedon Jul 14, 2026
Closing as accepted exception. First-party reusable-workflow refs intentionally use mutable channel tags (
<agent>/v<M>-<tier>) under the canary rollout strategy (#657), so Scorecard Pinned-Dependencies cannot reach 10/10 by design. Third-party actions remain pinned via dependabot + enforced bycompliance-audit.sh. Recurrence fix (teach org-scorecard to skip first-party refs) tracked in combsmith/.github#709.fix: address OpenSSF Scorecard findings
fix: address OpenSSF Scorecard findings
feat: implement issue #407 — Compliance: ruleset-drift-pr-quality-req…
fix: address OpenSSF Scorecard findings
fix: address OpenSSF Scorecard findings
feat: implement issue #409 — Compliance: ruleset-drift-pr-quality-req…