Patch Changes
-
#8870
26c1089Thanks @Makisuo! - Update AI tracing to use current OpenTelemetry GenAI conventions:- Replace
gen_ai.systemwithgen_ai.provider.name. Thesystemoption,BaseAttributesandWellKnownSystemare removed in favor ofprovider: { name },ProviderAttributesandWellKnownProviderName. - Remove
gen_ai.token.type, which is not a span attribute in the current conventions, along with thetokenoption,TokenAttributesand theAllAttributestypes. LanguageModelspans are client spans and recordgen_ai.output.type(textorjson) for every provider. The OpenAIresponseFormattelemetry option andWellKnownResponseFormatare removed.- Move OpenAI service-tier and system-fingerprint attributes from
gen_ai.openai.*toopenai.*. - Rename
concurrency,toolChoiceandobjectNamespan attributes toeffect.ai.concurrency,effect.ai.tool_choiceandeffect.ai.object_name. Tool choices record the resolved value, defaulting to"auto"; object choices are JSON-encoded. - Include cached tokens in Anthropic
gen_ai.usage.input_tokensand report cache reads and writes asgen_ai.usage.cache_read.input_tokensandgen_ai.usage.cache_write.input_tokens. The duplicate AnthropiccacheCreationInputTokensandcacheReadInputTokensresponse options are removed.
- Replace
-
#8849
6c59de7Thanks @gcanti! - Fix Arbitrary property checks, schema generation, and shrinking swallowing defects or interruption when they accompany typed failures. Propagate the defect and interruption reasons with their annotations, removing typed failures from mixed causes to preserve the existing error types. -
#8760
467d3acThanks @fubhy! - Include runtime layer errors in the result type ofAtomRuntime.subscriptionRef. -
#8820
375c1b0Thanks @jarrednorrisdev! - Preserve the URL hash and omit empty query strings when writingAtom.searchParam. -
#8771
45a70ceThanks @jarrednorrisdev! - PreventAtom.windowFocusSignalandAtom.refreshOnWindowFocusfrom throwing whenwindowis undefined. -
#8837
fb757e3Thanks @tim-smart! - Fix a Cache.get interruption race that could leave an abandoned lookup running and its key stuck in the cache. -
#8778
716e358Thanks @fubhy! - Fix a stack overflow when many consecutive failure handlers throw synchronously. The thrown defect is now captured as the fiber's exit and pending finalizers still run. -
#8838
af114e6Thanks @tim-smart! - DeriveChannel.decodeTextoptions from theTextDecoderconstructor so declarations work with Node-only types without requiring the DOM library. -
#8758
d0b3862Thanks @fubhy! - FixChannel.mapInputdata-last overload to preserve channel requirements and add the mapping function's requirements. -
#8757
7064da9Thanks @fubhy! - FixChannel.runIntoPubSubto include the channel's error type in the returnedEffect. -
#8810
eee0eebThanks @fubhy! - Fix compiled Struct parsers sharing mutable output when the same suspended Effect is executed more than once. -
#8808
b9d6581Thanks @fubhy! - Preserve provider defects and interruption reasons during Config parsing, and prevent Config.orElse from recovering mixed causes. -
#8877
7a721ceThanks @jayhemnani9910! - Preserve separators insideConfig.Recordvalues, including base64 padding in OTLP headers. -
#8832
a0cb4c2Thanks @tim-smart! - Add image input toDecisionModel.decide. Providers opt in withsupportsImages: trueand receive images throughProviderOptions.images. Models without image support reject nonempty image input withInvalidUserInputError. -
#8765
3cb395eThanks @fubhy! - FixExecutionPlanto preserve errors and service requirements from layers, predicates, and schedules across fallback steps. Provide captured services to schedules when usingcaptureRequirements. -
#8770
540ecd1Thanks @fubhy! - Tag every module and directly importable export with an explicit@stability.@stability stablefollows strict semver, and@stability unstablemay receive breaking changes in minor releases. -
#8814
aefe05aThanks @fubhy! - Fix Map and Set schema equivalences incorrectly treating proper subsets as equal. -
#8804
c381fbcThanks @fubhy! - Fix stack overflow when many equal requests share a pendingRequestResolver.withCacheentry. -
#8805
c6f2179Thanks @fubhy! - Allow interruption while waiting for permits or locks in TxSemaphore and TxReentrantLock helpers, while preserving automatic release after acquisition. -
#8586
0aeb7fdThanks @Marve10s! - Allow spans without an Effect parent to inherit active OpenTelemetry spans created outside Effect. -
#8799
2fbecc8Thanks @fubhy! - Preserve finalizer defects inEffect.repeatandEffect.schedule. PreventEffect.retryfrom retrying failures containing defects or interruptions. -
#8753
7095539Thanks @jayhemnani9910! - FixToml.parseto trim an immediate opening CRLF in basic and literal multiline strings, matching its existing LF handling. -
#8752
46b75b1Thanks @jayhemnani9910! - FixYaml.parseblock scalar chomping to preserve trailing line breaks with keep (|+,>+) and avoid adding line breaks to empty or unterminated scalars. -
#8815
99b6b45Thanks @fubhy! - Fix Array concatenation reducers sharing mutable empty results across calls and reducer instances. -
#8811
e4cb9f1Thanks @fubhy! - Fix Standard Schema and Standard JSON Schema adapters to use the child schema rather than an inherited parent adapter. -
#8792
2e03688Thanks @fubhy! - FixStream.peeldropping the sink's unconsumed elements from a partially consumed chunk. -
#8809
b817ebeThanks @fubhy! - Fix suspended Schema union parsers reusing successes and issues when the same decode or encode effect is run again. -
#8742
4153144Thanks @wouter173! - Fix the data-last overload ofAsyncResult.flatMapto correctly infer a changed success type. -
#8830
2b3c63cThanks @devangpratap! - FixHttpClientretaining unread responses on runtimes withoutFinalizationRegistry, such as Hermes. -
#8772
bd00773Thanks @juliusmarminge! - ReadHttpClientResponse.cookieson platforms whoseHeadershas nogetSetCookie, such as React Native, instead of throwing. -
#8873
146e86aThanks @tim-smart! - Align HTTP tracing span names, response error status, server addresses and ports with OpenTelemetry conventions. Make header capture opt-in and export homogeneous primitive arrays as array attributes in@effect/opentelemetry. -
#8759
44defadThanks @fubhy! - FixHttpServerserviceserveto infer required services from the middleware-transformed app. -
#8821
22d6f4dThanks @Makisuo! - MarkHttpMiddleware.tracerserver spans as failed for 5xx responses, including rendered errors, without changing the application exit or existing span failure causes. -
#8852
7d8d497Thanks @effect-bot! - Report the101status of a successful WebSocket upgrade to server middleware such asHttpMiddleware.loggerandHttpMiddleware.tracer, instead of the handler's discarded response status. -
#8767
98a5ed7Thanks @fubhy! - FixHttpApiClientandAtomHttpApiresult types for union response modes while preserving decoded-only results when the mode is omitted. -
#8858
d350f8eThanks @jayhemnani9910! - FixHttpApirejecting single-value array fields in form-urlencoded and GET payloads. -
#8834
bd96be0Thanks @tim-smart! - Return 500 and report HTTP API response encoding failures to ErrorReporter, while keeping request decoding failures at 400 and unreported. Preserve response failures as HttpApiSchemaError values for schema-error middleware. -
#8875
f6af4b6Thanks @tim-smart! - expose more of the atom registry apis -
#8836
7234786Thanks @tim-smart! - Cache the Kubernetes service-account token for one minute so K8sHttpClient picks up rotated credentials without reading the token file on every request. -
#8773
1f74b62Thanks @juliusmarminge! - Add opt-inallowSessionTerminationtoMcpServer.layerHttp. DELETE ends the session and interrupts its active requests; later requests with that session id return404.Fix an RPC cancellation race by registering request fibers before their handlers run.
-
#8775
42763ceThanks @RhysSullivan! -McpServer.layerHttpuses the negotiated protocol version when a session request omitsMCP-Protocol-Version. Unsupported or mismatched protocol versions, missing requiredMCP-Session-Idheaders, andinitializerequests with a session header now return JSON-RPC error bodies. -
#8842
5630677Thanks @brandon-julio-t! - Fix MCP toolkit registration to require tool handler and schema services. -
#8864
a0e1b87Thanks @Makisuo! - Leave interrupt-only spansUnsetwith aneffect.fiber.interrupted: trueattribute instead ofOkwith an "Interrupted" description and thespan.label/status.interruptedattributes. Successful spans keepOk; failures keepErrorand their exception events.Cause.prettyErrorsno longer captures an internal stack frame for non-object failures such asEffect.fail("boom"); the stack is now the message plus the span frame, when available. This affects theexception.stacktraceexported by both tracers and the output ofCause.pretty. -
#8868
f5716adThanks @Makisuo! - Align OTLP and@effect/opentelemetrylogs, traces, and resources with OpenTelemetry conventions. -
#8869
26931d0Thanks @Makisuo! - OtlpMetrics exports each summary as one OTLP Summary metric named<id>instead of<id>_quantiles,<id>_countand<id>_sumSum metrics. Summaries are always cumulative. Common unit names such asmillisecondsare mapped to UCUM, and bigint values beyond 2^53 keep their precision. -
#8756
972c80fThanks @creatifcoding! - Fix PostgreSQLSqlEventJournalwrites by storing entry and remote IDs asBYTEA, and decodeBIGINTtimestamps returned as strings or bigints.Existing tables with
UUIDcolumns are not migrated automatically. Recreate both journal tables only after confirming they are empty, or externally migrateid,remote_id, andentry_idtoBYTEAwhile preserving existing data. -
#8762
efebfa9Thanks @fubhy! - Include completion-handler services in the requirements ofMcpServer.registerPromptandMcpServer.prompt, including optional handlers. -
#8819
a3b4cf3Thanks @mikearnaldi! - Prevent message loss whenQueue.take,takeAll,takeN,takeBetween,poll, andclearare interrupted at a scheduler yield. -
#8816
3ed997bThanks @fubhy! - FixChannel.mergehanging or succeeding when a side finalizer fails, preserving both usage and finalizer failures. -
#8798
7b396bdThanks @fubhy! - FixChannel.mergeAlland concurrentChannel.flatMapdropping inner scope finalizer defects, preserving both usage and release failures. -
#8800
c07c144Thanks @fubhy! - FixCron.nextreturning past occurrences or exhausting its search limit when starting in a repeated DST interval. -
#8777
8903b68Thanks @fubhy! - Fix child fibers reusing completed transaction journals so later transactions commit their writes. -
#8784
a84aa4eThanks @fubhy! - Fix FiberHandle losing ownership of fibers started by a synchronous replacement finalizer. -
#8782
88917ebThanks @fubhy! - FixFormatter.formatJsonredaction of getter-returned values withtoJSONwithout invoking getters twice. -
#8776
50a5686Thanks @fubhy! - FixEffect.effectifyso throwing error mappers become defects instead of escaping asynchronous callbacks and leaving fibers suspended. -
#8789
c419a0eThanks @fubhy! - Fix stack overflows when PartitionedSemaphore hands permits through long queues of synchronous tasks. -
#8791
d85a309Thanks @fubhy! - FixQueue.clearswallowing failures combined withCause.Done. -
#8785
7e7ede6Thanks @fubhy! - Fix Queue consumers defecting and messages being buffered after reentrant shutdown while resuming blocked producers. -
#8779
1803500Thanks @fubhy! - Mask interruption before invoking scope finalizer callbacks so singleton cleanup completes when its callback interrupts the closing fiber. -
#8795
495740dThanks @fubhy! - FixStream.zipLatest,zipLatestWith, andzipLatestAllhanging when an input completes without emitting. -
#8780
985860dThanks @fubhy! - Preserve failures raised while a transaction is retrying instead of rerunning the transaction. -
#8833
e36abbbThanks @tim-smart! - Return HTTP 200 with an empty body for empty RPC POST requests using framed serialization. -
#8867
c6086eeThanks @Makisuo! - RPC client and server spans now set span kindclient/serverand record the OpenTelemetryrpc.system.name(effect_rpc) andrpc.methodattributes. UserspanAttributesstill override them.Default span names are now the RPC method, for example
Echo.Pinginstead ofRpcClient.Echo.Ping. Update dashboards, alerts or samplers that match the old names, or passspanPrefix: "RpcClient"/spanPrefix: "RpcServer"to keep them. Spans with an explicitspanPrefixkeep their existing names. -
#8835
0ac6ac8Thanks @tim-smart! - Fix RPC request defects breaking subsequent SchemaBinary calls after an unknown request tag or payload decoding failure. -
#8825
90a1baeThanks @tim-smart! - Add configurablepingIntervalandpingTimeoutto RPC socket clients, counting any decoded server frame as liveness. ForwardretryPolicythroughlayerProtocolSocket. The default ping interval and timeout remain 5 seconds. -
#8748
b1d200cThanks @gcanti! - Expose the selected tag property key throughtagon schemas returned bySchema.toTaggedUnionandSchema.TaggedUnion, closes #8681. -
#8764
1ba8521Thanks @fubhy! - Fix the data-lastSink.catchCauseoverload to return the handler's error type instead of the original error type. -
#8878
1b35732Thanks @jayhemnani9910! - FixStream.slidingSizedropping elements from the final partial window when windows overlap. -
#8855
763b445Thanks @tim-smart! - Fix SQL unencrypted event-log notifications to publish in sequence order after commit, without missing startup rows or publishing rolled-back writes. -
#8866
00f1cc7Thanks @Makisuo! - Align SQL tracing with OpenTelemetry database conventions:- Name statement spans by
db.namespace,server.address[:server.port]ordb.system.name, falling back tosql.execute. The rules are exported asStatement.spanNameandStatement.spanTarget. - Record Effect execution methods in
effect.sql.methodinstead ofdb.operation.name. - Use internal transaction spans with
effect.sql.transaction.commit|savepoint|rollbackevents. - Name D1 batches of two or more statements
BATCH, orBATCH {target}when a target is set, withdb.operation.nameset toBATCHanddb.operation.batch.size.
- Name statement spans by
-
#8857
d4f4bc8Thanks @jayhemnani9910! - FixStream.groupBy,Stream.groupByKey,Stream.partition, andStream.partitionEffecthanging when a substream consumer stops early by shutting down its queue when the consumer finishes. -
#8794
f11526aThanks @fubhy! - FixStream.tapSinkswallowing sink failures after end-of-stream. -
#8817
8781388Thanks @fubhy! - FixChannel.callbackandChannel.callbackArraylosing registration effect failures and defects. -
#8796
5326527Thanks @fubhy! - FixChannel.acquireUseReleaseleaking resources when interrupted during acquisition. -
#8813
8409eb4Thanks @fubhy! - Fix Floyd-Warshall path reconstruction looping on zero-cost cycles after floating-point rounding. -
#8781
c5cf8ceThanks @fubhy! - FixLayer.buildWithMemoMapretries returning an already-finalized resource by deferring each build until execution. -
#8807
684ccdcThanks @fubhy! - FixLogger.batchedshutdown to finish in-flight output before flushing remaining entries, without overlapping flushes. -
#8788
33303eaThanks @fubhy! - Fix Pool shutdown to wait for borrowed resources to be finalized before releasing owner scope dependencies. -
#8786
b79fcb8Thanks @fubhy! - Fix PubSub publishers accepting surplus messages afterendwhen they yield during publishing. -
#8790
888a189Thanks @fubhy! - Reject NaN and fractional PubSub capacities to prevent nonterminating batch publication, while preserving Infinity support. -
#8787
9b8200dThanks @fubhy! - Fix PubSub take and takeAll delivering the final message before data published during waiter registration. -
#8783
82303c1Thanks @fubhy! - FixManagedRuntimedisposal deadlocking when called from one of its own fibers, including their child fibers. -
#8803
76fcd89Thanks @fubhy! - Report ScopedCache finalizer failures during expiry and capacity eviction without failing reads or blocking replacement lookups. -
#8793
f31e6b7Thanks @fubhy! - FixStream.tapSinkhanging when the sink finishes during an upstream pull. -
#8797
332d363Thanks @fubhy! - FixSink.maketo return successful pipeline results instead of failing with a channel completion signal. -
#8806
a6c7dcbThanks @fubhy! - Preserve one-shot iterable inputs across transaction retries in TxPriorityQueue.offerAll, TxHashMap.fromIterable/setMany/removeMany, and TxHashSet.fromIterable.