Completed 2026-04-25.
Achieved (with the v1.0.0 tag-push deferred to the user). All M5 deliverables shipped:
- Three Hulumi packages bumped to
v1.0.0withpublishConfig.provenance = true. HulumiHardeningPackH3 flipped advisory → mandatory; CHANGELOG documents the breaking change with three migration paths.docs/deployment/scp.jsonready-to-apply SCP +scp-guide.md(customize / apply / revert / interaction matrix).SECURITY.mdrewritten from M1 stub to v1.0.0 full (disclosure, SLSA verify, cooling-off, transitive-provenance disclosure, SCP guidance, supported versions)..github/workflows/release.yml(tag-triggered, atomic three-package, OIDC trusted publishing, SLSA L3 attestation, CycloneDX SBOMs, signed GitHub release)..github/workflows/pulumi-cooling-off.yml+scripts/cooling-off-diff.mjs(72h minor/major, 24h patch via npm registry timestamp lookup)..github/workflows/ci.ymlextended:pulumi-cooling-offjob +attestation-dry-runjob..github/attestations/README.mddocumentinggh attestation verify+cosignverification..github/dependabot.ymlrewritten (Pulumi-runtime group + toolchain-major ignore list preserved).docs/launch/{README,csa-outreach,pulumi-discussion,cfp-fwd-cloudsec,cfp-bsides,pulumi-blog-pitch,atlas-contribution-plan}.md.CHANGELOG.mdwith v1.0.0 entry.- Root
package.jsonscripts:release:dry,release:verify-attestations.
124 mock tests + 7 skipped (3 baseline integration + 4 drift integration) all green. Pipeline clean: build + typecheck + lint + license-boundary + exact-pin-guard + format.
Deferred sub-criterion: ≥1 v1.0.0 release-workflow run completed green is satisfied by the attestation-dry-run CI job in CONTRACT-ONLY mode; the full npm publish cycle requires the user pushing a v1.0.0 tag (signed) which is the maintainer's call. Post-merge instructions in the M5 PR description.
.github/workflows/release.yml— tag-triggered atomic release..github/workflows/pulumi-cooling-off.yml— PR-triggered cooling-off check.scripts/cooling-off-diff.mjs— diffs lockfile + queries npm registry..github/attestations/README.md— verify-via-gh/cosigninstructions.
docs/deployment/scp.json— ready-to-apply SCP (with__REPLACE_ME__placeholders).docs/deployment/scp-guide.md— customize/apply/revert/interaction.docs/launch/README.md— index + send-by discipline.docs/launch/csa-outreach.md— IDs-only confirmation request email.docs/launch/pulumi-discussion.md— GH Discussion proposing sibling compliance-pack org.docs/launch/cfp-fwd-cloudsec.md— 30-min talk CFP draft.docs/launch/cfp-bsides.md— 20-min lightning talk CFP draft.docs/launch/pulumi-blog-pitch.md— guest-post pitch.docs/launch/atlas-contribution-plan.md— post-release stub.CHANGELOG.md— Keep-a-Changelog v1.0.0 entry.
docs/slo/completed/RUNBOOK-hulumi.md— Milestone Tracker M5 →done.SECURITY.md— full rewrite (M1 stub → v1.0.0).packages/{baseline,policies,drift}/package.json— version 1.0.0 +publishConfig.provenance: true.packages/policies/src/aws/hulumi-hardening-pack.ts—H3_ENFORCEMENT_LEVEL: "mandatory"+ comment update.packages/policies/tests/hulumi-hardening-pack.test.ts— H3 test renamedh3_prior_advisory_behavior_removed; metadata test expectsmandatory..github/workflows/ci.yml— addedpulumi-cooling-off+attestation-dry-runjobs..github/dependabot.yml—pulumi-runtimegroup + group-exclude pattern.- Root
package.json—release:dry,release:verify-attestationsscripts.
- 1 test renamed (
h3_prior_advisory_behavior_removed); 1 metadata assertion flipped to expectmandatory. No new test files in M5 — the contract was doc-and-workflow-heavy by design.
attestation-dry-runCI job builds tarballs + (on main push) callsactions/attest-build-provenance@v2without publishing. Catches release-workflow regressions on everymainpush.pulumi-cooling-offCI job runs on every PR touchingpnpm-lock.yamlorpackages/**/package.json.- License-boundary lint covers shipped
dist/artifacts (carried from M4).
- Full M1+M2+M3+M4 BDD suites still pass post-M5 (124 tests).
SecureBucket+AccountFoundation+DriftClassifiersnapshots unchanged.HulumiHardeningPackH1, H2, H4 IDs + enforcement unchanged; H3 flip is the only behavioural change.DriftSourceenum + cache schema unchanged.- Skill
SKILL.mdfrontmatter + agentskills.io schema unchanged. @pulumi/*exact pins unchanged from M4.- All three
package.jsonfiles now declarepublishConfig.access = "public"+provenance = true.
SECURITY.md(full rewrite).CHANGELOG.md(new).docs/deployment/scp.json+scp-guide.md(new).docs/launch/*(7 files new)..github/attestations/README.md(new).docs/slo/completed/RUNBOOK-hulumi.mdMilestone Tracker M5 →done.
None for M5.
git status clean after the M5 commit.
v1.0.0tag push — the release workflow triggers on tag. Maintainer signs and pushesgit tag -s v1.0.0 -m "v1.0.0" && git push origin v1.0.0when ready. CI firesrelease.yml; if attestations succeed, three packages publish atomically.- npm trusted publishing pre-flight — maintainer must enable trusted publishing for
@hulumi/baseline,@hulumi/policies,@hulumi/driftathttps://www.npmjs.com/settings/hulumi/access(org settings) BEFORE the tag push. Without this, the OIDC handshake fails and no package publishes (correct fail-closed behaviour). - CSA outreach email — send
docs/launch/csa-outreach.mdon release day. - Pulumi Discussion post + blog pitch + CFP submissions — per
docs/launch/README.mdsend-by table. - GitHub issues for v1.1+ scope — open at release time for
hulumi-driftskill,hulumi-checkskill, CLI, Azure/GCP, CIS v7.0 full, MITRE ATLAS submission, Pulumi upstream provenance PR, BucketV2 → Bucket migration. - PGP key for tag signing — maintainer's GitHub-verified PGP key needs to be configured locally before
git tag -sworks. Document at the maintainer-side, not in this repo. - Sandbox account
PULUMI_ACCESS_TOKEN— still gates the weekly real-AWS integration's full path. M3+M4 carryover; not blocking v1.0.0.
- No real
npm publishexercised yet —release.ymlis wired up andattestation-dry-runexercises the build + attest path on everymainpush, but the full publish only fires onv*.*.*tag. Maintainer responsibility post-merge. secrets.PULUMI_ACCESS_TOKENIDE warnings carry over from M3/M4 — same fail-closed reasoning.actions/attest-build-provenance@v2is pinned by version, not exact SHA in the workflows. SLSA Build L3 spec is satisfied because the action itself runs at a pinned version, but a tighter pin (commit SHA) would be marginally stronger. Tracked as v1.0.x refinement.slsa-framework/slsa-github-generatorreusable workflow not used — we went withactions/attest-build-provenance@v2direct usage instead. Functionally equivalent for SLSA Build L3; documented in lessons.- CHANGELOG.md doesn't yet have a
[Unreleased]section for ongoing work. Standard Keep-a-Changelog convention; will add at first post-v1.0.0 commit. - SCP
__REPLACE_ME__placeholders — by design unmistakable, but the user MUST replace before applying. Documented in scp-guide.md.