Patch Changes
-
#10186
8567117Thanks @effect-bot! - RestoreSchemaBinary.toCodecderivation forPrompt.FilePartand the AI response part schemas that include it. -
#10119
3f5c6aaThanks @Marve10s! - FixAtomRegistry.subscribewithoutimmediatenever notifying for an atom that has not been read yet. Subscribing now builds the atom, so the listener hears later changes. This also fixesget.subscribe,get.streamwithwithoutInitialValue, anduseAtomSubscribein@effect/atom-react.A failed build no longer makes
subscribethrow: the next read reports the failure, and the listener hears the recovery. An error thrown by a failed build's finalizer no longer aborts the next build; it is reported once that build has its value. -
#10189
29b89b6Thanks @tim-smart! - Speed upBase64Url.decodeandBase64Url.decodeStringby decoding the URL-safe alphabet directly, instead of transliterating the input and decoding it again as standard Base64. -
#10188
0b4cfbcThanks @effect-bot! - LimitBigDecimalscales to prevent resource exhaustion.BigDecimal.fromStringandSchema.BigDecimalFromStringreject strings whose scale, before or after removing trailing zeros, is outside ±10,000, such as"1e300000000","10e10000"or more than 10,000 fractional digits.BigDecimal.fromStringUnsafethrows for them.- Operations that align scales (
sum,subtract,remainder,scale,round,truncate,ceil,floor) throw aRangeErrorwhen the scales differ by more than 20,000. roundreturns values already at or below the target scale unchanged.
-
#10192
088510fThanks @effect-bot! - EnforceMaxBodySizeon buffered request body reads inBunHttpServer,DenoHttpServer, andHttpServerRequest.fromClientRequest. -
#10142
ad62cd7Thanks @effect-bot! - AddonRejectiontoCircuitBreaker.execute. With"allow", a call the circuit would refuse withCircuitOpenorCircuitHalfOpenruns unrecorded instead, while a call the circuit admits, probe included, is recorded as usual. Calls that must always run can then still count towards the breaker's state. Defaults to"fail", which keeps the current behavior. -
#10169
ba406a5Thanks @tim-smart! - Pass{ probe }toCircuitBreakerclassifycallbacks, includingHttpClient.withCircuitBreaker.probeistruewhen the call is the HalfOpen probe, so a classifier can count an outcome it otherwise ignores, such as a rate-limited response, as a failure that reopens the circuit. Existing one-argument classifiers are unchanged. The callback type is exported asCircuitBreaker.Classifier. -
#10126
5e56ebaThanks @baptisteArno! - FixClickhouseMigratorfailing to create its migrations table or record applied migrations, by running those statements as ClickHouse commands instead of queries.Migrator.makeaccepts an optionaltransformWritesoption for these statements, defaulting toidentity. -
#10206
6a95d51Thanks @effect-bot! - Retry transientPersistenceErrors when a cluster workflow sends an activity or reads its reply during a pending interrupt, instead of storing the failure as a workflow defect. A request whose save was committed but not acknowledged is deduplicated, so the activity still runs once.A cluster client request whose send fails is no longer retained by
Sharding. -
#10205
24d5acdThanks @effect-bot! - Fix local callers of persisted entity requests hanging when a reply save commits but reports a failure, for example when the connection drops before the COMMIT acknowledgement arrives. The runner now checks storage for the committed reply and lets the caller read it, without replaying the request. -
#10163
c38dfa0Thanks @effect-bot! - Fix persisted success replies being stored after aClusterSchema.WithTransactionrequest transaction rolled back. A failed save inside the request transaction is no longer retried, since a retry could autocommit the reply outside the aborted transaction (for example after a MySQL deadlock). The failed transaction now replays the request instead. -
#10197
f2755e7Thanks @effect-bot! - Fix type-checking theeffectcrypto declarations with@types/node22 or 24 and without the DOM library. The*FromCryptoKeyconstructors inAead,Cipher,KeyAgreement,KeyWrap,MacandSignaturenow accept the new structuralWebCrypto.CryptoKeytype instead of the globalCryptoKey, and DOM and Node Web Crypto keys are both assignable to it. TheWebCryptoreference andWebCrypto.layernow use the type ofglobalThis.cryptoinstead of the globalCryptotype. -
#10137
a40cb20Thanks @effect-bot! - FixDateTime.Zonedexposing itsadjustedEpochMillisecondscache as an enumerable property afterDateTime.toDate, which brokeObject.keys, spread and deep equality. -
#10174
bd6b9c2Thanks @effect-bot! - Speed upDateTimeconstruction by creating thepartsUtc,adjustedEpochMillisecondsandpartsAdjustedcache properties on first use. Reading and writing these fields is unchanged, butObject.hasOwn,Object.getOwnPropertyNamesandObject.getOwnPropertyDescriptorno longer report them before the caches are populated, or at all on instances sealed or frozen before first use. Reading the parts of, or writing these fields on, an instance frozen before first use no longer throws. -
#10082
49d84d6Thanks @typedrat! - FixEqual.equalsandHash.hashthrowing on plain objects whose"~effect/Equal"or"~effect/Hash"key is not a function. Such values are now treated as data. -
#10185
a8f77d5Thanks @effect-bot! - Verify the session authentication signature before an EventLog server binds a signing key to an identity, and reject a verified key that differs from the identity's existing binding. A request with an invalid signature no longer creates a binding.EventLogServerUnencrypted.EventLogServerAuthorization.authorizeIdentityand theauthorizeIdentityoption ofEventLogServer.layerRpcHandlersnow also receive the presented signing public key. Use the newEventLogSessionAuth.deriveSigningPublicKeyto record an identity's signing key at provisioning time and reject any other key. -
#10164
7a9c22fThanks @effect-bot! - Stop finished fibers from retaining their last span and stack frame. A finished fiber kept alive by a cache entry, observer orDeferredno longer keeps the ended span's parent chain, and the success values recorded on those spans, from being garbage collected. -
#10145
efcb8ccThanks @jpowersdev! - FixHost.domainNameFromStringrejecting decomposed Unicode domain names. -
#10125
378f5f0Thanks @pujitha24! - FixEffect.requestretaining completed requests and their async context in its batch pool. -
#10208
d4272bdThanks @effect-bot! - Stop GraphQL calls from succeeding on non-2xx HTTP responses. A non-2xx GraphQL body withouterrors, including{ data: null }, now fails with aTransportErrorcarrying the HTTPstatus,headersandRetry-After, so retry policies onisRetryableapply. A non-2xx body withdataanderrorsfails with aResponseErroreven with{ partial: true }. -
#10207
7d6ead4Thanks @effect-bot! - AddHttpClient.timeout, which fails requests that receive no response within the given duration with anHttpClientErrorwrapping aTransportError, so the timed client keeps the standardHttpClientservice type and is retried byretryTransient. The timeout covers the wrapped client until it returns a response, which for a plain client is when the response headers arrive; body reads after that are not covered. -
#10166
59178ceThanks @tkr109! - FixIterable.takeWhileiterators yielding values or pulling from the source after they have returneddone. -
#10070
9394b6dThanks @effect-bot! - FixSchemaRepresentation.fromJsonSchemaDocumentrejecting objects whoseanyOf/oneOfbranches are combined with sibling properties that contain anenum, such as branches redeclaring an enum property already declared by the object. -
#10116
5d3f066Thanks @skyaara! - DeclareKeyFormat.JsonWebKeyinstead of referencing the DOM library's globalJsonWebKey, soeffectdeclarations type-check with Node-only types. -
#10082
49d84d6Thanks @typedrat! - Add MCP Skills extension (SEP-2640) support. Servers publish skills withMcpServer.skillorMcpServer.registerSkill. Clients opt in withextensions: { skills: true }and uselistSkills,getSkill,readResourceDirectoryandreadSkillResource, which verifies files against the listed digests and frontmatter. -
#10089
2863a22Thanks @creatifcoding! - FixMcpServertoolkit results whose encoded success is not JSON, such as aSchema.Void,Schema.DateorSchema.optionalfield, failingtools/callwith an internal error.structuredContentand its text mirror now use the same JSON encoding as the advertisedoutputSchema. -
#10082
49d84d6Thanks @typedrat! - FixMcpServerreturning an internal error fromresources/listandresources/templates/listonv2026_07_28when an optional resource field isundefined. -
#10082
49d84d6Thanks @typedrat! - Recognize.pyand.shfiles inMime.getType. -
#10204
20cca92Thanks @jpowersdev! -Ndjson.decodeandNdjson.decodeStringnow also skip lines containing only spaces or tabs whenignoreEmptyLinesis enabled. -
#10191
1f22f02Thanks @jpowersdev! - FixOtlpSerialization.layerJsonwritingbytesValuedata as plain objects instead of base64 strings.Uint8Arrayviews and NodeBuffers are now encoded as OTLP/JSON expects. -
#10152
dd2b7a3Thanks @jpowersdev! - FixPath.formatdropping the dot before extensions given without one, such asext: "csv". -
#10157
52f4e42Thanks @effect-bot! - Stop PgClient transactions from staying open after a pooler drops their prepared statements. -
#10129
194dd79Thanks @Gourav224! - FixPool.getandPool.usehanging in finalizers registered after the pool once its idle items expire. The pool now runs in a child scope that stays open until the pool shuts down. -
#10104
c5de00aThanks @tim-smart! - Speed upFileSystem.globby reading subdirectories concurrently, in at most 16 forked fibers per call plus the calling fiber, and only forking a fiber for directory entries that need astatorreadLink. Results and their order are unchanged. -
#10098
460827eThanks @effect-bot! - Reclaim expired keys inRateLimiter.layerStoreMemory. Each entry now expires once its state is indistinguishable from an unseen key, matching the TTLs of the Redis store, and a background sweep scoped to the layer removes expired entries every minute, so an idle store drains to empty instead of retaining every key it has seen. -
#10103
0325583Thanks @effect-bot! - FixRateLimiterhandling of zero and negative limits:RateLimiterStore.fixedWindownow honors a zerolimitin the memory and Redis stores.- The Redis fixed-window script now rejects an over-limit first request instead of charging it.
- Delay-mode
RateLimiter.consumenow returns an infinite delay for a nonpositive limit instead of admitting requests.
-
#10167
20bef50Thanks @tim-smart! - Remove theEffect.requestbatch pool and allocate a new batch for each batch key. -
#10171
2f50b91Thanks @effect-bot! - Document that a request accepted by anRpcClient.Protocolstays pending until a reply names it, and how a transport that only delivers requests acknowledgesdiscardcalls and rejects the rest. -
#10121
b41529eThanks @Marve10s! - Fail discarded RPC calls (discard: true) promptly on transport errors.A discarded call waited for its pending send to finish before reporting any failure. While a socket was disconnected the call hung instead of failing, and once it reconnected the request was still sent and the handler ran. Failures now complete the call immediately and interrupt the pending send. Successful acknowledgements still wait for the send to finish.
-
#10138
80954c9Thanks @effect-bot! - FixRpcClientacknowledging stream chunks dropped by an interrupted consumer, which could drain the entire server stream before the interrupt was sent. -
#10133
5daca23Thanks @aidenlx! - FixRpc.SuccessChunkresolving toneverfor a union of RPCs. -
#10120
c96c31eThanks @Marve10s! - Fail only the affected calls when anRpcClient.layerProtocolWorkerworker crashes. -
#10190
136ddf9Thanks @effect-bot! - Brand SQL fragments and segments with the newStatement.FragmentTypeIdandStatement.SegmentTypeIdsymbols, sosqlinterpolation binds plain objects shaped like fragments or segments as parameters instead of SQL; build fragments and segments with theStatementconstructors. -
#10141
5ca262eThanks @effect-bot! - Document how to retry serialization failures and deadlocks withSqlClient.withTransaction. -
#10148
898b049Thanks @effect-bot! - EncodeHttpApiSchema.StreamSsedatavalues with the schema's JSON codec, so schemas such asSchema.Date,Schema.BigIntandSchema.Optionround-trip through SSE events and are documented accurately in OpenAPI. -
#10182
73e6ea1Thanks @effect-bot! -Sse.encodernow removes CR and LF from eventidandeventvalues, and NUL fromidvalues, so they cannot add fields or events to the encoded stream. -
#10105
937f170Thanks @tim-smart! - Speed upGlob.matchby tracking match states as a bitmask and reading path segments without splitting the path. Patterns such as*.tsthat are a literal prefix and suffix around one*are also checked without backtracking, which helpsFileSystem.globtoo. -
#10177
f5f96b2Thanks @jpowersdev! - FixOtlpSerialization.layerProtobufthrowing on metric data points withoutstartTimeUnixNano. -
#10049
1946637Thanks @lloydrichards! - AddMcpClientservercapabilities, discovery page and itemlimits, andtoolkitoptions for approved tool snapshots, complete results, returned failures, trusted annotations and tool customization. -
#10181
197ce1dThanks @effect-bot! - FixTool.unsafeSecureJsonParseaccepting Unicode-escaped__proto__andconstructorkeys. JSON text containing a\uescape is now always scanned, so escaped spellings throw aSyntaxErrorlike their literal forms. Objects with anullconstructorvalue are accepted instead of throwing aTypeError. -
#9883
b49120eThanks @danieljvdm! - Add unstableeffect/josemodules for JWKs (generation, PEM/DER conversion and thumbprints), compact JWS and JWE, schema-typed signed and encrypted JWTs with decryption key resolvers, and local or remote JWKS resolution. -
#10146
33d3088Thanks @effect-bot! - Wake a parent workflow when its suspended child is interrupted withClusterWorkflowEngine, and surface the child's interruption to the parent as a defect fromChild.executeso the parent completes instead of replaying.