I Shipped...

9 September 2026 (20PRs)

safer browser worker reset cleanup

I fixed a problem where a browser worker or follower could be used before readiness was established, and reset or terminal paths could leave lifecycle ownership outstanding. Now worker connections establish readiness before use, unresponsive followers fail through the lifecycle error path, and reset/shutdown release leases and pending ownership deterministically.

restored WASM tracing lifecycle

I fixed a problem where wASM tracing could be unavailable when hooks were absent, and multiple runtime contexts could race over collector ownership or retain telemetry after disposal. Now wASM hooks are exposed where available, compatible contexts share one collector lease, endpoint mismatches fail safely, and disposal drains and releases telemetry without disrupting surviving contexts.

recursive join comparison preservation

I fixed a problem where recursive policy join hydration could use a comparison different from the one declared by the query, changing which recursive rows entered the closure. Now hydration carries and applies the declared comparison through recursive join evaluation.

record-header boundary validation

I fixed a problem where a malformed record header could point a variable-field span into the fixed header area and reach lookup logic with an invalid payload boundary. Now record validation rejects the impossible span before variable-field lookup, matching the full decoder's safety boundary.

rate-accurate simulation writes

I fixed a problem where writeStream truncated 1,000 / rate to whole milliseconds. Now each timestamp is floor(index × 1,000 / rate).

payload-enum default handling

I fixed a problem where the loader did not decode tagged Enum defaults, losing the column default, and left case-field defaults as tagged runtime values. Now defaults decode recursively according to declared types and re-encode losslessly.

isolated bundled DSL schema collections

I fixed a problem where a public jazz-tools side-effect import could register tables in a bundled collector while the loader read a different process-level collector, making a valid schema appear empty. Now a private entry returns module exports and its in-bundle collected schema together.

invite-code validation for chat membership

I fixed a problem where a caller could insert a membership row for themselves using only a private chat ID. Now private membership inserts require matching chat ID, private visibility, and current join code.

exact-source Inspector deployment resolution

I fixed a problem where promotion selected the latest eligible deployment for a branch. Now the workflow requires the intended SHA and verifies returned Vercel metadata before emitting a deployment URL.

exact BigInt handling in Inspector

I fixed a problem where inspector query and mutation paths could coerce large integer values through JavaScript number handling, losing precision before the native runtime received them. Now bigInt values are parsed, serialised, validated, and lowered as exact signed-I64 decimal values across the Inspector surfaces.

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.