unambiguous aggregate output validation
I fixed a problem where aggregate aliases could collide and make output columns ambiguous. Now validation rejects exact, case-sensitive aggregate output collisions before normalization or lowering.
I fixed a problem where aggregate aliases could collide and make output columns ambiguous. Now validation rejects exact, case-sensitive aggregate output collisions before normalization or lowering.
I fixed a problem where every non-array object was treated as operators. Now direct timestamp, byte-array, JSON-object and array values lower to one typed Eq condition.
I fixed a problem where backend JWKS discovery could cross an untrusted transport boundary or accept an insecure redirect. Now jWKS discovery is admitted only through the trusted backend transport contract and redirect policy fails closed.
I fixed a problem where dropped initialised streaming uploads could retain staged large-value claims, and wrapper or database close could discard shared state before cleanup ran. Now binding-private owner and view lifecycle code queues non-blocking drop cleanup.
I updated Jazz so equivalent Vue config replacements retain the pending or ready client, avoiding unnecessary shutdown and fallback flicker.
I fixed a problem where a provider could recreate or dispose a client for an equivalent or in-place configuration change, disrupting the consumer during a handover. Now the provider compares configuration semantics, preserves equivalent clients, and transfers ownership safely when authentication or storage configuration changes.
I fixed a problem where production starter servers could return a missing page for a client-side route that was not the root path. Now the four affected starters return the SPA shell for valid client-side deep links while preserving API and asset responses.
I fixed a problem where jazz enumerated logical per-table history families and metered each independently. Now groove owns logical-to-physical aggregation behind the concrete Database interface.
I updated Jazz so concurrent authentication requests share one server JWKS refresh rather than independently fetching the same public keys.
I fixed a problem where session range expressions compiled in TypeScript despite core accepting only equality and inequality, then failed later during schema conversion. Now defined session ranges throw a targeted synchronous DSL error.
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.
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.
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.
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.
I fixed a problem where writeStream truncated 1,000 / rate to whole milliseconds. Now each timestamp is floor(index × 1,000 / rate).
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.
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.
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.
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.
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.