Skip to content

v0.3.0 — workflow trust anchor, register-level policy diff

Choose a tag to compare

@mikim mikim released this 18 Jul 23:59
13f4f2d

Trust-boundary honesty and register-level policy protection, from a third external review of v0.2.1. No adoption-schema shape changes to the adoption file itself; the register schemas now reject empty/whitespace-only semantic strings and profile-mandated registers must be non-empty (minor release — theoretically breaking for adopters relying on vacuous passes; none known). See CHANGELOG.md.

Canonical pin for adopters: v0.3.0 @ 13f4f2d57d780a35cf0b890cdc5da190eae4c325 (this tag's commit).

Security / trust boundary

  • Trusted-checkout-first. Every job verifies the workflow's own identity (job.workflow_repository == canonical, and the caller pins it by full 40-char SHA — tag/branch callers are rejected) and checks out that exact source as the pinned profile. upstream.commit must equal the workflow's own SHA; the v0.2.1 version-pinned pyyaml bootstrap is gone (no install precedes the trusted checkout). GitHub.com only.
  • The caller-workflow boundary is documented honestly: a pull request runs its own version of the caller, so it can swap the @ reference — no reusable-workflow content can defend that. Controls: CODEOWNERS on .github/workflows/ (in the adopter bundle), organization Actions allow-lists, and organization rulesets with required workflows (GitHub Team/Enterprise). A green check is an input to human review, not a tamper-proof verdict.

Upgrade actions when re-pinning

  1. Update upstream.version, upstream.commit, and the caller's @ reference to the SHA above in the same change. The pull-request description needs an Assurance policy change: <why> line (the policy regression check flags every pin move).
  2. The caller must pin the workflow by full SHA (a tag/branch @ reference is now rejected).

Also in this release

  • Register-level policy regression (stable-ID base/head diff): deleted entries; invariant severity/status/intent weakenings and evidence removal; claim status/proof-tier downgrades; residual impact downgrades. CONTRADICTED is treated as an honesty upgrade, never flagged. Adoption-level findings gain human_owner, paths.*, and public_assurance_root.
  • Stage-proportional acknowledgment: Assurance policy change: downgrades findings to warnings only while the base declaration is DRAFT; from HUMAN_REVIEWED on, findings stay errors even when acknowledged.
  • Visibility-aware disclosure: at CONFORMANT, RESTRICTED/EMBARGOED entries are errors only in public repositories (CI passes the repository's actual visibility; --repo-visibility for standalone runs).
  • Profile-mandated registers must be non-empty; register schemas reject empty/whitespace-only semantic strings.
  • actionlint (digest-pinned) added to CI; GOVERNANCE.md defines honest review classes.
  • 70-case validator regression suite.