Update dependency effect to v4.0.0-rc.116 - #638
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/effect-4.x
branch
from
September 14, 2026 23:32
8834f5b to
3f98250
Compare
Deploying with
|
| 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
Bot
force-pushed
the
renovate/effect-4.x
branch
15 times, most recently
from
September 19, 2026 01:38
9080577 to
72b6102
Compare
renovate
Bot
force-pushed
the
renovate/effect-4.x
branch
from
September 19, 2026 04:54
72b6102 to
d44f087
Compare
renovate
Bot
force-pushed
the
renovate/effect-4.x
branch
from
September 19, 2026 12:02
d44f087 to
b0e797c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
4.0.0-rc.112→4.0.0-rc.116Release Notes
Effect-TS/effect (effect)
v4.0.0-rc.116Compare Source
Patch Changes
c19c63fThanks @gcanti! - Add experimental JIT and AOT schema compilers that work through the existingSchemaParserAPIs and share a decoder registry. Enable JIT globally witheffect/unstable/schema/SchemaJITCompiler/enable, selectively withSchemaJITCompiler.enable(ast), or install generated AOT decoders withoutrequiring dynamic function construction. The new
effect/unstable/schema/SchemaAOTCompiler/Buildentrypoint discovers directSchema exports from explicit module loaders and writes a self-installing AOT
module through Effect's
FileSystemandPathservices. Compiled decoders canprovide optional synchronous
decodeandmakeoperations; normalSchemaParsercalls consume them transparently and retaindecodeEffectandmakeEffectas the detailed fallbacks. AOT targets declare the operations toprepare, so generated modules contain only those operation families and use
the interpreter if an omitted operation is later called.
Breaking changes
SchemaGetter.Getteris now a tagged union that distinguishes synchronous,optional, and effectful transformations. Getter values now expose only
pipe.Use the dual
SchemaGetter.map,SchemaGetter.compose, andSchemaGetter.runfunctions instead of the former methods. Keeping these operations standalone
lets bundlers remove composition code when an application does not use it.
The public
Getterconstructor is removed. UseSchemaGetter.transformOptionalEffectinstead ofnew SchemaGetter.Getter.SchemaGetter.onSomeandSchemaGetter.onNoneare also removed. UsetransformEffectfor an effectful transformation of present values andtransformOptionalEffectwhen the transformation handles missing values.Transformation#composeis replaced by the dual standalone functionSchemaTransformation.composeTransformation. Replacefirst.compose(second)with
SchemaTransformation.composeTransformation(first, second)orSchemaTransformation.composeTransformation(second)(first).SchemaTransformation.makeis renamed toSchemaTransformation.makeTransformation.SchemaTransformation.Transformationand
SchemaTransformation.Middlewarenow implementPipeable, so both valuescan be passed through standalone combinators with
.pipe(...).SchemaAST.Context.constructorDefaultnow stores the constructor-defaultEffectdirectly instead of wrapping it in aSchemaAST.Link. Constructordefaults 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.Contextshould pass or read the default
Effectdirectly.#8287
8cb0a4fThanks @tim-smart! - AddDecisionandDecisionModeltoeffect/unstable/aifor batched classification, rating, and probability estimates over schema-encoded input.#8221
8f420bbThanks @gcanti! - AddArbitrary.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
1393080Thanks @gold-beyond! - AddCrypto.randomULIDto generate ULIDs from the currentClocktimestamp and cryptographically secure random bytes.#8256
ccae354Thanks @tim-smart! - Align theEffectandStreamAPIs and fix several Stream type signatures.Effect.orElseSucceednow passes the error to the fallback function, matchingStream.orElseSucceed.Effect.isEffectnarrows toEffect<unknown, unknown, unknown>instead ofany.Stream.bind,Stream.bindEffectandStream.letallow re-binding an existing field and produce the same record type as theirEffectcounterparts.Stream.Success,Stream.ErrorandStream.Servicesare unconstrained and distributive like theEffectversions.Stream.partitionreturns[passes, fails]and takes acapacityoption, matchingStream.partitionQueueandStream.partitionEffect. Its default capacity remains 16.Stream.mapBothtakesonElement/onError, matchingStream.tapBoth.Stream.scanandStream.scanEffecttake a lazy initial state.Stream.catchTagsrejects unknown tag keys likeEffect.catchTags.Stream.runIntoPubSub(error type was dropped),Stream.cross(swapped type parameter names) andStream.mapAccumArray(onHaltreturn type).Stream.as,Stream.tapDefect,Stream.tapErrorTagandStream.unwrapReason.Types.Concurrencyalias, and JSDoc categories were consolidated across both modules.#8235
553c403Thanks @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
45b5103Thanks @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
77a5612Thanks @tim-smart! - Fix file response content types: honor thecontentTypeoption and preserve explicit headers, including MIME types set byHttpStaticServer. The defaultHttpPlatform.layernow 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
contentLengthoption fromHttpServerResponse.file; lengths are calculated from the file and requested range.#8229
1076170Thanks @tim-smart! - Fix a deadlock in the memory workflow engine when a durable deferred is completed from a finalizer in the workflow awaiting it, includingDurableDeferred.intoinsideDurableDeferred.raceAll.#8206
f110af1Thanks @tim-smart! - Fix multipart file streams hanging on body read errors and preserve error causes when persisting files.#8284
0045152Thanks @tim-smart! -HttpServerResponse.toWebnow keeps a rawResponse's headers andSet-Cookievalues 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 rawResponse's. Outer cookies are appended to nativeSet-Cookieheaders instead of replacing them.#8202
51d4a2fThanks @xia-chao! - FixRcRef.maketo treatidleTimeToLive: 0likeDuration.zeroand"0 millis"instead of an omitted option.#8298
4d4c4e8Thanks @gcanti! - FixSchema.Redactedto wrap the transformed result of its inner schema during decoding and encoding.#8227
ccfe152Thanks @tim-smart! - Release non-persisted, interruptibleRunnerServerhandlers and mailbox slots when callers disconnect.Preserve dynamic
WithTransactionannotations during replay and re-delivery.#8261
d30a0c8Thanks @nikhilsnayak! - Add HTTPQUERYsupport to clients, routers, HttpApi endpoints, and AI request metadata. Configure CORS support throughallowedMethods; defaults are unchanged.OpenAPI 3.1 output represents
QUERYthroughx-oai-additionalOperations, which requires consumer support for that extension. The OpenAPI generator accepts the extension and the native OpenAPI 3.2queryfield.#8255
84fe64aThanks @tim-smart! - Preserve literal suffixes such as:waitin/operations/:id:waitacrossHttpApiClient,HttpApiBuilder, and OpenAPI paths.Server routes without a params schema keep their existing matching for
RouteContextconsumers. Schemas whose keys cannot be enumerated keep the existing fallback.#8228
49e4b37Thanks @lloydrichards! - Support prompt titles inMcpServer.promptandMcpServer.registerPrompt.#8228
49e4b37Thanks @lloydrichards! - Add aninstructionsoption to MCP servers for initialization and discovery responses.#7265
a2c4154Thanks @lloydrichards! - Add server support for MCP protocol version 2026-07-28 through 2026_07_28#8272
23a58c0Thanks @fubhy! - AddNetAddress.formatHostandNetAddress.inetAddressFromHostStringfor socket APIs that accept numeric hosts and ports separately, preserving IPv6 scope IDs. AddNetAddress.scopeIdsFromInterfacesto build a scope map for resolving named IPv6 zones from supplied network interface entries without performing operating-system lookups.#8293
feef90cThanks @gcanti! - TreatNeveras an uninhabited branch duringArbitrary.schemaderivation. Schemas with another finite generation path, including optional properties, unions, and empty collections, no longer fail derivation.#8212
755e863Thanks @IMax153! - RestrictByteSize.Inputstrings to canonical non-negative integers with recognized units, rejecting malformed literals at compile time. Parse external strings and fractional quantities withByteSize.fromStringorByteSize.fromStringUnsafebefore passing them to APIs acceptingByteSize.Input.#8228
49e4b37Thanks @lloydrichards! - HonorTool.Strictin 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
InvalidParamson protocols before 2025-11-25 andisError: trueresults on newer protocols.Distinguish validation failures from declared handler failures. Declared failures return
isError: truewithoutstructuredContent: error mode usesError.messageor 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.handleto acceptSchemaAST.ParseOptionsfor parameter decoding. Expose theToolkit.FailureOrigincause annotation and sharedTool.FailureOrigintype, with the same origin available inTool.HandlerResult.failureOriginon returned failures.#8269
9ad9891Thanks @tim-smart! - AddHttpApi.ParseOptionsto configure server and client codecs at the API, group, or endpoint level.Sse.decodeSchemaandChannelSchema.decodeaccept parse options, andSchema.Causeencodes reasons to their wire fields.SSE decoding omits absent IDs, including with default options. Use
Schema.optional(Schema.String)instead ofSchema.UndefinedOr(Schema.String)for IDs. WithonExcessProperty: "error", declareevent(default:"message") and anyid, including inherited IDs.HttpApiSchema.StreamSsedata-mode types and OpenAPI schemas now makeidoptional.#8296
0beded0Thanks @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
2940742Thanks @xia-chao! - Fix repeatedtext,json,arrayBuffer, andurlParamsBodyreads inHttpServerResponse.toClientResponsefor raw WebResponsebodies, preserving the original response for serving.#8270
63c1566Thanks @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: deployanddescription: Deploy:now throwSyntaxError: YAML forbids colons followed by whitespace or end-of-value in plain scalars. Quote these values, for exampledescription: "Use when: deploy".v4.0.0-rc.115Compare Source
Patch Changes
#8196
657254bThanks @gcanti! - Optimize schema initialization while preserving custom constructor options.#8190
f9ef0e9Thanks @javascript-unsafe! - Omit response bodies for statuses 204, 205, and 304 inHttpServerResponse.toWeband the Bun/Deno HTTP adapters, preventing invalid Web responses and hung requests. Cancel omitted rawReadableStreambodies, and finalize request resources without starting omitted Effect streams.#8187
4f73f9eThanks @tim-smart! - Parameterize persistence lookup keys in both SQL backing stores'getManyqueries.v4.0.0-rc.114Compare Source
Patch Changes
#8177
3ff4952Thanks @tim-smart! - AllowEffect.cachedWithTTLto compute the TTL from each completedExit, so successes and failures can use different cache durations.#8164
6d55555Thanks @sam-goodwin! - Keep Node and Bun file stats usable when optional numeric metadata exceeds the safe integer range by returningOption.none()for those fields.#8162
716e0c0Thanks @tim-smart! - Fix published declarations referencing symbols stripped as@internal, which broke consumers compiling withskipLibCheck: false.Effectable.d.tsnow uses the publicEffect.TypeId,Match.d.tsno longer aliases an internalContextualtype,Schema.d.tsships theAnnotationSchemaConstraintalias it references, and the CLI'stoFlagDochelper is marked internal so it no longer leaksParam.getParamMetadata.#8160
d4e4ad5Thanks @gcanti! - FixSchemaRepresentation.toCodeDocumentgenerating invalid TypeScript for optional tuple elements containing unions or nested readonly tuples. Optional element types are now parenthesized, for examplereadonly [(string | number)?]instead ofreadonly [string | number?]. Generated runtime schemas are unchanged.#8158
b1988f4Thanks @gcanti! - FixSchemaRepresentation.toCodeDocumentdropping Struct fields named__proto__from generated schemas. These fields now use computed keys, such asSchema.Struct({ ["__proto__"]: Schema.String }), so the generated schema validates them correctly.#8169
482b7d7Thanks @gcanti! - ImproveSchemaRepresentation.fromJsonSchemaDocumentandfromJsonSchemaMultiDocument:Import
{ not: {} }asSchema.Never(#8137).Import closed records with one
patternPropertiesentry,additionalProperties: false, and no declared or required properties whenpatterns: "apply"is enabled. These were previously rejected.{ "type": "object", "patternProperties": { "^a": { "type": "number" } }, "additionalProperties": false }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
additionalPropertiesis omitted or{}. Patterns can still be combined with a closed object inallOfwhen the result has a finite set of keys. Usepatterns: "ignore"only if you intend to discard the pattern and its value constraints.Reject references inside a subschema with its own
$idinstead of potentially resolving against the wrong definitions. Resolve or flatten these references before importing. A$idon 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
childrefers to the nested numericValue, not the root stringValue. Import now reports that references inside a subschema with its own$idare 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
716e0c0Thanks @tim-smart! - RenameSchema.Annotations.ToArbitrary.ConstrainttoSchema.Annotations.ToArbitrary.FilterConstraint.Code that refers to the previous type name should update its type annotations to use
FilterConstraint.#8181
9941e6dThanks @Ishkirat-Singh! - Makemessageoptional forPrompt.SelectandPrompt.MultiSelect. When omitted, prompts display only the choices and submission shows a tick followed by the selected titles.Prompt.AutoCompletestill requires a message.v4.0.0-rc.113Compare Source
Patch Changes
#7738
49e3901Thanks @kitlangton! - Retain completed tool approval results in non-streaming responses so Chat records them and does not replay approved tools on later turns.#7483
b945dedThanks @tim-smart! - Align runtime type IDs with their module paths. Effect markers now omit legacy grouping prefixes and theunstablepath segment, while OpenTelemetry spans use theOtelTracermodule path. Custom implementations that copy these marker strings must adopt the corrected IDs.#8014
d6422f4Thanks @kitlangton! - FixEffect.allto retain errors and required services from every branch of a union of record inputs.#8095
5a80204Thanks @gcanti! - FixArbitrary.schemato respect applicable index signatures when generating and shrinking object properties, including fixed fields inSchema.StructWithRestand overlapping records.Combine compatible string, number, and bigint constraints during generation so cases such as a
Stringfield constrained by aNonEmptyStringrecord remain productive at size zero. Other intersections are validated and may exhaust the discard budget.#7796
53511efThanks @kitlangton! - FixSchema.ArrayEnsureto preserve array-valued element branches and outer-array encoding cardinality.#8067
79ae49fThanks @purwasadr! - FixAtomRpc.queryreturningneverfor RPCs whose middleware declares servicerequires. The return-type conditional now infers all sixRpctype parameters, matchingmutationand every utility inRpc.#7463
0d083baThanks @tim-smart! - Remove themimeruntime dependency. The neweffect/unstable/http/Mimemodule provides top-level lookup functionsbacked by a vendored standard MIME registry.
#7477
be0f822Thanks @candrewlee14! - Allow sockets to use browser, Bun, and Node WebSocket implementations without consumer casts. Platform constructorsnow support typed opening-handshake headers where available.
#7587
debe8fdThanks @kitlangton! - FixCache.invalidateWhenandScopedCache.invalidateWhendeleting a replacement entry while waiting for an earlier lookup.#7585
a8588f9Thanks @kitlangton! - Fix interruption ofCache.refreshfor a missing key removing a newer value written byCache.set.#7596
f17eb0aThanks @kitlangton! - FixCache.refreshandScopedCache.refreshexceeding 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 inScopedCache.#7595
f30cbfeThanks @kitlangton! - FixCache.refreshfor an initially missing key deleting a newer cached value when the refresh completes with zero time to live.#7614
78cc9c0Thanks @kitlangton! - PreventCachefrom retaining synchronously interrupted lookups.#7563
ccbdbd5Thanks @alvarosevilla95! - Respect custom HTTP header redaction when recording server span attributes.#7254
a63dcbfThanks @gcanti! - Add the experimental Schema-firsteffect/unstable/arbitrary/Arbitrarymodule for native generation withoutfast-check.
Arbitrary.schemaderives an opaque arbitrary from the decoded SchemaType,Arbitrary.sampleEffectprovides interruptible sampling with typed exhaustion, and
Arbitrary.checkEffectreturns structured property results.The initial implementation supports bounded discards, shrinking, replay, and recursive and mutually recursive Schemas.
SampleErrorandExhaustedinclude the effective seed so discarded runs remain reproducible even when the caller didnot provide one.
Arbitrary.isArbitraryidentifies values through the module's nominal protocol. Numeric constraintsretain
NaNwhen it is accepted by their supportedOrder.Numberbounds. Union derivation validatesoneOfexclusivity 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.alloutputs periodically use a null prototype as an edgecase, 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, andArbitrary.allfor composingderived Arbitraries without exposing a second catalog of primitive constructors. Filtering remains bounded and
promotes valid shrink descendants through rejected nodes.
maxShrinksbounds every inspected shrink candidate,including candidates rejected before property evaluation, while retaining the best shrunk input found when the
budget is exhausted.
flatMapprovides deterministic dependent generation, source-first shrinking, post-source PRNGcheckpoints, and one shared residual recursion budget.
allcombines tuples, iterables, and records with a sharedbudget, randomized internal generation order, stable output shape, and independent member shrinking. Arbitrary values
implement
Pipeablefor composition with data-last combinators.Add the experimental Schema
arbitraryConstraintandtoCodecArbitraryannotations and theirSchema.Annotations.ToArbitrarytypes. Declarations can provide a Schema Link optimized for generation, while filterscan 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.isUniqueKeyprovides 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
Equalimplementation already matches their Schema equivalence need no annotation orcompiler special case. This keeps unused common callbacks out of production Schema bundles.
Against the previous layout,
schema-toArbitrarydecreases from 36.68 KB to 33.24 KB gzip andarbitrary-combinatorsdecreases from 37.16 KB to 33.70 KB.schema-toFormatterincreases from 18.92 KB to 19.49 KBand
schema-toEquivalenceincreases from 19.05 KB to 19.39 KB because callers that explicitly derive these capabilitiesnow 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
effectpackage, includingSchema.toArbitraryandeffect/testing/FastCheck. Replace the legacySchema.Annotations.ToArbitrarycallback contract with the nativeSchema-first types. The
effectpackage no longer depends on fast-check.Migrate
TestSchema.Asserts.verifyLosslessTransformationandTestSchema.Asserts.arbitrary().verifyGenerationto thenative 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/vitestproperty tests. Property inputs may combine Schemas and Arbitraries,and are composed directly with
Arbitrary.all; check options are available througharbitrary. Raw fast-checkarbitraries and the
fastCheckoptions object are no longer supported. As with the previous fast-check adapter, thrownexceptions, 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.OrderandBigDecimal.Equivalencewith a shared hybrid comparator. Ordinary scale differencesuse cached, bounded coefficient alignment, while large differences are compared without materializing their decimal
zeroes.
BigDecimal.makenow rejects scales that are not safe integers.Before its removal, the materialized fast-check bridge fixture
schema-toArbitrary-materialized-fast-check.tsmeasured 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.
Uint8ArraysamplesBigDecimalsamplesDateTime.UtcsamplesfilterMapsamplesalltuple samplesallrecord samplesflatMapsamplesflatMapfailure and shrinkingflatMapshrink pathTestSchema, 100 generationsCold 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
b845b18Thanks @tim-smart! - AddStream.catchDefectandChannel.catchDefectfor recovering from defects without catching typed failures or interruptions.#7657
381b794Thanks @kitlangton! - RemoveChannel.runDone; useChannel.runDrainto consume all output and return the completion value.#7989
4ffcaf4Thanks @kitlangton! - Preserve astral Unicode escapes and following arguments inChildProcess.makeandChildProcess.prefixtemplate literals.#8018
ba2fd82Thanks @tim-smart! - Wait for Node child process groups to exit during scoped release andkill.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. WithforceKillAfter, the group receivesSIGKILLat the deadline, followed by a final wait of up to one second. Native timers keep escalation working under aTestClock, and cleanup no longer depends on stdio closing.exitCodeandisRunningremain 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
02be94cThanks @kitlangton! - FixChunkconcatenation to preserve sliced elements.#7453
115d8c2Thanks @gcanti! - Rename the built-inConfigconstructors to PascalCase and renameConfig.mapOrFailtoConfig.mapEffect.Config.ArrayandConfig.Recordnow 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
Configinterface.#8020
1452635Thanks @kitlangton! - EnsureEffect.acquireUseReleasereleases an acquired resource andEffect.useSpanends its span when the use callback throws before returning an effect. The thrown exception remains a defect, but no longer skips cleanup.#8087
77f85feThanks @tim-smart! - usenewinstantiation for streams#7802
a3f2b31Thanks @kitlangton! - Preserve flags and nested commands when completing a CLI subcommand through its alias.#7804
310f8d3Thanks @kitlangton! - Include inherited shared flags in descendant CLI completions.#8086
291d616Thanks @MaxFreedomPollard! - Allow=in values parsed byPrimitive.keyValuePair,Flag.keyValuePair, andParam.keyValuePairineffect/unstable/cli.#7687
48dbbb2Thanks @kitlangton! - Allow optional alternative CLI flags.#8121
b43bfd6Thanks @tim-smart! - Rename CLI constructors to PascalCase, aligning scalar names withSchemaandConfig. This is a breaking change; parsing behavior is unchanged.In
Primitive,Param,Flag, andArgument, capitalize existing constructor names, with these exceptions:integerIntfloatFinitenoneNeverchoiceLiteralsPrimitive.choicebecomesPrimitive.Choice;choiceWithValuebecomesChoiceWithValuewhere available.In
Prompt, capitalize control constructors excepttext→String,integer→Int, andfloat→Number. Rename public typesIntegerOptions→IntOptionsandFloatOptions→NumberOptions. SharedTextOptionsis unchanged.Prompt.Numberretains its existing parser, without a finite-number restriction.In
GlobalFlag, renameaction→Actionandsetting→Setting. Factories and combinators, includingCommand.makeandPrompt.succeed, keep their names.Update public
_tagmatches and completion descriptors:Primitive:"Integer"→"Int","Float"→"Finite","None"→"Never".Completions.FlagTypeandCompletions.ArgumentType:"Integer"→"Int","Float"→"Finite".Sentinels still always fail; their internal parameter name is now
"__never__". Help labels and completion scripts are unchanged.#7685
1c89c78Thanks @kitlangton! - Fix defaulted variadic arguments when omitted.#8059
9bbe1a5Thanks @kitlangton! - Fix CLI wizard handling of negative numbers and other flag values beginning with-.#7489
dd99ab0Thanks @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
8f397edThanks @kitlangton! - FixReply.Replycodecs to require client services when decoding and server services when encoding.#7485
d7ae6b6Thanks @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 alreadydurable 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
8cf1203Thanks @kitlangton! - Fix saved curriedContext.getcalls incorrectly inferring their required service asunknown.#8064
87654c5Thanks @Avaq! - Fix theCookiesErrortag ineffect/unstable/httpfromCookieErrortoCookiesErrorto match the class name.#7621
f05ae0bThanks @kitlangton! - Apply DateTime calendar parts without intermediate overflow.#7884
436f5ebThanks @kitlangton! - FixConfigProvider.fromDotEnvContentsvariable expansion to preserve replacement tokens such as$&in referenced values.#7840
d8ff960Thanks @kitlangton! - FixDurableClock.sleepto preserve explicit0and0nin-memory thresholds.#7941
8766475Thanks @kitlangton! - Require schema encoding services whenDurableDeferred.intorecords an exit.#7750
b64f406Thanks @kitlangton! - Update dynamic tools to advertise replacement parameter schemas aftersetParameters.#7572
4697aaaThanks @tim-smart! - Align CLI help tables by terminal display width for wide, emoji, combining, and zero-width graphemes.#7588
cec6c2dThanks @tim-smart! - Route tool call parameter validation failures through the tool'sfailureModeand dropToolParameterValidationError.toolParams.#7643
9956f0eThanks @tim-smart! - Reduce memory usage in Effect primitives and fibers.Breaking: context-derived
Fiberfields now live underfiber.cache. ThecurrentScheduler,currentSpan,currentLogLevel,currentStackFrame, andcurrentPreventYieldfields are nowscheduler,span,logLevel,stackFrame, andpreventYield. AccessminimumLogLevelandmaxOpsBeforeYieldthroughcacheas well.#7650
5c7eed0Thanks @tim-smart! - Reduce HTTP serverConfiguration
📅 Schedule: (UTC)
🚦 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.
This PR was generated by Mend Renovate. View the repository job log.