Patch Changes
-
#8977
b4e5af8Thanks @kitlangton! - Prevent crashes and premature interruption whenEffect.cached,Effect.cachedWithTTL, andEffect.cachedInvalidateWithTTLare synchronously re-entered. -
#8982
b8d6e7aThanks @Yi-111-a! - ExportCliOutput.displayWidthto measure terminal-cell widths using the same logic as built-in CLI help and tables. -
#8933
89d5c88Thanks @tim-smart! - RespectNO_COLORin CLI prompts and the command wizard, suppressing color and style escapes while preserving cursor and redraw controls. -
#8941
66257d2Thanks @Tanner-Scadden! - Hand cluster shards off one at a time whenShardingshuts down, after their entities and singletons have stopped, so live runners can take them over sooner. The handoff is best effort: its wait is bounded, and if it times out,releaseAllattempts to release the remaining locks. A runner that is shutting down no longer acquires new shards, and releasing a shard no longer waits forever on an entity whose id is also active on another shard. -
#8940
cd2ab19Thanks @Tanner-Scadden! - Fix cluster shard handoffs. Interrupts and stream acknowledgements now reach requests still draining on the previous owner, andRpcServeraccepts acknowledgements for active streams after a client's EOF. Volatile requests sent during a handoff wait, for at mostshardLockExpiration, until the shard can be served instead of repeatedly failing withEntityNotAssignedToRunner. -
#8897
ca068ceThanks @effect-bot! - Add separate migration and storage layers to cluster SQL storage so applications can use tables migrated by an owner connection. -
#8895
f686000Thanks @tim-smart! - Serialize SchemaError as a compact object containing its tag and formatted message in JSON logs and Node inspection, without dumping schema AST nodes. -
#8968
e052f1bThanks @sledorze! - Avoid a redundant map copy whenContext.addrebases an overlay chain. -
#8487
c755b69Thanks @fubhy! - AddTestCrypto.layer, which provides deterministic random operations derived from a seed while preserving a platform crypto service's digest implementation. -
#8935
ebe487fThanks @tim-smart! - TurnCrypto.randomUUIDv4andCrypto.randomUUIDv7into functions accepting an optional{ format: "hex" | "bytes" }option. Call them with()for the default lowercase, hyphenated UUID string, or with{ format: "bytes" }for a 16-byteUint8Array. -
#8926
63bfad8Thanks @effect-bot! - FixDurableDeferred.raceAllandDurableDeferred.intoso a workflow branch continues after its result is recorded instead of stalling until a concurrently parked sibling is woken. The effect passed toDurableDeferred.intonow counts as in-flight work, so a parked sibling no longer suspends the run while it runs. -
#8921
8598157Thanks @devangpratap! - FixDuration.fromInputUnsafethrowing on infinite nanosecond totals. It now returns an infinite duration, andDuration.fromInputreturnsSomeinstead ofNone. -
#8972
76a03f7Thanks @devangpratap! - FixDuration.timesthrowing when a nanosecond-backed duration is multiplied by a fractional or non-finite number. Fractional results round to the nearest nanosecond. -
#8900
182e26dThanks @effect-bot! - Add anoFollowoption toFileSystem.opento reject symlinks at the final path component. Supported on Node and Bun on POSIX; Windows and Deno returnBadArgument. Add{ position }toFile.readandFile.readAllocfor concurrent reads that leave the cursor unchanged. -
#8885
a46592aThanks @effect-bot! - Preserve duplicate slashes in query values when FindMyWay normalizes request paths. -
#8986
1d3419eThanks @jayhemnani9910! - Fix histogram exporters to retain all finite boundaries and overflow observations in OTLP, and emit a single+Infbucket in Prometheus. -
#8932
e00eaaeThanks @tim-smart! - Defer terminal input acquisition until a prompt needs user input, so constant fallback prompts leave piped stdin untouched. -
#8888
133ceb2Thanks @RhysSullivan! - Return empty 200 text/event-stream responses for MCP HTTP request POSTs when cancellation withholds every reply. Return 500 for other request POSTs that end without a response. -
#8924
a494a64Thanks @effect-bot! - AddMcpServer.layerHttp({ allowSubscriptions: false })to disablev2026_07_28subscriptions while keeping request-scoped progress and log notifications. -
#8890
d6082a2Thanks @tim-smart! - Send MCP cancellation notifications for interrupted server-to-client requests instead of internal RPC control messages. -
#8925
ee3a350Thanks @effect-bot! - Prevent MCP subscriptions from receiving deferred list-change notifications emitted before they subscribed, while preserving coalesced runtime changes. -
#8955
7ba976cThanks @effect-bot! - Allow interrupted activities to run again when the in-memory workflow engine replays a preempted execution. -
#8973
9dbd07eThanks @fubhy! - Accept address inputs inDns.reverseand name server inputs in the platformDnsservices, and addDns.nameServerFromInput. -
#8953
d4f7dc3Thanks @fubhy! - Add TLSA records toeffect/net/Dns, with aSchema.DnsTlsaRecordschema whose JSON codec encodes the certificate association data as hex. The Node.jsDnsservice queries them withresolveTlsa(Node.js 22.15 or 23.9 and later); Bun, Deno, and older Node.js versions fail TLSA queries withUnsupported. -
#8880
a9b5148Thanks @fubhy! - Add experimentalHost,Dns, andAddressResolvermodules toeffect/netfor host parsing, DNS queries, and endpoint resolution, with Node, Bun, and Deno services. DNS operations accept and normalize domain-name strings; endpoint resolution also acceptshost:portstrings. Add scoped IPv6 literals and host and DNS record schemas, including JSON codecs for records.Provide the services explicitly; they are not included in the platform
*Serviceslayers. UseNodeAddressResolver.layer.pipe(Layer.provideMerge(NodeDns.layer))to provide both Node services. -
#8970
e7d84e4Thanks @fubhy! - AddfromInputconstructors to theeffect/netdata types. -
#8899
0e2b988Thanks @tim-smart! - Answer orphaned cluster workflow activity requests with Suspended instead of waiting indefinitely for replay registration. -
#8987
84f48dfThanks @jayhemnani9910! - Omitminandmaxfrom subsequent delta histogram exports inOtlpMetrics: cumulative extrema do not describe the reported interval. -
#8907
48ed32fThanks @tim-smart! - Add adelayoption toPersistedQueue.offerthat postpones an element's first delivery in the memory, Redis and SQL stores. -
#8904
59e58a6Thanks @effect-bot! - Add PowerShell CLI completions with--completions powershell(aliaspwsh). -
#8409
b9e7821Thanks @tim-smart! - AddDatagramSocketfor UDP on Node, Bun, and Deno, andNetAddress.inetAddressFromNativeUnsafefor runtime-reported addresses. -
#8943
aa811e4Thanks @Tanner-Scadden! - Report RPC response encoding failures to ErrorReporter and include the RPC tag in client defects. -
#8958
bfc5742Thanks @tim-smart! - End the RPC server span with the encoding defect when a response fails to encode, instead of recording it as a client interruption. -
#8976
f9f7a5aThanks @juliusmarminge! - AddonPingTimeouttoRpcClient.makeProtocolSocketandRpcClient.layerProtocolSocketto distinguish ping timeouts from other socket failures. It runs only when a ping timeout drops an open connection, beforeonDisconnectand in-flight call failures; defects are logged and ignored. -
#8956
73fa287Thanks @schickling-assistant! - ExportSchema.isIntandSchema.Intas exact JSON Schema integers bounded byNumber.MIN_SAFE_INTEGERandNumber.MAX_SAFE_INTEGER. Composed bounds retain the tighter constraint, and exact integer branches preserveoneOf. -
#8937
7ff5048Thanks @effect-bot! - Skip startup stack probing whenError.stackTraceLimitis zero, avoiding unnecessary stack formatting during module loading. -
#8927
7803e51Thanks @effect-bot! - Hold the shared connection for the whole statement or stream on single-connection SQL clients, so another fiber's transaction can no longer roll back an acknowledged write or expose uncommitted rows to a plain read. -
#8938
93410daThanks @effect-bot! - AddStdio.stderrIsTerminalwith an overridable false default and runtime detection for Node.js, Bun, and Deno. -
#8963
aef1d1fThanks @tim-smart! - AddClusterSchema.InterruptOnTerminationto interrupt opted-in RPCs as soon as entity termination starts. Persisted requests resume under the next owner without saving an interrupt reply, and server-sideUninterruptibletakes precedence. -
#8917
d6d515bThanks @Brendonovich! - MakeHttpClient.withRateLimiterwait for the reported reset once a response's remaining budget is exhausted, including when a limit header is also present. -
#8892
ea52c24Thanks @effect-bot! - Propagate SQL transaction COMMIT errors as typed SqlError failures when cleanup succeeds. Preserve both COMMIT and cleanup errors as defects when cleanup fails, so typed recovery cannot hide an unsafe connection state. -
#8913
7e44402Thanks @grzegorz-naileditgames! - Reject B3 single-header and multi-header trace contexts with invalid trace or span identifiers. -
#8978
0b17b9eThanks @tim-smart! - Allow WebSocket clients on Node and Bun to send handshake headers alongside subprotocols through socket constructors, channels, and layers. Preserve browser-compatible constructor calls when headers are not supplied. -
#8891
9753be9Thanks @tim-smart! - Deliver terminal replies for persistedClusterSchema.WithTransactionrequests only after commit or clean rollback. On transaction failure, recover a committed reply or retry the request. -
#8886
977096bThanks @effect-bot! - Fix lost failure replies for persisted cluster RPCs usingClusterSchema.WithTransaction. Save typed failures and non-fatal defects after rollback so retries receive the stored reply. Successful replies still commit with the handler's writes. -
#8882
cf58cb0Thanks @devangpratap! - Fix generated Zsh completions for flag descriptions containing].