Repository navigation
Version Packages - #238
Merged
Merged
Version Packages#238
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
4 times, most recently
from
October 22, 2026 10:48
8d4d3a0 to
95a2c6f
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 22, 2026 10:57
95a2c6f to
1ea34a3
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 was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@typeonce/effect-machine@0.42.0
Minor Changes
4e9d412: Deliver
sendandstopwrites made while an atom machine is still starting. Writes toMachineAtom.send,MachineAtom.stop,ChildMachineAtom.sendandChildMachineAtom.stopbefore readiness are now held and delivered in write order once the machine is ready, instead of being dropped. The write result stays waiting until delivery and fails with the startup error if startup fails. Writes after the machine stopped still fail withStoppedError, and child writes still fail withChildNotActiveErrorwhen the owning state is inactive.NotReadyErroris removed fromAtomMachineand from thesendandstopfailure types. Remove any handling of it.Add
AtomMachine.MachineAtom.AnyandAtomMachine.ChildMachineAtom.Anyfor code that accepts any bridge, including bridges for machines without events, and theMachineAtom.State,MachineAtom.EventandChildMachineAtom.Stateextractors:36b1c0a:
ChildAlreadyExistsErrornow appears in a machine's error type only for invocations whose child id you choose: logic invocations with anaddressandMachine.childinvocations. Effect, Stream, and timer invocations run under runtime-owned ids and cannot collide, so a machine that only invokes them no longer carriesChildAlreadyExistsErrorinMachine.Error. Invocation ids within one state must be distinct; a repeated source without distinctids or a reusedidis now a type error and is rejected when the machine is constructed.A parent that invokes a fixed child through
childrennow needsonFailureexactly when the child's own error type is reachable. RemoveonFailure: { none: true }handlers that only swallowedChildAlreadyExistsError; they are now rejected as unreachable, like an unreachableonDone.Constraint failures now explain themselves instead of reporting
never. Starting, resuming, preparing, or planning a machine with a required parent reportsMachine declares a required parent and cannot run as a root, and an unreachableonDone,onFailure,onElement, oronSnapshotnames the channel and source, for exampleInvocation 'forever' never completes, so onDone is unreachable.71d41b9: Bind started machines to the caller's
Scope.Machine.start,Machine.resume, andprepared.startnow requireScope.Scope, likeEffect.forkScoped. Closing that scope is equivalent toref.stop: active invocations are interrupted, owned children stop, the snapshot becomesstopped, and later sends fail withStoppedError. A machine that stops or completes earlier releases its place in the scope, so long-lived scopes do not accumulate finalizers. Forprepared.start, the scope that first evaluates it owns the machine.AtomMachineis unaffected.Wrap programs that start machines in
Effect.scoped, or own a scope explicitly when a machine must outlive the caller:5eda754: Reading an
AtomMachinebridge on the server no longer starts the machine. Every bridge atom now has an Effect Atom server value, soAtom.getServerValueand the server render of@effect/atom-reacthooks return the machine's planned startup state without running startup commands, invocations, or services.resultservesSuccess(state)andsnapshotservesSuccess({ status: "active", state }), both waiting, wherestateis the stateMachine.planInitialsettles into with the bridge's input.select,selectSnapshot,matches,can, andfamilyprojections serve the same projection of that state.child(Child)serves the planned child state when the planned parent state invokesChild, andOption.none()otherwise.ref,send, andstopserveInitial, as does every atom of a bridge whose startup state cannot be planned synchronously. Resumed bridges serve their resumed snapshot.edebb70: A transition that combines
targetandupdatecan now enter a choice state. The owner is updated first, so the choice resolver reads the new value throughcontainingState,ancestors, orrootbefore the chosen branch is entered. With a choice target,dataconstructs only the owner value:A declared branch group can declare the same pair and select it with
select.route({ update: { data } }). Every branch the choice can reach, including through nested choices, must stay below the updated owner: an escaping branch is a type error such asChoice 'Route' branch 'out' targets 'Outside' outside the updated owner 'Flow', andhandlerejects it at construction.@typeonce/effect-machine-react@0.42.0
Minor Changes
5eda754:
MachineStateno longer suspends. Server rendering and hydration render the machine's planned startup snapshot, and the same tree then receives live snapshots, so hydrated form inputs keep their DOM nodes, typed text, and focus. Remove Suspense boundaries that only wrappedMachineStatefor its first paint.Add the optional
pendingprop, rendered until the machine has a snapshot. Once a snapshot has rendered,MachineStatekeeps it while the machine is still starting, for example while a bound runtime layer builds after hydration:Patch Changes
@typeonce/oxlint-plugin-effect-machine@0.42.0
Minor Changes
14e1f39: Add the recommended
effect-machine/no-conditional-none-branchrule.A
{ none: true }branch accepts its event, soMachine.canandAtomMachine.canreturntruewhen a resolver selects it. The rule reports a resolver that selects anonebranch conditionally withoutdeclinable: true. When the event must be refused, for example to disable a control, decline it instead:@typeonce/effect-machine-devtools@0.42.0
Patch Changes