Skip to content

Update Effect to v4.0.0-rc.118 - #237

Merged
github-actions[bot] merged 3 commits into
mainfrom
renovate/effect
Sep 28, 2026
Merged

github-actions[bot] merged 3 commits into
mainfrom
renovate/effect

Conversation

@renovate

@renovate renovate Bot commented Sep 28, 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/platform-node (source) 4.0.0-rc.117 → 4.0.0-rc.118 age confidence
effect (source) 4.0.0-rc.117 → 4.0.0-rc.118 age confidence

Release Notes

Effect-TS/effect (@​effect/platform-node)

v4.0.0-rc.118

Compare Source

Patch Changes
Effect-TS/effect (effect)

v4.0.0-rc.118

Compare Source

Patch Changes
  • #​8367 f75468a Thanks @​Marve10s! - Add Arbitrary.configureGlobal to set default options for property checking and sampling, including the run count used by @effect/vitest. Explicit per-call options take precedence; passing an empty object restores the built-in defaults.

  • #​8543 34cc788 Thanks @​front-depiction! - Fix missed updates through stale AtomRegistry nodes, premature dependency release, leaked superseded builds, and failed observed builds that never recover.

  • #​8421 eb02cbb Thanks @​danieljvdm! - Defer Atom.swr stale refreshes until after reads, skipping them if the source becomes fresh or the atom is disposed. One-shot unmounted reads no longer refresh stale sources after disposal.

  • #​8534 4bb949e Thanks @​tim-smart! - Check identity authorization before resolving unencrypted event-log session bindings

  • #​8353 b409e3f Thanks @​tim-smart! - Make Effect.awaitAllChildren interruptible while it waits for child fibers.

  • #​8510 4093507 Thanks @​tim-smart! - Fix Cache.get retaining zero-TTL lookup results, which could evict live entries.

  • #​8339 325e0fb Thanks @​tim-smart! - Add data-last forms for selected safe Queue operations and selected Option, TxSemaphore, and AsyncResult APIs

  • #​8503 e54211a Thanks @​marbemac! - Cause.pretty and Cause.prettyErrors now restore Error.stackTraceLimit when formatting an error throws, instead of leaving it at 1 for the rest of the process.

  • #​8413 0c6c2de Thanks @​front-depiction! - Cause.squash no longer allocates intermediate arrays to pick the first failure or defect.

  • #​8371 cdeccc7 Thanks @​front-depiction! - Fix asymmetric Chunk.makeEquivalence comparisons on sparse arrays. Avoid redundant copies in Chunk and Array.dedupeWith, and balance Chunk.flatMap concatenations.

  • #​8504 254fcc1 Thanks @​IMax153! - Fix the CLI lexer to treat negative numbers such as -3.70 as values instead of short options, so --lon -3.70 parses correctly

  • #​8474 bd14b64 Thanks @​tim-smart! - Scope.closeUnsafe now requires a Scope.Closeable, matching Scope.close. Use a scope created by Scope.make or Scope.fork; a plain Scope.Scope cannot be closed directly.

  • #​8473 37064fd Thanks @​tim-smart! - Scope.close now requires a Scope.Closeable. Use a scope created by Scope.make or Scope.fork; a plain Scope.Scope cannot be closed directly.

  • #​8542 702c34e Thanks @​Marve10s! - Avoid retaining completed request ids when MessageStorage is disabled. Without storage, redelivering a completed request id now runs the request again instead of failing with AlreadyProcessingMessage.

  • #​8454 7ef0ce6 Thanks @​front-depiction! - Delay copying a derived Context's base until it has been read at least as many times as its size (with a minimum of eight), avoiding full copies for short-lived contexts.

  • #​8339 325e0fb Thanks @​tim-smart! - TxPriorityQueue.fromIterable(order)(iterable) passed its arguments to the implementation in the wrong order and produced a queue of undefined values; the data-first form was unaffected.

  • #​8414 cdec5ef Thanks @​front-depiction! - Cache named time zones by the requested id as well as the Intl-resolved id, avoiding repeated formatter construction for aliases. Zones still report the Intl-resolved id.

  • #​8386 f9179cb Thanks @​front-depiction! - Clean up rendered error stacks for common Effect callbacks and avoid per-step closure allocations in several combinators on V8.

    Effect.flatMap callbacks now receive only the value, without internal fiber/exit arguments or an internal this receiver.

  • #​8442 c760e1e Thanks @​front-depiction! - Avoid allocating a closure context for each struct property and array element during sequential Schema traversal.

  • #​8354 1b4461e Thanks @​tim-smart! - Move unstable modules from effect/unstable/* to effect/* and remove the old export paths. Drop the unstable segment from imports. These APIs remain @stability unstable.

    Move Arbitrary to the top level and update @effect/vitest to use the new entrypoint. Replace imports from effect/arbitrary or effect/arbitrary/Arbitrary with import { Arbitrary } from "effect" or import * as Arbitrary from "effect/Arbitrary".

  • #​8362 5709ef6 Thanks @​xia-chao! - Add type guards for HttpBodyError, CookiesError, MultipartError, and NdjsonError.

  • #​8475 6b84149 Thanks @​mugnivenko! - Annotate Config.fail return type as Config<never>, so it composes with Config.orElse without widening the result to Config<unknown>

  • #​8469 508c70b Thanks @​Marve10s! - Honor startImmediately: false in FiberHandle.run, FiberMap.run, and FiberSet.run.

  • #​8443 382992f Thanks @​front-depiction! - Reduce the memory each fiber retains: the type brand now lives on the prototype, Effect.callback no longer binds its registration, and Fiber.joinAll no longer keeps a cancel closure per joined fiber.

  • #​8427 83d7c95 Thanks @​front-depiction! - Preserve the original failure or interruption when an onExit finalizer throws synchronously.

  • #​8535 6bf2eb7 Thanks @​BleedingDev! - Build FindMyWay route params without new Function, avoiding string code generation in environments with CSP restrictions.

  • #​8556 ccade14 Thanks @​Marve10s! - Process atom writes queued by batch commit listeners instead of dropping them.

  • #​8150 b8d14d3 Thanks @​Tyagiquamar! - Fix Formatter.formatJson to include name and message and preserve enumerable properties when stringifying Error instances without toJSON.

    import { Formatter } from "effect"
    
    Formatter.formatJson(new Error("boom")) // now `{"name":"Error","message":"boom"}`, previously `{}`
  • #​8359 8fca194 Thanks @​gcanti! - Fix Number.remainder for decimal operands whose scaled coefficients exceed the safe integer range, preserving the exact value of integer operands. This also prevents Schema.isMultipleOf from accepting or rejecting large values incorrectly.

  • #​8459 34e09be Thanks @​gcanti! - Align JSON Schema imports with Unicode string semantics by counting code points for string length keywords and applying regular expression patterns in ECMAScript Unicode mode.

  • #​8415 97afa37 Thanks @​front-depiction! - Reduce allocations in Graph traversals: neighbors / successors / predecessors deduplicate without an intermediate Set for typical degrees, and unweightedDistances, astar and allShortestPaths no longer allocate a closure or predecessor record per visited node or relaxation.

  • #​8360 321bae6 Thanks @​tim-smart! - Improve hash composition, number hashing, cyclic equality, native collection comparison, and HashMap hashing. Fix invalid caches and referential MutableHashMap lookups. Hash values may change.

  • #​8572 fb718d3 Thanks @​tim-smart! - Add per-slot HttpApi parse options for params, query, headers, payload, success and error codecs. Each slot falls back to ParseOptions when unset. Set HeadersParseOptions to {} to keep strict body parsing without rejecting transport headers.

  • #​8477 ccd3440 Thanks @​tim-smart! - Build each HttpRouter entrypoint with a fresh router in a forked layer memo map. Routes on separate servers and handlers no longer leak into each other.

    Breaking changes:

    • Routes registered on a router provided by the app itself (for example, via Layer.provide(HttpRouter.layer)) are not served; the entrypoint serves its own router. For RPC, put the protocol and its handlers in the app passed to serve, for example HttpRouter.serve(RpcLayer.pipe(Layer.provideMerge(RpcServer.layerProtocolHttp({ path: "/rpc" })))).
    • Layers first built inside an entrypoint are private to it. Providing the same stateful service to both the app and a sibling layer can build it twice depending on build order. Provide services that must be shared outside the entrypoint; services already built in the parent memo map are reused.
  • #​8385 107dbec Thanks @​front-depiction! - Fix interrupted Layer memoization so waiting and later requesters receive the interrupted build's exit instead of hanging, and shared layers are released when scopes close. Correct MemoMap.get observer accounting for effects run twice or never run.

  • #​8511 af510e8 Thanks @​tim-smart! - Skip LayerMap preloading for keys with a zero idle TTL. With the default TTL, preload failures now surface on first use; set a non-zero idleTimeToLive to retain eager validation.

  • #​8453 537cd82 Thanks @​front-depiction! - Reduce allocations per yield* in Effect.gen, Option.gen and Result.gen, and per Effect.fn call.

    Utils.SingleShotGen now serves as its own completion result and is no longer an IterableIterator: it only implements next, and its self field has been removed.

  • #​8512 ff554ae Thanks @​tim-smart! - Run Scope.close finalizers uninterruptibly so interruption cannot abandon remaining cleanup, including when closing a ManagedRuntime.

  • #​8528 9a5a383 Thanks @​tim-smart! - Wait for managed fibers and their cleanup to finish before releasing layer resources when disposing a ManagedRuntime.

  • #​8439 d2f3547 Thanks @​front-depiction! - Stop allocating closures on every Effect.match and Effect.matchCause call.

  • #​8507 25d9e47 Thanks @​IMax153! - Clarify the McpServer.toolkit error when a tool's parameters are not an object schema.

  • #​8505 372a45d Thanks @​IMax153! - Fix stdio MCP servers rejecting pings before initialization when a stateful protocol is configured, including when a stateless protocol is listed first. These pings now return an empty result without creating a session.

  • #​8508 5e9fd25 Thanks @​IMax153! - Report all parameter validation errors for MCP tools in a single response, including missing or invalid fields and, for strict tools, unknown keys.

  • #​8465 c85c8c3 Thanks @​izakfilmalter! - Preserve tool annotation titles in MCP tools/list responses for the 2025-06-18 and 2025-11-25 protocol revisions, alongside the top-level title and behavioral hints.

  • #​8552 b501557 Thanks @​Floriferous! - Report declared MCP tool failures with empty messages using their encoded value. Handler execution errors now return isError results on protocol version 2025-11-25 and -32603 Internal error on older versions, instead of -32602 Invalid params.

  • #​8380 35ef06c Thanks @​front-depiction! - Fix Metric series key collisions, duplicate series for empty attributes, and updates lost after a registry is cleared. Reuse series keys when contextual attributes are unchanged.

  • #​8420 d6cc5d9 Thanks @​danieljvdm! - Emit parts buffered while reading a multipart file before pulling more input.

  • #​8450 83b7b1f Thanks @​front-depiction! - Fix MutableList.prependAll with empty input corrupting the list and breaking subsequent takes or appends.

  • #​8447 f05fe36 Thanks @​front-depiction! - Release consumed slots in a growing MutableList bucket, and pass list indices rather than bucket offsets to MutableList.filter predicates.

  • #​8448 1fd49d4 Thanks @​front-depiction! - Fix MutableList.takeN leaving a drained bucket at the head when it stops at a bucket boundary. This also prevents Queue.takeN from making subsequent messages inaccessible after an offerAll boundary.

  • #​8340 c79088d Thanks @​fubhy! - Add family-aware internet address and multicast interface types to NetAddress

  • #​8407 0cbb457 Thanks @​tim-smart! - Store NetAddress IPv4 and IPv6 addresses as numbers instead of a Uint8Array, making construction, Equal and Hash cheaper, especially on Deno.

  • #​8545 8202a6e Thanks @​hsyntax! - Mark OpenAPI parameters and response headers as optional when their encoded key is optional, such as keys using Schema.withDecodingDefaultKey or Schema.withDecodingDefault. Generated documents previously marked these keys as required, even though they can be absent on the wire.

  • #​8547 8d070c3 Thanks @​gcanti! - Generate OpenAPI parameters and response headers from their encoded object representation while preserving property annotations.

  • #​8551 0cf7655 Thanks @​hsyntax! - Preserve encoded string literals and exportable checks such as pattern in OpenAPI schemas for HttpApiSchema.asText() bodies. Text bodies keep their string type even when their schemas are opaque or referenced components.

  • #​8522 d470d54 Thanks @​FNDEVVE! - Drain OTLP export response bodies before completing or retrying each request.

  • #​8395 2121472 Thanks @​tim-smart! - Prevent lost permits when a partitioned semaphore acquisition is interrupted, and keep competing immediate takes from acquiring the same permit.

  • #​8558 4113bc7 Thanks @​fe-franco! - Fail @effect/sql-pg transactions when PostgreSQL returns ROLLBACK for COMMIT after a caught statement error. SqlClient.make accepts a commit effect so drivers can inspect the result.

  • #​8468 a41a441 Thanks @​lloydrichards! - In MCP protocols that omit string structuredContent, return plain text for toolkit and hand-written tool results whose single text block is an exact JSON mirror of that string.

  • #​8337 3af6bd0 Thanks @​mugnivenko! - Add PlatformError.isPlatformError guard

  • #​8502 67ee3b8 Thanks @​elizabethcheng! - Use a consistent row-lock order for PostgreSQL shard lease acquisition, refresh, and bulk release when shardLockDisableAdvisory is enabled.

  • #​8540 e8df3d8 Thanks @​Marve10s! - Treat an Infinity capacity passed to PubSub as unbounded.

  • #​8345 1dbc4c3 Thanks @​xia-chao! - Add PubSub.isPubSub, matching Queue.isQueue and TxPubSub.isTxPubSub.

  • #​8449 80d5adb Thanks @​front-depiction! - Fix a race where interrupting a waiting PubSub subscriber could swallow a later message, or interrupting a backpressured publisher could still publish when space became available.

  • #​8569 aa430d8 Thanks @​tim-smart! - Batch takes drain remaining messages when a queue closes, even below the requested minimum. Later takes receive the terminal error.

  • #​8568 24f7d32 Thanks @​tim-smart! - Withdraw pending Queue.offer and Queue.offerAll values when their producer is interrupted after Queue.end or Queue.fail. The queue can finish closing once those offers are withdrawn.

  • #​8412 f4dd1ae Thanks @​front-depiction! - Fix lost wake-ups in Queue when a fiber yields between checking for a message or capacity and registering its waiter.

    Queue.offer on a zero-capacity dropping queue now hands the message to a waiting taker, matching offerUnsafe and offerAll.

  • #​8472 0981d01 Thanks @​tim-smart! - Fix Queue takers missing offers that arrive while they are registering.

  • #​8514 0a29ca6 Thanks @​tim-smart! - Retry failed background pool acquisitions when borrowed, rather than passing stale errors to later queries. Callers awaiting their own failed connection still receive its error.

  • #​8397 17810b4 Thanks @​tim-smart! - Close the interruption gap before scope and cache cleanup registration.

  • #​8365 62b2ea9 Thanks @​tim-smart! - Rename the HTTP API entry point from effect/httpapi to effect/http-api and remove the old export path. Runtime TypeIds under ~effect/httpapi/*, service keys under effect/httpapi/*, and the reserved effect/httpapi/stream/failure SSE event name now use http-api as well.

  • #​8378 4e4fa8b Thanks @​gcanti! - Rename range checks so their subject comes last: Schema.isBetweenLength, Schema.isBetweenCodePoints, Schema.isBetweenSize, and Schema.isBetweenProperties. Also rename the string checks to the grammatical Schema.isStartingWith, Schema.isEndingWith, and Schema.isIncluding. Update the corresponding SchemaRepresentation.*Reviver exports and persisted effect/schema/... check IDs to use the new names.

  • #​8533 3495bd8 Thanks @​tim-smart! - Keep the source result type for Effect.repeat with times or schedule, even when while or until is a refinement. Bounded repetition may finish before the predicate stops it, so callers relying on the previous narrowed type must check the result.

  • #​8390 b3032f0 Thanks @​front-depiction! - Fix interrupt-time resource leaks:

    • Pool.get, Pool.use and RcRef.get register cleanup before they can be interrupted.
    • RcRef and RcMap finish closing expired resources even if their idle fibers are interrupted.
    • ScopedRef closes in-flight replacements with their owner. make, fromAcquire and set now interrupt if the owning scope has closed.
  • #​8541 d26a913 Thanks @​Marve10s! - Skip malformed ndjson lines and non-object JSON-RPC messages so later requests still decode. Handle non-string notification methods without throwing.

  • #​8437 93f826a Thanks @​front-depiction! - Stop Effect.map, Effect.tap, Effect.exit, Effect.match and Effect.matchCause allocating a success Exit on every step.

  • #​8519 330b747 Thanks @​tim-smart! - Add Schedule.once, a schedule that recurs immediately once and outputs void.

  • #​8441 b808b5d Thanks @​front-depiction! - Skip generator allocation for synchronous array and tuple parsing.

  • #​8440 2575fcc Thanks @​front-depiction! - Avoid rebuilding the parser wrappers on every SchemaParser.asserts call.

  • #​8364 287273c Thanks @​gcanti! - Add Schema.isMinCodePoints, Schema.isMaxCodePoints, and Schema.isBetweenCodePoints to validate string lengths by Unicode code point count, with JSON Schema export, representation revivers, and arbitrary generation support.

  • #​8430 0860c0c Thanks @​front-depiction! - Speed up schema decoder generation for deeply nested schemas.

  • #​8451 8d27554 Thanks @​front-depiction! - Speed up Schema code generation for nested schemas, especially when a child cannot be generated.

  • #​8429 c2e810c Thanks @​front-depiction! - Memoize recursive Schema.toEquivalence compilation and remove unused path tracking, reducing work and retained memory for deeply nested values.

  • #​8423 35ecbb9 Thanks @​fml09! - Ignore non-enumerable own properties when checking schema excess properties, allowing Schema.TaggedError responses to encode under strict HttpApi.ParseOptions. Symbol index signatures now skip non-enumerable entries during decoding and encoding, matching string index signatures; make those properties enumerable or declare them explicitly in a Struct to retain them.

  • #​8436 b442528 Thanks @​front-depiction! - Fix Schema.toFormatter compiling a recursive schema again at every nesting level of the formatted value.

  • #​8482 16623c7 Thanks @​gcanti! - Improve Schema.toJsonSchemaDocument export of built-in checks. String code-unit length checks now use safe code-point bounds, regex and literal checks avoid patterns that would reject accepted values under Unicode matching, and cardinality checks reject non-finite bounds instead of emitting invalid schemas. Custom check exporters can mark a fragment as approximate by returning [schema, true]; oneOf then falls back to anyOf, and approximate record-key patterns are not used as patternProperties selectors.

    Built-in checks whose exported constraints can be looser than their runtime checks, including approximations that predate this change:

    Check Approximation Change in this PR
    isPattern The default applies to direct isPattern checks: the pattern is omitted unless the RegExp uses the Unicode flag and its other flags are d, g, or y. Sticky patterns are anchored at the start. Built-in checks may override the default when their Unicode semantics are known to be safe or intentionally loose. Updated export and approximation metadata.
    isStartingWith A trailing high surrogate is removed from the exported prefix; if nothing remains, the pattern is omitted. Other prefixes retain an exact pattern. Updated export.
    isEndingWith A leading low surrogate is removed from the exported suffix; if nothing remains, the pattern is omitted. Other suffixes retain an exact pattern. Updated export.
    isIncluding A leading low surrogate or trailing high surrogate is removed from the exported substring; if nothing remains, the pattern is omitted. Other substrings retain an exact pattern. Updated export.
    isMinLength On strings, the exported minimum is Math.ceil(minLength / 2) code points. Bounds of 0 and 1 are exact; array bounds are unchanged. Updated export; rejects non-finite bounds.
    isMaxLength On strings, the exported maximum counts code points rather than UTF-16 code units. A bound of 0 is exact; array bounds are unchanged. Updated type and union handling; rejects non-finite bounds.
    isBetweenLength On strings, combines the lower- and upper-bound approximations above. Array bounds are unchanged. Updated export; rejects non-finite bounds.
    isUppercased, isLowercased Patterns exclude only ASCII letters of the opposite case. Non-ASCII characters that change under JavaScript casing can still pass JSON Schema validation. Marked as approximate.
    isCapitalized, isUncapitalized Patterns exclude only ASCII letters of the opposite case at the start. Non-ASCII characters that change under JavaScript casing can still pass JSON Schema validation. Marked as approximate.
    isInt Exports type: "integer" without the safe-integer bounds required by the runtime check. Marked as approximate.
    isMinProperties, isMaxProperties, `isBetweenProperties

❗ 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.

@github-actions
github-actions Bot enabled auto-merge (squash) September 28, 2026 04:58
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
❌ Deployment failed
View logs
notes-docs f0ecff8 Sep 28 2026, 06:00 PM

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Sep 28, 2026 •

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
❌ Deployment failed
View logs
notes-capture f0ecff8 Sep 28 2026, 06:00 PM

@github-actions
github-actions Bot merged commit c76331c into main Sep 28, 2026
14 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant