diff --git a/README.md b/README.md index cf18493e..6e5efa5d 100644 --- a/README.md +++ b/README.md @@ -65,28 +65,59 @@ verification, pinning and how releases are cut. Prerequisites: a cluster with [Agent Substrate](https://github.com/agent-substrate/substrate) installed and a snapshots bucket. ate-env is built against Substrate -[`3a2ca623`](https://github.com/agent-substrate/substrate/commit/3a2ca623) (2026-10-16, Go module -`go.ate.dev/substrate`). The cluster needs a Substrate recent enough to accept what ate-env writes: -the WorkerPool declares `spec.sandboxClasses`, the ActorTemplate uses `snapshotConfig` and -`wakeupProbe`, names its sandbox class as the string `gvisor`, and declares CPU and memory limits. -That means Substrate at or after -[`63a17a92`](https://github.com/agent-substrate/substrate/commit/63a17a92) (2026-10-15), which also -renamed the worker image: `--worker-image` must be the `ateworker-gvisor` image published by that -Substrate install. An older Substrate rejects the string sandbox class (from -[`9ec49759`](https://github.com/agent-substrate/substrate/commit/9ec49759)) or the limits (from -[`c58f374a`](https://github.com/agent-substrate/substrate/commit/c58f374a)); use an ate-env from before -this bump with it. - -When you upgrade an existing cluster across that boundary, register your base templates again. -Substrate cannot update an ActorTemplate in place, and a base registered earlier has no CPU and memory -limits, thus each template `ate-env-api` derives from it for a rootfs image fails with -`resources: Required`. Delete the base and its derived templates (named `-<12 hex digits>`) with -`kubectl-ate delete actor-template`, then register the base again with `ate-env manifest template`. -Each environment created after that derives its template again, with the limits. +[`ddb46651`](https://github.com/agent-substrate/substrate/commit/ddb46651) (2026-10-18, Go module +`go.ate.dev/substrate`). The cluster needs Substrate at or after +[`0443aec3`](https://github.com/agent-substrate/substrate/commit/0443aec3) (2026-10-17): from that +commit the WorkerPool alone chooses the sandbox (`spec.sandboxClasses`), the ActorTemplate names +none, and Substrate rejects a template that still sends `sandboxConfig`, while an older Substrate +requires one. Use an ate-env from before this bump with an older Substrate. Because the template no +longer names a class, an actor booting without a snapshot can land on any pool whose labels its +template's `workerSelector` matches, and on any pool at all without a selector. `ate-env` labels its +WorkerPool `ate-env/workerpool: ` and each template selects that label, thus actors stay on +their pool and its sandbox class; `--workerpool` on `ate-env manifest template` must name the same +pool as on `ate-env manifest` (both default to `