Skip to content

chore(deps): update dependency effect to v4.1.2 - #34

Open
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/effect-4.x
Open

renovate[bot] wants to merge 1 commit into
masterfrom
renovate/effect-4.x

Conversation

@renovate

@renovate renovate Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
effect (source) 4.0.6 → 4.1.2 age confidence

Release Notes

Effect-TS/effect (effect)

v4.1.2

Compare Source

Patch Changes
  • #​10217 5216684 Thanks @​devangpratap! - Fix ByteSize decimal unit constructors such as megabytes(2.01) throwing or returning the wrong byte count, and reject fractional-byte quantities instead of rounding them.

  • #​10261 b707ad1 Thanks @​effect-bot! - Fix cluster entity defect restart backoff being shared by all entities of a type and never resetting.

  • #​10249 46f48af Thanks @​effect-bot! - Prevent an interrupted cluster request that keeps defecting from stalling message delivery to other entities.

  • #​10218 92201bc Thanks @​sbking! - Defer the runner notification for a discarded persisted send made inside a ClusterSchema.WithTransaction handler until the transaction commits. The message was invisible to the runner before the commit, so delivery waited for the next storage poll.

  • #​10260 cf329f3 Thanks @​effect-bot! - Fix ClusterWorkflowEngine turning transient storage failures while saving durable clocks or deferred completions into workflow defects; they are now retried.

  • #​10262 1d25d78 Thanks @​effect-bot! - Fix ClusterWorkflowEngine blocking shard reacquisition indefinitely after a forced shard release interrupted a workflow resume waiting on its active run.

  • #​10226 d190d97 Thanks @​tim-smart! - Fix ClusterWorkflowEngine letting a runner that lost its shard delete a newer activity result, which could run the activity again and change the workflow's history.

  • #​10241 d7b3b6b Thanks @​Marve10s! - Fix HttpClient.withCookiesRef not sending cookies when the request URL is completed after it, for example by the baseUrl of HttpApiClient. Cookies are now selected for the final URL of each request, including redirect hops.

  • #​10211 a478745 Thanks @​effect-bot! - Keep EventLogServer session auth challenges on their RPC connection, so a challenge is released when its client disconnects instead of being retained by the server after an unauthenticated disconnect.

  • #​10221 69eaa29 Thanks @​clean99! - Fix Iterable.filterMapWhile iterators yielding values or pulling from the source after they have returned done.

  • #​10233 3711ba6 Thanks @​clean99! - Fix Iterable.unfold iterators calling the generating function again after they have returned done.

  • #​9972 715c5e4 Thanks @​eugene1g! - Add Json5.parse and Jsonc.parse to effect/encoding, returning a Result that fails with an EncodingError on invalid input.

  • #​10257 b0a1cee Thanks @​tim-smart! - Use a ClientCapabilities instance for the fallback MCP client profile in McpServer.

  • #​10242 2a10622 Thanks @​Marve10s! - Fix McpServer running middleware provided outside a combined middleware inside it.

  • #​10243 6bccdd5 Thanks @​Marve10s! - Encode declared McpServer tool failures with their JSON codec, so values such as bigint, Map and Option no longer cause an internal error or lossy output

  • #​10244 60be011 Thanks @​Marve10s! - Fix 2026-07-28 MCP listings failing for resources, resource templates and prompts registered as plain objects.

  • #​10235 e1edcdc Thanks @​schutzelaars! - Stop OTLP log and trace exporters from keeping a timer pending while idle. A Node program kept alive only by an idle exporter now exits.

  • #​10210 ef81e9d Thanks @​effect-bot! - Fix RateLimiter.layerStoreRedis sharing state between different keys. A key ending in :refill or :adaptive no longer reads or writes another key's token-bucket refill time or adaptive state.

  • #​10223 013fb34 Thanks @​effect-bot! - Fix RpcServer returning an empty HTTP 500 for requests with malformed headers; such requests now fail with a defect Exit, and malformed notifications are dropped.

  • #​10251 113dbc7 Thanks @​wmaurer! - Fix Schedule.fixed, Schedule.windowed and Schedule.cron returning a zero delay when the clock is a fraction of a nanosecond before the next run.

  • #​10230 519d66e Thanks @​effect-bot! - Add SchemaBinary.int32, uint32, int64 and uint64, opt-in schemas that write integers as fixed-width little-endian payloads. The 32-bit schemas decode to number and the 64-bit schemas to bigint. Out-of-range and non-integer values are rejected instead of wrapped.

  • #​10213 e7a6ea4 Thanks @​effect-bot! - SQL transactions now trace BEGIN, COMMIT, ROLLBACK and savepoint statements as child spans of sql.transaction, replacing its effect.sql.transaction.commit, savepoint and rollback events; with Statement.SpanPropagationEnabled, the transaction also parents connection spans and records its connection wait time.

  • #​10240 019f35e Thanks @​clean99! - Fix Stream.groupAdjacentBy dropping its last group when the stream fails. The group is now emitted before the error.

  • #​10278 2a0d16c Thanks @​tim-smart! - Fix AnthropicStructuredOutput.toCodecAnthropic, OpenAiStructuredOutput.toCodecOpenAI, and MCP tool schemas returning or rejecting a root $ref when the schema is an identified alias of another identified schema.

  • #​10236 e5570c9 Thanks @​clean99! - Fix DateTime.startOf, endOf and nearest moving a zoned DateTime to the other occurrence of a repeated DST hour, and calendar-unit endOf returning an instant an hour early when the period ends in a repeated hour.

v4.1.1

Compare Source

Patch Changes
  • #​10186 8567117 Thanks @​effect-bot! - Restore SchemaBinary.toCodec derivation for Prompt.FilePart and the AI response part schemas that include it.

  • #​10119 3f5c6aa Thanks @​Marve10s! - Fix AtomRegistry.subscribe without immediate never notifying for an atom that has not been read yet. Subscribing now builds the atom, so the listener hears later changes. This also fixes get.subscribe, get.stream with withoutInitialValue, and useAtomSubscribe in @effect/atom-react.

    A failed build no longer makes subscribe throw: 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 29b89b6 Thanks @​tim-smart! - Speed up Base64Url.decode and Base64Url.decodeString by decoding the URL-safe alphabet directly, instead of transliterating the input and decoding it again as standard Base64.

  • #​10188 0b4cfbc Thanks @​effect-bot! - Limit BigDecimal scales to prevent resource exhaustion.

    • BigDecimal.fromString and Schema.BigDecimalFromString reject 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.fromStringUnsafe throws for them.
    • Operations that align scales (sum, subtract, remainder, scale, round, truncate, ceil, floor) throw a RangeError when the scales differ by more than 20,000.
    • round returns values already at or below the target scale unchanged.
  • #​10192 088510f Thanks @​effect-bot! - Enforce MaxBodySize on buffered request body reads in BunHttpServer, DenoHttpServer, and HttpServerRequest.fromClientRequest.

  • #​10142 ad62cd7 Thanks @​effect-bot! - Add onRejection to CircuitBreaker.execute. With "allow", a call the circuit would refuse with CircuitOpen or CircuitHalfOpen runs 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 ba406a5 Thanks @​tim-smart! - Pass { probe } to CircuitBreaker classify callbacks, including HttpClient.withCircuitBreaker. probe is true when 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 as CircuitBreaker.Classifier.

  • #​10126 5e56eba Thanks @​baptisteArno! - Fix ClickhouseMigrator failing to create its migrations table or record applied migrations, by running those statements as ClickHouse commands instead of queries. Migrator.make accepts an optional transformWrites option for these statements, defaulting to identity.

  • #​10206 6a95d51 Thanks @​effect-bot! - Retry transient PersistenceErrors 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 24d5acd Thanks @​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 c38dfa0 Thanks @​effect-bot! - Fix persisted success replies being stored after a ClusterSchema.WithTransaction request 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 f2755e7 Thanks @​effect-bot! - Fix type-checking the effect crypto declarations with @types/node 22 or 24 and without the DOM library. The *FromCryptoKey constructors in Aead, Cipher, KeyAgreement, KeyWrap, Mac and Signature now accept the new structural WebCrypto.CryptoKey type instead of the global CryptoKey, and DOM and Node Web Crypto keys are both assignable to it. The WebCrypto reference and WebCrypto.layer now use the type of globalThis.crypto instead of the global Crypto type.

  • #​10137 a40cb20 Thanks @​effect-bot! - Fix DateTime.Zoned exposing its adjustedEpochMilliseconds cache as an enumerable property after DateTime.toDate, which broke Object.keys, spread and deep equality.

  • #​10174 bd6b9c2 Thanks @​effect-bot! - Speed up DateTime construction by creating the partsUtc, adjustedEpochMilliseconds and partsAdjusted cache properties on first use. Reading and writing these fields is unchanged, but Object.hasOwn, Object.getOwnPropertyNames and Object.getOwnPropertyDescriptor no 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 49d84d6 Thanks @​typedrat! - Fix Equal.equals and Hash.hash throwing on plain objects whose "~effect/Equal" or "~effect/Hash" key is not a function. Such values are now treated as data.

  • #​10185 a8f77d5 Thanks @​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.authorizeIdentity and the authorizeIdentity option of EventLogServer.layerRpcHandlers now also receive the presented signing public key. Use the new EventLogSessionAuth.deriveSigningPublicKey to record an identity's signing key at provisioning time and reject any other key.

  • #​10164 7a9c22f Thanks @​effect-bot! - Stop finished fibers from retaining their last span and stack frame. A finished fiber kept alive by a cache entry, observer or Deferred no longer keeps the ended span's parent chain, and the success values recorded on those spans, from being garbage collected.

  • #​10145 efcb8cc Thanks @​jpowersdev! - Fix Host.domainNameFromString rejecting decomposed Unicode domain names.

  • #​10125 378f5f0 Thanks @​pujitha24! - Fix Effect.request retaining completed requests and their async context in its batch pool.

  • #​10208 d4272bd Thanks @​effect-bot! - Stop GraphQL calls from succeeding on non-2xx HTTP responses. A non-2xx GraphQL body without errors, including { data: null }, now fails with a TransportError carrying the HTTP status, headers and Retry-After, so retry policies on isRetryable apply. A non-2xx body with data and errors fails with a ResponseError even with { partial: true }.

  • #​10207 7d6ead4 Thanks @​effect-bot! - Add HttpClient.timeout, which fails requests that receive no response within the given duration with an HttpClientError wrapping a TransportError, so the timed client keeps the standard HttpClient service type and is retried by retryTransient. 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 59178ce Thanks @​tkr109! - Fix Iterable.takeWhile iterators yielding values or pulling from the source after they have returned done.

  • #​10070 9394b6d Thanks @​effect-bot! - Fix SchemaRepresentation.fromJsonSchemaDocument rejecting objects whose anyOf / oneOf branches are combined with sibling properties that contain an enum, such as branches redeclaring an enum property already declared by the object.

  • #​10116 5d3f066 Thanks @​skyaara! - Declare KeyFormat.JsonWebKey instead of referencing the DOM library's global JsonWebKey, so effect declarations type-check with Node-only types.

  • #​10082 49d84d6 Thanks @​typedrat! - Add MCP Skills extension (SEP-2640) support. Servers publish skills with McpServer.skill or McpServer.registerSkill. Clients opt in with extensions: { skills: true } and use listSkills, getSkill, readResourceDirectory and readSkillResource, which verifies files against the listed digests and frontmatter.

  • #​10089 2863a22 Thanks @​creatifcoding! - Fix McpServer toolkit results whose encoded success is not JSON, such as a Schema.Void, Schema.Date or Schema.optional field, failing tools/call with an internal error. structuredContent and its text mirror now use the same JSON encoding as the advertised outputSchema.

  • #​10082 49d84d6 Thanks @​typedrat! - Fix McpServer returning an internal error from resources/list and resources/templates/list on v2026_07_28 when an optional resource field is undefined.

  • #​10082 49d84d6 Thanks @​typedrat! - Recognize .py and .sh files in Mime.getType.

  • #​10204 20cca92 Thanks @​jpowersdev! - Ndjson.decode and Ndjson.decodeString now also skip lines containing only spaces or tabs when ignoreEmptyLines is enabled.

  • #​10191 1f22f02 Thanks @​jpowersdev! - Fix OtlpSerialization.layerJson writing bytesValue data as plain objects instead of base64 strings. Uint8Array views and Node Buffers are now encoded as OTLP/JSON expects.

  • #​10152 dd2b7a3 Thanks @​jpowersdev! - Fix Path.format dropping the dot before extensions given without one, such as ext: "csv".

  • #​10157 52f4e42 Thanks @​effect-bot! - Stop PgClient transactions from staying open after a pooler drops their prepared statements.

  • #​10129 194dd79 Thanks @​Gourav224! - Fix Pool.get and Pool.use hanging 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 c5de00a Thanks @​tim-smart! - Speed up FileSystem.glob by 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 a stat or readLink. Results and their order are unchanged.

  • #​10098 460827e Thanks @​effect-bot! - Reclaim expired keys in RateLimiter.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 0325583 Thanks @​effect-bot! - Fix RateLimiter handling of zero and negative limits:

    • RateLimiterStore.fixedWindow now honors a zero limit in the memory and Redis stores.
    • The Redis fixed-window script now rejects an over-limit first request instead of charging it.
    • Delay-mode RateLimiter.consume now returns an infinite delay for a nonpositive limit instead of admitting requests.
  • #​10167 20bef50 Thanks @​tim-smart! - Remove the Effect.request batch pool and allocate a new batch for each batch key.

  • #​10171 2f50b91 Thanks @​effect-bot! - Document that a request accepted by an RpcClient.Protocol stays pending until a reply names it, and how a transport that only delivers requests acknowledges discard calls and rejects the rest.

  • #​10121 b41529e Thanks @​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 80954c9 Thanks @​effect-bot! - Fix RpcClient acknowledging stream chunks dropped by an interrupted consumer, which could drain the entire server stream before the interrupt was sent.

  • #​10133 5daca23 Thanks @​aidenlx! - Fix Rpc.SuccessChunk resolving to never for a union of RPCs.

  • #​10120 c96c31e Thanks @​Marve10s! - Fail only the affected calls when an RpcClient.layerProtocolWorker worker crashes.

  • #​10190 136ddf9 Thanks @​effect-bot! - Brand SQL fragments and segments with the new Statement.FragmentTypeId and Statement.SegmentTypeId symbols, so sql interpolation binds plain objects shaped like fragments or segments as parameters instead of SQL; build fragments and segments with the Statement constructors.

  • #​10141 5ca262e Thanks @​effect-bot! - Document how to retry serialization failures and deadlocks with SqlClient.withTransaction.

  • #​10148 898b049 Thanks @​effect-bot! - Encode HttpApiSchema.StreamSse data values with the schema's JSON codec, so schemas such as Schema.Date, Schema.BigInt and Schema.Option round-trip through SSE events and are documented accurately in OpenAPI.

  • #​10182 73e6ea1 Thanks @​effect-bot! - Sse.encoder now removes CR and LF from event id and event values, and NUL from id values, so they cannot add fields or events to the encoded stream.

  • #​10105 937f170 Thanks @​tim-smart! - Speed up Glob.match by tracking match states as a bitmask and reading path segments without splitting the path. Patterns such as *.ts that are a literal prefix and suffix around one * are also checked without backtracking, which helps FileSystem.glob too.

  • #​10177 f5f96b2 Thanks @​jpowersdev! - Fix OtlpSerialization.layerProtobuf throwing on metric data points without startTimeUnixNano.

  • #​10049 1946637 Thanks @​lloydrichards! - Add McpClient server capabilities, discovery page and item limits, and toolkit options for approved tool snapshots, complete results, returned failures, trusted annotations and tool customization.

  • #​10181 197ce1d Thanks @​effect-bot! - Fix Tool.unsafeSecureJsonParse accepting Unicode-escaped __proto__ and constructor keys. JSON text containing a \u escape is now always scanned, so escaped spellings throw a SyntaxError like their literal forms. Objects with a null constructor value are accepted instead of throwing a TypeError.

  • #​9883 b49120e Thanks @​danieljvdm! - Add unstable effect/jose modules 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 33d3088 Thanks @​effect-bot! - Wake a parent workflow when its suspended child is interrupted with ClusterWorkflowEngine, and surface the child's interruption to the parent as a defect from Child.execute so the parent completes instead of replaying.

v4.1.0

Compare Source

Minor Changes
  • #​8829 631d4f4 Thanks @​harrysolovay! - Add Schema.isAscii, a check that accepts only ASCII strings, and the matching SchemaRepresentation.isAsciiReviver.

  • #​8829 7ea1ea2 Thanks @​wmaurer! - Add an optional cause to the AI NetworkError. It holds the HttpClientError the request failed with, stored unchanged and not redacted, so the reason a request failed is no longer lost. The new NetworkError.fromHttpClientError sets it, and all AI providers now use it. NetworkError.fromRequestError is unchanged.

  • #​8829 a2ccc14 Thanks @​fubhy! - Fix Atom.Serializable to encode to and decode from Schema.Json, matching the JSON codec used by Atom.serializable. Encoded results may now require narrowing; runtime behavior is unchanged.

  • #​8829 c4d298d Thanks @​okarin1511! - Render inherited CLI flags in a separate INHERITED FLAGS section and add "full", "summary", and "none" modes for inherited and global flags in CliOutput.defaultFormatter. HelpDoc adds inheritedFlags, commandPath, and globalFlagsScope provenance so summaries can point to the appropriate help, with globals always listed on their declaring command. Custom formatters must read ancestor shared flags from HelpDoc.inheritedFlags instead of HelpDoc.flags.

  • #​10087 ac10e55 Thanks @​effect-bot! - Add runnerJoinDebounce to ShardingConfig. When set, a runner joining the cluster is only added to shard assignments once the healthy runners have stayed unchanged for that duration, or at most four times that duration after the first pending join. A scale-up or a deployment with a large surge then hands each shard off once instead of once per join. Runners that already hold shards and leave or become unhealthy are still published immediately; a pending runner that leaves only restarts the quiet period. While joins are pending, runners take no new shards, so a shard can stay unlocked briefly until each runner publishes. Defaults to 0, which keeps the current behavior.

  • #​8829 df8dce5 Thanks @​tim-smart! - Add trim and keepEmptyValues options to SchemaGetter.splitKeyValue, SchemaTransformation.splitKeyValue and Config.Record. Both default to false, so existing callers are unaffected.

    OtlpResource.fromConfig now trims OTEL_RESOURCE_ATTRIBUTES keys and values and keeps entries with an empty value as "".

  • #​8829 0c24a8f Thanks @​sledorze! - Add a maxDepth option to Context.makeUnsafe, controlling how many Context.add calls are kept as overlays before the context is rebased into a flat map. Defaults to 8.

  • #​8829 2d1fcd4 Thanks @​effect-bot! - Add an onDstOverlap option to Cron and Schedule.cron that chooses which occurrences of local times repeated when clocks fall back are included: "earlier" (default), "later" or "both". It applies to every repeated local time, including ones not caused by daylight saving time.

    Cron.prev now returns the latest matching instant before its input when starting inside a repeated hour. Near a spring-forward gap it no longer throws or returns an instant at or after its input.

  • #​8829 8f23668 Thanks @​fubhy! - Replace effect/Crypto with family-specific effect/crypto/* services, opaque keys, CryptoError, a configurable WebCrypto reference and key schemas in effect/Schema. Encoding secret or private keys through byte/format schemas requires { allowEncode: true }.

Breaking changes
  • Use SecureRandom for randomness and UUIDs, and Digest with algorithm values such as Digest.sha256 for hashing. Replace effect/testing/TestCrypto with Layer.mock for the required services.
  • Provide crypto explicitly; it is no longer included in the runtime *Services bundles. NodeCrypto, BunCrypto, DenoCrypto and BrowserCrypto offer individual family layers and a combined layer, supplying SecureRandom where needed. Core modules offer layerWebCrypto.
  • Provide Digest.Digest instead of Crypto.Crypto to SqlMessageStorage and SingleRunner, and instead of EventLogEncryption to SqlEventLogServerEncrypted.makeStorage and layerStorage. Replace EventLogEncryption.sha256String with digest.digestHex(Digest.sha256, bytes).

Existing workflow ID, activity idempotency key and event log table-name encodings are unchanged.

Event log encryption, identity key derivation and session authentication now run on Aead, Digest, Signature and SecureRandom. EventLogEncryption.make and EventLogEncryption.layer take those services from context, so Node apps can use the NodeCrypto layers. EventLogEncryption.layerSubtle and the session auth functions use the Web Crypto layers on the WebCrypto reference instead of globalThis.crypto. Existing identities, derived signing keys and encrypted batches are unchanged.

UUIDv7 and ULID generation is now monotonic below the maximum 48-bit timestamp, including within a millisecond and across clock rollback. Ordering is per SecureRandom instance; the unsafe helpers and model UUIDv7 defaults share per-realm ordering.

  • #​8829 3f8f359 Thanks @​jem-computer! - Declare decision images as input fields with Decision.Image, and add Decision.locate, which answers with a bounding box around one target in an image field.

    • DecideOptions.images is removed. Add Decision.Image fields to the input schema and refer to each image by its path in instructions:

      // Before
      DecisionModel.decide(Triage, { input: "Checkout error", images: [screenshot] })
      // After
      const Triage = Decision.make({
        input: Schema.Struct({ report: Schema.String, screenshot: Decision.Image }),
        decisions
      })
      DecisionModel.decide(Triage, { input: { report: "Checkout error", screenshot } })
    • Custom providers receive images as { reference, path, image }, with each image replaced by its reference in state and its data as a base64 string or URL.

    • Decision.locate({ image: "photo", instructions }) takes a path that Decision.make checks against the input's image fields. Providers opt in with supportsLocate: true. Decision.Any and DecisionModel.ProviderAnswer gain locate variants, so exhaustive switches over them need a Locate case.

    • TypeSafeDecisionModel supports images, sent as assets keyed by reference, and sends locate decisions as Box questions, which need jev-preview or jev-1.14.0. OpenAI and Cloudflare label each image with its reference.

  • #​8829 2a03584 Thanks @​jayhemnani9910! - Add Duration.formatIso, Duration.fromIso and Schema.DurationFromIsoString for ISO 8601 durations. Only exact units are supported: weeks, days, hours, minutes and seconds. Years and months are rejected because they have no fixed length.

  • #​8829 40e145e Thanks @​yordis! - Add Duration.toMicros for converting durations to microseconds.

  • #​8829 7217410 Thanks @​tim-smart! - Add encrypted remote compaction to the event log.

  • #​8829 cf249fe Thanks @​tim-smart! - Detect unsupported streaming request bodies in FetchHttpClient and fail with an EncodeError instead of silently sending [object ReadableStream]. Set FetchHttpClient.StreamBodyFallback to "buffer" to buffer the body in memory on those runtimes instead.

  • #​8829 4f0fad1 Thanks @​effect-bot! - Fence Redis PersistedQueue settlements and lock refreshes on a per-acquisition lock, so a stale handler can no longer release another live claim, including one with the same custom id in another queue. The lock format is incompatible with older workers on the same prefix: stop every old worker and let its locks expire before starting upgraded workers.

  • #​8829 f74db37 Thanks @​smit153! - Accept { self } before the generator body in Effect.fnUntraced and Effect.fnUntracedEager to bind this, matching Effect.fn.

  • #​8829 069cf72 Thanks @​effect-bot! - Add opt-in RFC 9457 Problem Details support to HttpApi.

    • ProblemDetails in effect/http provides the application/problem+json media type, a lenient codec for problem details objects, and a response constructor.
    • HttpApiError.Problem<Self>()(tag, { type, status, title }, fields?) declares a typed problem as a yieldable error class that endpoints render, document and decode as application/problem+json, discriminated by type.
    • HttpApiSchema.asProblem renders a built-in error such as HttpApiError.NotFound as a problem.
    • HttpApiMiddleware.ProblemDetails with HttpApiMiddleware.layerProblemDetails renders request decoding failures as a generic 400 problem (with per-field errors when includeDetails is enabled) and response encoding failures as a 500 problem.

    The default behaviour is unchanged: without the opt-in, built-in errors and decoding failures still produce the same responses as before.

  • #​8829 9a07ebc Thanks @​effect-bot! - Allow HttpApiSchema.Upgrade alongside ordinary success responses, for servers that decline the upgrade, and add HttpApiClient.isUpgraded to narrow the client result.

    HttpApiClient.Upgraded values now carry a [HttpApiClient.UpgradedTypeId] brand. Code that builds Upgraded values by hand, such as client mocks, must add [HttpApiClient.UpgradedTypeId]: HttpApiClient.UpgradedTypeId to the object literal.

  • #​8829 f40dc4e Thanks @​bezff! - HttpClient.withCookiesRef now takes a Ref<ReadonlyArray<Cookie>> and sends stored response cookies only to a matching host, path and scheme, using the new Cookies.mergeIntoArray and Cookies.toRequestCookieHeader. Seed the ref with Cookies.mergeIntoArray or with cookies that set a domain.

  • #​8829 fa516c6 Thanks @​Tarekkharsa! - Export HttpClient.isTransientError and HttpClient.isTransientResponse, the predicates retryTransient uses to decide what to retry.

  • #​8829 ffd9237 Thanks @​effect-bot! - Add log: "Unhandled" to Effect.ignore, Effect.ignoreCause, and their Stream and Channel variants. This resolves References.UnhandledLogLevel when a failure occurs and suppresses logging when that reference is undefined, while preserving each combinator's existing failure semantics.

  • #​8829 93895b9 Thanks @​tim-smart! - Add keys to KeyValueStore and SchemaStore. It returns a snapshot of the keys in the store, in no particular order, and is implemented by the memory, file system, SQL, Web Storage and IndexedDB stores. Custom stores built with KeyValueStore.make or KeyValueStore.makeStringOnly must now provide keys.

    KeyValueStore.prefix(...) now scopes keys, size and isEmpty to keys under the prefix, with the prefix removed from the returned keys. Previously size and isEmpty reported on the whole backing store.

    Stores built with KeyValueStore.make that don't provide clearPrefix now derive it from keys and remove instead of failing for non-empty prefixes.

  • #​8829 e5a1479 Thanks @​effect-bot! - Add the unstable Match.literals and Match.literalsExhaustive APIs for matching string and number literal unions with a record of handlers.

  • #​8829 65db606 Thanks @​effect-bot! - Add request-level dependencies and middleware to McpServer so handler services can be supplied per request. Breaking: pass registration layers through the transport's registrations option, and capture construction-time handler services in Layer.unwrap instead of Layer.provide.

  • #​8829 7c42335 Thanks @​tim-smart! - Add McpServer.visibility to hide tools, resources and prompts per request based on services provided by MCP middleware. Middleware that wraps a visibility now runs on list requests, once for each registration, so MiddlewareMethod includes the list methods. Middleware provided both locally and globally now runs once.

  • #​8829 cb21d14 Thanks @​effect-bot! - Add a cacheHints option to the McpServer layers to set how long clients may treat v2026_07_28 discovery and list results as fresh, for example cacheHints: { tools: { ttl: "1 minute", cacheScope: "private" } }. Results without a hint, and resources/read, keep { ttlMs: 0, cacheScope: "private" }.

  • #​8829 c32eb78 Thanks @​effect-bot! - Expose SqlMessageStorage.makeEncodedStorage to construct an encoded SQL message storage driver without running migrations or executing startup SQL. Run layerMigrations separately with the same table prefix before using the driver; makeEncoded continues to run migrations by default.

  • #​8829 be9895b Thanks @​bezff! - Move fromFileSystem from effect/sql/Migrator to effect/sql/MigratorFileSystem, so React Native apps can import effect/sql/Migrator and effect/sql under Metro. The effect/sql barrel and @effect/sql-sqlite-react-native/SqliteMigrator no longer export fromFileSystem; the other SQL adapter migrators still re-export it.

  • #​8829 26b4bfe Thanks @​fubhy! - Type received and forwarded HTTP request methods as string so methods such as PROPFIND are represented accurately, including in AI HTTP error details. Exhaustive matches on request methods now need a fallback or a guard using HttpMethod.isHttpMethod.

  • #​8829 f97711f Thanks @​effect-bot! - Isolate Persistence stores on the KeyValueStore a

[!IMPORTANT]
✂ PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from e531e7f to 46f16e4 Compare November 2, 2026 05:00
@renovate renovate Bot changed the title chore(deps): update dependency effect to v4.1.1 chore(deps): update dependency effect to v4.1.2 Nov 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants