Repository navigation
What's Changed
⚠️ Breaking Changes
- snapshot rootfs uppers as one tar per container by Benjamin Elder (@BenTheElder) in #2110
- actorevent: write each actor event to one place, with a shared OTEL_*_EXPORTER parser by Tim Bai (@baizhenyu) in #2193
- ateom-microvm: snapshot durable-dir volumes as one tar per volume by Benjamin Elder (@BenTheElder) in #2283
Bug Fixes
- Clean up actors when ateom terminates by Scott Funkenhauser (@sfunkenhauser) in #1888
- Select kvm-clock for amd64 micro-VM guests by Adhita Selvaraj (@swiftdiaries) in #1945
- Reject repointing an actor that owns a snapshot to a different storage location by Luiz Oliveira (@laoj2) in #2014
- ateapi: stop logging the raw PostgreSQL connection string (which might contain db password) at startup by Da Huang (@git286) in #1833
- atecontroller: add a zero-count bucket to empty exponential histograms by Eric Curtin (@ericcurtin) in #1933
- Support workers with multiple IPs by Scott Funkenhauser (@sfunkenhauser) in #2052
- router: report no_capacity only for a ResourceExhausted cause by Eric Curtin (@ericcurtin) in #1929
- fix(serverboot): honor OTEL_METRICS_EXPORTER=none by Quentin Bisson (@QuentinBisson) in #1878
- atelet: try each matching image pull credential in turn by Benjamin Elder (@BenTheElder) in #2104
- Support --platform build flag in orchestrator image by Max Smythe (@maxsmythe) in #1901
- ateapi: reach an atelet again after its node restarts by Eric Curtin (@ericcurtin) in #2118
- atelet: measure what a snapshot image costs, not how long it is by Chenyi Wang (@chw120) in #931
- Only require a pause image for gVisor sandboxes by Benjamin Elder (@BenTheElder) in #2144
- fix: reload the pod-identity CA pool for client-cert verification by Rashad Sirajudeen (@rashadism) in #1930
- fix: reload frozen CA pools in atelet, ateapiauth, and the worker-side atelet dialer by Rashad Sirajudeen (@rashadism) in #1932
- Preserve system-info registrations during stale lifecycle cleanup by Adhita Selvaraj (@swiftdiaries) in #1944
- [Flaky test fix] TestSandboxAssetPrewarmDownloads - atelet: make the sandbox prewarm worker joinable, fixing the race by Aditya Shantanu (@aditya-shantanu) in #1940
- fix(objectstorage): stop initial range downloads on close by ktsoator (@ktsoator) in #2176
- contextlogging: redact protobuf attributes in the shared slog handler by Da Huang (@git286) in #1942
- WorkerPool can set the ServiceAccount of its worker pods by Danielle Mustillo (@danielle-mustillo) in #2219
- router: report a shed request as no_capacity after a full fleet by Jeff Luo (@JeffLuoo) in #2138
Features: Networking and Egress
- Add gcp secret manager as a credential provider in its own go module by Yufan Su (@yufan-su) in #1991
- egress policy: add an actor JWT value source to CredentialHeader by Max Thompson (@thompsonmax) in #1960
- Implement passthrough egress policy by yanavlasov in #2019
- docs: how an actor exports telemetry under the egress lockdown by Da Huang (@git286) in #2120
- Passthrough dial address resolved by the gateway by Lior Lieberman (@LiorLieberman) in #2045
- Update agentgateway and enable ingress and egress test coverage by Eitan Yarmush (@EItanya) in #2158
- router authn/z: Prefactor; extract router flag binding to function by Taahir Ahmed (@ahmedtd) in #2161
- remove non mitm dataplanes by Lior Lieberman (@LiorLieberman) in #2015
- Router no longer logs request credentials or query strings by Da Huang (@git286) in #2206
- kubectl-ate: share the missing-actor check across egress-policy commands by Eric Curtin (@ericcurtin) in #2191
- graduate credential injection from experimental by Lior Lieberman (@LiorLieberman) in #2101
- ateapi: describe no_capacity without "free worker" by Jeff Luo (@JeffLuoo) in #2137
- SystemInfo: Implement system-roots.ate.dev trust bundle by Taahir Ahmed (@ahmedtd) in #2049
Features: Security and Identity
- feat(credentials): narrow a namespace grant by secret name or label by Jonathan Jamroga (@jjamroga) in #1859
- ClusterTrustBundle v1 support by John Howard (@howardjohn) in #1924
- atelet: pull image credentials from the kubelet credential provider by Benjamin Elder (@BenTheElder) in #917
- ateapi: Implement Policy Governance CRUD Access Policy APIs by Shruti Nair (@SHRUTI6991) in #1965
- oidcdiscovery: build the OpenID discovery document by Max Thompson (@thompsonmax) in #1963
- kubectl-ate: add --validity flag to admin make-ca-pool by Pedro Nunes (@pintonunes) in #2058
- localjwtauthority: thumbprint key IDs and a configurable signing algorithm by Max Thompson (@thompsonmax) in #1961
- security: only run sandbox runtime assets from the static files dir by Benjamin Elder (@BenTheElder) in #2269
- only enable guest debug console with --guest-debug by Benjamin Elder (@BenTheElder) in #2291
- ateapi: [Part 2] Runtime Authorization check for Actor and ActorTemplate CRUD by Shruti Nair (@SHRUTI6991) in #1980
Features: Observability
- benchmarking/locust: harvest server-side telemetry from Prometheus by Nishanth Kotla (@Nishanth29) in #1725
- ateomstats: add per-activation usage state and the usage emitter by Tim Bai (@baizhenyu) in #2005
- otlprelay: use a short temp dir for the test socket by Benjamin Elder (@BenTheElder) in #2270
Features: Workers and Actors
- workerservice: validate RequestActorSuspend requests by shrutiyam-glitch in #2023
- atelet: use a glibc base image to support credential providers by Benjamin Elder (@BenTheElder) in #2108
- ateapi: prefer less-loaded workers via power of two choices by Chenyi Wang (@chw120) in #1915
- atelet,ateom: restore local pause checkpoints directly from LocalSnap by Chenyi Wang (@chw120) in #1876
- csi: add publishContext to actor volumes by hajiler in #1578
- Fix grpc status error when creating actors and tags by Julian Gutierrez Oschmann (@juli4n) in #2263
- fake-dataplane: add a fake dataplane skeleton by haiyanmeng in #2272
- ocispec: raise actor RLIMIT_NOFILE from 1024 to 1048576 by Yuan Gao (@ygao-g) in #2242
Features: Install and Operations
- benchmarking: agent-session workload — a scripted coding agent that suspends while the LLM thinks by Aditya Shantanu (@aditya-shantanu) in #1934
- ci: add automated release notes generation by Steven Shriver (@stshrive) in #2018
- cordon-control-plane: share one pool, give postgres its own by haiyanmeng in #2056
- feat(benchmarking): add substrate spawn benchmark by Sairaj Pokale (@sairajp-rewind) in #1969
- Let glutton actors consume CPU, driven from boomer dynconfig by Max Smythe (@maxsmythe) in #1875
- ate-setup: add the uniform configuration package by Steven Shriver (@stshrive) in #2012
Documentation
- Add Yolo the Octopus logo and quick navigation links to README by Brandon Royal (@brandonroyal) in #2239
Other Changes
- atepg: name the row in list decode errors by Eric Curtin (@ericcurtin) in #2000
- ategcs: rename and move to pkg/ for reuse outside atelet by ILLUM1N0X in #2013
- Remove reserved fields from proto and update back-compat instruction in AGENTS.md by Luiz Oliveira (@laoj2) in #1985
- remove ssl_cert_dir and add clearer guidance for actor trust store by Lior Lieberman (@LiorLieberman) in #2044
- ateom: share atunnel wiring in ateomtunnel by Eric Curtin (@ericcurtin) in #1959
- Delete worker pods in terminal states by Scott Funkenhauser (@sfunkenhauser) in #2051
- benchmarking(agentsession): define the session script in YAML, selectable per run by Aditya Shantanu (@aditya-shantanu) in #2046
- Introduce a dedicated type for API errors. by Julian Gutierrez Oschmann (@juli4n) in #2072
- benchmarking(agentsession): run a script from a file mounted into the worker by Aditya Shantanu (@aditya-shantanu) in #2047
- ateom-microvm: use pflag like the other binaries by Benjamin Elder (@BenTheElder) in #2096
- Egress gateway no longer fetches an actor's egress policy twice when requests race by Max Thompson (@thompsonmax) in #2095
- atelet: take the DATA snapshot file set from ateom by Haven Xia (@HavenXia) in #2028
- SystemInfo: Allow multiple trustbundle names in one file by Taahir Ahmed (@ahmedtd) in #2048
- Remove onResume.fromData and the DATA_ON_GOLDEN restore scope by shrutiyam-glitch in #2105
- Delete CLAUDE.md in favor of AGENTS.md. by Julian Gutierrez Oschmann (@juli4n) in #2125
- Don't crash actors on transport errors when calling atelet by Luiz Oliveira (@laoj2) in #2060
- Add AGENTS.md files to key API source directories by Julian Gutierrez Oschmann (@juli4n) in #2131
- benchmarking: add workerMemory to size benchmark worker pods by Max Smythe (@maxsmythe) in #2109
- atepg: move expired-lease cleanup off the lock acquisition path by Matt Van Horn (@mvanhorn) in #1880
- Introduce separate PostgreSQL roles for schema ownership and normal application access by Jeremy Alvis (@iplay88keys) in #1752
- Finish moving DNS to its own package ateomnet/dns by Bowei Du (@bowei) in #2115
- benchmarking(agentsession): classify router HTTP errors like their gRPC origins by Aditya Shantanu (@aditya-shantanu) in #2145
- benchmarking: size the runner pod per test, and fan out the agentsession shutdown by Aditya Shantanu (@aditya-shantanu) in #2139
- podcertcontroller: skip ClusterTrustBundle updates when nothing changed by Eric Curtin (@ericcurtin) in #2164
- move Star History section to top of readme by Lior Lieberman (@LiorLieberman) in #2167
- metrics: rename the scheduler outcome no_free_worker to no_capacity by Jeff Luo (@JeffLuoo) in #1895
- docs: fix k8s downwardAPI volume doc broken url by doniacld (@doniacld) in #2192
- Make ate-apiserver report errors using
apierror. by Julian Gutierrez Oschmann (@juli4n) in #2129 - objectstoresnapshot/v1: add node and control snapshot plugin API by ILLUM1N0X in #2070
- When the call to atelet fails with
UNAVAILABLE, propagate the error to clients by Julian Gutierrez Oschmann (@juli4n) in #2196 - atelet: show the real error when an actor directory cannot be reset by Eric Curtin (@ericcurtin) in #2142
- ci: report e2e-test from the matrix job directly by Benjamin Elder (@BenTheElder) in #2225
- Fix error reporing for
AccessPolicyresources. by Julian Gutierrez Oschmann (@juli4n) in #2214 - MintActorJWT no longer takes the actor's UID by Max Thompson (@thompsonmax) in #2207
- envoy: fix one connection per downstream plus cleanups by Lior Lieberman (@LiorLieberman) in #2213
- benchmarking: Prometheus can now run on the tainted load-generator pool by Nishanth Kotla (@Nishanth29) in #2215
- e2e: run the identity suite with the others by Lior Lieberman (@LiorLieberman) in #2227
- ateom-microvm: replace shell commands with Go by Greg Castle (@destijl) in #2147
- benchmarking: add a personal-assistant agent-session script and a dwell op by Aditya Shantanu (@aditya-shantanu) in #2230
- CSI volume support: follow-up improvements by anishgang in #1729
- ci: cache Go and envoy-dataplane builds in e2e by Benjamin Elder (@BenTheElder) in #2229
- egress: make egress dial the port the actor connected to and ignore authority ports by Lior Lieberman (@LiorLieberman) in #2228
- Set up bundled PostgreSQL identities in ate-setup by Jeremy Alvis (@iplay88keys) in #2025
- tarutil: refuse device nodes and unvetted xattrs on extract by Benjamin Elder (@BenTheElder) in #2111
- fix comment on pool creation in ci by Lior Lieberman (@LiorLieberman) in #2231
- Mask actor_jwt in snapshot plugin requests in logs by Da Huang (@git286) in #2265
- atenet-egress: raise mitm_internal circuit breakers above Envoy's 1024 default by Yufan Su (@yufan-su) in #2255
- e2e: run demo tests in parallel, give each sandbox class the whole node, build for host arch only by Benjamin Elder (@BenTheElder) in #2252
- Refactor: atunnel DNS server returns a Stop()able stub by Bowei Du (@bowei) in #2251
- benchmarking: tolerate ate.dev/sandboxClass=shared on the benchmark WorkerPool by Nishanth Kotla (@Nishanth29) in #2284
- ateapi: report missing StorageClasses consistently during volume creation by cloudonly in #2233
- fix(atenet): return the final resume error after budget expiry by ktsoator (@ktsoator) in #2248
- netns: serialize setSysctl's /proc/sys remount by Yufan Su (@yufan-su) in #2292
- benchmarking: cap the runner Job name at 63 characters by Max Smythe (@maxsmythe) in #2184
- ate-setup: save used settings locally after installation by Steven Shriver (@stshrive) in #2223
- Worker: Report node HardwareIdentity during Worker registration by shrutiyam-glitch in #2282
- Cleanup actor on nodes even when the worker is crashed by Michelle Au (@msau42) in #2222
- AGENTS.md: keep JWT and JWK code on the standard library by Max Thompson (@thompsonmax) in #2301
- GOVERNANCE: fix role name in Becoming a Maintainer section by haiyanmeng in #2305
- atenet: bind Envoy admin to loopback on router and egress gateway by Greg Castle (@destijl) in #2310
- ateapi: remove SnapshotConfig.on_pause, pause captures the on_commit scope by Dmitry Berkovich (@dberkov) in #2309
New Contributors
- Eric Curtin (@ericcurtin) made their first contribution in #2000
- Quentin Bisson (@QuentinBisson) made their first contribution in #1878
- Matt Van Horn (@mvanhorn) made their first contribution in #1880
- Pedro Nunes (@pintonunes) made their first contribution in #2058
- doniacld (@doniacld) made their first contribution in #2192
- Rashad Sirajudeen (@rashadism) made their first contribution in #1930
- Greg Castle (@destijl) made their first contribution in #2147
- ktsoator (@ktsoator) made their first contribution in #2176
- anishgang made their first contribution in #1729
- Brandon Royal (@brandonroyal) made their first contribution in #2239
- cloudonly made their first contribution in #2233
- Danielle Mustillo (@danielle-mustillo) made their first contribution in #2219
Full Changelog: v0.3.0...v0.4.0
Committers in this release
- Aditya Shantanu (@aditya-shantanu)
- Taahir Ahmed (@ahmedtd)
- anishgang
- Tim Bai (@baizhenyu)
- Benjamin Elder (@BenTheElder)
- Bowei Du (@bowei)
- Brandon Royal (@brandonroyal)
- Chenyi Wang (@chw120)
- cloudonly
- Danielle Mustillo (@danielle-mustillo)
- Dmitry Berkovich (@dberkov)
- Greg Castle (@destijl)
- doniacld (@doniacld)
- Eitan Yarmush (@EItanya)
- Eric Curtin (@ericcurtin)
- Da Huang (@git286)
- haiyanmeng
- hajiler
- Haven Xia (@HavenXia)
- John Howard (@howardjohn)
- ILLUM1N0X
- Jeremy Alvis (@iplay88keys)
- Jeff Luo (@JeffLuoo)
- Jonathan Jamroga (@jjamroga)
- Julian Gutierrez Oschmann (@juli4n)
- ktsoator (@ktsoator)
- Luiz Oliveira (@laoj2)
- Lior Lieberman (@LiorLieberman)
- Max Smythe (@maxsmythe)
- Michelle Au (@msau42)
- Matt Van Horn (@mvanhorn)
- Nishanth Kotla (@Nishanth29)
- Pedro Nunes (@pintonunes)
- Quentin Bisson (@QuentinBisson)
- Rashad Sirajudeen (@rashadism)
- Sairaj Pokale (@sairajp-rewind)
- Scott Funkenhauser (@sfunkenhauser)
- Shruti Nair (@SHRUTI6991)
- shrutiyam-glitch
- Steven Shriver (@stshrive)
- Adhita Selvaraj (@swiftdiaries)
- Max Thompson (@thompsonmax)
- yanavlasov
- Yuan Gao (@ygao-g)
- Yufan Su (@yufan-su)