Patch Changes
-
#9030
7547a99Thanks @effect-bot! - Bound sparse array indices inSchemaGetter.makeTreeRecord, used bySchema.fromURLSearchParamsandSchema.fromFormData. An indexed container with more than 20 holes is now returned as an object keyed by its index strings instead of a sparse array, and appending after the maximum array index no longer throws. -
#9083
711719dThanks @effect-bot! - Bound import-time stack detection probes to the frames they inspect, restoring the caller's stack trace limit afterward. -
#9041
8f1ea52Thanks @tim-smart! - Stop grouped RequestResolvers from retaining batch keys for the lifetime of the resolver. Equal keys are now matched by the pending batch map, so a key is dropped as soon as its batch stops pending, including after interruption. -
#9010
c93485eThanks @effect-bot! - Support an explicit clientservernamefor TLS socket upgrades without changing hostname behavior when omitted. -
#8990
37e088fThanks @bastiankistner! - Use decoded response aliases in generated HTTP clients. Render bare numbers with a standard leading finite check asSchema.Finite, preserving annotations and other checks. -
#8998
9314666Thanks @gchen0002! - OptimizeContext.pickfor zero or one service. -
#9048
a0a26b7Thanks @jayhemnani9910! - Fix zonedDateTime.addandDateTime.subtractto apply hours, minutes, seconds and milliseconds as elapsed time across DST transitions. -
#9008
cc843eaThanks @effect-bot! - AddtoolCallValidation: "deferred"for callers usingdisableToolCallResolution: true. Model-generated tool calls return withunknownparameters, including invalid parameters and undeclared tool names, even without a toolkit. Supported by the Anthropic, OpenAI, and OpenAI-compatible providers. Strict validation remains the default; provider-executed calls remain validated. -
#8979
ab90be9Thanks @tim-smart! - Add experimentaleffect/graphqlwith typed operations, middleware, HTTP and subscription transports, partial results, serializable errors and cursor pagination. -
#9052
a59b971Thanks @Tarekkharsa! - FixHttpClient.withRateLimiterreading aRetry-AfterHTTP date as a number of seconds. -
#9031
fccf660Thanks @effect-bot! - AddMcpServer.layerHttpRequestScopedfor serverless hosts such as Cloudflare Workers. Each POST is served by an MCP server owned by that request, so no fiber or timer outlives the request. The new layer accepts only sessionless protocol adapters such asv2026_07_28, with no subscription or session termination options.McpServer.layerHttpretains its long-lived server behavior. -
#9081
1bfd8fdThanks @hsyntax! - Tighten colliding bounds in place when exporting JSON Schema, instead of moving them intoallOf. This applies to numeric, length, item-count and property-count bounds, and an inclusive or exclusive bound implied by the other on the same side is dropped. For example,Schema.Naturalnow exportsminimum: 0, andSchema.Int.check(Schema.isGreaterThan(0))exportsexclusiveMinimum: 0without the safe-integerminimum. -
#9013
78e4c43Thanks @jayhemnani9910! - FixMultipart.toPersistedfailing for uploads named.or..and for long multi-byte file names. -
#8991
fde67a1Thanks @fubhy! - AddNetAddress.loopbackAddresses. -
#8992
118deefThanks @fubhy! - AddHost.toFullyQualified,Host.toRelative, andHost.parseHostsFile. -
#9046
cea74c9Thanks @effect-bot! - Persist outgoing cluster messages while the locally assigned shard is waiting for its lock. -
#9056
b7c1ac6Thanks @tim-smart! -Prompt.fromResponsePartsnow keeps streamed text and reasoning in stream order, and keeps partial text from unended text blocks. -
#8997
f837966Thanks @effect-bot! - Release the durable waits of losingDurableDeferred.raceAllbranches once the race settles, so a late completion such as a losingDurableClock.sleepno longer preempts and replays the continuing workflow -
#9053
09738f4Thanks @Tarekkharsa! - HonorRetry-AfterinHttpClient.retryTransient. -
#9019
22e7129Thanks @effect-bot! - Allow configuring Scalar's preferred authentication security scheme through HttpApiScalar without a TypeScript cast. -
#9069
fdcb47eThanks @effect-bot! - Fix cluster Sharding startup accessing storage-loop state before initialization, preventing a scheduler-dependent ReferenceError and delayed initial storage reads. -
#9049
fc349a1Thanks @jayhemnani9910! - FixSink.takeUntilandSink.takeUntilEffectdropping the element after a match. They now stop at the match and return the remaining input as leftovers. -
#8979
ab90be9Thanks @tim-smart! - AdddispatchEmptyNamedEventstoSsedecode options. It also dispatches an event that sets anevent:name but has nodata:line, which protocols such as graphql-sse use forcomplete. -
#9065
892d14dThanks @Abdullah1738! - Fix quadratic parsing time inSse.makeParserandSse.decodefor long lines split across many chunks. -
#9066
077c557Thanks @effect-bot! - Complete HTTP server spans synchronously before the request fiber exits, preventing completed spans from being lost during immediate runtime shutdown. -
#9029
4a999a3Thanks @effect-bot! - Clean up unused Anthropic bindings and make documentation-only imports type-only, preserving server-tool inputs and documentation links. -
#9062
797696aThanks @adam-r-kowalski! - Merge outer headers and cookies into a copy of a rawResponseinHttpServerResponse.toWeb, leaving the original headers unchanged. This supports immutable headers and prevents cookies from accumulating across requests that reuse a response. Responses with nothing to merge are returned unchanged. -
#9007
cf5179bThanks @effect-bot! - Wake a suspendedWorkflowEngine.executecaller as soon as its workflow has a final result, instead of waiting for the nextsuspendedRetrySchedulestep. A replay that suspends again does not spend a step of the schedule. WithClusterWorkflowEngine, only callers on the runner that owns the execution are woken early; other callers keep relying onsuspendedRetrySchedule. -
#9037
e1c6053Thanks @effect-bot! -HttpEffect.toWebHandlernow interrupts a streamed response body when the request is aborted after its headers were sent, even if the body is no longer being read, which releases the request scope.