Skip to content

v0.47.0

Choose a tag to compare

@rustyconover rustyconover released this 18 Sep 18:13
· 61 commits to main since this release

Identity.v1: introspection is no longer rate limited

introspect_token sits behind authentication and an explicit introspector allowlist, so the per-caller limiter only ever refused legitimate callers — during a burst of logins it answered introspection_refused for valid tokens. It is gone. IdentityImpl(introspect_rate_limit=...) still accepts the argument, warns DeprecationWarning, and ignores it. The conformance suite gains TestIntrospectionIsNotThrottled (60 introspections through 12 threads), and the cross-port audit forbids a limiter. The Identity.v1 spec now also retires the legacy __introspect_token__ JSON route.

Launcher: a busy worker is not a dead one

Under a burst of connections a launched worker's accept queue fills, and on Linux the launcher's liveness probe failed with EAGAIN. The launcher read that as a dead worker: it unlinked the live worker's socket and spawned a duplicate, orphaning the original and racing clients onto a vanished path (64 workers for 2 commands in a 32-process test run). EAGAIN now counts as alive. macOS reports a full queue as ECONNREFUSED, so a refusal is re-probed briefly (50, 100, 200 ms) before it is believed. gc_state_dir shares the probe, so it no longer reaps a busy worker's files either.

vgi_rpc.wire.write_request(..., protocol=...)

An intermediary re-framing a request can now stamp the vgi_rpc.protocol routing key alongside protocol_version ("both or neither").