Skip to content

CI: pin family-dev-handbook reusable workflows by commit SHA instead of mutable @ci-v1 (5 adopted nightly findings) #245

Description

@shojikumaru

Why

Nightly review findings, adopted in the 2026-08-31 stocktake triage (caty-ai/alpha-nightshift-dev#40). Five independent reports across 3 reviewers × 3 nights (2026-08-23 → 08-26) — the strongest convergence in the security batch — all still open in the ledger.

All six caller workflows (test-lint, gitleaks, history-check, pr-size, review-labels, release-sync; 11 references total) invoke caty-ai/family-dev-handbook reusable workflows at the mutable tag @ci-v1, while first-party actions in the same repo are pinned to full commit SHAs (e.g. actions/checkout@de0fac2e...). Consequences:

  • A retag of ci-v1 silently changes what every required merge gate runs, with no SHA-visible change in this repo — supply-chain and review-bypass boundary.
  • release-sync.yml additionally grants contents: write to code resolved through that mutable ref (highest blast radius).
  • The pinning policy is internally inconsistent: low-risk first-party actions get SHA pinning, the highest-blast-radius gates do not.
  • CI evidence referenced from README badges is not reproducible/content-addressed.

Done when

  • All references to caty-ai/family-dev-handbook reusable workflows in the six caller workflows are pinned to a full commit SHA (with the tracking tag kept in a comment, e.g. @<sha> # ci-v1), or an explicit accepted-posture decision (rationale + compensating control such as tag-protection in the handbook repo) is recorded in-repo — one of the two, decided by the owner
  • release-sync.yml permissions are re-reviewed under the chosen posture; contents: write is either justified next to the pin or narrowed
  • A documented update procedure exists for advancing the pinned SHA when the handbook rolls ci-v1 (so pinning does not rot)
  • All six workflows still pass on a probe PR after the change

触るファイル / モジュール予測

  • .github/workflows/test-lint.yml
  • .github/workflows/gitleaks.yml
  • .github/workflows/history-check.yml
  • .github/workflows/pr-size.yml
  • .github/workflows/review-labels.yml
  • .github/workflows/release-sync.yml
  • docs (pin-update procedure or accepted-posture record)

Note: if the SHA-pin posture is adopted family-wide, the policy decision itself belongs to caty-ai/family-dev-handbook; this issue covers the caller-side pins in this repo either way.


Findings: rv-security-codex-6780fb46b4f2-4444acdf, rv-dependency-grok-6780fb46b4f2-d80fef9e, rv-dependency-kimi-6780fb46b4f2-2dca4942, rv-dependency-grok-4221b8a1f10f-c735dbf1, rv-dependency-kimi-4221b8a1f10f-6aac41de (ledger: alpha-nightshift state/ledger/ledger.jsonl)

Metadata

Metadata

Assignees

No one assigned

    Labels

    securitySecurity issue or hardening in the harness contractsseverity:highA documented contract fails in a common path

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions