Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 27 additions & 20 deletions MEMORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 2 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
50 changes: 23 additions & 27 deletions docs/LAUNCH.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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.
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion examples/github-actions/gate-terraform-plan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading