diff --git a/MEMORY.md b/MEMORY.md index 6e177fb..5cbcabd 100644 --- a/MEMORY.md +++ b/MEMORY.md @@ -38,29 +38,36 @@ domain decisions. ## Current release status (2026-08-07) -- **v0.5.0 is prepared on `main`, not yet published.** PR #61 fixed a real - gap in `@changesafe/core`'s currently-published `0.4.1`: a domain adapter - could skip any universal policy (not just the two the shape permits) with - zero enforcement outside the app's own registration path, and a skip's - claimed replacement was never verified to exist. Every receipt now carries - `policyCoverage`. PR #60 added Kubernetes support to `changesafe eval` and - fixed a prompt-injection surface (label/selector values leaking into the - trusted preamble) and an eval-accuracy gap (unvalidated rollback - references) found in review. `CORE_POLICY_VERSION` moves to `core-v0.2.0`, - `TERRAFORM_POLICY_VERSION` to `terraform-v0.2.0` — see - `docs/RELEASE_NOTES_v0.5.0.md`. All nine workspace packages are bumped to - `0.5.0` on `main`; publishing still needs an explicit owner-authorized tag - and GitHub Release, after which this section should record the same - registry-smoke verification v0.4.1 got before being called canonical. -- **v0.4.1 is still the canonical release** until v0.5.0 actually publishes. - All five public packages are on npm at +- **v0.5.0 is the canonical release, published and registry-verified.** + All five public packages are on npm at `0.5.0`, published by the release + workflow over trusted publishing, and every one carries a verified + provenance attestation recording `.github/workflows/publish.yml` in + `wonkwonlee/ChangeSafe` at `refs/tags/v0.5.0`, commit `c1ae07e` + (`npm view changesafe@0.5.0 dist.attestations` — `gitHead` matches). + `npm audit signatures` reports verified registry signatures and + attestations for the installed tree; the registry-installed CLI gates a + destructive Terraform plan to exit 1 with `PLAN_CONTEXT_REQUIRED` visible + in the findings, and `@changesafe/domain-kubernetes` imports directly + under Node ESM. PR #61 fixed a real gap in `@changesafe/core`'s + previously-published `0.4.1`: a domain adapter could skip any universal + policy (not just the two the shape permits) with zero enforcement outside + the app's own registration path, and a skip's claimed replacement was + never verified to exist. Every receipt now carries `policyCoverage`. PR + #60 added Kubernetes support to `changesafe eval` and fixed a + prompt-injection surface (label/selector values leaking into the trusted + preamble) and an eval-accuracy gap (unvalidated rollback references) + found in review. `CORE_POLICY_VERSION` moved to `core-v0.2.0`, + `TERRAFORM_POLICY_VERSION` to `terraform-v0.2.0` — a v0.5.0 receipt is not + directly comparable to a v0.4.x one. See `docs/RELEASE_NOTES_v0.5.0.md`. +- **v0.4.1 was the canonical release before v0.5.0.** All five public + packages went out on npm at `0.4.1`, published by the release workflow over trusted publishing, and every one carries a verified provenance attestation recording `.github/workflows/publish.yml` in `wonkwonlee/ChangeSafe` at - `refs/tags/v0.4.1`, commit `bafdeeb`. This is the first *complete* set the - project has published with provenance — the three packages that reached the - registry during the failed v0.4.0 run were attested too, so v0.4.1 is the - first release where all five are. + `refs/tags/v0.4.1`, commit `bafdeeb`. This was the first *complete* set the + project published with provenance — the three packages that reached the + registry during the failed v0.4.0 run were attested too, so v0.4.1 was the + first release where all five were. - **Do not point anyone at `0.4.0`.** It published `@changesafe/core`, `domain-network`, and `domain-terraform` and then failed: the Kubernetes domain had no trusted-publisher configuration on npm, so the registry diff --git a/README.md b/README.md index d3a78c0..fb3ab84 100644 --- a/README.md +++ b/README.md @@ -281,7 +281,7 @@ credentials for your infrastructure, and never applies anything. ```yaml - name: ChangeSafe gate - uses: wonkwonlee/ChangeSafe@v0.4.1 + uses: wonkwonlee/ChangeSafe@v0.5.0 with: plan: tfplan.json context: pr-body.txt # untrusted text, scanned but never obeyed @@ -352,10 +352,9 @@ attestation naming the workflow, repository, and commit that produced it — paragraph's word for it. The manually published v0.3.0 and v0.3.1 bootstrap/remediation versions carry no attestation. -Use `0.4.1` or later. `0.4.0` published only three of the five packages +Use `0.5.0` or later. `0.4.0` published only three of the five packages before failing, so the CLI and the Kubernetes domain do not exist at that version; those three are genuine and attested, but the set is incomplete. -(`v0.5.0` is prepared but not yet published — see `docs/LAUNCH.md`.) ```bash npm i @changesafe/core @changesafe/domain-terraform # embed the gate diff --git a/docs/LAUNCH.md b/docs/LAUNCH.md index 757b9f5..226406d 100644 --- a/docs/LAUNCH.md +++ b/docs/LAUNCH.md @@ -5,27 +5,28 @@ deploys, tags, or posts automatically. ## Release truth -- `v0.5.0` is **prepared on `main`, not yet published.** It is not the - canonical release until an owner-authorized tag and GitHub Release - actually complete the publish workflow — until then, `v0.4.1` remains - what `npm install` and the GitHub Action resolve to, and every - user-facing reference (this file's example below, `README.md`) stays - pinned to it. What v0.5.0 will contain once published: a universal-policy - skip legitimacy fix in `@changesafe/core` (a domain adapter could - previously skip any universal policy, not just the two the shape permits, - with no enforcement outside the app's own registration path), a new - Terraform `PLAN_CONTEXT_REQUIRED` policy replacing a prose-only +- **`v0.5.0` is the canonical package/tag release, published and + registry-verified** (2026-08-07). All five packages record + `.github/workflows/publish.yml` in `wonkwonlee/ChangeSafe` at + `refs/tags/v0.5.0`, commit `c1ae07e`, and `npm audit signatures` reports + verified registry signatures and verified attestations for the installed + tree (`npm view changesafe@0.5.0 dist.attestations` — `gitHead` matches + `c1ae07e`). The registry-installed CLI was exercised end to end: it gates + a destructive Terraform plan to exit 1 with `PLAN_CONTEXT_REQUIRED` + visible in the findings, and `@changesafe/domain-kubernetes` imports + directly under Node ESM. It carries a universal-policy skip legitimacy + fix in `@changesafe/core` (a domain adapter could previously skip any + universal policy, not just the two the shape permits, with no enforcement + outside the app's own registration path), a new Terraform + `PLAN_CONTEXT_REQUIRED` policy replacing a prose-only `VERIFICATION_REQUIRED` skip, every receipt now recording `policyCoverage`, and `changesafe eval` gaining Kubernetes support. - `CORE_POLICY_VERSION` moves to `core-v0.2.0` and - `TERRAFORM_POLICY_VERSION` to `terraform-v0.2.0` — a v0.5.0 receipt will - not be directly comparable to an earlier one. See - [RELEASE_NOTES_v0.5.0.md](RELEASE_NOTES_v0.5.0.md). Once published and - registry-verified the same way v0.4.1 was below, update this bullet and - the pinned references to v0.5.0. -- `v0.4.1` is the canonical package/tag release: the complete published set - of the multi-domain workbench, and the first to go out through the - trusted publishing workflow rather than a manual publish. + `CORE_POLICY_VERSION` moved to `core-v0.2.0` and `TERRAFORM_POLICY_VERSION` + to `terraform-v0.2.0` — a v0.5.0 receipt is not directly comparable to a + v0.4.x one. See [RELEASE_NOTES_v0.5.0.md](RELEASE_NOTES_v0.5.0.md). +- `v0.4.1` was the canonical package/tag release before v0.5.0: the complete + published set of the multi-domain workbench, and the first to go out + through the trusted publishing workflow rather than a manual publish. - **Do not point anyone at `0.4.0`.** It published three of five packages before failing, so the CLI and the Kubernetes domain do not exist at that version. The three that shipped are genuine and carry provenance; the set is @@ -34,13 +35,8 @@ deploys, tags, or posts automatically. ESM imports were invalid; use `0.3.1` or later. - v0.3.0 and v0.3.1 were manually published and do **not** carry npm provenance attestations. -- **v0.4.1's attestations are verified** (2026-08-07). All five packages - record `.github/workflows/publish.yml` in `wonkwonlee/ChangeSafe` at - `refs/tags/v0.4.1`, commit `bafdeeb`, and `npm audit signatures` reports - verified signatures and attestations for the installed tree. The - registry-installed CLI was also exercised end to end: it gates a - destructive Terraform plan to exit 1, and the Kubernetes package imports - directly under Node ESM — the defect that forced the v0.3.1 patch. +- v0.4.1's attestations were verified (2026-08-07) the same way, at + `refs/tags/v0.4.1`, commit `bafdeeb`. - The vNext UI cutover (#47, #48, #49) is merged to `main` and deployed to the hosted Vercel URL. It does not itself create an npm release, Git tag, or GitHub Release. @@ -116,7 +112,7 @@ Example: ```yaml - name: ChangeSafe gate - uses: wonkwonlee/ChangeSafe@v0.4.1 + uses: wonkwonlee/ChangeSafe@v0.5.0 with: plan: tfplan.json context: pr-body.txt diff --git a/examples/github-actions/gate-terraform-plan.yml b/examples/github-actions/gate-terraform-plan.yml index e90c5d5..4874081 100644 --- a/examples/github-actions/gate-terraform-plan.yml +++ b/examples/github-actions/gate-terraform-plan.yml @@ -55,7 +55,7 @@ jobs: run: printf '%s' "$CHANGESAFE_PR_BODY" > pr-body.txt - name: ChangeSafe gate - uses: wonkwonlee/ChangeSafe@v0.4.1 + uses: wonkwonlee/ChangeSafe@v0.5.0 with: plan: tfplan.json context: pr-body.txt