Skip to content

Update dependency effect to v4.0.0-rc.116 - #638

Open
renovate[bot] wants to merge 1 commit into
distro/arch-omarchy-quattrofrom
renovate/effect-4.x
Open

renovate[bot] wants to merge 1 commit into
distro/arch-omarchy-quattrofrom
renovate/effect-4.x

Conversation

@renovate

@renovate renovate Bot commented Sep 14, 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-rc.1124.0.0-rc.116 age confidence

Release Notes

Effect-TS/effect (effect)

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 textString, integerInt, and floatNumber. Rename public types IntegerOptionsIntOptions and FloatOptionsNumberOptions. Shared TextOptions is unchanged. Prompt.Number retains its existing parser, without a finite-number restriction.

    In GlobalFlag, rename actionAction and settingSetting. 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 state
    (entity, shard, singleton, entity type, and node shutdown) instead of a
    process-lifetime set of fiber ids. The registry is bounded by in-flight
    teardowns and returns to baseline after entity reap storms.

  • #​7939 8f397ed Thanks @​kitlangton! - Fix Reply.Reply codecs to require client services when decoding and server services when encoding.

  • #​7485 d7ae6b6 Thanks @​tim-smart! - Transient routing states for persisted cluster messages no longer surface as errors.

    If an entity moves runners or is shut down before replying, the caller keeps
    waiting for the reply via message storage while the entity moves. If the local
    runner is shutting down while a caller is waiting, the call is interrupted
    instead of failing with EntityNotAssignedToRunner: the request is already
    durable and will be served under the next owner.

    Durable workflows treat such an interrupt as an abandoned run attempt: the run
    stops with nothing persisted, without running compensations or resuming the
    parent, ready to replay on the replacement runner.

  • #​7933 8cf1203 Thanks @​kitlangton! - Fix saved curried Context.get calls incorrectly inferring their required service as unknown.

  • #​8064 87654c5 Thanks @​Avaq! - Fix the CookiesError tag in effect/unstable/http from CookieError to CookiesError to match the class name.

  • #​7621 f05ae0b Thanks @​kitlangton! - Apply DateTime calendar parts without intermediate overflow.

  • #​7884 436f5eb Thanks @​kitlangton! - Fix ConfigProvider.fromDotEnvContents variable expansion to preserve replacement tokens such as $& in referenced values.

  • #​7840 d8ff960 Thanks @​kitlangton! - Fix DurableClock.sleep to preserve explicit 0 and 0n in-memory thresholds.

  • #​7941 8766475 Thanks @​kitlangton! - Require schema encoding services when DurableDeferred.into records an exit.

  • #​7750 b64f406 Thanks @​kitlangton! - Update dynamic tools to advertise replacement parameter schemas after setParameters.

  • #​7572 4697aaa Thanks @​tim-smart! - Align CLI help tables by terminal display width for wide, emoji, combining, and zero-width graphemes.

  • #​7588 cec6c2d Thanks @​tim-smart! - Route tool call parameter validation failures through the tool's failureMode and drop ToolParameterValidationError.toolParams.

  • #​7643 9956f0e Thanks @​tim-smart! - Reduce memory usage in Effect primitives and fibers.

    Breaking: context-derived Fiber fields now live under fiber.cache. The
    currentScheduler, currentSpan, currentLogLevel, currentStackFrame, and
    currentPreventYield fields are now scheduler, span, logLevel,
    stackFrame, and preventYield. Access minimumLogLevel and
    maxOpsBeforeYield through cache as well.

  • #​7650 5c7eed0 Thanks @​tim-smart! - Reduce HTTP server

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

@github-actions
github-actions Bot enabled auto-merge (squash) September 14, 2026 23:31
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from 8834f5b to 3f98250 Compare September 14, 2026 23:32
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Sep 14, 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 Preview URL Updated (UTC)
✅ Deployment successful!
View logs
dotfiles-docs b0e797c Commit Preview URL

Branch Preview URL
Sep 19 2026, 12:04 PM

@renovate
renovate Bot force-pushed the renovate/effect-4.x branch 15 times, most recently from 9080577 to 72b6102 Compare September 19, 2026 01:38
@renovate renovate Bot changed the title Update dependency effect to v4.0.0-rc.115 Update dependency effect to v4.0.0-rc.116 Sep 19, 2026
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from 72b6102 to d44f087 Compare September 19, 2026 04:54
@renovate
renovate Bot force-pushed the renovate/effect-4.x branch from d44f087 to b0e797c Compare September 19, 2026 12:02
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.

0 participants