Skip to content

chore(deps): update dependency effect to v4.0.0-rc.117 - #12

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

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

Conversation

@renovate

@renovate renovate Bot commented Aug 11, 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.0-beta.103 → 4.0.0-rc.117 age confidence

Release Notes

Effect-TS/effect (effect)

v4.0.0-rc.117

Compare Source

Patch Changes
  • #​8331 9953c92 Thanks @​tim-smart! - Bound local sends that wait for an unregistered cluster entity type. These sends now fail with an Entity type ... not registered defect at the shared runner registration deadline. Once that startup deadline has elapsed, sends to not-yet-registered dynamic entity types fail immediately.

  • #​8319 c6e8b20 Thanks @​fubhy! - Extend NetAddress.toCanonical to accept internet addresses. IPv4-mapped IPv6 addresses become IPv4 while retaining the port. Other addresses retain their identity and IPv6 scope metadata.

  • #​8317 8d40572 Thanks @​tim-smart! - Fix cluster workflows stalling after request resets.

  • #​8323 1b21e0d Thanks @​fubhy! - Add validated multicast address refinements for IP and MAC addresses.

  • #​8310 3b155e3 Thanks @​williamrobertson13! - Fix memory leaks in Pool.makeWithTTL with the usage strategy by releasing retired resources and consumed acquisition errors from the TTL queue.

  • #​8326 895d944 Thanks @​lloydrichards! - Normalize identified MCP output schemas to object roots across protocol versions.
    Support identified object schemas in MCP elicitation requests.

  • #​8318 705fb68 Thanks @​fubhy! - Add Queue.shutdownUnsafe to synchronously discard buffered messages and settle pending queue operations from callbacks. Both Queue.shutdown and Queue.shutdownUnsafe return false when the queue has already been shut down or completed; previously, Queue.shutdown always returned true.

  • #​8325 87912c0 Thanks @​fubhy! - Add NetAddress.formatNativeHost and NetAddress.formatMulticastInterface with explicit platform and scope ID map parameters for native socket APIs.

  • #​8308 106af64 Thanks @​tristanz! - Release savepoints after nested transactions succeed or successfully roll back in PostgreSQL, PGlite, MySQL, libSQL, and the Node, Bun, React Native, and WASM SQLite clients. This frees PostgreSQL transaction locks before the outer transaction completes.

    Custom SQL clients can opt in through the new releaseSavepoint option. Clients that omit it are unchanged.

  • #​8323 1b21e0d Thanks @​fubhy! - Add generic branded NetAddress classifications and named validating schemas.
    Singleton address constants retain their base-family types; guards expose
    classifications on demand. Operations that derive new address bits return only
    the IPv4 or IPv6 family until callers revalidate the classification.

  • #​8305 3d59ae6 Thanks @​tim-smart! - Make criteria optional for Decision.probability. When supplied, criteria still requires descriptions for both false and true.

    Decision.Probability.criteria is now optional, so consumers reading outcome descriptions (for example, decision.criteria.true) must first guard against undefined.

  • #​8329 89c9a39 Thanks @​tim-smart! - Warn when conflicting cluster workflow definitions reuse a tag.

v4.0.0-rc.116

Compare Source

Patch Changes
  • #​7908 c19c63f Thanks @​gcanti! - Add experimental JIT and AOT schema compilers that work through the existing
    SchemaParser APIs and share a decoder registry. Enable JIT globally with
    effect/unstable/schema/SchemaJITCompiler/enable, selectively with
    SchemaJITCompiler.enable(ast), or install generated AOT decoders without
    requiring dynamic function construction. The new
    effect/unstable/schema/SchemaAOTCompiler/Build entrypoint discovers direct
    Schema exports from explicit module loaders and writes a self-installing AOT
    module through Effect's FileSystem and Path services. Compiled decoders can
    provide optional synchronous decode and make operations; normal
    SchemaParser calls consume them transparently and retain decodeEffect and
    makeEffect as the detailed fallbacks. AOT targets declare the operations to
    prepare, so generated modules contain only those operation families and use
    the interpreter if an omitted operation is later called.
Breaking changes

SchemaGetter.Getter is now a tagged union that distinguishes synchronous,
optional, and effectful transformations. Getter values now expose only pipe.
Use the dual SchemaGetter.map, SchemaGetter.compose, and SchemaGetter.run
functions instead of the former methods. Keeping these operations standalone
lets bundlers remove composition code when an application does not use it.

The public Getter constructor is removed. Use
SchemaGetter.transformOptionalEffect instead of new SchemaGetter.Getter.
SchemaGetter.onSome and SchemaGetter.onNone are also removed. Use
transformEffect for an effectful transformation of present values and
transformOptionalEffect when the transformation handles missing values.

Transformation#compose is replaced by the dual standalone function
SchemaTransformation.composeTransformation. Replace first.compose(second)
with SchemaTransformation.composeTransformation(first, second) or
SchemaTransformation.composeTransformation(second)(first).

SchemaTransformation.make is renamed to
SchemaTransformation.makeTransformation. SchemaTransformation.Transformation
and SchemaTransformation.Middleware now implement Pipeable, so both values
can be passed through standalone combinators with .pipe(...).

SchemaAST.Context.constructorDefault now stores the constructor-default
Effect directly instead of wrapping it in a SchemaAST.Link. Constructor
defaults apply only during construction, so the direct representation avoids
giving them encoding semantics and lets construction reuse already-completed
synchronous Effects. Code that constructs or inspects SchemaAST.Context
should pass or read the default Effect directly.

  • #​8287 8cb0a4f Thanks @​tim-smart! - Add Decision and DecisionModel to effect/unstable/ai for batched classification, rating, and probability estimates over schema-encoded input.

  • #​8221 8f420bb Thanks @​gcanti! - Add Arbitrary.array(item, { minLength, maxLength }) for variable-length arrays of custom Arbitraries. Shrinking removes blocks of commands while preserving the remaining values and their order, and also simplifies individual elements.

    Schema-derived arrays now also try removing prefixes and interior blocks. Shrinking composed values and Schema objects preserves child candidates that were previously lost when exploring another branch.

    Shrunk results and replay paths may change from earlier native releases. Re-run affected properties to obtain new replay tokens, and preserve important failing inputs as regression tests.

  • #​8233 1393080 Thanks @​gold-beyond! - Add Crypto.randomULID to generate ULIDs from the current Clock timestamp and cryptographically secure random bytes.

  • #​8256 ccae354 Thanks @​tim-smart! - Align the Effect and Stream APIs and fix several Stream type signatures.

    • Effect.orElseSucceed now passes the error to the fallback function, matching Stream.orElseSucceed.
    • Effect.isEffect narrows to Effect<unknown, unknown, unknown> instead of any.
    • Stream.bind, Stream.bindEffect and Stream.let allow re-binding an existing field and produce the same record type as their Effect counterparts.
    • Stream.Success, Stream.Error and Stream.Services are unconstrained and distributive like the Effect versions.
    • Stream.partition returns [passes, fails] and takes a capacity option, matching Stream.partitionQueue and Stream.partitionEffect. Its default capacity remains 16.
    • Stream.mapBoth takes onElement / onError, matching Stream.tapBoth.
    • Stream.scan and Stream.scanEffect take a lazy initial state.
    • Stream.catchTags rejects unknown tag keys like Effect.catchTags.
    • Fixed the data-first overloads of Stream.runIntoPubSub (error type was dropped), Stream.cross (swapped type parameter names) and Stream.mapAccumArray (onHalt return type).
    • Added Stream.as, Stream.tapDefect, Stream.tapErrorTag and Stream.unwrapReason.
    • Stream concurrency options use the Types.Concurrency alias, and JSDoc categories were consolidated across both modules.
  • #​8235 553c403 Thanks @​tim-smart! - Retain durable deferred completions received before a workflow owner's first local run so replay can complete while the deferred reply is still being persisted.

    Keep pending completions in a cache keyed weakly by cluster activation. Handler rebuilds retain completions, and overlapping activations cannot clear each other's results. Results can be collected once their activation scope becomes unreachable; closing a scope alone does not guarantee collection.

    Release RPC stream and queue consumers when their request write fiber is interrupted.

  • #​8243 45b5103 Thanks @​tim-smart! - Fix lost durable deferred wake-ups when a ClusterWorkflowEngine execution suspends before its run reply is persisted. Deferred completions now wait for the current run reply before resuming, so discarded executions can replay without relying on caller retries.

  • #​8254 77a5612 Thanks @​tim-smart! - Fix file response content types: honor the contentType option and preserve explicit headers, including MIME types set by HttpStaticServer. The default HttpPlatform.layer now infers missing content types from file extensions.

    Web file responses on the default, Node, and Deno platforms prefer explicit content types, then nonempty File.type, then the file extension.

    Removed the unused contentLength option from HttpServerResponse.file; lengths are calculated from the file and requested range.

  • #​8229 1076170 Thanks @​tim-smart! - Fix a deadlock in the memory workflow engine when a durable deferred is completed from a finalizer in the workflow awaiting it, including DurableDeferred.into inside DurableDeferred.raceAll.

  • #​8206 f110af1 Thanks @​tim-smart! - Fix multipart file streams hanging on body read errors and preserve error causes when persisting files.

  • #​8284 0045152 Thanks @​tim-smart! - HttpServerResponse.toWeb now keeps a raw Response's headers and Set-Cookie values when the body is omitted (HEAD, or status 204, 205 or 304). Bodyless outer statuses keep the outer status and status text; HEAD keeps the raw Response's. Outer cookies are appended to native Set-Cookie headers instead of replacing them.

  • #​8202 51d4a2f Thanks @​xia-chao! - Fix RcRef.make to treat idleTimeToLive: 0 like Duration.zero and "0 millis" instead of an omitted option.

  • #​8298 4d4c4e8 Thanks @​gcanti! - Fix Schema.Redacted to wrap the transformed result of its inner schema during decoding and encoding.

  • #​8227 ccfe152 Thanks @​tim-smart! - Release non-persisted, interruptible RunnerServer handlers and mailbox slots when callers disconnect.

    Preserve dynamic WithTransaction annotations during replay and re-delivery.

  • #​8261 d30a0c8 Thanks @​nikhilsnayak! - Add HTTP QUERY support to clients, routers, HttpApi endpoints, and AI request metadata. Configure CORS support through allowedMethods; defaults are unchanged.

    OpenAPI 3.1 output represents QUERY through x-oai-additionalOperations, which requires consumer support for that extension. The OpenAPI generator accepts the extension and the native OpenAPI 3.2 query field.

  • #​8255 84fe64a Thanks @​tim-smart! - Preserve literal suffixes such as :wait in /operations/:id:wait across HttpApiClient, HttpApiBuilder, and OpenAPI paths.

    Server routes without a params schema keep their existing matching for RouteContext consumers. Schemas whose keys cannot be enumerated keep the existing fallback.

  • #​8228 49e4b37 Thanks @​lloydrichards! - Support prompt titles in McpServer.prompt and McpServer.registerPrompt.

  • #​8228 49e4b37 Thanks @​lloydrichards! - Add an instructions option to MCP servers for initialization and discovery responses.

  • #​7265 a2c4154 Thanks @​lloydrichards! - Add server support for MCP protocol version 2026-07-28 through 2026_07_28

  • #​8272 23a58c0 Thanks @​fubhy! - Add NetAddress.formatHost and NetAddress.inetAddressFromHostString for socket APIs that accept numeric hosts and ports separately, preserving IPv6 scope IDs. Add NetAddress.scopeIdsFromInterfaces to build a scope map for resolving named IPv6 zones from supplied network interface entries without performing operating-system lookups.

  • #​8293 feef90c Thanks @​gcanti! - Treat Never as an uninhabited branch during Arbitrary.schema derivation. Schemas with another finite generation path, including optional properties, unions, and empty collections, no longer fail derivation.

  • #​8212 755e863 Thanks @​IMax153! - Restrict ByteSize.Input strings to canonical non-negative integers with recognized units, rejecting malformed literals at compile time. Parse external strings and fractional quantities with ByteSize.fromString or ByteSize.fromStringUnsafe before passing them to APIs accepting ByteSize.Input.

  • #​8228 49e4b37 Thanks @​lloydrichards! - Honor Tool.Strict in MCP input schemas and argument validation. Strict dynamic tools require Effect schemas; raw JSON Schema is rejected at registration.

    Support identified input schemas for non-strict tools. Invalid arguments use InvalidParams on protocols before 2025-11-25 and isError: true results on newer protocols.

    Distinguish validation failures from declared handler failures. Declared failures return isError: true without structuredContent: error mode uses Error.message or schema-encoded text, and return mode uses the encoded payload. Declared failures do not produce internal-error diagnostics.

    Log and report internal failures, including defects and encoding errors, while keeping client messages generic.

    Allow Toolkit.handle to accept SchemaAST.ParseOptions for parameter decoding. Expose the Toolkit.FailureOrigin cause annotation and shared Tool.FailureOrigin type, with the same origin available in Tool.HandlerResult.failureOrigin on returned failures.

  • #​8269 9ad9891 Thanks @​tim-smart! - Add HttpApi.ParseOptions to configure server and client codecs at the API, group, or endpoint level.

    Sse.decodeSchema and ChannelSchema.decode accept parse options, and Schema.Cause encodes reasons to their wire fields.

    SSE decoding omits absent IDs, including with default options. Use Schema.optional(Schema.String) instead of Schema.UndefinedOr(Schema.String) for IDs. With onExcessProperty: "error", declare event (default: "message") and any id, including inherited IDs.

    HttpApiSchema.StreamSse data-mode types and OpenAPI schemas now make id optional.

  • #​8296 0beded0 Thanks @​gcanti! - Improve Schema-derived BigInt and BigDecimal arbitraries with wider magnitude, precision, and exponent coverage and numeric boundary shrinking.

    Cover intermediate magnitudes up to large one-sided BigInt bounds, handle BigDecimal bounds with widely different scales, and refine decimal counterexamples between simple values.

  • #​8260 2940742 Thanks @​xia-chao! - Fix repeated text, json, arrayBuffer, and urlParamsBody reads in HttpServerResponse.toClientResponse for raw Web Response bodies, preserving the original response for serving.

  • #​8270 63c1566 Thanks @​tim-smart! - Fix YAML indentless sequences, multiline scalar folding, and comments. Reject unsupported compact nested sequences (- - value) and document streams.

    Previously accepted values such as description: Use when: deploy and description: Deploy: now throw SyntaxError: YAML forbids colons followed by whitespace or end-of-value in plain scalars. Quote these values, for example description: "Use when: deploy".

v4.0.0-rc.115

Compare Source

Patch Changes
  • #​8196 657254b Thanks @​gcanti! - Optimize schema initialization while preserving custom constructor options.

  • #​8190 f9ef0e9 Thanks @​javascript-unsafe! - Omit response bodies for statuses 204, 205, and 304 in HttpServerResponse.toWeb and the Bun/Deno HTTP adapters, preventing invalid Web responses and hung requests. Cancel omitted raw ReadableStream bodies, and finalize request resources without starting omitted Effect streams.

  • #​8187 4f73f9e Thanks @​tim-smart! - Parameterize persistence lookup keys in both SQL backing stores' getMany queries.

v4.0.0-rc.114

Compare Source

Patch Changes
  • #​8177 3ff4952 Thanks @​tim-smart! - Allow Effect.cachedWithTTL to compute the TTL from each completed Exit, so successes and failures can use different cache durations.

  • #​8164 6d55555 Thanks @​sam-goodwin! - Keep Node and Bun file stats usable when optional numeric metadata exceeds the safe integer range by returning Option.none() for those fields.

  • #​8162 716e0c0 Thanks @​tim-smart! - Fix published declarations referencing symbols stripped as @internal, which broke consumers compiling with skipLibCheck: false. Effectable.d.ts now uses the public Effect.TypeId, Match.d.ts no longer aliases an internal Contextual type, Schema.d.ts ships the AnnotationSchemaConstraint alias it references, and the CLI's toFlagDoc helper is marked internal so it no longer leaks Param.getParamMetadata.

  • #​8160 d4e4ad5 Thanks @​gcanti! - Fix SchemaRepresentation.toCodeDocument generating invalid TypeScript for optional tuple elements containing unions or nested readonly tuples. Optional element types are now parenthesized, for example readonly [(string | number)?] instead of readonly [string | number?]. Generated runtime schemas are unchanged.

  • #​8158 b1988f4 Thanks @​gcanti! - Fix SchemaRepresentation.toCodeDocument dropping Struct fields named __proto__ from generated schemas. These fields now use computed keys, such as Schema.Struct({ ["__proto__"]: Schema.String }), so the generated schema validates them correctly.

  • #​8169 482b7d7 Thanks @​gcanti! - Improve SchemaRepresentation.fromJsonSchemaDocument and fromJsonSchemaMultiDocument:

    • Import { not: {} } as Schema.Never (#​8137).

    • Import closed records with one patternProperties entry, additionalProperties: false, and no declared or required properties when patterns: "apply" is enabled. These were previously rejected.

      {
        "type": "object",
        "patternProperties": { "^a": { "type": "number" } },
        "additionalProperties": false
      }
      Schema.Record(
        Schema.String.check(Schema.isPattern(/^a/)),
        Schema.Finite
      )
    • Reject open patterned objects with patterns: "apply" instead of generating incompatible TypeScript index signatures.

      {
        "type": "object",
        "patternProperties": { "^a": { "type": "number" } },
        "additionalProperties": true
      }

      Import now explains that the generated TypeScript index signatures would give incorrect types to unmatched keys, and reports the source path. The same applies when additionalProperties is omitted or {}. Patterns can still be combined with a closed object in allOf when the result has a finite set of keys. Use patterns: "ignore" only if you intend to discard the pattern and its value constraints.

    • Reject references inside a subschema with its own $id instead of potentially resolving against the wrong definitions. Resolve or flatten these references before importing. A $id on the document root remains supported.

      {
        "$id": "https://example.com/root",
        "$defs": { "Value": { "type": "string" } },
        "type": "object",
        "properties": {
          "child": {
            "$id": "child",
            "$defs": { "Value": { "type": "number" } },
            "$ref": "#/$defs/Value"
          }
        }
      }

      Here child refers to the nested numeric Value, not the root string Value. Import now reports that references inside a subschema with its own $id are unsupported instead of incorrectly using the root definition.

    • Explain import failures using JSON Schema keyword names, the reason for rejection, and the source path. Reference errors distinguish missing definitions, unsupported reference formats, and circular aliases. Pattern errors explain how to opt in for trusted schemas or explicitly discard the constraints.

  • #​8162 716e0c0 Thanks @​tim-smart! - Rename Schema.Annotations.ToArbitrary.Constraint to Schema.Annotations.ToArbitrary.FilterConstraint.

    Code that refers to the previous type name should update its type annotations to use FilterConstraint.

  • #​8181 9941e6d Thanks @​Ishkirat-Singh! - Make message optional for Prompt.Select and Prompt.MultiSelect. When omitted, prompts display only the choices and submission shows a tick followed by the selected titles. Prompt.AutoComplete still requires a message.

v4.0.0-rc.113

Compare Source

Patch Changes
  • #​7738 49e3901 Thanks @​kitlangton! - Retain completed tool approval results in non-streaming responses so Chat records them and does not replay approved tools on later turns.

  • #​7483 b945ded Thanks @​tim-smart! - Align runtime type IDs with their module paths. Effect markers now omit legacy grouping prefixes and the unstable path segment, while OpenTelemetry spans use the OtelTracer module path. Custom implementations that copy these marker strings must adopt the corrected IDs.

  • #​8014 d6422f4 Thanks @​kitlangton! - Fix Effect.all to retain errors and required services from every branch of a union of record inputs.

  • #​8095 5a80204 Thanks @​gcanti! - Fix Arbitrary.schema to respect applicable index signatures when generating and shrinking object properties, including fixed fields in Schema.StructWithRest and overlapping records.

    Combine compatible string, number, and bigint constraints during generation so cases such as a String field constrained by a NonEmptyString record remain productive at size zero. Other intersections are validated and may exhaust the discard budget.

  • #​7796 53511ef Thanks @​kitlangton! - Fix Schema.ArrayEnsure to preserve array-valued element branches and outer-array encoding cardinality.

  • #​8067 79ae49f Thanks @​purwasadr! - Fix AtomRpc.query returning never for RPCs whose middleware declares service requires. The return-type conditional now infers all six Rpc type parameters, matching mutation and every utility in Rpc.

  • #​7463 0d083ba Thanks @​tim-smart! - Remove the mime runtime dependency. The new effect/unstable/http/Mime module provides top-level lookup functions
    backed by a vendored standard MIME registry.

  • #​7477 be0f822 Thanks @​candrewlee14! - Allow sockets to use browser, Bun, and Node WebSocket implementations without consumer casts. Platform constructors
    now support typed opening-handshake headers where available.

  • #​7587 debe8fd Thanks @​kitlangton! - Fix Cache.invalidateWhen and ScopedCache.invalidateWhen deleting a replacement entry while waiting for an earlier lookup.

  • #​7585 a8588f9 Thanks @​kitlangton! - Fix interruption of Cache.refresh for a missing key removing a newer value written by Cache.set.

  • #​7596 f17eb0a Thanks @​kitlangton! - Fix Cache.refresh and ScopedCache.refresh exceeding capacity when an existing key is evicted while its refresh is in progress. Publishing the refreshed entry now evicts older entries as needed, releasing their resources in ScopedCache.

  • #​7595 f30cbfe Thanks @​kitlangton! - Fix Cache.refresh for an initially missing key deleting a newer cached value when the refresh completes with zero time to live.

  • #​7614 78cc9c0 Thanks @​kitlangton! - Prevent Cache from retaining synchronously interrupted lookups.

  • #​7563 ccbdbd5 Thanks @​alvarosevilla95! - Respect custom HTTP header redaction when recording server span attributes.

  • #​7254 a63dcbf Thanks @​gcanti! - Add the experimental Schema-first effect/unstable/arbitrary/Arbitrary module for native generation without
    fast-check. Arbitrary.schema derives an opaque arbitrary from the decoded Schema Type, Arbitrary.sampleEffect
    provides interruptible sampling with typed exhaustion, and Arbitrary.checkEffect returns structured property results.
    The initial implementation supports bounded discards, shrinking, replay, and recursive and mutually recursive Schemas.
    SampleError and Exhausted include the effective seed so discarded runs remain reproducible even when the caller did
    not provide one. Arbitrary.isArbitrary identifies values through the module's nominal protocol. Numeric constraints
    retain NaN when it is accepted by their supported Order.Number bounds. Union derivation validates oneOf
    exclusivity and isolates lazy cross-member shrinking from unrelated random generation. Object derivation keeps
    optional-property selection constructive when candidate fields have different recursive costs.
    Struct, Record, JSON-object, and record-shaped Arbitrary.all outputs periodically use a null prototype as an edge
    case, preserving that prototype throughout shrinking and replay without perturbing structural PRNG choices. The change
    adds 0.01–0.03 KB gzip to representative Arbitrary fixtures and leaves production-only bundle sentinels unchanged.

    Add Arbitrary.map, Arbitrary.flatMap, Arbitrary.filter, Arbitrary.filterMap, and Arbitrary.all for composing
    derived Arbitraries without exposing a second catalog of primitive constructors. Filtering remains bounded and
    promotes valid shrink descendants through rejected nodes. maxShrinks bounds every inspected shrink candidate,
    including candidates rejected before property evaluation, while retaining the best shrunk input found when the
    budget is exhausted. flatMap provides deterministic dependent generation, source-first shrinking, post-source PRNG
    checkpoints, and one shared residual recursion budget. all combines tuples, iterables, and records with a shared
    budget, randomized internal generation order, stable output shape, and independent member shrinking. Arbitrary values
    implement Pipeable for composition with data-last combinators.

    Add the experimental Schema arbitraryConstraint and toCodecArbitrary annotations and their
    Schema.Annotations.ToArbitrary types. Declarations can provide a Schema Link optimized for generation, while filters
    can contribute native semantic constraints. The callback receives decoded type parameters and normalized constraints.
    The compiler owns efficient representations for common built-ins, including JSON, RegExp, URL, Date, byte arrays,
    ReadonlyMap, and ReadonlySet. Effect-specific HashMap, HashSet, Chunk, Graph, BigDecimal, and date-time declarations keep
    local generation Links, while declarations with productive canonical codecs require no arbitrary-specific annotation.
    Schema.isUniqueKey provides key-based Map uniqueness for explicit array representations.

    The same ownership policy applies to formatter and equivalence derivation: implementations for common declarations
    live in their compiler, while domain-specific and dynamically constructed declarations retain local annotations.
    Declarations whose intrinsic Equal implementation already matches their Schema equivalence need no annotation or
    compiler special case. This keeps unused common callbacks out of production Schema bundles.

    Against the previous layout, schema-toArbitrary decreases from 36.68 KB to 33.24 KB gzip and
    arbitrary-combinators decreases from 37.16 KB to 33.70 KB. schema-toFormatter increases from 18.92 KB to 19.49 KB
    and schema-toEquivalence increases from 19.05 KB to 19.39 KB because callers that explicitly derive these capabilities
    now retain the common declaration handlers. Generic production fixtures remain unchanged; an equivalence-specific
    production fixture using common declarations decreases from 20.75 KB to 20.48 KB, while declarations whose intrinsic
    equality is sufficient decrease from 23.42 KB to 23.34 KB. An Arbitrary-specific production fixture using common
    declarations decreases from 20.35 KB to 19.61 KB, while one using the locally annotated BigDecimal and date-time
    declarations increases from 18.34 KB to 23.01 KB.
    The complete 31-scenario native Arbitrary comparison reports no statistically classified runtime regression; the five
    moved BigDecimal and date-time scenarios remain within measurement noise.

    Add SchemaGetter.forbiddenEncoding, a reusable getter for the encode side of decode-only Schema transformations.

    Remove the fast-check bridge from the effect package, including Schema.toArbitrary and
    effect/testing/FastCheck. Replace the legacy Schema.Annotations.ToArbitrary callback contract with the native
    Schema-first types. The effect package no longer depends on fast-check.

    Migrate TestSchema.Asserts.verifyLosslessTransformation and TestSchema.Asserts.arbitrary().verifyGeneration to the
    native runner. Both methods now accept native check options directly, bound unsuccessful generation, and include the
    shrunk input and replay token in property failures.

    Use the Arbitrary runner for all @effect/vitest property tests. Property inputs may combine Schemas and Arbitraries,
    and are composed directly with Arbitrary.all; check options are available through arbitrary. Raw fast-check
    arbitraries and the fastCheck options object are no longer supported. As with the previous fast-check adapter, thrown
    exceptions, defects, and typed failures from a property are shrinkable falsifications; Effect interruption remains an
    interruption.

    Optimize constructive regular-expression generation by caching feasible lengths on the compiled pattern, computing
    sequence-suffix feasibility once, and precomputing character-class metadata. Seeded generation, shrinking, and replay
    remain unchanged.

    Optimize BigDecimal.Order and BigDecimal.Equivalence with a shared hybrid comparator. Ordinary scale differences
    use cached, bounded coefficient alignment, while large differences are compared without materializing their decimal
    zeroes. BigDecimal.make now rejects scales that are not safe integers.

    Before its removal, the materialized fast-check bridge fixture
    schema-toArbitrary-materialized-fast-check.ts measured 79.00 KB minified and gzipped.

    Representative runtime measurements against corresponding hand-written fast-check 4.9.0 arbitraries are shown below.
    Values are median latency on Node 24.12.0 and Apple M3; lower is better. Both implementations validate the
    same output domains, although their generation distributions are not identical. Native speedup is fast-check latency
    divided by Native latency, so higher is better.

    Scenario fast-check Native Native speedup
    32 recursive samples 150 µs 103 µs 1.45x
    128 optional Struct samples 244 µs 86.0 µs 2.84x
    128 constrained strings 742 µs 49.7 µs 14.86x
    RegExp derivation and first sample 13.4 ms 30.8 µs 429.02x
    64 RegExp strings 595 µs 919 µs 0.64x
    RegExp failure and shrinking 168 µs 88.2 µs 1.91x
    128 bounded numbers 68.9 µs 21.8 µs 3.18x
    128 Uint8Array samples 98.3 µs 74.4 µs 1.32x
    128 BigDecimal samples 66.6 µs 56.3 µs 1.18x
    128 DateTime.Utc samples 71.2 µs 50.5 µs 1.42x
    128 named time zones 52.2 µs 27.9 µs 1.85x
    128 time zones 63.7 µs 33.8 µs 1.89x
    128 zoned date-times 130 µs 112 µs 1.16x
    32 samples through Schema filter 65.9 µs 49.4 µs 1.33x
    32 unique arrays 156 µs 132 µs 1.18x
    128 literal samples 40.0 µs 3.70 µs 10.78x
    128 mapped samples 59.0 µs 14.1 µs 4.21x
    128 samples through passing filter 58.9 µs 13.9 µs 4.23x
    32 samples through selective filter 66.1 µs 42.9 µs 1.54x
    128 filterMap samples 75.7 µs 31.5 µs 2.40x
    Filtered failure and shrinking 12.7 µs 7.71 µs 1.66x
    128 all tuple samples 43.5 µs 18.5 µs 2.35x
    128 all record samples 81.0 µs 30.4 µs 2.66x
    128 dependent flatMap samples 125 µs 67.2 µs 1.86x
    flatMap failure and shrinking 20.1 µs 6.71 µs 2.99x
    Replay flatMap shrink path 14.3 µs 6.57 µs 2.17x
    Passing property, 100 runs 42.3 µs 27.1 µs 1.56x
    TestSchema, 100 generations 44.5 µs 35.9 µs 1.24x
    First failure plus one shrink 8.77 µs 1.30 µs 6.75x
    Replay recorded failure 6.35 µs 1.19 µs 5.36x

    Cold recursive derivation is not included because the native fixture constructs and compiles a Schema, while the
    fast-check fixture constructs a hand-written arbitrary; it is not a like-for-like warm-generator comparison.

    Add a guide for the native module and a migration guide from the fast-check bridge published in effect@4.0.0-rc.109.

  • #​7822 b845b18 Thanks @​tim-smart! - Add Stream.catchDefect and Channel.catchDefect for recovering from defects without catching typed failures or interruptions.

  • #​7657 381b794 Thanks @​kitlangton! - Remove Channel.runDone; use Channel.runDrain to consume all output and return the completion value.

  • #​7989 4ffcaf4 Thanks @​kitlangton! - Preserve astral Unicode escapes and following arguments in ChildProcess.make and ChildProcess.prefix template literals.

  • #​8018 ba2fd82 Thanks @​tim-smart! - Wait for Node child process groups to exit during scoped release and kill.

    After signalling a process group, both operations now wait for its leader and descendants. Without forceKillAfter, the wait is limited to one second and never escalates. With forceKillAfter, the group receives SIGKILL at the deadline, followed by a final wait of up to one second. Native timers keep escalation working under a TestClock, and cleanup no longer depends on stdio closing.

    exitCode and isRunning remain tied to the leader's exit, and a leader that already exited successfully still leaves its group untouched. Process group checks count zombies, so cleanup may wait for the full bound under a non-reaping PID 1.

  • #​7617 02be94c Thanks @​kitlangton! - Fix Chunk concatenation to preserve sliced elements.

  • #​7453 115d8c2 Thanks @​gcanti! - Rename the built-in Config constructors to PascalCase and rename Config.mapOrFail to Config.mapEffect. Config.Array and Config.Record now construct configs directly, with overloads for pathless options or a path followed by options, while their specialized schemas and the other built-in schemas are kept internal.

    This is a breaking naming cleanup for the Effect 4 release candidate. It makes casing consistently identify typed config constructors, aligns effectful mapping with the rest of the library, and prevents implementation schemas from expanding the public Config interface.

  • #​8020 1452635 Thanks @​kitlangton! - Ensure Effect.acquireUseRelease releases an acquired resource and Effect.useSpan ends its span when the use callback throws before returning an effect. The thrown exception remains a defect, but no longer skips cleanup.

  • #​8087 77f85fe Thanks @​tim-smart! - use new instantiation for streams

  • #​7802 a3f2b31 Thanks @​kitlangton! - Preserve flags and nested commands when completing a CLI subcommand through its alias.

  • #​7804 310f8d3 Thanks @​kitlangton! - Include inherited shared flags in descendant CLI completions.

  • #​8086 291d616 Thanks @​MaxFreedomPollard! - Allow = in values parsed by Primitive.keyValuePair, Flag.keyValuePair, and Param.keyValuePair in effect/unstable/cli.

  • #​7687 48dbbb2 Thanks @​kitlangton! - Allow optional alternative CLI flags.

  • #​8121 b43bfd6 Thanks @​tim-smart! - Rename CLI constructors to PascalCase, aligning scalar names with Schema and Config. This is a breaking change; parsing behavior is unchanged.

    In Primitive, Param, Flag, and Argument, capitalize existing constructor names, with these exceptions:

    Previous New Modules
    integer Int All four
    float Finite All four
    none Never All four
    choice Literals Param, Flag, Argument

    Primitive.choice becomes Primitive.Choice; choiceWithValue becomes ChoiceWithValue where available.

    In Prompt, capitalize control constructors except text → String, integer → Int, and float → Number. Rename public types IntegerOptions → IntOptions and FloatOptions → NumberOptions. Shared TextOptions is unchanged. Prompt.Number retains its existing parser, without a finite-number restriction.

    In GlobalFlag, rename action → Action and setting → Setting. Factories and combinators, including Command.make and Prompt.succeed, keep their names.

    Update public _tag matches and completion descriptors:

    • Primitive: "Integer" → "Int", "Float" → "Finite", "None" → "Never".
    • Completions.FlagType and Completions.ArgumentType: "Integer" → "Int", "Float" → "Finite".

    Sentinels still always fail; their internal parameter name is now "__never__". Help labels and completion scripts are unchanged.

  • #​7685 1c89c78 Thanks @​kitlangton! - Fix defaulted variadic arguments when omitted.

  • #​8059 9bbe1a5 Thanks @​kitlangton! - Fix CLI wizard handling of negative numbers and other flag values beginning with -.

  • #​7489 dd99ab0 Thanks @​tim-smart! - Cluster no longer retains fiber ids for every local teardown.

    Transient persisted interrupts are now classified from live teardown

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

♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update 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 c4eea85 to c442a36 Compare August 12, 2026 09:06
@renovate renovate Bot changed the title Update dependency effect to v4.0.0-beta.104 Update dependency effect to v4.0.0-beta.105 Aug 12, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from c442a36 to 877de1d Compare August 13, 2026 17:05
@renovate renovate Bot changed the title Update dependency effect to v4.0.0-beta.105 Update dependency effect to v4.0.0-beta.106 Aug 13, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from 877de1d to e0c032d Compare August 15, 2026 05:39
@renovate renovate Bot changed the title Update dependency effect to v4.0.0-beta.106 Update dependency effect to v4.0.0-beta.107 Aug 15, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from e0c032d to 6319e4c Compare August 17, 2026 15:13
@renovate renovate Bot changed the title Update dependency effect to v4.0.0-beta.107 Update dependency effect to v4.0.0-rc.108 Aug 17, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from 6319e4c to 3482e2f Compare August 19, 2026 02:48
@renovate renovate Bot changed the title Update dependency effect to v4.0.0-rc.108 Update dependency effect to v4.0.0-rc.109 Aug 19, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch 3 times, most recently from 02b78b7 to a8118f0 Compare August 22, 2026 02:46
@renovate renovate Bot changed the title Update dependency effect to v4.0.0-rc.109 Update dependency effect to v4.0.0-rc.110 Aug 22, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from a8118f0 to 69ba461 Compare August 25, 2026 15:45
@renovate renovate Bot changed the title Update dependency effect to v4.0.0-rc.110 Update dependency effect to v4.0.0-rc.111 Aug 25, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from 69ba461 to 1d59b03 Compare August 30, 2026 02:04
@renovate renovate Bot changed the title Update dependency effect to v4.0.0-rc.111 Update dependency effect to v4.0.0-rc.112 Aug 30, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from 1d59b03 to 17e1be4 Compare September 15, 2026 00:49
@renovate renovate Bot changed the title Update dependency effect to v4.0.0-rc.112 Update dependency effect to v4.0.0-rc.113 Sep 15, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from 17e1be4 to 3b1b123 Compare September 16, 2026 21:12
@renovate renovate Bot changed the title Update dependency effect to v4.0.0-rc.113 Update dependency effect to v4.0.0-rc.115 Sep 16, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch 2 times, most recently from 1350624 to c1e0ed6 Compare September 22, 2026 22:43
@renovate renovate Bot changed the title Update dependency effect to v4.0.0-rc.115 chore(deps): update dependency effect to v4.0.0-rc.115 Sep 22, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from c1e0ed6 to 9e76bfd Compare September 24, 2026 03:26
@renovate renovate Bot changed the title chore(deps): update dependency effect to v4.0.0-rc.115 chore(deps): update dependency effect to v4.0.0-rc.116 Sep 24, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from 9e76bfd to 03fe44e Compare September 26, 2026 11:31
@renovate renovate Bot changed the title chore(deps): update dependency effect to v4.0.0-rc.116 chore(deps): update dependency effect to v4.0.0-rc.117 Sep 26, 2026
@sonarqubecloud

Copy link
Copy Markdown

This branch has not been deployed

No deployments
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