I Shipped...

9 September 2026 (20PRs)

durable todo CLI storage paths

I fixed a problem where fresh CLI processes could lose authenticated todos because the default server path did not select durable storage consistently. Now the CLI uses a durable default path across process restarts, while callers can still select memory storage explicitly.

durable reset retry markers

I fixed a problem where a refresh error or cancellation could lose the pending authoritative reset marker, allowing a stale acknowledgement or incomplete materialisation to escape. Now reset markers survive retryable failures and are generation-checked before acknowledgement, while policy-scoped lifecycles retain separate state.

duplicate public-column validation

I fixed a problem where duplicate public column declarations could pass compilation and become ambiguous downstream. Now compilation rejects duplicates with a path-specific error before lowering.

correct WASM tracing span lifecycle

I fixed a problem where emission occurred in onexit; an instrumented future could therefore produce partial duplicate records on each poll before the logical span closed. Now the layer records timing on first entry and emits from onclose after the final handle drops.

correct SQL NULL join semantics

I fixed a problem where sQL-lowered inner joins and prepared nullable-parameter equality could match rows whose join keys were both NULL. Now rows with NULL in any nullable join-key position are excluded before equality matching; non-NULL equality remains unchanged.

correct create-Jazz app-name resolution

I updated Jazz to parse the application name after consuming option values. I also changed it to prevent option arguments from becoming the generated directory name.

consistent streamed JSON validation

I fixed a problem where buffered and streamed JSON admission could disagree on malformed, overflowing, or boundary-split values. Now both paths accept and reject the same JSON inputs while retaining bounded streaming state.

consistent profiled-read materialisation

I fixed a problem where the profiled read path could materialise an unselected query differently from the ordinary read path. Now unselected profiled reads follow the ordinary materialisation semantics while retaining profiling support for selected queries.

consistent nested-relation pagination

I fixed a problem where nested relation pagination could apply independently computed windows, producing incorrect roots or inconsistent read and subscription results. Now relation resolution composes nested windows before publication, preserving the requested root membership and pagination semantics across both paths.

consistent empty reversed storage ranges

I fixed a problem where reversed start and end bounds could reach backend scans with inconsistent behaviour instead of returning an empty range. Now storage adapters reject impossible reversed ranges consistently before scanning, and index reads inherit the same ordered semantics.

consistent aggregate reads across historical views

I fixed a problem where aggregate reads could diverge across historical sources, produce unstable synthetic row identities, or validate aggregate predicates without the resolved payload. Now the query evaluator uses consistent aggregate materialisation and payload-aware validation across the supported historical read paths.

complete Rust artifact cache coverage

I fixed a problem where turbo's manually maintained Rust input globs could omit transitive dependencies. Now cLI, NAPI, WASM and fast-WASM inputs match their declared non-dev local Cargo dependency closures.

clear Jazz Classic API errors

I fixed a problem where classic imports fail with generic missing-export errors. Now selected Classic usage raises JAZZCLASSICAPIREMOVED with the offending API and links to current documentation.

clean SSE shutdown

I fixed a problem where active SSE responses could keep HTTP shutdown open, and requests crossing shutdown could continue into authentication or mutation work. Now existing streams observe EOF promptly, new requests fail at the admission gate, and Jazz shutdown still runs after HTTP close outcomes.

cancellation of stale Inspector submissions

I fixed a problem where a slow schema-hash lookup could complete after cancellation and replace or close connection state that belonged to a newer UI lifetime. Now only the current live submission may publish connection state; stale asynchronous completions are inert.

cancel-safe tools-client shutdown

I fixed a problem where the per-client driver could remain parked indefinitely or complete a reconnect after shutdown because shutdown did not own or cancel the spawned task. Now shutdown owns the driver join handle, wakes cancellation-sensitive states, joins normal completion, aborts cancelled completion, and prioritises cancellation over reconnect admission.

bounded native prepared-query cache retention

I fixed a problem where full literal-byte query keys and native prepared objects were retained for the runtime lifetime. Now a 256-entry/1 MiB inactive LRU is pinned by active read, subscription, and coverage leases.

bounded Inspector control sessions

I fixed a problem where silent or partially failed control acquisition could retain listeners and worker ports indefinitely; late attachment success could outlive the requesting UI; failure payloads could lose structure. Now every non-success ownership transition deterministically cancels pending work and sends the worker close protocol before local disposal.

bounded Edge catalogue forwarding

I fixed a problem where edges buffered complete authority responses without an application cap or total deadline. Now canonical requests and ordinary responses are capped at 8 MiB; GET /schemas defaults to a configurable 64 MiB.

atomic multisink shape preparation

I fixed a problem where a failed multisink preparation could leave new or shared binding-source state behind. Now failed preparation is atomic for new state and leaves existing active shared state usable for retry.