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
5 changes: 4 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ packages/domain-network/ @changesafe/domain-network — incident/topology
packages/domain-terraform/ @changesafe/domain-terraform — external-diff
domain over `terraform show -json`; never runs
Terraform
packages/domain-kubernetes/ @changesafe/domain-kubernetes — offline Kubernetes
state domain and namespace-scoped read-only collector
Comment thread
wonkwonlee marked this conversation as resolved.
packages/ai/ @changesafe/ai — provider-agnostic adapters
(OpenAI, Anthropic, Ollama) on plain `fetch`,
hardened prompt, portable JSON Schema derivation,
Expand All @@ -101,7 +103,8 @@ packages/server/ @changesafe/server — authenticated self-hosted
recomputed server-side, signed receipts, ledger
append before response
packages/cli/ changesafe — gate, analyze, eval, verify, keygen,
ledger, serve, scenario; ships pre-bundled
ledger, serve, scenario, and Kubernetes collect;
ships pre-bundled
app/ Next.js showcase console (api/analyze, api/status)
components/ console UI + client workflow hook
lib/ai/ app-level live + replay analysis entry points
Expand Down
5 changes: 4 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ packages/domain-network/ @changesafe/domain-network — incident/topology
packages/domain-terraform/ @changesafe/domain-terraform — external-diff
domain over `terraform show -json`; never runs
Terraform
packages/domain-kubernetes/ @changesafe/domain-kubernetes — offline Kubernetes
state domain and namespace-scoped read-only collector
packages/ai/ @changesafe/ai — provider-agnostic adapters
(OpenAI, Anthropic, Ollama) on plain `fetch`,
hardened prompt, portable JSON Schema derivation,
Expand All @@ -101,7 +103,8 @@ packages/server/ @changesafe/server — authenticated self-hosted
recomputed server-side, signed receipts, ledger
append before response
packages/cli/ changesafe — gate, analyze, eval, verify, keygen,
ledger, serve, scenario; ships pre-bundled
ledger, serve, scenario, and Kubernetes collect;
ships pre-bundled
app/ Next.js showcase console (api/analyze, api/status)
components/ console UI + client workflow hook
lib/ai/ app-level live + replay analysis entry points
Expand Down
35 changes: 19 additions & 16 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -159,15 +159,16 @@ git tag -f v0 v0.1.1 && git push -f origin v0 # the one tag that moves

### Publishing to npm

Publishing is automatic: `.github/workflows/publish.yml` runs when a GitHub
release is *published*. There is no npm token — the workflow authenticates
over OIDC using npm's [trusted publishing][tp], so nothing long-lived is
stored in this repository and a leaked secret is not a way to publish.
Publishing is intended to be automatic: `.github/workflows/publish.yml` runs
when a GitHub release is *published*. There is no npm token — once each npm
package has its trusted publisher configured, the workflow authenticates over
OIDC using npm's [trusted publishing][tp], so nothing long-lived is stored in
this repository and a leaked secret is not a way to publish.

[tp]: https://docs.npmjs.com/trusted-publishers

Each package trusts this repository through its own npm settings, at
*Settings → Trusted Publisher* on npmjs.com. All five use the same values:
Each package must trust this repository through its own npm settings, at
*Settings → Trusted Publisher* on npmjs.com. The intended values are:

| Field | Value |
| --- | --- |
Expand All @@ -191,16 +192,18 @@ workflow and asserted by `tests/integration/runtime-contract.test.ts`:
suite, and the install smoke test, so the gate still runs on the runtime
this repository claims to support.

A brand-new package name cannot be configured before it exists, so the first
version of any package is published by hand (`npm publish -w <package>
--access public` from the tagged commit) and its trusted publisher is
configured immediately afterwards. Such a version has no provenance
attestation — say so in its release notes rather than letting the standing
"published with provenance" sentence stand.

Five packages publish as a set — `@changesafe/core`, the three domains, then
`changesafe` — in dependency order, because a domain that reached the
registry before core would be uninstallable until core caught up.
A brand-new package name cannot be configured before it exists, so its first
version may need a manual bootstrap (`npm publish -w <package> --access
public` from the tagged commit). Configure trusted publishing before the next
release. The v0.3.0 Kubernetes bootstrap and v0.3.1 remediation were both
published manually; all five v0.3.x packages therefore lack npm provenance
attestations, and the release notes state that explicitly.

Five packages publish as a set — `@changesafe/core`,
`@changesafe/domain-network`, `@changesafe/domain-terraform`,
`@changesafe/domain-kubernetes`, then `changesafe` — in dependency order,
because a domain that reached the registry before core would be uninstallable
until core caught up.

It refuses to publish rather than guessing:

Expand Down
18 changes: 18 additions & 0 deletions MEMORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,24 @@ domain decisions.
- Read `docs/OSS_ROADMAP.md` before starting multi-file work and follow the
repository contract in `AGENTS.md`.

## Current release status (2026-07-29)

- Kubernetes shipped in v0.3.0 and was patched in v0.3.1. The v0.3.1 tag and
GitHub Release are published; use `@changesafe/domain-kubernetes@0.3.1` or
later.
- The npm `@changesafe/domain-kubernetes@0.3.0` publication is deprecated:
its direct Node ESM imports were invalid. The bundled `changesafe@0.3.0`
CLI was unaffected.
- The five public v0.3.1 packages are on npm. The v0.3.0 bootstrap and v0.3.1
remediation were manually published, so those v0.3.x packages do not have
npm provenance attestations. Future releases should use the configured npm
trusted-publishing workflow and verify provenance before announcement.
- v0.3.1 was validated by the full CI gate, including lint, typecheck, unit and
integration tests, build, Playwright, scenario corpus/gallery, secret scans,
and Kubernetes offline/read-only checks. A registry smoke also verified the
CLI version, direct Kubernetes package import, schema parsing, and a clean
Kubernetes gate.

## Verification baseline

Default validation is offline and does not spend API credit:
Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -410,6 +410,10 @@ historical record of that work.

MIT — see [LICENSE](LICENSE).

## Kubernetes (v0.3.0)
## Kubernetes (v0.3.1)

ChangeSafe can gate supported Kubernetes Deployment, StatefulSet, DaemonSet, and Service upserts against an offline snapshot. See [docs/KUBERNETES.md](docs/KUBERNETES.md). The optional collector is read-only and namespace-scoped; the gate never contacts or mutates a cluster.

Use `@changesafe/domain-kubernetes@0.3.1` or later. The initially published
`0.3.0` library package is deprecated because its direct Node ESM imports were
invalid; the bundled CLI was unaffected. See the [v0.3.1 release notes](docs/RELEASE_NOTES_v0.3.1.md).
6 changes: 5 additions & 1 deletion docs/KUBERNETES.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# Kubernetes (v0.3.0)
# Kubernetes (v0.3.1)

Use `@changesafe/domain-kubernetes@0.3.1` or later. The `0.3.0` library
publication is deprecated because its direct Node ESM imports were invalid;
the bundled CLI was unaffected. See the [v0.3.1 release notes](RELEASE_NOTES_v0.3.1.md).

ChangeSafe reviews Kubernetes changes offline. The only networked step is the optional, namespace-scoped collector:

Expand Down
7 changes: 4 additions & 3 deletions docs/OSS_ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -399,9 +399,10 @@ schema changes follow semver + documented migrations.
3. Docs-site tooling (Starlight vs Nextra) remains an open owner decision
after the P7 first pass; README plus the generated scenario gallery suffice
until there is enough documentation to justify a dedicated site.
4. Third domain after terraform: Kubernetes is delivered in v0.3.0 as the
offline simulated-state domain and namespace-scoped read-only collector;
future domains can follow the same adapter boundary.
4. Third domain after terraform: Kubernetes was delivered in v0.3.0 as the
offline simulated-state domain and namespace-scoped read-only collector,
then patched in v0.3.1 for valid direct Node ESM imports; future domains
can follow the same adapter boundary.
(most visceral lockout demo) — decide after P4 feedback.

## 8. Success metrics (12 weeks post-launch)
Expand Down
Loading