Release v16.37.0
Three fixes to what a Chronicle costs before it can serve anything, plus the switch that makes an embedded one cheap. Measured against a play sandbox running the kernel and its client in one container: together these remove ~3s of a 7.3s cold start on an unconstrained machine, and ~5s of ~15s under a half-core limit.
Added
Cratis:Chronicle:Authentication:Enabledturns authentication off entirely — no token authority, no identity endpoints, no bootstrap admin user, and every gRPC service and HTTP endpoint answers anonymously. For a Chronicle embedded in one container or process with its own client over loopback, where the credential exchange protects nothing and costs every client seconds of cold start. Anywhere a network can reach the server, leaving it off publishes the whole event store (#3791)auth=nonein a connection string, andWithoutAuthentication()on the builder, connect without presenting credentials. Omitting credentials still means client credentials with the development pair, as it always has —auth=noneis the explicit form and overrides anything else the connection string carries (#3791)
Fixed
- Connecting a client no longer waits a full keep-alive interval. The server withheld its first heartbeat for
KeepAliveIntervalSecondswhile the client waits on exactly that heartbeat to consider itself connected, so every connect everywhere cost the interval — a flat second by default, unaffected by how much CPU the machine had, because it was a delay rather than work (#3790) - The "started successfully - ready and listening" message is logged once Kestrel has bound the port, rather than roughly half a second before it. Entrypoint scripts, test fixtures and orchestrators that gate on that line were connecting to a socket that did not exist yet (#3792)
- The Workbench works when served under a path prefix. It already learns its prefix from the
base-pathmeta tag and hands it to Arc, but its auth probe, login, logout and post-login redirect asked for root-absolute paths regardless — so under a prefix the probe hit whatever else was at the root and the Workbench sent the user to a/loginthat was not there