effect@4.0.0-rc.118
Pre-releasePatch Changes
-
#8367
f75468aThanks @Marve10s! - AddArbitrary.configureGlobalto set default options for property checking and sampling, including the run count used by@effect/vitest. Explicit per-call options take precedence; passing an empty object restores the built-in defaults. -
#8543
34cc788Thanks @front-depiction! - Fix missed updates through staleAtomRegistrynodes, premature dependency release, leaked superseded builds, and failed observed builds that never recover. -
#8421
eb02cbbThanks @danieljvdm! - DeferAtom.swrstale refreshes until after reads, skipping them if the source becomes fresh or the atom is disposed. One-shot unmounted reads no longer refresh stale sources after disposal. -
#8534
4bb949eThanks @tim-smart! - Check identity authorization before resolving unencrypted event-log session bindings -
#8353
b409e3fThanks @tim-smart! - MakeEffect.awaitAllChildreninterruptible while it waits for child fibers. -
#8510
4093507Thanks @tim-smart! - FixCache.getretaining zero-TTL lookup results, which could evict live entries. -
#8339
325e0fbThanks @tim-smart! - Add data-last forms for selected safe Queue operations and selected Option, TxSemaphore, and AsyncResult APIs -
#8503
e54211aThanks @marbemac! -Cause.prettyandCause.prettyErrorsnow restoreError.stackTraceLimitwhen formatting an error throws, instead of leaving it at1for the rest of the process. -
#8413
0c6c2deThanks @front-depiction! -Cause.squashno longer allocates intermediate arrays to pick the first failure or defect. -
#8371
cdeccc7Thanks @front-depiction! - Fix asymmetricChunk.makeEquivalencecomparisons on sparse arrays. Avoid redundant copies inChunkandArray.dedupeWith, and balanceChunk.flatMapconcatenations. -
#8504
254fcc1Thanks @IMax153! - Fix the CLI lexer to treat negative numbers such as-3.70as values instead of short options, so--lon -3.70parses correctly -
#8474
bd14b64Thanks @tim-smart! -Scope.closeUnsafenow requires aScope.Closeable, matchingScope.close. Use a scope created byScope.makeorScope.fork; a plainScope.Scopecannot be closed directly. -
#8473
37064fdThanks @tim-smart! -Scope.closenow requires aScope.Closeable. Use a scope created byScope.makeorScope.fork; a plainScope.Scopecannot be closed directly. -
#8542
702c34eThanks @Marve10s! - Avoid retaining completed request ids whenMessageStorageis disabled. Without storage, redelivering a completed request id now runs the request again instead of failing withAlreadyProcessingMessage. -
#8454
7ef0ce6Thanks @front-depiction! - Delay copying a derived Context's base until it has been read at least as many times as its size (with a minimum of eight), avoiding full copies for short-lived contexts. -
#8339
325e0fbThanks @tim-smart! -TxPriorityQueue.fromIterable(order)(iterable)passed its arguments to the implementation in the wrong order and produced a queue ofundefinedvalues; the data-first form was unaffected. -
#8414
cdec5efThanks @front-depiction! - Cache named time zones by the requested id as well as the Intl-resolved id, avoiding repeated formatter construction for aliases. Zones still report the Intl-resolved id. -
#8386
f9179cbThanks @front-depiction! - Clean up rendered error stacks for common Effect callbacks and avoid per-step closure allocations in several combinators on V8.Effect.flatMapcallbacks now receive only the value, without internal fiber/exit arguments or an internalthisreceiver. -
#8442
c760e1eThanks @front-depiction! - Avoid allocating a closure context for each struct property and array element during sequential Schema traversal. -
#8354
1b4461eThanks @tim-smart! - Move unstable modules fromeffect/unstable/*toeffect/*and remove the old export paths. Drop theunstablesegment from imports. These APIs remain@stability unstable.Move
Arbitraryto the top level and update@effect/vitestto use the new entrypoint. Replace imports fromeffect/arbitraryoreffect/arbitrary/Arbitrarywithimport { Arbitrary } from "effect"orimport * as Arbitrary from "effect/Arbitrary". -
#8362
5709ef6Thanks @xia-chao! - Add type guards forHttpBodyError,CookiesError,MultipartError, andNdjsonError. -
#8475
6b84149Thanks @mugnivenko! - AnnotateConfig.failreturn type asConfig<never>, so it composes withConfig.orElsewithout widening the result toConfig<unknown> -
#8469
508c70bThanks @Marve10s! - HonorstartImmediately: falseinFiberHandle.run,FiberMap.run, andFiberSet.run. -
#8443
382992fThanks @front-depiction! - Reduce the memory each fiber retains: the type brand now lives on the prototype,Effect.callbackno longer binds its registration, andFiber.joinAllno longer keeps a cancel closure per joined fiber. -
#8427
83d7c95Thanks @front-depiction! - Preserve the original failure or interruption when anonExitfinalizer throws synchronously. -
#8535
6bf2eb7Thanks @BleedingDev! - BuildFindMyWayroute params withoutnew Function, avoiding string code generation in environments with CSP restrictions. -
#8556
ccade14Thanks @Marve10s! - Process atom writes queued by batch commit listeners instead of dropping them. -
#8150
b8d14d3Thanks @Tyagiquamar! - FixFormatter.formatJsonto includenameandmessageand preserve enumerable properties when stringifyingErrorinstances withouttoJSON.import { Formatter } from "effect" Formatter.formatJson(new Error("boom")) // now `{"name":"Error","message":"boom"}`, previously `{}`
-
#8359
8fca194Thanks @gcanti! - FixNumber.remainderfor decimal operands whose scaled coefficients exceed the safe integer range, preserving the exact value of integer operands. This also preventsSchema.isMultipleOffrom accepting or rejecting large values incorrectly. -
#8459
34e09beThanks @gcanti! - Align JSON Schema imports with Unicode string semantics by counting code points for string length keywords and applying regular expression patterns in ECMAScript Unicode mode. -
#8415
97afa37Thanks @front-depiction! - Reduce allocations inGraphtraversals:neighbors/successors/predecessorsdeduplicate without an intermediateSetfor typical degrees, andunweightedDistances,astarandallShortestPathsno longer allocate a closure or predecessor record per visited node or relaxation. -
#8360
321bae6Thanks @tim-smart! - Improve hash composition, number hashing, cyclic equality, native collection comparison, andHashMaphashing. Fix invalid caches and referentialMutableHashMaplookups. Hash values may change. -
#8572
fb718d3Thanks @tim-smart! - Add per-slotHttpApiparse options for params, query, headers, payload, success and error codecs. Each slot falls back toParseOptionswhen unset. SetHeadersParseOptionsto{}to keep strict body parsing without rejecting transport headers. -
#8477
ccd3440Thanks @tim-smart! - Build eachHttpRouterentrypoint with a fresh router in a forked layer memo map. Routes on separate servers and handlers no longer leak into each other.Breaking changes:
- Routes registered on a router provided by the app itself (for example, via
Layer.provide(HttpRouter.layer)) are not served; the entrypoint serves its own router. For RPC, put the protocol and its handlers in the app passed toserve, for exampleHttpRouter.serve(RpcLayer.pipe(Layer.provideMerge(RpcServer.layerProtocolHttp({ path: "/rpc" })))). - Layers first built inside an entrypoint are private to it. Providing the same stateful service to both the app and a sibling layer can build it twice depending on build order. Provide services that must be shared outside the entrypoint; services already built in the parent memo map are reused.
- Routes registered on a router provided by the app itself (for example, via
-
#8385
107dbecThanks @front-depiction! - Fix interruptedLayermemoization so waiting and later requesters receive the interrupted build's exit instead of hanging, and shared layers are released when scopes close. CorrectMemoMap.getobserver accounting for effects run twice or never run. -
#8511
af510e8Thanks @tim-smart! - SkipLayerMappreloading for keys with a zero idle TTL. With the default TTL, preload failures now surface on first use; set a non-zeroidleTimeToLiveto retain eager validation. -
#8453
537cd82Thanks @front-depiction! - Reduce allocations peryield*inEffect.gen,Option.genandResult.gen, and perEffect.fncall.Utils.SingleShotGennow serves as its own completion result and is no longer anIterableIterator: it only implementsnext, and itsselffield has been removed. -
#8512
ff554aeThanks @tim-smart! - RunScope.closefinalizers uninterruptibly so interruption cannot abandon remaining cleanup, including when closing aManagedRuntime. -
#8528
9a5a383Thanks @tim-smart! - Wait for managed fibers and their cleanup to finish before releasing layer resources when disposing aManagedRuntime. -
#8439
d2f3547Thanks @front-depiction! - Stop allocating closures on everyEffect.matchandEffect.matchCausecall. -
#8507
25d9e47Thanks @IMax153! - Clarify theMcpServer.toolkiterror when a tool's parameters are not an object schema. -
#8505
372a45dThanks @IMax153! - Fix stdio MCP servers rejecting pings before initialization when a stateful protocol is configured, including when a stateless protocol is listed first. These pings now return an empty result without creating a session. -
#8508
5e9fd25Thanks @IMax153! - Report all parameter validation errors for MCP tools in a single response, including missing or invalid fields and, for strict tools, unknown keys. -
#8465
c85c8c3Thanks @izakfilmalter! - Preserve tool annotation titles in MCPtools/listresponses for the 2025-06-18 and 2025-11-25 protocol revisions, alongside the top-level title and behavioral hints. -
#8552
b501557Thanks @Floriferous! - Report declared MCP tool failures with empty messages using their encoded value. Handler execution errors now returnisErrorresults on protocol version 2025-11-25 and-32603 Internal erroron older versions, instead of-32602 Invalid params. -
#8380
35ef06cThanks @front-depiction! - FixMetricseries key collisions, duplicate series for empty attributes, and updates lost after a registry is cleared. Reuse series keys when contextual attributes are unchanged. -
#8420
d6cc5d9Thanks @danieljvdm! - Emit parts buffered while reading a multipart file before pulling more input. -
#8450
83b7b1fThanks @front-depiction! - FixMutableList.prependAllwith empty input corrupting the list and breaking subsequent takes or appends. -
#8447
f05fe36Thanks @front-depiction! - Release consumed slots in a growingMutableListbucket, and pass list indices rather than bucket offsets toMutableList.filterpredicates. -
#8448
1fd49d4Thanks @front-depiction! - FixMutableList.takeNleaving a drained bucket at the head when it stops at a bucket boundary. This also preventsQueue.takeNfrom making subsequent messages inaccessible after anofferAllboundary. -
#8340
c79088dThanks @fubhy! - Add family-aware internet address and multicast interface types toNetAddress -
#8407
0cbb457Thanks @tim-smart! - StoreNetAddressIPv4 and IPv6 addresses as numbers instead of aUint8Array, making construction,EqualandHashcheaper, especially on Deno. -
#8545
8202a6eThanks @hsyntax! - Mark OpenAPI parameters and response headers as optional when their encoded key is optional, such as keys usingSchema.withDecodingDefaultKeyorSchema.withDecodingDefault. Generated documents previously marked these keys as required, even though they can be absent on the wire. -
#8547
8d070c3Thanks @gcanti! - Generate OpenAPI parameters and response headers from their encoded object representation while preserving property annotations. -
#8551
0cf7655Thanks @hsyntax! - Preserve encoded string literals and exportable checks such aspatternin OpenAPI schemas forHttpApiSchema.asText()bodies. Text bodies keep their string type even when their schemas are opaque or referenced components. -
#8522
d470d54Thanks @FNDEVVE! - Drain OTLP export response bodies before completing or retrying each request. -
#8395
2121472Thanks @tim-smart! - Prevent lost permits when a partitioned semaphore acquisition is interrupted, and keep competing immediate takes from acquiring the same permit. -
#8558
4113bc7Thanks @fe-franco! - Fail@effect/sql-pgtransactions when PostgreSQL returnsROLLBACKforCOMMITafter a caught statement error.SqlClient.makeaccepts a commit effect so drivers can inspect the result. -
#8468
a41a441Thanks @lloydrichards! - In MCP protocols that omit stringstructuredContent, return plain text for toolkit and hand-written tool results whose single text block is an exact JSON mirror of that string. -
#8337
3af6bd0Thanks @mugnivenko! - Add PlatformError.isPlatformError guard -
#8502
67ee3b8Thanks @elizabethcheng! - Use a consistent row-lock order for PostgreSQL shard lease acquisition, refresh, and bulk release whenshardLockDisableAdvisoryis enabled. -
#8540
e8df3d8Thanks @Marve10s! - Treat anInfinitycapacity passed toPubSubas unbounded. -
#8345
1dbc4c3Thanks @xia-chao! - AddPubSub.isPubSub, matchingQueue.isQueueandTxPubSub.isTxPubSub. -
#8449
80d5adbThanks @front-depiction! - Fix a race where interrupting a waitingPubSubsubscriber could swallow a later message, or interrupting a backpressured publisher could still publish when space became available. -
#8569
aa430d8Thanks @tim-smart! - Batch takes drain remaining messages when a queue closes, even below the requested minimum. Later takes receive the terminal error. -
#8568
24f7d32Thanks @tim-smart! - Withdraw pendingQueue.offerandQueue.offerAllvalues when their producer is interrupted afterQueue.endorQueue.fail. The queue can finish closing once those offers are withdrawn. -
#8412
f4dd1aeThanks @front-depiction! - Fix lost wake-ups inQueuewhen a fiber yields between checking for a message or capacity and registering its waiter.Queue.offeron a zero-capacitydroppingqueue now hands the message to a waiting taker, matchingofferUnsafeandofferAll. -
#8472
0981d01Thanks @tim-smart! - Fix Queue takers missing offers that arrive while they are registering. -
#8514
0a29ca6Thanks @tim-smart! - Retry failed background pool acquisitions when borrowed, rather than passing stale errors to later queries. Callers awaiting their own failed connection still receive its error. -
#8397
17810b4Thanks @tim-smart! - Close the interruption gap before scope and cache cleanup registration. -
#8365
62b2ea9Thanks @tim-smart! - Rename the HTTP API entry point fromeffect/httpapitoeffect/http-apiand remove the old export path. Runtime TypeIds under~effect/httpapi/*, service keys undereffect/httpapi/*, and the reservedeffect/httpapi/stream/failureSSE event name now usehttp-apias well. -
#8378
4e4fa8bThanks @gcanti! - Rename range checks so their subject comes last:Schema.isBetweenLength,Schema.isBetweenCodePoints,Schema.isBetweenSize, andSchema.isBetweenProperties. Also rename the string checks to the grammaticalSchema.isStartingWith,Schema.isEndingWith, andSchema.isIncluding. Update the correspondingSchemaRepresentation.*Reviverexports and persistedeffect/schema/...check IDs to use the new names. -
#8533
3495bd8Thanks @tim-smart! - Keep the source result type for Effect.repeat with times or schedule, even when while or until is a refinement. Bounded repetition may finish before the predicate stops it, so callers relying on the previous narrowed type must check the result. -
#8390
b3032f0Thanks @front-depiction! - Fix interrupt-time resource leaks:Pool.get,Pool.useandRcRef.getregister cleanup before they can be interrupted.RcRefandRcMapfinish closing expired resources even if their idle fibers are interrupted.ScopedRefcloses in-flight replacements with their owner.make,fromAcquireandsetnow interrupt if the owning scope has closed.
-
#8541
d26a913Thanks @Marve10s! - Skip malformed ndjson lines and non-object JSON-RPC messages so later requests still decode. Handle non-string notification methods without throwing. -
#8437
93f826aThanks @front-depiction! - StopEffect.map,Effect.tap,Effect.exit,Effect.matchandEffect.matchCauseallocating a successExiton every step. -
#8519
330b747Thanks @tim-smart! - AddSchedule.once, a schedule that recurs immediately once and outputsvoid. -
#8441
b808b5dThanks @front-depiction! - Skip generator allocation for synchronous array and tuple parsing. -
#8440
2575fccThanks @front-depiction! - Avoid rebuilding the parser wrappers on everySchemaParser.assertscall. -
#8364
287273cThanks @gcanti! - AddSchema.isMinCodePoints,Schema.isMaxCodePoints, andSchema.isBetweenCodePointsto validate string lengths by Unicode code point count, with JSON Schema export, representation revivers, and arbitrary generation support. -
#8430
0860c0cThanks @front-depiction! - Speed up schema decoder generation for deeply nested schemas. -
#8451
8d27554Thanks @front-depiction! - Speed up Schema code generation for nested schemas, especially when a child cannot be generated. -
#8429
c2e810cThanks @front-depiction! - Memoize recursiveSchema.toEquivalencecompilation and remove unused path tracking, reducing work and retained memory for deeply nested values. -
#8423
35ecbb9Thanks @fml09! - Ignore non-enumerable own properties when checking schema excess properties, allowingSchema.TaggedErrorresponses to encode under strictHttpApi.ParseOptions. Symbol index signatures now skip non-enumerable entries during decoding and encoding, matching string index signatures; make those properties enumerable or declare them explicitly in aStructto retain them. -
#8436
b442528Thanks @front-depiction! - FixSchema.toFormattercompiling a recursive schema again at every nesting level of the formatted value. -
#8482
16623c7Thanks @gcanti! - ImproveSchema.toJsonSchemaDocumentexport of built-in checks. String code-unit length checks now use safe code-point bounds, regex and literal checks avoid patterns that would reject accepted values under Unicode matching, and cardinality checks reject non-finite bounds instead of emitting invalid schemas. Custom check exporters can mark a fragment as approximate by returning[schema, true];oneOfthen falls back toanyOf, and approximate record-key patterns are not used aspatternPropertiesselectors.Built-in checks whose exported constraints can be looser than their runtime checks, including approximations that predate this change:
Check Approximation Change in this PR isPatternThe default applies to direct isPatternchecks: the pattern is omitted unless the RegExp uses the Unicode flag and its other flags ared,g, ory. Sticky patterns are anchored at the start. Built-in checks may override the default when their Unicode semantics are known to be safe or intentionally loose.Updated export and approximation metadata. isStartingWithA trailing high surrogate is removed from the exported prefix; if nothing remains, the pattern is omitted. Other prefixes retain an exact pattern. Updated export. isEndingWithA leading low surrogate is removed from the exported suffix; if nothing remains, the pattern is omitted. Other suffixes retain an exact pattern. Updated export. isIncludingA leading low surrogate or trailing high surrogate is removed from the exported substring; if nothing remains, the pattern is omitted. Other substrings retain an exact pattern. Updated export. isMinLengthOn strings, the exported minimum is Math.ceil(minLength / 2)code points. Bounds of 0 and 1 are exact; array bounds are unchanged.Updated export; rejects non-finite bounds. isMaxLengthOn strings, the exported maximum counts code points rather than UTF-16 code units. A bound of 0 is exact; array bounds are unchanged. Updated type and union handling; rejects non-finite bounds. isBetweenLengthOn strings, combines the lower- and upper-bound approximations above. Array bounds are unchanged. Updated export; rejects non-finite bounds. isUppercased,isLowercasedPatterns exclude only ASCII letters of the opposite case. Non-ASCII characters that change under JavaScript casing can still pass JSON Schema validation. Marked as approximate. isCapitalized,isUncapitalizedPatterns exclude only ASCII letters of the opposite case at the start. Non-ASCII characters that change under JavaScript casing can still pass JSON Schema validation. Marked as approximate. isIntExports type: "integer"without the safe-integer bounds required by the runtime check.Marked as approximate. isMinProperties,isMaxProperties,isBetweenPropertiesCounts match for parsed JSON objects, but JSON Schema property-count keywords do not constrain arrays, which these object-typed checks can also receive. Rejects non-finite bounds and tracks non-object use. isPropertyNamesInherits any approximation in the key schema. JSON Schema's propertyNamesalso does not constrain array keys.Propagates approximation from the key schema. isMinSize,isMaxSize,isBetweenSizeThe size constraint is omitted. Rejects non-finite bounds and marks omission approximate. isUniqueKeyUniqueness of tuple keys is omitted. Omission is now tracked as approximate. Comparison and range checks for Date,BigInt, andBigDecimalTheir bounds are omitted from JSON Schema export. Omission is now tracked as approximate. Length checks on objects with a
lengthproperty also omit that constraint. Code-point checks map directly to JSON Schema length bounds and are not approximate on strings; this PR adds rejection of non-finite bounds to those checks as well. -
#8435
5521209Thanks @front-depiction! - Build the detailed traversal for structs without index signatures only when needed, avoiding unused parser allocations under default parse options. -
#8434
477394dThanks @front-depiction! - Split compiled tuple rest elements once per schema instead of on every equivalence or formatter call. -
#8428
3036241Thanks @front-depiction! - Stop Schema unions rebuilding their runtime-type candidate list on every decode. The list is now built once per union and reused. -
#8418
ca422fdThanks @front-depiction! - Run all scope finalizers even when one throws synchronously, and preserve the original failure when closing the scope. -
#8457
4f5f866Thanks @front-depiction! - Forked scopes detach from their parent on close, even if cleanup throws or is interrupted, without a bookkeeping finalizer. The readonlyScope.parentfield exposes the parent scope. -
#8396
54ff4f2Thanks @tim-smart! - SharedScopedCachelookups survive individual caller interruption. If the last waiter leaves while a lookup is pending, it is interrupted and its scope closed. Missing-key lookups, includingrefresh, now run in daemon fibers likeCache, so children forked by a lookup end with it rather than with the caller. -
#8488
c8a9f85Thanks @gcanti! - - AllowConfig.withDefaultandConfig.optionto recoverConfig.allgroups with missing children even when other children have values. Validation and source errors still propagate. A group default replaces the entire group; put defaults on individual children to preserve supplied values, or useConfig.schema(Schema.Struct(...))to reject incomplete objects.- Make
Config.orElseadopt the fallback's result, allowing a later default or option to handle an absent fallback even after invalid input was recovered. - Return
NoneforShardingConfig.runnerListenAddresswhenlistenHostis absent andlistenPortis valid. SupplylistenHostto configure the listen address.
- Make
-
#8433
0c0aa5eThanks @front-depiction! - Avoid redundant context lookups for the tracer and tracing-enabled flag when creating spans. -
#8356
d426febThanks @tim-smart! - Split the encoding API intoeffect/encoding/Base64,effect/encoding/Base64Url,effect/encoding/Hex, andeffect/encoding/EncodingError. The formereffect/Encodingmodule has been removed; migrate each helper to its format module and use the shared error entrypoint to name or narrow encoding failures.Two migrations need special attention:
randomHexis nowHex.random, and the runtime value ofEncodingErrorTypeIdchanged from~effect/Encoding/EncodingErrorto~effect/encoding/EncodingError. -
#8529
2a8f5c7Thanks @tim-smart! - Roll back SQLite transactions left open by a failed COMMIT, such as a deferred foreign key violation, so the connection can be reused. -
#8445
6332de2Thanks @front-depiction! - Keep long chains ofStream.concatlinear in their length. -
#8416
c00c8ffThanks @front-depiction! - FixStream.foreverandStream.repeatslowing down and retaining pull layers with each repetition by using a constant-depth loop. -
#8411
aa7de26Thanks @front-depiction! - Fix concurrentStream.mapEffecthanging when the mapping function throws synchronously. Run the function inside its forked fiber so the throw is reported as a defect. -
#8410
6f44ca0Thanks @front-depiction! - FixStream.broadcast,Stream.broadcastN,Stream.shareandStream.toPubSubTakesubscribers that never end.The upstream's exit was published as an ordinary message, so a subscriber that arrived after it, or whose bounded
droppingPubSub was full, waited forever. The newPubSub.endends a PubSub with a final message that every subscriber, current or future, receives after draining its buffered messages, and the broadcast operators now use it for the exit. -
#8405
98792c3Thanks @tim-smart! - Add aprobabilityPrecisionoption toDecisionModel.makethat accepts and rescales the sum drift caused by a provider rounding each probability. OpenRouter and TypeSafe decision models set it to two decimals, so rounded distributions such as0.02 / 0.93 / 0.04no longer fail withInvalidOutputError. Providers that do not opt in keep strict sum validation. -
#8531
1f76040Thanks @tim-smart! -Toolkit.handlenow requires tool handler services on the outer Effect as well as the returned Stream. If a parameter decoder needs a service, provide it when running the outerhandleEffect, not only when consuming the Stream. -
#8530
cf7cfd6Thanks @tim-smart! - ExposeAiErrorin the error type of streams returned byToolkit.handlein return mode. Result-encoding failures already fail the stream at runtime; consumers that treated the extracted stream as infallible must handle or propagate that error. -
#8387
6bc0eeeThanks @front-depiction! - End tracing spans and restore fiber context when interruption occurs as a traced region starts. EnsureHttpMiddleware.tracerends its span on interruption. -
#8370
88b79d7Thanks @front-depiction! - BuildMimelookup tables on first lookup so bundlers can drop the MIME data when no lookup is used. -
#8361
db7b69eThanks @xia-chao! - AddisNonEmptypredicates toTxHashSet,TxPubSub, andTxQueue. -
#8452
43bbb25Thanks @front-depiction! - FixEffect.txnever committing aTxRefwrite of-0over0, and only wake retry waiters for refs a transaction wrote, not refs it only read. -
#8372
6ecd4b3Thanks @front-depiction! - FixEffect.txRetryblocking forever when aTxRefthe transaction read was changed by another commit while the transaction was suspended. The transaction now reruns immediately instead of waiting for a later change. -
#8348
7b81a95Thanks @xia-chao! - AddTxChunk.isTxChunk, a type guard forTxChunkvalues. The other transactional data types already expose an equivalentisTx*guard. -
#8446
dd8990bThanks @front-depiction! -TxPriorityQueue.offerAllmerges new values into the sorted queue instead of re-sorting existing values. -
#8334
19835f2Thanks @nikelborm! - AddedConfig.flatMap -
#8455
1a3eb9eThanks @henningpokriefke! - Derive workflow execution IDs from a length-prefixed workflow tag and idempotency key.