@effect-app/vue 4.0.0-beta.99 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/CHANGELOG.md +2718 -0
  2. package/dist/atomQuery.d.ts +120 -0
  3. package/dist/atomQuery.d.ts.map +1 -0
  4. package/dist/atomQuery.js +434 -0
  5. package/dist/commander.d.ts +318 -43
  6. package/dist/commander.d.ts.map +1 -1
  7. package/dist/commander.js +593 -81
  8. package/dist/confirm.d.ts +5 -3
  9. package/dist/confirm.d.ts.map +1 -1
  10. package/dist/confirm.js +12 -14
  11. package/dist/dependencyMetadata.d.ts +18 -0
  12. package/dist/dependencyMetadata.d.ts.map +1 -0
  13. package/dist/dependencyMetadata.js +67 -0
  14. package/dist/errorReporter.d.ts +6 -4
  15. package/dist/errorReporter.d.ts.map +1 -1
  16. package/dist/errorReporter.js +14 -19
  17. package/dist/form.d.ts +5 -5
  18. package/dist/form.d.ts.map +1 -1
  19. package/dist/form.js +16 -10
  20. package/dist/internal/tanstackQuery.d.ts +9 -0
  21. package/dist/internal/tanstackQuery.d.ts.map +1 -0
  22. package/dist/internal/tanstackQuery.js +204 -0
  23. package/dist/intl.d.ts +4 -4
  24. package/dist/intl.d.ts.map +1 -1
  25. package/dist/intl.js +2 -2
  26. package/dist/lib.d.ts +8 -10
  27. package/dist/lib.d.ts.map +1 -1
  28. package/dist/lib.js +37 -12
  29. package/dist/liveQueryInvalidation.d.ts +16 -0
  30. package/dist/liveQueryInvalidation.d.ts.map +1 -0
  31. package/dist/liveQueryInvalidation.js +115 -0
  32. package/dist/makeClient.d.ts +232 -109
  33. package/dist/makeClient.d.ts.map +1 -1
  34. package/dist/makeClient.js +416 -84
  35. package/dist/makeContext.d.ts.map +1 -1
  36. package/dist/makeIntl.d.ts.map +1 -1
  37. package/dist/makeIntl.js +3 -3
  38. package/dist/makeUseCommand.d.ts +3 -2
  39. package/dist/makeUseCommand.d.ts.map +1 -1
  40. package/dist/makeUseCommand.js +2 -2
  41. package/dist/mutate.d.ts +110 -41
  42. package/dist/mutate.d.ts.map +1 -1
  43. package/dist/mutate.js +239 -62
  44. package/dist/query.d.ts +161 -44
  45. package/dist/query.d.ts.map +1 -1
  46. package/dist/query.js +382 -113
  47. package/dist/queryLifetime.d.ts +25 -0
  48. package/dist/queryLifetime.d.ts.map +1 -0
  49. package/dist/queryLifetime.js +54 -0
  50. package/dist/routeParams.d.ts +4 -4
  51. package/dist/routeParams.d.ts.map +1 -1
  52. package/dist/routeParams.js +7 -6
  53. package/dist/runtime.d.ts +1 -17
  54. package/dist/runtime.d.ts.map +1 -1
  55. package/dist/runtime.js +2 -38
  56. package/dist/suspense.d.ts +19 -0
  57. package/dist/suspense.d.ts.map +1 -0
  58. package/dist/suspense.js +38 -0
  59. package/dist/toast.d.ts +1 -45
  60. package/dist/toast.d.ts.map +1 -1
  61. package/dist/toast.js +2 -32
  62. package/dist/withToast.d.ts +1 -24
  63. package/dist/withToast.d.ts.map +1 -1
  64. package/dist/withToast.js +2 -45
  65. package/docs/atom-query-api-redesign.md +207 -0
  66. package/docs/mutation-command-atoms.md +40 -0
  67. package/docs/query-key-invalidation.md +107 -0
  68. package/examples/streamMutation.ts +72 -0
  69. package/package.json +35 -94
  70. package/src/atomQuery.ts +600 -0
  71. package/src/commander.ts +1064 -116
  72. package/src/confirm.ts +12 -14
  73. package/src/dependencyMetadata.ts +84 -0
  74. package/src/errorReporter.ts +66 -74
  75. package/src/form.ts +22 -15
  76. package/src/index.ts +7 -7
  77. package/src/internal/tanstackQuery.ts +308 -0
  78. package/src/intl.ts +2 -2
  79. package/src/lib.ts +51 -23
  80. package/src/liveQueryInvalidation.ts +138 -0
  81. package/src/makeClient.ts +972 -263
  82. package/src/makeIntl.ts +4 -4
  83. package/src/makeUseCommand.ts +8 -5
  84. package/src/mutate.ts +409 -156
  85. package/src/query.ts +758 -242
  86. package/src/queryLifetime.ts +74 -0
  87. package/src/routeParams.ts +11 -11
  88. package/src/runtime.ts +1 -54
  89. package/src/suspense.ts +43 -0
  90. package/src/toast.ts +1 -52
  91. package/src/withToast.ts +1 -99
  92. package/test/Mutation.test.ts +104 -17
  93. package/test/dependencyInvalidation.test.ts +444 -0
  94. package/test/dist/dependencyInvalidation.test.d.ts.map +1 -0
  95. package/test/dist/form.test.d.ts.map +1 -1
  96. package/test/dist/inactiveInvalidation.test.d.ts.map +1 -0
  97. package/test/dist/interrupt-refetch-repro.test.d.ts.map +1 -0
  98. package/test/dist/lib.test.d.ts.map +1 -0
  99. package/test/dist/liveQueryInvalidation.test.d.ts.map +1 -0
  100. package/test/dist/query-span.test.d.ts.map +1 -0
  101. package/test/dist/queryOptions.test.d.ts.map +1 -0
  102. package/test/dist/streamFinal.test.d.ts.map +1 -0
  103. package/test/dist/streamFn.test.d.ts.map +1 -0
  104. package/test/dist/stubs.d.ts +3681 -256
  105. package/test/dist/stubs.d.ts.map +1 -1
  106. package/test/dist/stubs.js +166 -25
  107. package/test/dist/suspense-regression.test.d.ts.map +1 -0
  108. package/test/dist/suspense.test.d.ts.map +1 -0
  109. package/test/form-validation-errors.test.ts +2 -1
  110. package/test/form.test.ts +2 -1
  111. package/test/inactiveInvalidation.test.ts +172 -0
  112. package/test/interrupt-refetch-repro.test.ts +625 -0
  113. package/test/lib.test.ts +240 -0
  114. package/test/liveQueryInvalidation.test.ts +108 -0
  115. package/test/makeClient.test.ts +414 -32
  116. package/test/query-span.test.ts +92 -0
  117. package/test/queryOptions.test.ts +88 -0
  118. package/test/streamFinal.test.ts +64 -0
  119. package/test/streamFn.test.ts +457 -0
  120. package/test/stubs.ts +194 -36
  121. package/test/suspense-regression.test.ts +168 -0
  122. package/test/suspense.test.ts +160 -0
  123. package/tsconfig.examples.json +20 -0
  124. package/tsconfig.json +9 -1
  125. package/tsconfig.src.json +34 -34
  126. package/tsconfig.test.json +2 -2
  127. package/vitest.config.ts +5 -5
  128. package/eslint.config.mjs +0 -24
  129. package/tsconfig.json.bak +0 -12
package/CHANGELOG.md CHANGED
@@ -1,5 +1,2723 @@
1
1
  # @effect-app/vue
2
2
 
3
+ ## 4.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 222e619: Remove effect-app helpers that Effect already provides, and add `migrateEffectAppSource` to rewrite call sites.
8
+
9
+ Deleted aliases and wrappers now live in Effect: `String.capitalize` / `uncapitalize`, `Struct.keys`, `Record.values`, `absurd`, `Tuple.make`, `Option.isSome`, `Option.liftPredicate` for non-empty arrays, `Array.chunksOf`, `Chunk.findFirst` / `findLast` / `partition` / `containsWith`, `Array.dedupeWith`, `Effect.annotateLogsScoped`, `Deferred.await`, `Effect.fromOption`, `Result.fromOption`, and `DateTime.add` / `subtract`. `Schema.DateValid` was an alias of `Schema.Date`. The date-fns calendar wrappers and the `date-fns` dependency are gone.
10
+
11
+ `effect-app/migration/nativeEffect` exports the replacement table and `migrateEffectAppSource(source)`, which rewrites those imports in one file. `dropUndefined` and `fromBool` stay, along with `groupByT` (any key, entry list), `randomElement`, `findFirstMap`, and the schema constructors that add construction defaults.
12
+
13
+ `effect-app/DateTime` adds `makeZonedLocal` and `pipeZonedLocal`. `makeZonedLocal` attaches the process timezone to a `Date` without moving the instant. `pipeZonedLocal` runs the functions passed to it and returns that instant with `DateTime.toDateUtc`. `DateAdd*` and `DateSub*` migrate to `pipeZonedLocal(date, DateTime.add({ days }))`, which keeps the local calendar.
14
+
15
+ `Chunk.containsWith` calls the equivalence as `(needle, element)`. The old `elem` called it as `(element, needle)`, so only a symmetric equivalence is unchanged. `Record.values` expects one value type, so a mapped type whose value depends on its key should use `Object.values`.
16
+
17
+ - Updated dependencies [222e619]
18
+ - effect-app@4.0.1
19
+
20
+ ## 4.0.0
21
+
22
+ ### Major Changes
23
+
24
+ - 52b0b01: Fix Schema->Codec
25
+ - 52b0b01: Effect v4 beta
26
+
27
+ ### Minor Changes
28
+
29
+ - eddda2e: Invalidate only mounted queries (TanStack `refetchType: "active"`). Idle `gcTime` entries are marked stale and refetch on remount. `invalidateAndAwait` still waits for observed refetches to finish.
30
+ - 07dd7b9: Add stream mutation support throughout the Vue commander pipeline.
31
+
32
+ - `asStreamResult` utility (mirrors `asResult`, accepts `Stream<A, E, R>` or a factory). Reactive ref updates with each emitted value (`waiting: true`) and finalises once the stream ends (`waiting: false`); errors surface as `AsyncResult.failure`.
33
+ - `clientFor` now exposes `mutateStream` for stream-type requests as a factory `(options?) => [resultRef, execute] & { id, running?, progress? }`. Always invoke `()` (optionally with `{ progress }`) to obtain a fresh ref+execute pair — independent invocations don't share state. Helpers expose the same shape under `xxxStream`.
34
+ - `Command.wrapStream(client.x)` and `Command.wrap(client.x)` build a CommanderWrap from a stream entry; the factory is called per command build.
35
+ - `Command.fn(client.x.mutateStream)` and `Command.fn(client.x.mutateStream({ progress }))` accept a stream factory or already-called tuple-with-id; the resulting command exposes `running` (live `AsyncResult`) and `progress` (formatted loading info) only when the factory was called with a `progress: (result) => Progress | undefined` formatter, where `Progress = string | { text: string; percentage: number }`.
36
+ - `CommandBase` adds `progress?: Progress` so the `CommandButton` component overrides the Vuetify `loader` slot with a `v-progress-circular` (using `model-value` for percentage when available, otherwise indeterminate) and the formatted text alongside.
37
+ - New example `examples/streamMutation.ts` shows modelling a long-running export operation that streams `OperationProgress | ExportComplete` events.
38
+
39
+ - 6a3d364: Client entries are now plain objects; use `.fetch` to invoke the request.
40
+
41
+ `client.Xxx` no longer is callable or an `Effect` itself. Call `client.Xxx.fetch(input)` (or `client.Xxx.fetch` for input-less requests) instead. `.mutate`, `.query`, `.suspense`, `.wrap`, and `.fn` are unchanged.
42
+
43
+ - 8ff0bf9: Add `Command.streamFn` — a stream-backed variant of `Command.fn`.
44
+
45
+ The body generator (or plain function) returns a `Stream` instead of an `Effect`. The command's `waiting` state stays `true` while the stream is running and updates the reactive `result` ref for every emitted value.
46
+
47
+ Three handler shapes are accepted:
48
+
49
+ 1. **Generator returning a Stream** (primary):
50
+ ```ts
51
+ Command.streamFn("exportData")(function* (arg, ctx) {
52
+ const token = yield* getAuthToken;
53
+ return Stream.fromEffect(startExport(token, arg.id)).pipe(
54
+ Stream.flatMap((job) => pollProgress(job.id))
55
+ );
56
+ });
57
+ ```
58
+ 2. Function returning a `Stream` directly.
59
+ 3. Function returning `Effect<Stream>` (unwrapped automatically).
60
+
61
+ - 2b4c324: Make the default mutation invalidation heuristic configurable.
62
+
63
+ The built-in default is unchanged (collapse one namespace level: `Foo/Bar.x` invalidates `["$Foo"]`, `Foo/Bar/Baz.x` invalidates `["$Foo","$Bar"]`). Client projects can now override it globally:
64
+
65
+ ```ts
66
+ import { makeQueryKey, setDefaultGetQueryKey } from "@effect-app/vue";
67
+
68
+ // invalidate the full namespace of the action (no parent collapse)
69
+ setDefaultGetQueryKey((h) => {
70
+ const key = makeQueryKey(h);
71
+ const ns = key.filter((_) => _.startsWith("$"));
72
+ if (!ns.length) throw new Error("empty query key for: " + h.id);
73
+ return ns;
74
+ });
75
+ ```
76
+
77
+ Call at app bootstrap. Pass `undefined` to restore the built-in default. Per-mutation overrides via the existing `queryInvalidation` option still take precedence.
78
+
79
+ - ba789a2: Move core service contracts and runtime-agnostic modules into `effect-app`, keep `infra` and `vue` focused on adapters, and drop the temporary `infra` compatibility re-export paths in favor of the new canonical imports.
80
+
81
+ `@effect-app/infra` no longer re-exports moved core modules such as `./Model`, `./Emailer/service`, `./QueueMaker/service`, `./Store/service`, `./adapters/*`, or `./api/*` entrypoints.
82
+
83
+ - aeb17bc: Add `disableQueryInvalidation` flag to Command config for background saves.
84
+
85
+ Set `disableQueryInvalidation: true` in a `Req.Command` config (3rd argument)
86
+ to suppress all client-side query invalidation for that command — client
87
+ `invalidatesQueries` callbacks, server-returned `metadata.invalidateQueries`,
88
+ and repository-derived write-dependency matching are all skipped. Use for
89
+ background saves (e.g. debounced auto-save) whose writes should not trigger
90
+ query refetches.
91
+
92
+ - `InvalidationConfig` gains `disableQueryInvalidation?: boolean`.
93
+ - `RequestHandlerWithInput` gains `disableQueryInvalidation?: boolean`,
94
+ propagated from `Request.config` by `ApiClientFactory.makeFor`.
95
+ - `invalidateCache` early-returns `Effect.void` when the flag is set,
96
+ applying to both regular and stream mutations.
97
+
98
+ - 8cb3de4: Add command invalidation helpers that preserve query-only resource types and pass mutation input and `Exit` results into invalidation callbacks. Update Vue `clientFor` to merge request-level invalidation config with call-site invalidation and require matching invalidation resources.
99
+ - 99c43c4: Add query-owned live invalidation with recorded dependency filtering, connect-before-fetch coordination, race buffering, and configurable client-side coalescing.
100
+ - 1e4c989: Add `mode: "optional"` overload for queries. When `mode: "optional"` is set, the `arg` must be a `WatchSource<Option<I>>`. The query is disabled (`enabled: false`) when the option is `None`, and enabled with the unwrapped value when `Some`.
101
+ - b3ed68a: Remove `legacy` from `makeClient` return and clean up `LegacyMutation`, `LegacyMutationImpl`, and related types.
102
+ - f16e766: Remove legacy `mutateToResult` stream mutation factory, `wrapStream` command builder, and standard command progress reporting (`running`/`progress` from the old stream factory path). Keep only the `mutate` path for use with `streamFn` combinators. Remove obsolete types (`StreamMutationWithExtensions`, `StreamCommandWithExtensions`, `StreamFnExtension`, `MutateStreamCallOptions`) and the internal `makeStreamMutation` function. Rename `mutate.wrapStream` shorthand to `mutate.wrap` to match the non-stream convention.
103
+ - 1f103b2: Replace `proxify` with explicit service accessor helpers: `accessFn`, `accessEffectFn`, `accessCn`, `accessEffectCn`.
104
+ - 0054611: Derive query invalidation from repository read/write dependencies and propagate dependency metadata through RPC clients.
105
+ - 28777c1: Add `select` option to `MutationOptionsBase` for a second cache invalidation after long-running operations.
106
+
107
+ When `select` is provided, cache invalidation fires twice:
108
+
109
+ 1. Immediately when the mutation completes (existing behaviour).
110
+ 2. Again after the `select` effect finishes — useful for polling or waiting for a background job before refreshing data.
111
+
112
+ ```ts
113
+ useMutation(startExportCommand, {
114
+ select: (result) => pollUntilDone(result.jobId),
115
+ });
116
+ ```
117
+
118
+ - 821468d: Add server-driven cache invalidation via RPC response headers.
119
+
120
+ - `effect-app/rpc`: new `Invalidation` module with `InvalidationKey` / `InvalidationKeys` schemas, `Invalidates` annotation (for declaring static invalidation on Rpc definitions), `InvalidationSet` reference (request-scoped accumulator), and `makeInvalidationSet` helper.
121
+ - `effect-app/middleware`: new `InvalidationMiddleware` RPC middleware tag; included in `DefaultGenericMiddlewares`.
122
+ - `effect-app/client`: new `InvalidationKeys` module with `InvalidationKeysFromServer` reference and `makeInvalidationKeysService` helper; `apiClientFactory` now taps HTTP responses to read the `x-invalidate` header and forward keys to `InvalidationKeysFromServer`.
123
+ - `@effect-app/infra`: new `InvalidationMiddlewareLive` RPC middleware implementation that owns the full lifecycle — creates a request-scoped `InvalidationSet` (backed by a `Ref`), pre-populates it from the `Invalidates` annotation, provides it to the handler, and after the handler completes registers an HTTP pre-response handler (via `appendPreResponseHandlerUnsafe`) to write the accumulated keys as an `x-invalidate` response header. No separate HTTP middleware is needed.
124
+ - `@effect-app/vue`: `invalidateQueries` / `useMutation` now reads server-provided invalidation keys from `InvalidationKeysFromServer` after each mutation and applies them alongside the client-side invalidation.
125
+
126
+ - b9586f8: Refine `mutateStream` shape and progress reporting.
127
+
128
+ - `mutateStream(options?)` now returns the `execute` callable directly, with `id`, `running?`, and `progress?` attached as properties. Tuple form `[ref, execute]` is gone — invoke the callable to run the stream, or pass it (or the factory) to `Command.fn` / `Command.wrap` / `Command.wrapStream`.
129
+ - `progress` formatter return type widened from `string | undefined` to `Progress | undefined`, where `Progress = string | { text: string; percentage: number }`.
130
+ - Stream failures now bubble through the execute effect's typed error channel `E` instead of being swallowed. The reactive `AsyncResult` ref still mirrors the failure for live progress UI.
131
+ - `CommandBase.progress?: Progress` replaces `progressText?: string`. `CommandButton` overrides the Vuetify `loader` slot when `progress` is set, rendering a `v-progress-circular` (bound to `model-value` when a `percentage` is supplied, otherwise `indeterminate`) alongside the formatted text.
132
+ - Factories and callables are branded with `_streamFactory` / `_streamCallable` so `Command.fn` / `Command.wrap` can disambiguate them from plain mutate functions.
133
+
134
+ - 828d264: Stream requests now support an optional `final` schema that models the final success type of the stream. When declared, `mutateStream`'s execute effect resolves with the last emitted value typed as `Final` instead of `void`.
135
+
136
+ ```ts
137
+ class MyStream extends SomethingStream<MyStream>()(
138
+ "MyStream",
139
+ { id: S.String },
140
+ {
141
+ success: S.Union([OperationProgress, ExportComplete]),
142
+ final: ExportComplete, // execute now resolves with ExportComplete
143
+ }
144
+ ) {}
145
+ ```
146
+
147
+ - 8ff0bf9: - `CommandButton`: add optional `:map-progress` prop to compute progress from `command.result` via a custom mapper function
148
+ - `CommandBase`: add optional `result` field exposing reactive `AsyncResult` state
149
+ - Export `Progress` type from `@effect-app/vue`
150
+ - `streamFn`: pipe operators now receive the initial `Effect<Stream>` (or `Stream`) value unchanged; `Stream.unwrap` is deferred until after all combinators, enabling use of `withDefaultToast` and other Effect-level combinators
151
+ - Add `makeStreamMutation2`: like `makeStreamMutation` but returns `Effect<Stream>` per invocation (with invalidation via `Stream.ensuring`), for use with `streamFn` combinators
152
+ - Expose `streamFn` on `XClient.Y` stream handlers and on the `Command` object
153
+ - Expose `mutateStream2` on `XClient.Y` stream handlers, with a `wrapStream` helper that calls `streamFn` with the handler and provided combinators
154
+ - 7fa3045: V1/V2/V3: stream and command requests carry invalidation metadata
155
+
156
+ **V1** – stream final response includes metadata
157
+
158
+ - `Invalidation.StreamResponseChunk` wraps each stream item as `{ _tag: "value", value }` and appends `{ _tag: "done", metadata }` at the end carrying all accumulated invalidation keys.
159
+
160
+ **V2** – invalidation keys included in failures
161
+
162
+ - `Invalidation.CommandFailureWithMetaData` and `Invalidation.StreamFailureChunk` carry keys accumulated up to the point of failure, so clients can invalidate queries even when a command or stream errors.
163
+ - `InvalidationMiddlewareLive` wraps command failures; `routing.ts` wraps stream failures.
164
+ - `apiClientFactory.ts` unwraps both on the client side, forwarding keys before re-failing with the original error.
165
+
166
+ **V3** – mid-stream metadata chunks
167
+
168
+ - `Invalidation.StreamResponseChunk` now also includes `{ _tag: "metadata", metadata }` for mid-stream invalidation.
169
+ - After each emitted value, the server drains accumulated keys and emits a "metadata" chunk if any keys were collected since the last drain (bucket reset via `InvalidationSet.drain`).
170
+ - `apiClientFactory.ts` processes "metadata" chunks the same as "done" chunks, forwarding keys to `InvalidationKeysFromServer` immediately.
171
+ - `makeInvalidationKeysService` accepts an optional `onAdded` callback that fires after each key addition, enabling `mutate.ts` to trigger query invalidation mid-stream without waiting for the stream to complete.
172
+
173
+ - 3dc0d2a: Add streaming as a `stream: true` config option on `Query` / `Command` instead of a separate request type.
174
+
175
+ `TaggedRequestFor` now exposes only `Query` and `Command` factories — the standalone `Stream` factory is removed. To produce a Stream of `success` values, pass `stream: true` in the request config. The request `type` field stays `"command" | "query"`; a new `stream: boolean` field carries the streaming flag (stripped from the stored handler config).
176
+
177
+ ```ts
178
+ // Query that streams results
179
+ Req.Query<T>()("Tag", {}, { stream: true, success: ... })
180
+
181
+ // Command that streams results
182
+ Req.Command<T>()("Tag", {}, { stream: true, success: ... })
183
+ ```
184
+
185
+ Vue client mapping (per-handler properties mirror the non-stream API — `.query`, `.fn`, `.mutate`):
186
+
187
+ - `query` + `stream: true` → exposes `.query` (read-only streaming, tracked Vue Query). Helper map key: `${name}Query`.
188
+ - `command` + `stream: true` → exposes `.fn` and `.mutate` (mutating streaming).
189
+ - Plain `query` / `command` unchanged.
190
+
191
+ Server routing dispatches via the new `stream` flag (`makeStreamRpc` for streaming commands/queries, `makeCommandRpc` / `Rpc.make` otherwise).
192
+
193
+ Also lifts the `Struct` / `TaggedStruct` and `Opaque` definitions in `effect-app/Schema` to use `S.Bottom` / `S.Opaque` directly, exposing `fields`, `mapFields`, and a `MakeIn` that allows `void` when all fields are optional. `TaggedRequestFor` request classes now use `Opaque(TaggedStruct(...))` instead of `TaggedClass`, and decoding/encoding services are derived from `success` / `error` rather than stored on the request.
194
+
195
+ **Migration**: replace `Req.Stream` with `Req.Query` or `Req.Command` and add `stream: true` to the config — `Query` for read-only streams, `Command` for mutating streams.
196
+
197
+ - d4bf24a: Add `Command.withDefaultToastStream` — a stream-aware combinator for `streamFn` that properly handles the full stream lifecycle (waiting/success/failure toasts). Unlike `withDefaultToast`, it waits for the stream to drain before showing the success toast and correctly handles stream errors.
198
+
199
+ Strongly type `CommandBase` with `RA`/`RE` type params for `result`, and update `CommandButton`'s `mapProgress` prop to be typed as `(result: AsyncResult<RA, RE>) => Progress | undefined`.
200
+
201
+ - 0d7d197: Add optional `groupId` and `requestId` to toast options.
202
+
203
+ - `ToastOpts` / `ToastOptsInternal` now accept `groupId?: string` and `requestId?: string`; values pass through the toast wrapper unchanged.
204
+ - `WithToast` / `withToast` accept `groupId` and auto-derive `requestId` once per invocation (current Effect span `traceId`, fallback `S.StringId.make()`); both are attached to every emitted toast (waiting/success/warning/error).
205
+ - `Command.withDefaultToast` and `Command.withDefaultToastStream` set `groupId: cc.id` automatically; the stream variant also computes `requestId` once and threads it through progress, success, and failure toasts.
206
+
207
+ - fc98fb7: Add `streamQuery` support for stream-type Rpc handlers. When an Rpc is of type `"stream"`, the client now exposes a `.streamQuery` property (and `...StreamQuery` in helpers) that uses `streamedQuery` from `@tanstack/query-core` to accumulate chunks reactively as an `AsyncResult<A[], E>`.
208
+ - 4bbeb19: Add `wrapStream` support to `Command` with separate `result` and `running` props.
209
+
210
+ **Key design:**
211
+
212
+ - `result` is always the command's own execution outcome (from `asResult`)
213
+ - `running` holds the stream's live `AsyncResult` ref for progress tracking
214
+
215
+ **New behaviour:**
216
+
217
+ - `CommanderImpl.wrapStream(mutation)` returns a callable like `wrap` — `wrapStream(mutation)()` gives `CommandOut`.
218
+ - Accepts either `{ id, mutateStream: [...] }` or the augmented tuple directly (when `.id` is attached).
219
+ - `Command.wrap` now accepts `{ mutateStream, id }` and the augmented tuple — both delegate to `wrapStream`.
220
+ - `FnOptions.progress` — pass a `ComputedRef<AsyncResult>` to any `fn`-created command; surfaces as `running`.
221
+ - `StreamMutationWithExtensions` now includes `.id` on the tuple.
222
+ - Stream client entries expose `wrapStream` (callable), `fn`, and `mutateStream` (with `.id`).
223
+ - Stream mutation helpers also carry `.fn` and `.id`.
224
+
225
+ ```ts
226
+ // Via client entry:
227
+ const exportCmd = Command.wrapStream(client.myExport)();
228
+ // exportCmd.result = own execution result; exportCmd.running = live stream AsyncResult
229
+
230
+ // Via mutateStream tuple (id is attached):
231
+ const exportCmd = Command.wrapStream(client.myExport.mutateStream)();
232
+
233
+ // wrap also accepts the tuple:
234
+ const exportCmd = Command.wrap(client.myExport.mutateStream)();
235
+
236
+ // fn with external progress:
237
+ const cmd = Command.fn({
238
+ id: "myExport",
239
+ progress: client.myExport.mutateStream[0],
240
+ })(function* (arg) {
241
+ yield* client.myExport.mutateStream[1](arg);
242
+ });
243
+ // cmd.running === the stream AsyncResult ref
244
+ ```
245
+
246
+ ### Patch Changes
247
+
248
+ - 439cbeb: Adopt module system from effect-smol: replace barrel imports with specific submodule imports (`import * as X from "effect-app/X"` / `import * as X from "effect/X"`).
249
+ - da83c1f: Align `InvalidationEntry` (vue) with `InvalidateQueryInstruction` (effect-app).
250
+
251
+ `InvalidateQueryInstruction` is now parametrized over `Filters` / `Options`
252
+ (defaulting to `Record<string, unknown>` so the core stays framework-agnostic).
253
+ `@effect-app/vue` exposes `InvalidationEntry` as a narrowed alias substituting
254
+ `@tanstack/vue-query`'s `InvalidateQueryFilters` and `InvalidateOptions`. Single
255
+ source of truth for the union shape across both packages.
256
+
257
+ - 664e83d: Add Atom-native Vue query APIs, stream query pull atoms, and a TanStack-backed legacy query engine toggle.
258
+ - eceb3a3: align CauseException
259
+ - 08d092c: Update Atom query caches in memory and accumulate stream invalidations so live events do not cause repeated RPC refetches.
260
+ - a74a894: Fix atom-query suspense cleanup so per-observer wrappers unsubscribe on unmount while cached query atoms keep their idle TTL.
261
+ - 32f05c8: Remove unused dependency declarations from package manifests.
262
+ - 50ce7e6: Cleanup after tsgolint + oxlint-codegen-plugin migration:
263
+
264
+ - Wire `@effect-app/eslint-codegen-model/oxlint` via `jsPlugins` object form (`{ name: "codegen", specifier: ... }`) so the `codegen/codegen` rule key resolves.
265
+ - Drop `eslint-plugin-codegen` dep, patch, and `augmentedConfig` helper — codegen now runs through oxlint.
266
+ - Break cyclic workspace dep between `eslint-codegen-model` and `eslint-shared-config`; remove dead `eslint.config.mjs` from `eslint-codegen-model`.
267
+ - Switch `@effect-app/vue` to oxlint-only (no `.vue` files in `src`); drop its ESLint config and `eslint-shared-config` devDep.
268
+ - Restore `@typescript-eslint` plugin and rules in shared `baseConfig` so inline `eslint-disable @typescript-eslint/...` directives resolve in `@effect-app/vue-components` (the only remaining ESLint consumer, for `.vue` files).
269
+ - Add `globals.browser` to `vueConfig` so browser globals (`window`, `console`, `URL`, etc.) resolve.
270
+
271
+ - 6cfd83d: update effect to latest beta
272
+ - aa5ef5c: Improve `deepToRaw` to support any root input type, correctly unwrap refs/computed values, and preserve collection/date shapes (`Array`, `Map`, `Set`, `Date`) while deeply removing Vue reactivity wrappers.
273
+ - 08d30af: Fix Commander combinator type inference for void Arg and withDefaultToast callbacks
274
+
275
+ - Use `ArgForCombinator` helper to properly resolve `void` args to `undefined` in combinator positions, enabling correct type inference for `withDefaultToast` and other curried combinators
276
+ - Use explicit positional params in `withDefaultToast` options callbacks instead of rest spread, allowing users to omit trailing parameters
277
+
278
+ - 505bfa9: Add concurrent decode helper APIs and migrate decode callsites to use them.
279
+
280
+ - Add `withDefaultParseOptions` and keep `DefaultParseOptions` centralized.
281
+ - Export `decodeEffectConcurrently` and `decodeUnknownEffectConcurrently` from Schema and SchemaParser modules.
282
+ - Update repository, queue, client, form, and CLI decode paths to use concurrent decode helpers.
283
+ - Keep schema constructors free of hardcoded parse concurrency overrides.
284
+
285
+ - 52b0b01: Beta25
286
+ - 99a2e9b: Use warning toasts for expected commander failures, while keeping unexpected errors as error toasts.
287
+ - 8753c52: render
288
+ - d23e3f6: Delay the in-progress (waiting) toast by 1 second in `withToast` and `withDefaultToastStream`. Fast operations that produce a success/failure (or, for streams, a progress event or terminal state) within the delay window never show a waiting toast at all. Any subsequent waiting/progress/success/failure toast aborts the pending delayed toast so it never flashes after the terminal state.
289
+ - 10b55ff: update packages
290
+ - 4149577: fix queryresources
291
+ - 04fc985: Fixes error handling
292
+ - 1176240: Fix `client[Key].Input` resolving to `never` for stream request handlers. The extractor only matched `RequestHandlerWithInput`, so any `RequestStreamHandlerWithInput` entry fell through to the `never` branch. Added a parallel `RequestStreamHandlerWithInput` extract so stream Inputs surface the handler's input type.
293
+ - 0d4e0b8: Fix `isGeneratorFunction` using `isObject` instead of `isFunction`: generator functions have `typeof === "function"`, not `"object"`, so the check always returned `false`. This caused `Command.streamFn` generator-form handlers to silently pass a raw `Generator` object rather than an `Effect<Stream>`, meaning the mutation was never executed.
294
+ - d195003: Fix numeric field type detection in `getMetadataFromSchema` for Effect v4 JSON schema output. `S.Number` now emits `anyOf` instead of a top-level `type: "number"`, causing fields to fall back to `"text"`. Detection now recurses through `anyOf`/`oneOf`/`allOf` to find the underlying numeric type.
295
+ - 7519318: Fix interrupt repro tests to observe expected suspense interruption rejections.
296
+ - 1b38043: Fix lint: use typescript ~6.0.3 instead of native-preview for ESLint compatibility; keep tsgo for compilation
297
+ - 07a57b6: Limit `client.method.mutate` extensions to only expose the mutation call and `wrap`.
298
+ - 55c6572: update packages
299
+ - f88ea34: Move `makeQueryKey` into `effect-app/client` and update Vue source and tests to import it from the shared client module. Vue still re-exports `makeQueryKey` from `src/lib` for compatibility.
300
+ - dd239fa: fix atom invalidation
301
+ - 66fd718: Require `clientFor` invalidation resources when any command in the client configures them.
302
+ - c991be1: update packages
303
+ - 702d51c: also make runSync version available\
304
+ - fc41dcf: add trace id and span id to toasts
305
+ - 34f6a97: fix missing fn
306
+ - 4b95009: use Finite instead of Number
307
+ - 2e4c018: feat: add client projection
308
+ - c7fbd58: `handle`, `mutate`, and `request` are now always functions, never a raw Effect or Stream. For no-input handlers the first argument is omitted (`handle()`, `request()`, `mutate()`).
309
+ - 985176b: Align request handler input typing with the request's `make` signature. Handlers are now classified as no-input only when the request schema declares no payload fields; any payload (even fully-optional) yields a function handler whose input matches `make`'s first parameter. Adds `HandlerInput<I>` and threads it through `CommandFromRequest`.
310
+ - 50d7fc1: refactor(vue): remove 1s waiting toast delay in withDefaultToastStream
311
+ - dc465e3: update to latest effect beta
312
+ - f44800c: In-progress toasts (`withToast` waiting toast and `withDefaultToastStream` waiting/progress toasts) now persist indefinitely (`timeout: Infinity`) until replaced by the success/failure toast or dismissed. Previously they used the underlying toast adapter's default duration and could disappear before the operation finished.
313
+ - 8c645d5: update to latest effect
314
+ - 52b0b01: adapt isObject change
315
+ - b952f19: bye cruft
316
+ - a37aa38: Update to effect beta 43
317
+ - 28a0b29: expose Input
318
+ - c1e73de:
319
+ - d867272: the return of `Context`
320
+ - 1b57aa4: Add a `Commander` error-renderer registry via `Context.Reference` and apply registered guarded renderers before default error formatting.
321
+ - 0c42d67: move out Commander and friends from experimental
322
+ - 8f09f77: fix
323
+ - 50ce7e6: Replace typescript-eslint with oxlint-tsgolint for type-aware lint. Drop ESLint entirely from non-vue packages (cli, effect-app, infra) — they now use only `oxlint --type-aware`. Vue packages keep ESLint to run `@effect-app/no-await-effect` (no tsgolint equivalent) via `@typescript-eslint/parser` + `vue-eslint-parser`.
324
+ - d71d976: fix
325
+ - 2aa8e5e: `queryInvalidation` / `invalidatesQueries` accept shorthand entries (per-mutation, Command, client-level `QueryInvalidation<M>` maps, and server-side `Req.Command` `invalidatesQueries` callbacks).
326
+
327
+ Each entry returned may now be:
328
+
329
+ - a raw query key (`string[]`)
330
+ - an RPC handler (`{ id, options? }`) — its query key is derived via `makeQueryKey`
331
+ - the existing `{ filters, options }` raw tanstack-query invalidation
332
+
333
+ ```ts
334
+ queryInvalidation: (queryKey) => [queryKey, GetMe, PackListIndex];
335
+ ```
336
+
337
+ equivalent to:
338
+
339
+ ```ts
340
+ queryInvalidation: (queryKey) => [
341
+ { filters: { queryKey } },
342
+ { filters: { queryKey: makeQueryKey(GetMe) } },
343
+ { filters: { queryKey: makeQueryKey(PackListIndex) } },
344
+ ];
345
+ ```
346
+
347
+ - ed1b8a9: `mutate.wrap` on stream handlers now works the same as on command/query handlers: it can be called without arguments or with only combinators, with the underlying stream handler pre-baked in.
348
+ - 52b0b01: Update Effect dependencies to 4.0.0-beta.31 across workspace packages.
349
+ - 11422f8: Update request helper typing and runtime invocation to rely on schema `.make` instead of class constructors, avoiding `new`-based assumptions for request schemas.
350
+ - eb28ea5: bogus
351
+ - 4bc4a27: Constrain `project` schema to require matching `Encoded` type with original success schema
352
+ - 0fe925d: Tag-aware `ProjectableFromDomain` for `projectComputed`: projection Encoded fields must exist on the matching domain tagged state (or be computed). Prevents Overview.List SchemaErrors when cancel states omit workflow lock fields like `activeRequest`.
353
+ - 40585ca: Keep tag-aware `ProjectableFromDomain` for `projectComputed` only; restore loose key-presence guard for `project()` so view DTOs with reshaped fields keep typechecking.
354
+ - a354345: Move release tsconfig flattening from publish to pack lifecycle so package configs are restored before registry upload/auth can fail.
355
+ - aeb17bc: Preserve Effect parent spans across query refetch and invalidation.
356
+ - 52b0b01: Update Effect dependencies to 4.0.0-beta.28 across workspace packages.
357
+ - 18fd1df: unify runPromise
358
+ - cec026d: update packages
359
+ - 4622a75: Recover interrupted queries and classify query-side suspense interrupts.
360
+
361
+ - A query fetch that is interrupted (a subscriber lost interest, a refresh superseded it, or the component navigated) can be left `waiting = true` with no fiber running — effect-core hides the interrupt by removing the result-observer before interrupting, so it is never written back. `isStaleResult`/swr short-circuit on `waiting`, so that state is never revalidated and becomes **terminal** (a cold suspense read throws → blank page; a warm one serves stale forever). `recoverStuckWaitingOnMount` now treats a `waiting` result with `inFlight === 0` as not-yet-fetched and refetches it on mount. Interrupts are **not** auto-retried — recovery only fires for a genuine (re)mounting observer, and a live in-flight fetch (`inFlight > 0`) is joined, not superseded. Concurrent mounts share a single recovery fetch. Exposes `queryFetchStates` / `QueryFetchState`.
362
+
363
+ - `useSuspenseQuery` / `useSuspenseQueryNew` now convert an interrupt-only failure that settles **while the component is still mounted** into a typed `SuspenseInterruptedError` (a `Data.TaggedError` carrying the original cause). Such an interrupt cannot be a navigation/unmount cancel — that path interrupts the suspense fiber itself and never yields a still-mounted `Failure` exit — so it is query-side (e.g. a server RPC interrupt `Exit` delivered over a 200). Error boundaries can render it ("the request was interrupted — reload?") instead of silencing it into a blank page, while continuing to silence genuine navigation interrupts. Adds `SuspenseInterruptedError` / `isSuspenseInterruptedError`.
364
+
365
+ - b2e438f: Remove Operations service and repo
366
+ - d16845e: Remove `TaggedRequest` from `makeRpcClient`, now only `TaggedRequestFor` is returned. Remove all legacy `meta.moduleName` support — `id` and `moduleName` are now required on `Req` type. Remove `makeRpcGroup` (use `makeRpcGroupFromRequestsAndModuleName` instead).
367
+ - ddd9505: Rename stream mutation helpers: `mutateStream` → `mutateToResult`, `mutateStream2` → `mutate`.
368
+ - 7bd8234: Use set-backed data dependencies and provide request-scoped dependency services through a shared root-checked helper.
369
+ - ad0ede6: Keep tag-aware `ProjectableGuard` on both `project()` and `projectComputed` (no loose key-only paper-over).
370
+
371
+ Hardening:
372
+
373
+ - single-literal tags allow dual same-tag domain variants (KeysOfUnion of matched members)
374
+ - multi-tag / string tags still require keys on every matched member
375
+ - optional projection/domain keys checked by key presence only (not optional-assignability)
376
+
377
+ Call sites must project domain-owned fields per tagged state.
378
+
379
+ - ba61aad: raw dog
380
+ - 8ae8b53: input mess
381
+ - 37089ea: Consolidate multiple `invalidateQueries` calls into a single call per group using a `predicate`, reducing the number of TanStack Query invalidation calls in the common case from N to 1.
382
+ - 52b0b01: fix atom references
383
+ - 52b0b01: Update Effect dependencies to 4.0.0-beta.29 across workspace packages.
384
+ - dd73a4a: fix fn on stream semantics
385
+ - 0fa0e80: Allow query consumers to opt into non-blocking invalidation refetches.
386
+ - acfdc9e: Point development package exports at TypeScript sources while keeping published exports on compiled dist files.
387
+ - 9be71e1: fix: double guard
388
+ - a69da09: Publish from generated staging directories so release-only files are created outside the source package tree.
389
+ - 583393f: Default the stream `mutateStream` execute resolved value to the request's success type when no `final` schema is declared.
390
+
391
+ Previously the type defaulted to `void`, but the runtime already resolves with the last emitted value. Types now match runtime behaviour: `execute` returns `Final` if a `final` schema is set, otherwise the success type.
392
+
393
+ - 61a3931: Flush stream mutation write-deps once when the first write arrives, then again on settlement. Long-running streams can refresh queries like GetActiveJob without invalidating list queries on every subsequent item write.
394
+ - fa3533e: Keep the previous suspense value across reactive-arg atom switches.
395
+
396
+ A reactive arg re-points a resolved suspense query at a different family atom; the fresh atom starts `Initial` (no `previousSuccess` carried over), so the always-defined `data` computed found `undefined` and threw `Internal Error: suspense resolved without a latest value` during the next render flush. The always-defined ref now serves the last defined value across that transition (TanStack's keepPreviousData — Vue cannot re-suspend after mount); waiting/failure of the new fetch stays observable on the `result` ref. Applied to `.suspense()`, `.suspenseNew()` and `useAtomSuspense` via a shared `latestDefined` helper. It only throws when there has never been a value, which is unreachable once the suspense await resolved.
397
+
398
+ - b8b9080: update packages
399
+ - 57db551: Split `TaggedRequestFor` into `Query` and `Command` factories, and mark generated request classes with `type: "query" | "command"`.
400
+
401
+ Vue client helpers now expose query-only helpers (`query`, `suspense`, `fetch`) for query requests and mutation-only helpers (`mutate`, `fetch`) for command requests.
402
+
403
+ - dbcc53b: Refactor command invalidation typing: declare resources via `Command<Self, Resources>()`, pass `invalidatesQueries` as the optional 4th argument, and enforce exact `clientFor` invalidation resources when required.
404
+ - 18b915f: Default legacy TanStack queries to Effect-Equal-aware structural sharing.
405
+ - 74e6d40: Seed legacy TanStack suspense results into Vue query refs when the observer re-points mid-flight.
406
+ - 52b0b01: Configure Changesets fixed versioning for public packages.
407
+ - 140e192: Relax invalidation resource value constraints to allow arbitrary values while preserving query-only filtering in invalidation handling.
408
+ - 9992e70: pass options
409
+ - 256ae85: cleanup
410
+ - ac62e48: Route `useUpdateQuery` through the configured query cache so TanStack-backed legacy queries receive manual cache updates.
411
+ - 52b0b01: update effect to 4.0.0-beta.37 and drop the Schema Class disableValidation workaround now that the patched effect schema covers it
412
+ - fac725d: update effect to latest beta
413
+ - 3200fa8: apply the remaining formatting and autofix cleanup across the vue packages
414
+ - 01bab22: Work around tsgo failing to reduce `S.Codec.DecodingServices<X>` (`X extends Top ? X["DecodingServices"] : never`) in generic positions, which left `unknown` and polluted the `R` channel of client handlers and RPC middleware failure context. Since the schemas involved are already constrained to `S.Top`, read `["DecodingServices"]` directly in `RequestHandlerFor`, `TagClass.FailureContext`, and the Vue `MutationExt` / `QueryProjection` types.
415
+ - 2a86a17: improve tsgo compat: avoid deferred `Schema.Type`/`Codec.Encoded`/`Codec.DecodingServices`/`Codec.EncodingServices` conditional helpers in generic positions where the type parameter is already constrained to `Schema.Top`. Index the property directly (`X["Type"]`, `X["Encoded"]`, `X["DecodingServices"]`, …) so tsgo doesn't leak `unknown` into `Effect` channels (notably `R`).
416
+
417
+ Sites: `client/clientFor.ts` (`RequestHandlerFor`, `FinalTypeOf`, `ExtractResponse`, `ExtractEResponse`), `client/makeClient.ts` (`InputFromPayload`, `OutputFromSuccess`, `InvalidationConfigForCommand`, `TaggedRequestWithMeta` overloads), `rpc/MiddlewareMaker.ts` (`Errors`), `rpc/RpcMiddleware.ts` (`Failure`, `FailureContext`), `Schema/ext.ts` (`ReadonlySetFromArray`, `ReadonlyMapFromArray`), `infra/routing.ts` (`GetSuccessShape`, handlers, route matcher), `vue/makeClient.ts` (`MutationExt.project`, `MutationWithExtensions`, `QueryProjection`), `vue/routeParams.ts` (`parseRouteParams*`).
418
+
419
+ - c3299f7: update packages
420
+ - 547e2e1: Update effect packages to `4.0.0-beta.107` (from `beta.90`): `effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/atom-vue`, `@effect/sql-sqlite-node`, `@effect/vitest`, and `fast-check` to `^4.9.0`. Sync `repos/effect` subtree from `Effect-TS/effect` (effect-smol stopped publishing tags after beta.98).
421
+
422
+ API adaptations for beta.107:
423
+
424
+ - `concurrency: "inherit"` → `"unbounded"`
425
+ - `Schema.ErrorClass` / `TaggedErrorClass` → `Schema.Error` / `TaggedError`
426
+ - `Schema.LazyArbitrary` → `Schema.Arbitrary`
427
+ - `Schema.DateValid` / `isDateValid` removed (`Schema.Date` rejects invalid dates)
428
+ - `SchemaIssue` constructors no longer take `Option` (annotations + input)
429
+ - filter meta via `annotations.representation` instead of `annotations.meta`
430
+ - `context.defaultValue` → `context.constructorDefault` (single Link)
431
+ - Class detection via `~constructor` + static `identifier`
432
+ - Redacted detection via `representation.id`
433
+ - localized StandardSchema hooks updated for new issue/input model
434
+ - provide `NodeCrypto.layer` for cluster sqlite tests
435
+ - default `sync-effect` subtree URL → `Effect-TS/effect`
436
+
437
+ - 52b0b01: update effect to 4.0.0-beta.36, adapt to Option<A> revert from A | undefined
438
+ - Update effect packages to 4.0.0-beta.52
439
+ - 7ca66ce: Update to effect 4.0.0-beta.66. Remove `Yieldable` and `asEffect()` (service tags are now `Effect` directly).
440
+ - 57a1862: Update to effect 4.0.0-beta.67. Switch deps from `pkg.pr.new` snapshot back to npm beta tag.
441
+ - 3e855bc: Update Effect packages to `4.0.0-beta.83` (from `beta.74`): `effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/sql-sqlite-node`, `@effect/atom-vue`, `@effect/vitest`.
442
+
443
+ Adapt the infra workflow engines to beta.83 API changes:
444
+
445
+ - `Schema.Defect` is now a constructor function — use `S.Defect()` when building the deferred-exit codec (the bare constant no longer produces a usable schema and crashed `toType`).
446
+ - `Workflow` exposes its name as `_tag` instead of `name`. `WorkflowEngineSqlite`/`WorkflowEngineCosmos` now key the registry, codec caches, and persisted `workflow_name` off `workflow._tag`, fixing crash-recovery (stale-lease re-drive previously registered under an `undefined` key and never matched).
447
+
448
+ - 78d076a: Update effect packages to `4.0.0-beta.84` (`effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/atom-vue`, `@effect/sql-sqlite-node`, `@effect/vitest`).
449
+ - ffd140f: Update effect packages to `4.0.0-beta.86` (from `beta.84`): `effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/atom-vue`, `@effect/sql-sqlite-node`, `@effect/vitest`. No source changes required — typecheck and tests pass unchanged.
450
+ - e8842aa: Update effect packages to `4.0.0-beta.88` (from `beta.86`): `effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/atom-vue`, `@effect/sql-sqlite-node`, `@effect/vitest`. Also bump `@effect-app/cli` to `2.1.0-beta.35`. No source changes required — typecheck and tests pass unchanged.
451
+ - b6dda09: Update effect packages to `4.0.0-beta.90` (from `beta.88`): `effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/atom-vue`, `@effect/sql-sqlite-node`, `@effect/vitest`. No source changes required — typecheck and tests pass unchanged.
452
+ - 0263827: Update to effect `pkg.pr.new` snapshot at `a42ef66` (4.0.0-beta.66). Remove `Yieldable` and `asEffect()` (service tags are now `Effect` directly).
453
+ - 8bd5bfe: Update effect packages to `4.0.0-rc.112` (from `beta.107`): `effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/atom-vue`, `@effect/sql-sqlite-node`, `@effect/vitest`. Sync `repos/effect` subtree from `Effect-TS/effect` at `effect@4.0.0-rc.112`.
454
+
455
+ API adaptations for rc.112:
456
+
457
+ - cluster encoded driver `resetAddress` → batched `resetAddresses`
458
+ - Cosmos `unprocessedMessages` honors optional `limit` / `addresses` (only claimed rows are returned)
459
+ - Service Bus `Runners.make` supplies `codecFor` for schema-aware RPC serialization
460
+ - `pnpm subtree:effect` passes `--url https://github.com/Effect-TS/effect.git` (published CLI still defaults to effect-smol)
461
+ - JSON Schema check constraints are compacted onto the parent (`minLength`/`maxLength` instead of `allOf`)
462
+
463
+ - 413022d: Restore TanStack `placeholderData` / `initialData` as a display-level fallback in query views. While pending with no cached value, `data` now returns the resolved placeholder (with `select` applied when set); neither option is written to the atom cache.
464
+ - f052d38: Replace `(...) => Effect.gen` with `Effect.fnUntraced` in commander `withDefaultToast`.
465
+ - 1df5cf5: Wait for Vue query result refs to settle after TanStack suspense resolves.
466
+ - b241ae5: Merge client and server-driven cache invalidation keys into a single `Effect.forEach` pass so server keys always run regardless of whether client targets are empty or custom invalidation options are used.
467
+ - 677821a: Run projected query decoders through Effect so schemas that require services can resolve during legacy TanStack query refetches.
468
+ - 7328c76: add deprecation notices
469
+ - 7fd35e4: update tanstack/query
470
+ - 89b7d2f: `Command.withDefaultToastStream`: add `progress` option to update the waiting toast with progress text on each stream element
471
+ - Updated dependencies [439cbeb]
472
+ - Updated dependencies [da83c1f]
473
+ - Updated dependencies [b2df3fa]
474
+ - Updated dependencies [199e9a5]
475
+ - Updated dependencies [b035b1c]
476
+ - Updated dependencies [664e83d]
477
+ - Updated dependencies [a4dff57]
478
+ - Updated dependencies [ba4bdc3]
479
+ - Updated dependencies [52b0b01]
480
+ - Updated dependencies [9d3495e]
481
+ - Updated dependencies [3436d44]
482
+ - Updated dependencies [52b0b01]
483
+ - Updated dependencies [f317c5e]
484
+ - Updated dependencies [e585c9c]
485
+ - Updated dependencies [e4ff9a6]
486
+ - Updated dependencies [33b0544]
487
+ - Updated dependencies [99c43c4]
488
+ - Updated dependencies [52b0b01]
489
+ - Updated dependencies [08d092c]
490
+ - Updated dependencies [947fe20]
491
+ - Updated dependencies [21ac90a]
492
+ - Updated dependencies [32f05c8]
493
+ - Updated dependencies [6cfd83d]
494
+ - Updated dependencies [1c858d3]
495
+ - Updated dependencies [52b0b01]
496
+ - Updated dependencies [992d9fa]
497
+ - Updated dependencies [505bfa9]
498
+ - Updated dependencies [939bebc]
499
+ - Updated dependencies [ba789a2]
500
+ - Updated dependencies [ab289d4]
501
+ - Updated dependencies [52b0b01]
502
+ - Updated dependencies [e0c4835]
503
+ - Updated dependencies [32dbc54]
504
+ - Updated dependencies [0a0030f]
505
+ - Updated dependencies [0263827]
506
+ - Updated dependencies [0263827]
507
+ - Updated dependencies [aeb17bc]
508
+ - Updated dependencies [c0e5a1b]
509
+ - Updated dependencies [10b55ff]
510
+ - Updated dependencies [14aba14]
511
+ - Updated dependencies [a0075b8]
512
+ - Updated dependencies [f052d38]
513
+ - Updated dependencies [f233f3d]
514
+ - Updated dependencies [18bae5b]
515
+ - Updated dependencies [f313973]
516
+ - Updated dependencies [edc52e4]
517
+ - Updated dependencies [ea1bd46]
518
+ - Updated dependencies [85a8275]
519
+ - Updated dependencies [50b022e]
520
+ - Updated dependencies [52b0b01]
521
+ - Updated dependencies [47e3742]
522
+ - Updated dependencies [458bb1b]
523
+ - Updated dependencies [3365758]
524
+ - Updated dependencies [54ec1ef]
525
+ - Updated dependencies [f21190c]
526
+ - Updated dependencies [0d4e0b8]
527
+ - Updated dependencies [31739d7]
528
+ - Updated dependencies [0b21a02]
529
+ - Updated dependencies [bbaa67e]
530
+ - Updated dependencies [a211c12]
531
+ - Updated dependencies [347af48]
532
+ - Updated dependencies [bd26832]
533
+ - Updated dependencies [3053760]
534
+ - Updated dependencies [52b0b01]
535
+ - Updated dependencies [55c6572]
536
+ - Updated dependencies [f88ea34]
537
+ - Updated dependencies [52b0b01]
538
+ - Updated dependencies [c991be1]
539
+ - Updated dependencies [d738811]
540
+ - Updated dependencies [8fffc3c]
541
+ - Updated dependencies [52b0b01]
542
+ - Updated dependencies [a788432]
543
+ - Updated dependencies [10e90d5]
544
+ - Updated dependencies [4b95009]
545
+ - Updated dependencies [52b0b01]
546
+ - Updated dependencies [178480a]
547
+ - Updated dependencies [985176b]
548
+ - Updated dependencies [dc465e3]
549
+ - Updated dependencies [21017d5]
550
+ - Updated dependencies [0541f0d]
551
+ - Updated dependencies [2ebf8ae]
552
+ - Updated dependencies [8c645d5]
553
+ - Updated dependencies [8cb3de4]
554
+ - Updated dependencies [30c512d]
555
+ - Updated dependencies [50b022e]
556
+ - Updated dependencies [52b0b01]
557
+ - Updated dependencies [b952f19]
558
+ - Updated dependencies [a37aa38]
559
+ - Updated dependencies [52b0b01]
560
+ - Updated dependencies [c1e73de]
561
+ - Updated dependencies [d867272]
562
+ - Updated dependencies [774a9b3]
563
+ - Updated dependencies [d67d17a]
564
+ - Updated dependencies [8f09f77]
565
+ - Updated dependencies [50ce7e6]
566
+ - Updated dependencies [d71d976]
567
+ - Updated dependencies [2aa8e5e]
568
+ - Updated dependencies [29a1e57]
569
+ - Updated dependencies [186de3a]
570
+ - Updated dependencies [52b0b01]
571
+ - Updated dependencies [52b0b01]
572
+ - Updated dependencies [6fff09c]
573
+ - Updated dependencies [11422f8]
574
+ - Updated dependencies [eb28ea5]
575
+ - Updated dependencies [52b0b01]
576
+ - Updated dependencies [8f1cf6a]
577
+ - Updated dependencies [ee9694e]
578
+ - Updated dependencies [52a31dd]
579
+ - Updated dependencies [52b0b01]
580
+ - Updated dependencies [ca94edf]
581
+ - Updated dependencies [d1c15d3]
582
+ - Updated dependencies [a1b59bc]
583
+ - Updated dependencies [dc07df5]
584
+ - Updated dependencies [0fe925d]
585
+ - Updated dependencies [40585ca]
586
+ - Updated dependencies [5ac46cb]
587
+ - Updated dependencies [a354345]
588
+ - Updated dependencies [52b0b01]
589
+ - Updated dependencies [186de3a]
590
+ - Updated dependencies [48d9f36]
591
+ - Updated dependencies [52b0b01]
592
+ - Updated dependencies [52b0b01]
593
+ - Updated dependencies [d31253f]
594
+ - Updated dependencies [5615e47]
595
+ - Updated dependencies [3e46e7b]
596
+ - Updated dependencies [cec026d]
597
+ - Updated dependencies [88838fb]
598
+ - Updated dependencies [3bae238]
599
+ - Updated dependencies [b2e438f]
600
+ - Updated dependencies [f150cf9]
601
+ - Updated dependencies [0c88f78]
602
+ - Updated dependencies [d16845e]
603
+ - Updated dependencies [261470f]
604
+ - Updated dependencies [beae3a0]
605
+ - Updated dependencies [8792221]
606
+ - Updated dependencies [1f103b2]
607
+ - Updated dependencies [0054611]
608
+ - Updated dependencies [7bd8234]
609
+ - Updated dependencies [54bfc59]
610
+ - Updated dependencies [ad0ede6]
611
+ - Updated dependencies [89d8b3a]
612
+ - Updated dependencies [52b0b01]
613
+ - Updated dependencies [08d2e70]
614
+ - Updated dependencies [9ea024d]
615
+ - Updated dependencies [5f9cd6a]
616
+ - Updated dependencies [6252808]
617
+ - Updated dependencies [e6f2341]
618
+ - Updated dependencies [821468d]
619
+ - Updated dependencies [2495ace]
620
+ - Updated dependencies [0b3e00e]
621
+ - Updated dependencies [52b0b01]
622
+ - Updated dependencies [c215db8]
623
+ - Updated dependencies [12abb55]
624
+ - Updated dependencies [0cff7c1]
625
+ - Updated dependencies [c1a6fdc]
626
+ - Updated dependencies [8ae8b53]
627
+ - Updated dependencies [a5248a9]
628
+ - Updated dependencies [0e824ef]
629
+ - Updated dependencies [52b0b01]
630
+ - Updated dependencies [eb06b32]
631
+ - Updated dependencies [52b0b01]
632
+ - Updated dependencies [52b0b01]
633
+ - Updated dependencies [025de47]
634
+ - Updated dependencies [acfdc9e]
635
+ - Updated dependencies [1186b09]
636
+ - Updated dependencies [a69da09]
637
+ - Updated dependencies [3c1f52d]
638
+ - Updated dependencies [3a8c710]
639
+ - Updated dependencies [186de3a]
640
+ - Updated dependencies [0054611]
641
+ - Updated dependencies [583393f]
642
+ - Updated dependencies [828d264]
643
+ - Updated dependencies [7fa3045]
644
+ - Updated dependencies [3dc0d2a]
645
+ - Updated dependencies [459697f]
646
+ - Updated dependencies [738b482]
647
+ - Updated dependencies [3eda52e]
648
+ - Updated dependencies [b52b424]
649
+ - Updated dependencies [7c25dbb]
650
+ - Updated dependencies [b8b9080]
651
+ - Updated dependencies [b90fa30]
652
+ - Updated dependencies [57db551]
653
+ - Updated dependencies [3613e87]
654
+ - Updated dependencies [52b0b01]
655
+ - Updated dependencies [7119320]
656
+ - Updated dependencies [e944bca]
657
+ - Updated dependencies [dbcc53b]
658
+ - Updated dependencies [52b0b01]
659
+ - Updated dependencies [140e192]
660
+ - Updated dependencies [9992e70]
661
+ - Updated dependencies [24f0a5a]
662
+ - Updated dependencies [256ae85]
663
+ - Updated dependencies [8bd9a11]
664
+ - Updated dependencies [52b0b01]
665
+ - Updated dependencies [fac725d]
666
+ - Updated dependencies [412f08b]
667
+ - Updated dependencies [79eb019]
668
+ - Updated dependencies [6ae3050]
669
+ - Updated dependencies [f353d48]
670
+ - Updated dependencies [52b0b01]
671
+ - Updated dependencies [01bab22]
672
+ - Updated dependencies [2a86a17]
673
+ - Updated dependencies [52b0b01]
674
+ - Updated dependencies [c3299f7]
675
+ - Updated dependencies [23a7167]
676
+ - Updated dependencies [e71eb78]
677
+ - Updated dependencies [6b57330]
678
+ - Updated dependencies [e2d00b5]
679
+ - Updated dependencies [547e2e1]
680
+ - Updated dependencies [52b0b01]
681
+ - Updated dependencies
682
+ - Updated dependencies [ea32222]
683
+ - Updated dependencies [7ca66ce]
684
+ - Updated dependencies [57a1862]
685
+ - Updated dependencies [3e855bc]
686
+ - Updated dependencies [78d076a]
687
+ - Updated dependencies [ffd140f]
688
+ - Updated dependencies [e8842aa]
689
+ - Updated dependencies [b6dda09]
690
+ - Updated dependencies [0263827]
691
+ - Updated dependencies [8bd5bfe]
692
+ - Updated dependencies [2231ef8]
693
+ - Updated dependencies [c7bbc41]
694
+ - Updated dependencies [52b0b01]
695
+ - Updated dependencies [52b0b01]
696
+ - Updated dependencies [52b0b01]
697
+ - Updated dependencies [52b0b01]
698
+ - effect-app@4.0.0
699
+
700
+ ## 4.0.0-beta.333
701
+
702
+ ### Patch Changes
703
+
704
+ - Updated dependencies [e2d00b5]
705
+ - effect-app@4.0.0-beta.333
706
+
707
+ ## 4.0.0-beta.332
708
+
709
+ ### Patch Changes
710
+
711
+ - Updated dependencies [6b57330]
712
+ - effect-app@4.0.0-beta.332
713
+
714
+ ## 4.0.0-beta.331
715
+
716
+ ### Patch Changes
717
+
718
+ - effect-app@4.0.0-beta.331
719
+
720
+ ## 4.0.0-beta.330
721
+
722
+ ### Patch Changes
723
+
724
+ - Updated dependencies [48d9f36]
725
+ - effect-app@4.0.0-beta.330
726
+
727
+ ## 4.0.0-beta.329
728
+
729
+ ### Patch Changes
730
+
731
+ - Updated dependencies [459697f]
732
+ - effect-app@4.0.0-beta.329
733
+
734
+ ## 4.0.0-beta.328
735
+
736
+ ### Patch Changes
737
+
738
+ - Updated dependencies [3a8c710]
739
+ - effect-app@4.0.0-beta.328
740
+
741
+ ## 4.0.0-beta.327
742
+
743
+ ### Patch Changes
744
+
745
+ - effect-app@4.0.0-beta.327
746
+
747
+ ## 4.0.0-beta.326
748
+
749
+ ### Patch Changes
750
+
751
+ - Updated dependencies [2ebf8ae]
752
+ - effect-app@4.0.0-beta.326
753
+
754
+ ## 4.0.0-beta.325
755
+
756
+ ### Patch Changes
757
+
758
+ - Updated dependencies [f233f3d]
759
+ - effect-app@4.0.0-beta.325
760
+
761
+ ## 4.0.0-beta.324
762
+
763
+ ### Patch Changes
764
+
765
+ - Updated dependencies [a0075b8]
766
+ - effect-app@4.0.0-beta.324
767
+
768
+ ## 4.0.0-beta.323
769
+
770
+ ### Patch Changes
771
+
772
+ - Updated dependencies [ab289d4]
773
+ - effect-app@4.0.0-beta.323
774
+
775
+ ## 4.0.0-beta.322
776
+
777
+ ### Patch Changes
778
+
779
+ - Updated dependencies [2231ef8]
780
+ - effect-app@4.0.0-beta.322
781
+
782
+ ## 4.0.0-beta.321
783
+
784
+ ### Patch Changes
785
+
786
+ - Updated dependencies [18bae5b]
787
+ - effect-app@4.0.0-beta.321
788
+
789
+ ## 4.0.0-beta.320
790
+
791
+ ### Patch Changes
792
+
793
+ - effect-app@4.0.0-beta.320
794
+
795
+ ## 4.0.0-beta.319
796
+
797
+ ### Patch Changes
798
+
799
+ - effect-app@4.0.0-beta.319
800
+
801
+ ## 4.0.0-beta.318
802
+
803
+ ### Patch Changes
804
+
805
+ - 8bd5bfe: Update effect packages to `4.0.0-rc.112` (from `beta.107`): `effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/atom-vue`, `@effect/sql-sqlite-node`, `@effect/vitest`. Sync `repos/effect` subtree from `Effect-TS/effect` at `effect@4.0.0-rc.112`.
806
+
807
+ API adaptations for rc.112:
808
+
809
+ - cluster encoded driver `resetAddress` → batched `resetAddresses`
810
+ - Cosmos `unprocessedMessages` honors optional `limit` / `addresses` (only claimed rows are returned)
811
+ - Service Bus `Runners.make` supplies `codecFor` for schema-aware RPC serialization
812
+ - `pnpm subtree:effect` passes `--url https://github.com/Effect-TS/effect.git` (published CLI still defaults to effect-smol)
813
+ - JSON Schema check constraints are compacted onto the parent (`minLength`/`maxLength` instead of `allOf`)
814
+
815
+ - Updated dependencies [8bd5bfe]
816
+ - effect-app@4.0.0-beta.318
817
+
818
+ ## 4.0.0-beta.317
819
+
820
+ ### Patch Changes
821
+
822
+ - Updated dependencies [186de3a]
823
+ - Updated dependencies [186de3a]
824
+ - Updated dependencies [186de3a]
825
+ - effect-app@4.0.0-beta.317
826
+
827
+ ## 4.0.0-beta.316
828
+
829
+ ### Patch Changes
830
+
831
+ - effect-app@4.0.0-beta.316
832
+
833
+ ## 4.0.0-beta.315
834
+
835
+ ### Patch Changes
836
+
837
+ - effect-app@4.0.0-beta.315
838
+
839
+ ## 4.0.0-beta.314
840
+
841
+ ### Patch Changes
842
+
843
+ - 61a3931: Flush stream mutation write-deps once when the first write arrives, then again on settlement. Long-running streams can refresh queries like GetActiveJob without invalidating list queries on every subsequent item write.
844
+ - effect-app@4.0.0-beta.314
845
+
846
+ ## 4.0.0-beta.313
847
+
848
+ ### Minor Changes
849
+
850
+ - eddda2e: Invalidate only mounted queries (TanStack `refetchType: "active"`). Idle `gcTime` entries are marked stale and refetch on remount. `invalidateAndAwait` still waits for observed refetches to finish.
851
+
852
+ ### Patch Changes
853
+
854
+ - effect-app@4.0.0-beta.313
855
+
856
+ ## 4.0.0-beta.312
857
+
858
+ ### Patch Changes
859
+
860
+ - Updated dependencies [9ea024d]
861
+ - effect-app@4.0.0-beta.312
862
+
863
+ ## 4.0.0-beta.311
864
+
865
+ ### Patch Changes
866
+
867
+ - 547e2e1: Update effect packages to `4.0.0-beta.107` (from `beta.90`): `effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/atom-vue`, `@effect/sql-sqlite-node`, `@effect/vitest`, and `fast-check` to `^4.9.0`. Sync `repos/effect` subtree from `Effect-TS/effect` (effect-smol stopped publishing tags after beta.98).
868
+
869
+ API adaptations for beta.107:
870
+
871
+ - `concurrency: "inherit"` → `"unbounded"`
872
+ - `Schema.ErrorClass` / `TaggedErrorClass` → `Schema.Error` / `TaggedError`
873
+ - `Schema.LazyArbitrary` → `Schema.Arbitrary`
874
+ - `Schema.DateValid` / `isDateValid` removed (`Schema.Date` rejects invalid dates)
875
+ - `SchemaIssue` constructors no longer take `Option` (annotations + input)
876
+ - filter meta via `annotations.representation` instead of `annotations.meta`
877
+ - `context.defaultValue` → `context.constructorDefault` (single Link)
878
+ - Class detection via `~constructor` + static `identifier`
879
+ - Redacted detection via `representation.id`
880
+ - localized StandardSchema hooks updated for new issue/input model
881
+ - provide `NodeCrypto.layer` for cluster sqlite tests
882
+ - default `sync-effect` subtree URL → `Effect-TS/effect`
883
+
884
+ - Updated dependencies [547e2e1]
885
+ - effect-app@4.0.0-beta.311
886
+
887
+ ## 4.0.0-beta.310
888
+
889
+ ### Patch Changes
890
+
891
+ - 0fa0e80: Allow query consumers to opt into non-blocking invalidation refetches.
892
+ - effect-app@4.0.0-beta.310
893
+
894
+ ## 4.0.0-beta.309
895
+
896
+ ### Minor Changes
897
+
898
+ - 99c43c4: Add query-owned live invalidation with recorded dependency filtering, connect-before-fetch coordination, race buffering, and configurable client-side coalescing.
899
+
900
+ ### Patch Changes
901
+
902
+ - Updated dependencies [99c43c4]
903
+ - effect-app@4.0.0-beta.309
904
+
905
+ ## 4.0.0-beta.308
906
+
907
+ ### Patch Changes
908
+
909
+ - effect-app@4.0.0-beta.308
910
+
911
+ ## 4.0.0-beta.307
912
+
913
+ ### Patch Changes
914
+
915
+ - 40585ca: Keep tag-aware `ProjectableFromDomain` for `projectComputed` only; restore loose key-presence guard for `project()` so view DTOs with reshaped fields keep typechecking.
916
+ - ad0ede6: Keep tag-aware `ProjectableGuard` on both `project()` and `projectComputed` (no loose key-only paper-over).
917
+
918
+ Hardening:
919
+
920
+ - single-literal tags allow dual same-tag domain variants (KeysOfUnion of matched members)
921
+ - multi-tag / string tags still require keys on every matched member
922
+ - optional projection/domain keys checked by key presence only (not optional-assignability)
923
+
924
+ Call sites must project domain-owned fields per tagged state.
925
+
926
+ - Updated dependencies [40585ca]
927
+ - Updated dependencies [ad0ede6]
928
+ - effect-app@4.0.0-beta.307
929
+
930
+ ## 4.0.0-beta.306
931
+
932
+ ### Patch Changes
933
+
934
+ - 0fe925d: Tag-aware `ProjectableFromDomain` for `projectComputed`: projection Encoded fields must exist on the matching domain tagged state (or be computed). Prevents Overview.List SchemaErrors when cancel states omit workflow lock fields like `activeRequest`.
935
+ - Updated dependencies [0fe925d]
936
+ - effect-app@4.0.0-beta.306
937
+
938
+ ## 4.0.0-beta.305
939
+
940
+ ### Patch Changes
941
+
942
+ - Updated dependencies [8bd9a11]
943
+ - effect-app@4.0.0-beta.305
944
+
945
+ ## 4.0.0-beta.304
946
+
947
+ ### Patch Changes
948
+
949
+ - Updated dependencies [412f08b]
950
+ - effect-app@4.0.0-beta.304
951
+
952
+ ## 4.0.0-beta.303
953
+
954
+ ### Patch Changes
955
+
956
+ - Updated dependencies [33b0544]
957
+ - effect-app@4.0.0-beta.303
958
+
959
+ ## 4.0.0-beta.302
960
+
961
+ ### Patch Changes
962
+
963
+ - Updated dependencies [c0e5a1b]
964
+ - effect-app@4.0.0-beta.302
965
+
966
+ ## 4.0.0-beta.301
967
+
968
+ ### Patch Changes
969
+
970
+ - 413022d: Restore TanStack `placeholderData` / `initialData` as a display-level fallback in query views. While pending with no cached value, `data` now returns the resolved placeholder (with `select` applied when set); neither option is written to the atom cache.
971
+ - effect-app@4.0.0-beta.301
972
+
973
+ ## 4.0.0-beta.300
974
+
975
+ ### Patch Changes
976
+
977
+ - effect-app@4.0.0-beta.300
978
+
979
+ ## 4.0.0-beta.299
980
+
981
+ ### Patch Changes
982
+
983
+ - effect-app@4.0.0-beta.299
984
+
985
+ ## 4.0.0-beta.298
986
+
987
+ ### Patch Changes
988
+
989
+ - 08d092c: Update Atom query caches in memory and accumulate stream invalidations so live events do not cause repeated RPC refetches.
990
+ - Updated dependencies [08d092c]
991
+ - effect-app@4.0.0-beta.298
992
+
993
+ ## 4.0.0-beta.297
994
+
995
+ ### Patch Changes
996
+
997
+ - Updated dependencies [30c512d]
998
+ - effect-app@4.0.0-beta.297
999
+
1000
+ ## 4.0.0-beta.296
1001
+
1002
+ ### Patch Changes
1003
+
1004
+ - Updated dependencies [e0c4835]
1005
+ - effect-app@4.0.0-beta.296
1006
+
1007
+ ## 4.0.0-beta.295
1008
+
1009
+ ### Patch Changes
1010
+
1011
+ - Updated dependencies [eb06b32]
1012
+ - effect-app@4.0.0-beta.295
1013
+
1014
+ ## 4.0.0-beta.294
1015
+
1016
+ ### Patch Changes
1017
+
1018
+ - 7519318: Fix interrupt repro tests to observe expected suspense interruption rejections.
1019
+ - Updated dependencies [a211c12]
1020
+ - effect-app@4.0.0-beta.294
1021
+
1022
+ ## 4.0.0-beta.293
1023
+
1024
+ ### Patch Changes
1025
+
1026
+ - Updated dependencies [d1c15d3]
1027
+ - effect-app@4.0.0-beta.293
1028
+
1029
+ ## 4.0.0-beta.292
1030
+
1031
+ ### Patch Changes
1032
+
1033
+ - 4622a75: Recover interrupted queries and classify query-side suspense interrupts.
1034
+
1035
+ - A query fetch that is interrupted (a subscriber lost interest, a refresh superseded it, or the component navigated) can be left `waiting = true` with no fiber running — effect-core hides the interrupt by removing the result-observer before interrupting, so it is never written back. `isStaleResult`/swr short-circuit on `waiting`, so that state is never revalidated and becomes **terminal** (a cold suspense read throws → blank page; a warm one serves stale forever). `recoverStuckWaitingOnMount` now treats a `waiting` result with `inFlight === 0` as not-yet-fetched and refetches it on mount. Interrupts are **not** auto-retried — recovery only fires for a genuine (re)mounting observer, and a live in-flight fetch (`inFlight > 0`) is joined, not superseded. Concurrent mounts share a single recovery fetch. Exposes `queryFetchStates` / `QueryFetchState`.
1036
+
1037
+ - `useSuspenseQuery` / `useSuspenseQueryNew` now convert an interrupt-only failure that settles **while the component is still mounted** into a typed `SuspenseInterruptedError` (a `Data.TaggedError` carrying the original cause). Such an interrupt cannot be a navigation/unmount cancel — that path interrupts the suspense fiber itself and never yields a still-mounted `Failure` exit — so it is query-side (e.g. a server RPC interrupt `Exit` delivered over a 200). Error boundaries can render it ("the request was interrupted — reload?") instead of silencing it into a blank page, while continuing to silence genuine navigation interrupts. Adds `SuspenseInterruptedError` / `isSuspenseInterruptedError`.
1038
+ - effect-app@4.0.0-beta.292
1039
+
1040
+ ## 4.0.0-beta.291
1041
+
1042
+ ### Patch Changes
1043
+
1044
+ - fa3533e: Keep the previous suspense value across reactive-arg atom switches.
1045
+
1046
+ A reactive arg re-points a resolved suspense query at a different family atom; the fresh atom starts `Initial` (no `previousSuccess` carried over), so the always-defined `data` computed found `undefined` and threw `Internal Error: suspense resolved without a latest value` during the next render flush. The always-defined ref now serves the last defined value across that transition (TanStack's keepPreviousData — Vue cannot re-suspend after mount); waiting/failure of the new fetch stays observable on the `result` ref. Applied to `.suspense()`, `.suspenseNew()` and `useAtomSuspense` via a shared `latestDefined` helper. It only throws when there has never been a value, which is unreachable once the suspense await resolved.
1047
+
1048
+ - effect-app@4.0.0-beta.291
1049
+
1050
+ ## 4.0.0-beta.290
1051
+
1052
+ ### Patch Changes
1053
+
1054
+ - Updated dependencies [dc07df5]
1055
+ - effect-app@4.0.0-beta.290
1056
+
1057
+ ## 4.0.0-beta.289
1058
+
1059
+ ### Patch Changes
1060
+
1061
+ - Updated dependencies [a1b59bc]
1062
+ - effect-app@4.0.0-beta.289
1063
+
1064
+ ## 4.0.0-beta.288
1065
+
1066
+ ### Minor Changes
1067
+
1068
+ - aeb17bc: Add `disableQueryInvalidation` flag to Command config for background saves.
1069
+
1070
+ Set `disableQueryInvalidation: true` in a `Req.Command` config (3rd argument)
1071
+ to suppress all client-side query invalidation for that command — client
1072
+ `invalidatesQueries` callbacks, server-returned `metadata.invalidateQueries`,
1073
+ and repository-derived write-dependency matching are all skipped. Use for
1074
+ background saves (e.g. debounced auto-save) whose writes should not trigger
1075
+ query refetches.
1076
+
1077
+ - `InvalidationConfig` gains `disableQueryInvalidation?: boolean`.
1078
+ - `RequestHandlerWithInput` gains `disableQueryInvalidation?: boolean`,
1079
+ propagated from `Request.config` by `ApiClientFactory.makeFor`.
1080
+ - `invalidateCache` early-returns `Effect.void` when the flag is set,
1081
+ applying to both regular and stream mutations.
1082
+
1083
+ ### Patch Changes
1084
+
1085
+ - aeb17bc: Preserve Effect parent spans across query refetch and invalidation.
1086
+ - Updated dependencies [aeb17bc]
1087
+ - effect-app@4.0.0-beta.288
1088
+
1089
+ ## 4.0.0-beta.287
1090
+
1091
+ ### Patch Changes
1092
+
1093
+ - Updated dependencies [261470f]
1094
+ - effect-app@4.0.0-beta.287
1095
+
1096
+ ## 4.0.0-beta.286
1097
+
1098
+ ### Patch Changes
1099
+
1100
+ - b6dda09: Update effect packages to `4.0.0-beta.90` (from `beta.88`): `effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/atom-vue`, `@effect/sql-sqlite-node`, `@effect/vitest`. No source changes required — typecheck and tests pass unchanged.
1101
+ - Updated dependencies [b6dda09]
1102
+ - effect-app@4.0.0-beta.286
1103
+
1104
+ ## 4.0.0-beta.285
1105
+
1106
+ ### Patch Changes
1107
+
1108
+ - 7bd8234: Use set-backed data dependencies and provide request-scoped dependency services through a shared root-checked helper.
1109
+ - Updated dependencies [7bd8234]
1110
+ - effect-app@4.0.0-beta.285
1111
+
1112
+ ## 4.0.0-beta.284
1113
+
1114
+ ### Patch Changes
1115
+
1116
+ - dd239fa: fix atom invalidation
1117
+ - effect-app@4.0.0-beta.284
1118
+
1119
+ ## 4.0.0-beta.283
1120
+
1121
+ ### Minor Changes
1122
+
1123
+ - 0054611: Derive query invalidation from repository read/write dependencies and propagate dependency metadata through RPC clients.
1124
+
1125
+ ### Patch Changes
1126
+
1127
+ - Updated dependencies [0054611]
1128
+ - Updated dependencies [0054611]
1129
+ - effect-app@4.0.0-beta.283
1130
+
1131
+ ## 4.0.0-beta.282
1132
+
1133
+ ### Patch Changes
1134
+
1135
+ - e8842aa: Update effect packages to `4.0.0-beta.88` (from `beta.86`): `effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/atom-vue`, `@effect/sql-sqlite-node`, `@effect/vitest`. Also bump `@effect-app/cli` to `2.1.0-beta.35`. No source changes required — typecheck and tests pass unchanged.
1136
+ - Updated dependencies [b2df3fa]
1137
+ - Updated dependencies [f150cf9]
1138
+ - Updated dependencies [e8842aa]
1139
+ - effect-app@4.0.0-beta.282
1140
+
1141
+ ## 4.0.0-beta.281
1142
+
1143
+ ### Patch Changes
1144
+
1145
+ - ffd140f: Update effect packages to `4.0.0-beta.86` (from `beta.84`): `effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/atom-vue`, `@effect/sql-sqlite-node`, `@effect/vitest`. No source changes required — typecheck and tests pass unchanged.
1146
+ - Updated dependencies [ffd140f]
1147
+ - effect-app@4.0.0-beta.281
1148
+
1149
+ ## 4.0.0-beta.280
1150
+
1151
+ ### Patch Changes
1152
+
1153
+ - Updated dependencies [3eda52e]
1154
+ - effect-app@4.0.0-beta.280
1155
+
1156
+ ## 4.0.0-beta.279
1157
+
1158
+ ### Patch Changes
1159
+
1160
+ - Updated dependencies [5f9cd6a]
1161
+ - effect-app@4.0.0-beta.279
1162
+
1163
+ ## 4.0.0-beta.278
1164
+
1165
+ ### Patch Changes
1166
+
1167
+ - a354345: Move release tsconfig flattening from publish to pack lifecycle so package configs are restored before registry upload/auth can fail.
1168
+ - a69da09: Publish from generated staging directories so release-only files are created outside the source package tree.
1169
+ - 18b915f: Default legacy TanStack queries to Effect-Equal-aware structural sharing.
1170
+ - Updated dependencies [a354345]
1171
+ - Updated dependencies [a69da09]
1172
+ - effect-app@4.0.0-beta.278
1173
+
1174
+ ## 4.0.0-beta.277
1175
+
1176
+ ### Patch Changes
1177
+
1178
+ - 74e6d40: Seed legacy TanStack suspense results into Vue query refs when the observer re-points mid-flight.
1179
+ - effect-app@4.0.0-beta.277
1180
+
1181
+ ## 4.0.0-beta.276
1182
+
1183
+ ### Patch Changes
1184
+
1185
+ - 32f05c8: Remove unused dependency declarations from package manifests.
1186
+ - Updated dependencies [32f05c8]
1187
+ - effect-app@4.0.0-beta.276
1188
+
1189
+ ## 4.0.0-beta.275
1190
+
1191
+ ### Patch Changes
1192
+
1193
+ - a74a894: Fix atom-query suspense cleanup so per-observer wrappers unsubscribe on unmount while cached query atoms keep their idle TTL.
1194
+ - effect-app@4.0.0-beta.275
1195
+
1196
+ ## 4.0.0-beta.274
1197
+
1198
+ ### Patch Changes
1199
+
1200
+ - ac62e48: Route `useUpdateQuery` through the configured query cache so TanStack-backed legacy queries receive manual cache updates.
1201
+ - 677821a: Run projected query decoders through Effect so schemas that require services can resolve during legacy TanStack query refetches.
1202
+ - effect-app@4.0.0-beta.274
1203
+
1204
+ ## 4.0.0-beta.273
1205
+
1206
+ ### Patch Changes
1207
+
1208
+ - 664e83d: Add Atom-native Vue query APIs, stream query pull atoms, and a TanStack-backed legacy query engine toggle.
1209
+ - Updated dependencies [664e83d]
1210
+ - Updated dependencies [e4ff9a6]
1211
+ - effect-app@4.0.0-beta.273
1212
+
1213
+ ## 4.0.0-beta.272
1214
+
1215
+ ### Patch Changes
1216
+
1217
+ - Updated dependencies [21ac90a]
1218
+ - effect-app@4.0.0-beta.272
1219
+
1220
+ ## 4.0.0-beta.271
1221
+
1222
+ ### Patch Changes
1223
+
1224
+ - Updated dependencies [939bebc]
1225
+ - effect-app@4.0.0-beta.271
1226
+
1227
+ ## 4.0.0-beta.270
1228
+
1229
+ ### Patch Changes
1230
+
1231
+ - 78d076a: Update effect packages to `4.0.0-beta.84` (`effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/atom-vue`, `@effect/sql-sqlite-node`, `@effect/vitest`).
1232
+ - Updated dependencies [78d076a]
1233
+ - effect-app@4.0.0-beta.270
1234
+
1235
+ ## 4.0.0-beta.269
1236
+
1237
+ ### Patch Changes
1238
+
1239
+ - Updated dependencies [50b022e]
1240
+ - Updated dependencies [50b022e]
1241
+ - effect-app@4.0.0-beta.269
1242
+
1243
+ ## 4.0.0-beta.268
1244
+
1245
+ ### Patch Changes
1246
+
1247
+ - acfdc9e: Point development package exports at TypeScript sources while keeping published exports on compiled dist files.
1248
+ - Updated dependencies [acfdc9e]
1249
+ - effect-app@4.0.0-beta.268
1250
+
1251
+ ## 4.0.0-beta.267
1252
+
1253
+ ### Patch Changes
1254
+
1255
+ - 1df5cf5: Wait for Vue query result refs to settle after TanStack suspense resolves.
1256
+ - Updated dependencies [23a7167]
1257
+ - effect-app@4.0.0-beta.267
1258
+
1259
+ ## 4.0.0-beta.266
1260
+
1261
+ ### Patch Changes
1262
+
1263
+ - Updated dependencies [bbaa67e]
1264
+ - effect-app@4.0.0-beta.266
1265
+
1266
+ ## 4.0.0-beta.265
1267
+
1268
+ ### Patch Changes
1269
+
1270
+ - 3e855bc: Update Effect packages to `4.0.0-beta.83` (from `beta.74`): `effect`, `@effect/platform-node`, `@effect/platform-browser`, `@effect/sql-sqlite-node`, `@effect/atom-vue`, `@effect/vitest`.
1271
+
1272
+ Adapt the infra workflow engines to beta.83 API changes:
1273
+
1274
+ - `Schema.Defect` is now a constructor function — use `S.Defect()` when building the deferred-exit codec (the bare constant no longer produces a usable schema and crashed `toType`).
1275
+ - `Workflow` exposes its name as `_tag` instead of `name`. `WorkflowEngineSqlite`/`WorkflowEngineCosmos` now key the registry, codec caches, and persisted `workflow_name` off `workflow._tag`, fixing crash-recovery (stale-lease re-drive previously registered under an `undefined` key and never matched).
1276
+
1277
+ - Updated dependencies [3e855bc]
1278
+ - effect-app@4.0.0-beta.265
1279
+
1280
+ ## 4.0.0-beta.264
1281
+
1282
+ ### Patch Changes
1283
+
1284
+ - effect-app@4.0.0-beta.264
1285
+
1286
+ ## 4.0.0-beta.263
1287
+
1288
+ ### Patch Changes
1289
+
1290
+ - effect-app@4.0.0-beta.263
1291
+
1292
+ ## 4.0.0-beta.262
1293
+
1294
+ ### Patch Changes
1295
+
1296
+ - 55c6572: update packages
1297
+ - Updated dependencies [55c6572]
1298
+ - effect-app@4.0.0-beta.262
1299
+
1300
+ ## 4.0.0-beta.261
1301
+
1302
+ ### Patch Changes
1303
+
1304
+ - effect-app@4.0.0-beta.261
1305
+
1306
+ ## 4.0.0-beta.260
1307
+
1308
+ ### Patch Changes
1309
+
1310
+ - bogus
1311
+ - Updated dependencies
1312
+ - effect-app@4.0.0-beta.260
1313
+
1314
+ ## 4.0.0-beta.259
1315
+
1316
+ ### Patch Changes
1317
+
1318
+ - effect-app@4.0.0-beta.259
1319
+
1320
+ ## 4.0.0-beta.258
1321
+
1322
+ ### Patch Changes
1323
+
1324
+ - effect-app@4.0.0-beta.258
1325
+
1326
+ ## 4.0.0-beta.257
1327
+
1328
+ ### Patch Changes
1329
+
1330
+ - Updated dependencies [e71eb78]
1331
+ - effect-app@4.0.0-beta.257
1332
+
1333
+ ## 4.0.0-beta.256
1334
+
1335
+ ### Patch Changes
1336
+
1337
+ - Updated dependencies [347af48]
1338
+ - effect-app@4.0.0-beta.256
1339
+
1340
+ ## 4.0.0-beta.255
1341
+
1342
+ ### Patch Changes
1343
+
1344
+ - Updated dependencies [52a31dd]
1345
+ - effect-app@4.0.0-beta.255
1346
+
1347
+ ## 4.0.0-beta.254
1348
+
1349
+ ### Patch Changes
1350
+
1351
+ - Updated dependencies [29a1e57]
1352
+ - effect-app@4.0.0-beta.254
1353
+
1354
+ ## 4.0.0-beta.253
1355
+
1356
+ ### Patch Changes
1357
+
1358
+ - Updated dependencies [b90fa30]
1359
+ - effect-app@4.0.0-beta.253
1360
+
1361
+ ## 4.0.0-beta.252
1362
+
1363
+ ### Patch Changes
1364
+
1365
+ - Updated dependencies [a788432]
1366
+ - effect-app@4.0.0-beta.252
1367
+
1368
+ ## 4.0.0-beta.251
1369
+
1370
+ ### Patch Changes
1371
+
1372
+ - Updated dependencies [1c858d3]
1373
+ - effect-app@4.0.0-beta.251
1374
+
1375
+ ## 4.0.0-beta.250
1376
+
1377
+ ### Patch Changes
1378
+
1379
+ - Updated dependencies [3053760]
1380
+ - effect-app@4.0.0-beta.250
1381
+
1382
+ ## 4.0.0-beta.249
1383
+
1384
+ ### Minor Changes
1385
+
1386
+ - ba789a2: Move core service contracts and runtime-agnostic modules into `effect-app`, keep `infra` and `vue` focused on adapters, and drop the temporary `infra` compatibility re-export paths in favor of the new canonical imports.
1387
+
1388
+ `@effect-app/infra` no longer re-exports moved core modules such as `./Model`, `./Emailer/service`, `./QueueMaker/service`, `./Store/service`, `./adapters/*`, or `./api/*` entrypoints.
1389
+
1390
+ ### Patch Changes
1391
+
1392
+ - Updated dependencies [ba789a2]
1393
+ - effect-app@4.0.0-beta.249
1394
+
1395
+ ## 4.0.0-beta.248
1396
+
1397
+ ### Patch Changes
1398
+
1399
+ - 2a86a17: improve tsgo compat: avoid deferred `Schema.Type`/`Codec.Encoded`/`Codec.DecodingServices`/`Codec.EncodingServices` conditional helpers in generic positions where the type parameter is already constrained to `Schema.Top`. Index the property directly (`X["Type"]`, `X["Encoded"]`, `X["DecodingServices"]`, …) so tsgo doesn't leak `unknown` into `Effect` channels (notably `R`).
1400
+
1401
+ Sites: `client/clientFor.ts` (`RequestHandlerFor`, `FinalTypeOf`, `ExtractResponse`, `ExtractEResponse`), `client/makeClient.ts` (`InputFromPayload`, `OutputFromSuccess`, `InvalidationConfigForCommand`, `TaggedRequestWithMeta` overloads), `rpc/MiddlewareMaker.ts` (`Errors`), `rpc/RpcMiddleware.ts` (`Failure`, `FailureContext`), `Schema/ext.ts` (`ReadonlySetFromArray`, `ReadonlyMapFromArray`), `infra/routing.ts` (`GetSuccessShape`, handlers, route matcher), `vue/makeClient.ts` (`MutationExt.project`, `MutationWithExtensions`, `QueryProjection`), `vue/routeParams.ts` (`parseRouteParams*`).
1402
+
1403
+ - Updated dependencies [2a86a17]
1404
+ - effect-app@4.0.0-beta.248
1405
+
1406
+ ## 4.0.0-beta.247
1407
+
1408
+ ### Patch Changes
1409
+
1410
+ - 01bab22: Work around tsgo failing to reduce `S.Codec.DecodingServices<X>` (`X extends Top ? X["DecodingServices"] : never`) in generic positions, which left `unknown` and polluted the `R` channel of client handlers and RPC middleware failure context. Since the schemas involved are already constrained to `S.Top`, read `["DecodingServices"]` directly in `RequestHandlerFor`, `TagClass.FailureContext`, and the Vue `MutationExt` / `QueryProjection` types.
1411
+ - Updated dependencies [01bab22]
1412
+ - effect-app@4.0.0-beta.247
1413
+
1414
+ ## 4.0.0-beta.246
1415
+
1416
+ ### Patch Changes
1417
+
1418
+ - effect-app@4.0.0-beta.246
1419
+
1420
+ ## 4.0.0-beta.245
1421
+
1422
+ ### Patch Changes
1423
+
1424
+ - effect-app@4.0.0-beta.245
1425
+
1426
+ ## 4.0.0-beta.244
1427
+
1428
+ ### Patch Changes
1429
+
1430
+ - b8b9080: update packages
1431
+ - Updated dependencies [b8b9080]
1432
+ - effect-app@4.0.0-beta.244
1433
+
1434
+ ## 4.0.0-beta.243
1435
+
1436
+ ### Patch Changes
1437
+
1438
+ - effect-app@4.0.0-beta.243
1439
+
1440
+ ## 4.0.0-beta.242
1441
+
1442
+ ### Patch Changes
1443
+
1444
+ - da83c1f: Align `InvalidationEntry` (vue) with `InvalidateQueryInstruction` (effect-app).
1445
+
1446
+ `InvalidateQueryInstruction` is now parametrized over `Filters` / `Options`
1447
+ (defaulting to `Record<string, unknown>` so the core stays framework-agnostic).
1448
+ `@effect-app/vue` exposes `InvalidationEntry` as a narrowed alias substituting
1449
+ `@tanstack/vue-query`'s `InvalidateQueryFilters` and `InvalidateOptions`. Single
1450
+ source of truth for the union shape across both packages.
1451
+
1452
+ - Updated dependencies [da83c1f]
1453
+ - Updated dependencies [21017d5]
1454
+ - Updated dependencies [2495ace]
1455
+ - effect-app@4.0.0-beta.242
1456
+
1457
+ ## 4.0.0-beta.241
1458
+
1459
+ ### Patch Changes
1460
+
1461
+ - 2aa8e5e: `queryInvalidation` accept shorthand entries (per-mutation, Command, and client-level `QueryInvalidation<M>` maps).
1462
+
1463
+ Each entry returned may now be:
1464
+
1465
+ - a raw query key (`string[]`)
1466
+ - an RPC handler (`{ id, options? }`) — its query key is derived via `makeQueryKey`
1467
+ - the existing `{ filters, options }` raw tanstack-query invalidation
1468
+
1469
+ ```ts
1470
+ queryInvalidation: (queryKey) => [queryKey, GetMe, PackListIndex];
1471
+ ```
1472
+
1473
+ equivalent to:
1474
+
1475
+ ```ts
1476
+ queryInvalidation: (queryKey) => [
1477
+ { filters: { queryKey } },
1478
+ { filters: { queryKey: makeQueryKey(GetMe) } },
1479
+ { filters: { queryKey: makeQueryKey(PackListIndex) } },
1480
+ ];
1481
+ ```
1482
+
1483
+ - Updated dependencies [b035b1c]
1484
+ - effect-app@4.0.0-beta.241
1485
+
1486
+ ## 4.0.0-beta.240
1487
+
1488
+ ### Patch Changes
1489
+
1490
+ - effect-app@4.0.0-beta.240
1491
+
1492
+ ## 4.0.0-beta.239
1493
+
1494
+ ### Patch Changes
1495
+
1496
+ - effect-app@4.0.0-beta.239
1497
+
1498
+ ## 4.0.0-beta.238
1499
+
1500
+ ### Patch Changes
1501
+
1502
+ - effect-app@4.0.0-beta.238
1503
+
1504
+ ## 4.0.0-beta.237
1505
+
1506
+ ### Patch Changes
1507
+
1508
+ - effect-app@4.0.0-beta.237
1509
+
1510
+ ## 4.0.0-beta.236
1511
+
1512
+ ### Patch Changes
1513
+
1514
+ - effect-app@4.0.0-beta.236
1515
+
1516
+ ## 4.0.0-beta.235
1517
+
1518
+ ### Patch Changes
1519
+
1520
+ - 6cfd83d: update effect to latest beta
1521
+ - Updated dependencies [ba4bdc3]
1522
+ - Updated dependencies [6cfd83d]
1523
+ - effect-app@4.0.0-beta.235
1524
+
1525
+ ## 4.0.0-beta.234
1526
+
1527
+ ### Patch Changes
1528
+
1529
+ - effect-app@4.0.0-beta.234
1530
+
1531
+ ## 4.0.0-beta.233
1532
+
1533
+ ### Patch Changes
1534
+
1535
+ - 57a1862: Update to effect 4.0.0-beta.67. Switch deps from `pkg.pr.new` snapshot back to npm beta tag.
1536
+ - Updated dependencies [57a1862]
1537
+ - effect-app@4.0.0-beta.233
1538
+
1539
+ ## 4.0.0-beta.232
1540
+
1541
+ ### Patch Changes
1542
+
1543
+ - 1176240: Fix `client[Key].Input` resolving to `never` for stream request handlers. The extractor only matched `RequestHandlerWithInput`, so any `RequestStreamHandlerWithInput` entry fell through to the `never` branch. Added a parallel `RequestStreamHandlerWithInput` extract so stream Inputs surface the handler's input type.
1544
+ - 0263827: Update to effect `pkg.pr.new` snapshot at `a42ef66` (4.0.0-beta.66). Remove `Yieldable` and `asEffect()` (service tags are now `Effect` directly).
1545
+ - Updated dependencies [0263827]
1546
+ - Updated dependencies [0263827]
1547
+ - Updated dependencies [0263827]
1548
+ - effect-app@4.0.0-beta.232
1549
+
1550
+ ## 4.0.0-beta.231
1551
+
1552
+ ### Patch Changes
1553
+
1554
+ - 7ca66ce: Update to effect 4.0.0-beta.66. Remove `Yieldable` and `asEffect()` (service tags are now `Effect` directly).
1555
+ - Updated dependencies [7ca66ce]
1556
+ - effect-app@4.0.0-beta.231
1557
+
1558
+ ## 4.0.0-beta.230
1559
+
1560
+ ### Patch Changes
1561
+
1562
+ - effect-app@4.0.0-beta.230
1563
+
1564
+ ## 4.0.0-beta.229
1565
+
1566
+ ### Minor Changes
1567
+
1568
+ - 2b4c324: Make the default mutation invalidation heuristic configurable.
1569
+
1570
+ The built-in default is unchanged (collapse one namespace level: `Foo/Bar.x` invalidates `["$Foo"]`, `Foo/Bar/Baz.x` invalidates `["$Foo","$Bar"]`). Client projects can now override it globally:
1571
+
1572
+ ```ts
1573
+ import { makeQueryKey, setDefaultGetQueryKey } from "@effect-app/vue";
1574
+
1575
+ // invalidate the full namespace of the action (no parent collapse)
1576
+ setDefaultGetQueryKey((h) => {
1577
+ const key = makeQueryKey(h);
1578
+ const ns = key.filter((_) => _.startsWith("$"));
1579
+ if (!ns.length) throw new Error("empty query key for: " + h.id);
1580
+ return ns;
1581
+ });
1582
+ ```
1583
+
1584
+ Call at app bootstrap. Pass `undefined` to restore the built-in default. Per-mutation overrides via the existing `queryInvalidation` option still take precedence.
1585
+
1586
+ ### Patch Changes
1587
+
1588
+ - effect-app@4.0.0-beta.229
1589
+
1590
+ ## 4.0.0-beta.228
1591
+
1592
+ ### Minor Changes
1593
+
1594
+ - 62dafaa: Default mutation invalidation now scopes to the action's full namespace instead of the parent.
1595
+
1596
+ For `Foo/Bar.SaveItems` we previously invalidated `["$Foo"]` (every query under `Foo/*`); now we invalidate `["$Foo","$Bar"]` (only queries under `Foo/Bar`). This avoids accidentally refetching unrelated sibling groups when one group mutates.
1597
+
1598
+ If you relied on cross-group invalidation (e.g. `Project/Configuration.save` refreshing `Project/Other.list`), opt in explicitly via the `queryInvalidation` mutation option or emit the appropriate keys server-side through `InvalidationSet`.
1599
+
1600
+ ### Patch Changes
1601
+
1602
+ - effect-app@4.0.0-beta.228
1603
+
1604
+ ## 4.0.0-beta.227
1605
+
1606
+ ### Patch Changes
1607
+
1608
+ - effect-app@4.0.0-beta.227
1609
+
1610
+ ## 4.0.0-beta.226
1611
+
1612
+ ### Patch Changes
1613
+
1614
+ - effect-app@4.0.0-beta.226
1615
+
1616
+ ## 4.0.0-beta.225
1617
+
1618
+ ### Patch Changes
1619
+
1620
+ - effect-app@4.0.0-beta.225
1621
+
1622
+ ## 4.0.0-beta.224
1623
+
1624
+ ### Minor Changes
1625
+
1626
+ - 1e4c989: Add `mode: "optional"` overload for queries. When `mode: "optional"` is set, the `arg` must be a `WatchSource<Option<I>>`. The query is disabled (`enabled: false`) when the option is `None`, and enabled with the unwrapped value when `Some`.
1627
+
1628
+ ### Patch Changes
1629
+
1630
+ - effect-app@4.0.0-beta.224
1631
+
1632
+ ## 4.0.0-beta.223
1633
+
1634
+ ### Patch Changes
1635
+
1636
+ - effect-app@4.0.0-beta.223
1637
+
1638
+ ## 4.0.0-beta.222
1639
+
1640
+ ### Patch Changes
1641
+
1642
+ - effect-app@4.0.0-beta.222
1643
+
1644
+ ## 4.0.0-beta.221
1645
+
1646
+ ### Patch Changes
1647
+
1648
+ - 439cbeb: Adopt module system from effect-smol: replace barrel imports with specific submodule imports (`import * as X from "effect-app/X"` / `import * as X from "effect/X"`).
1649
+ - Updated dependencies [439cbeb]
1650
+ - effect-app@4.0.0-beta.221
1651
+
1652
+ ## 4.0.0-beta.220
1653
+
1654
+ ### Patch Changes
1655
+
1656
+ - effect-app@4.0.0-beta.220
1657
+
1658
+ ## 4.0.0-beta.219
1659
+
1660
+ ### Patch Changes
1661
+
1662
+ - Updated dependencies [d738811]
1663
+ - effect-app@4.0.0-beta.219
1664
+
1665
+ ## 4.0.0-beta.218
1666
+
1667
+ ### Patch Changes
1668
+
1669
+ - effect-app@4.0.0-beta.218
1670
+
1671
+ ## 4.0.0-beta.217
1672
+
1673
+ ### Patch Changes
1674
+
1675
+ - Updated dependencies [0e824ef]
1676
+ - effect-app@4.0.0-beta.217
1677
+
1678
+ ## 4.0.0-beta.216
1679
+
1680
+ ### Patch Changes
1681
+
1682
+ - effect-app@4.0.0-beta.216
1683
+
1684
+ ## 4.0.0-beta.215
1685
+
1686
+ ### Patch Changes
1687
+
1688
+ - effect-app@4.0.0-beta.215
1689
+
1690
+ ## 4.0.0-beta.214
1691
+
1692
+ ### Patch Changes
1693
+
1694
+ - effect-app@4.0.0-beta.214
1695
+
1696
+ ## 4.0.0-beta.213
1697
+
1698
+ ### Patch Changes
1699
+
1700
+ - effect-app@4.0.0-beta.213
1701
+
1702
+ ## 4.0.0-beta.212
1703
+
1704
+ ### Patch Changes
1705
+
1706
+ - Updated dependencies [8792221]
1707
+ - effect-app@4.0.0-beta.212
1708
+
1709
+ ## 4.0.0-beta.211
1710
+
1711
+ ### Patch Changes
1712
+
1713
+ - effect-app@4.0.0-beta.211
1714
+
1715
+ ## 4.0.0-beta.210
1716
+
1717
+ ### Patch Changes
1718
+
1719
+ - effect-app@4.0.0-beta.210
1720
+
1721
+ ## 4.0.0-beta.209
1722
+
1723
+ ### Patch Changes
1724
+
1725
+ - c991be1: update packages
1726
+ - Updated dependencies [c991be1]
1727
+ - Updated dependencies [3bae238]
1728
+ - effect-app@4.0.0-beta.209
1729
+
1730
+ ## 4.0.0-beta.208
1731
+
1732
+ ### Minor Changes
1733
+
1734
+ - 0d7d197: Add optional `groupId` and `requestId` to toast options.
1735
+
1736
+ - `ToastOpts` / `ToastOptsInternal` now accept `groupId?: string` and `requestId?: string`; values pass through the toast wrapper unchanged.
1737
+ - `WithToast` / `withToast` accept `groupId` and auto-derive `requestId` once per invocation (current Effect span `traceId`, fallback `S.StringId.make()`); both are attached to every emitted toast (waiting/success/warning/error).
1738
+ - `Command.withDefaultToast` and `Command.withDefaultToastStream` set `groupId: cc.id` automatically; the stream variant also computes `requestId` once and threads it through progress, success, and failure toasts.
1739
+
1740
+ ### Patch Changes
1741
+
1742
+ - effect-app@4.0.0-beta.208
1743
+
1744
+ ## 4.0.0-beta.207
1745
+
1746
+ ### Patch Changes
1747
+
1748
+ - Updated dependencies [8fffc3c]
1749
+ - effect-app@4.0.0-beta.207
1750
+
1751
+ ## 4.0.0-beta.206
1752
+
1753
+ ### Patch Changes
1754
+
1755
+ - Updated dependencies [54bfc59]
1756
+ - effect-app@4.0.0-beta.206
1757
+
1758
+ ## 4.0.0-beta.205
1759
+
1760
+ ### Patch Changes
1761
+
1762
+ - Updated dependencies [f313973]
1763
+ - effect-app@4.0.0-beta.205
1764
+
1765
+ ## 4.0.0-beta.204
1766
+
1767
+ ### Patch Changes
1768
+
1769
+ - Updated dependencies [0a0030f]
1770
+ - effect-app@4.0.0-beta.204
1771
+
1772
+ ## 4.0.0-beta.203
1773
+
1774
+ ### Patch Changes
1775
+
1776
+ - Updated dependencies [992d9fa]
1777
+ - effect-app@4.0.0-beta.203
1778
+
1779
+ ## 4.0.0-beta.202
1780
+
1781
+ ### Patch Changes
1782
+
1783
+ - Updated dependencies [1186b09]
1784
+ - effect-app@4.0.0-beta.202
1785
+
1786
+ ## 4.0.0-beta.201
1787
+
1788
+ ### Patch Changes
1789
+
1790
+ - Updated dependencies [d67d17a]
1791
+ - effect-app@4.0.0-beta.201
1792
+
1793
+ ## 4.0.0-beta.200
1794
+
1795
+ ### Patch Changes
1796
+
1797
+ - Updated dependencies [8f1cf6a]
1798
+ - Updated dependencies [0cff7c1]
1799
+ - effect-app@4.0.0-beta.200
1800
+
1801
+ ## 4.0.0-beta.199
1802
+
1803
+ ### Patch Changes
1804
+
1805
+ - effect-app@4.0.0-beta.199
1806
+
1807
+ ## 4.0.0-beta.198
1808
+
1809
+ ### Patch Changes
1810
+
1811
+ - dd73a4a: fix fn on stream semantics
1812
+ - Updated dependencies [32dbc54]
1813
+ - effect-app@4.0.0-beta.198
1814
+
1815
+ ## 4.0.0-beta.197
1816
+
1817
+ ### Minor Changes
1818
+
1819
+ - 3dc0d2a: Add streaming as a `stream: true` config option on `Query` / `Command` instead of a separate request type.
1820
+
1821
+ `TaggedRequestFor` now exposes only `Query` and `Command` factories — the standalone `Stream` factory is removed. To produce a Stream of `success` values, pass `stream: true` in the request config. The request `type` field stays `"command" | "query"`; a new `stream: boolean` field carries the streaming flag (stripped from the stored handler config).
1822
+
1823
+ ```ts
1824
+ // Query that streams results
1825
+ Req.Query<T>()("Tag", {}, { stream: true, success: ... })
1826
+
1827
+ // Command that streams results
1828
+ Req.Command<T>()("Tag", {}, { stream: true, success: ... })
1829
+ ```
1830
+
1831
+ Vue client mapping (per-handler properties mirror the non-stream API — `.query`, `.fn`, `.mutate`):
1832
+
1833
+ - `query` + `stream: true` → exposes `.query` (read-only streaming, tracked Vue Query). Helper map key: `${name}Query`.
1834
+ - `command` + `stream: true` → exposes `.fn` and `.mutate` (mutating streaming).
1835
+ - Plain `query` / `command` unchanged.
1836
+
1837
+ Server routing dispatches via the new `stream` flag (`makeStreamRpc` for streaming commands/queries, `makeCommandRpc` / `Rpc.make` otherwise).
1838
+
1839
+ Also lifts the `Struct` / `TaggedStruct` and `Opaque` definitions in `effect-app/Schema` to use `S.Bottom` / `S.Opaque` directly, exposing `fields`, `mapFields`, and a `MakeIn` that allows `void` when all fields are optional. `TaggedRequestFor` request classes now use `Opaque(TaggedStruct(...))` instead of `TaggedClass`, and decoding/encoding services are derived from `success` / `error` rather than stored on the request.
1840
+
1841
+ **Migration**: replace `Req.Stream` with `Req.Query` or `Req.Command` and add `stream: true` to the config — `Query` for read-only streams, `Command` for mutating streams.
1842
+
1843
+ ### Patch Changes
1844
+
1845
+ - Updated dependencies [3dc0d2a]
1846
+ - effect-app@4.0.0-beta.197
1847
+
1848
+ ## 4.0.0-beta.196
1849
+
1850
+ ### Patch Changes
1851
+
1852
+ - c7fbd58: `handle`, `mutate`, and `request` are now always functions, never a raw Effect or Stream. For no-input handlers the first argument is omitted (`handle()`, `request()`, `mutate()`).
1853
+ - effect-app@4.0.0-beta.196
1854
+
1855
+ ## 4.0.0-beta.195
1856
+
1857
+ ### Patch Changes
1858
+
1859
+ - Updated dependencies [774a9b3]
1860
+ - effect-app@4.0.0-beta.195
1861
+
1862
+ ## 4.0.0-beta.194
1863
+
1864
+ ### Patch Changes
1865
+
1866
+ - refactor(vue): remove 1s waiting toast delay in withDefaultToastStream
1867
+ - effect-app@4.0.0-beta.194
1868
+
1869
+ ## 4.0.0-beta.193
1870
+
1871
+ ### Patch Changes
1872
+
1873
+ - effect-app@4.0.0-beta.193
1874
+
1875
+ ## 4.0.0-beta.192
1876
+
1877
+ ### Patch Changes
1878
+
1879
+ - effect-app@4.0.0-beta.192
1880
+
1881
+ ## 4.0.0-beta.191
1882
+
1883
+ ### Patch Changes
1884
+
1885
+ - 50ce7e6: Cleanup after tsgolint + oxlint-codegen-plugin migration:
1886
+ - Wire `@effect-app/eslint-codegen-model/oxlint` via `jsPlugins` object form (`{ name: "codegen", specifier: ... }`) so the `codegen/codegen` rule key resolves.
1887
+ - Drop `eslint-plugin-codegen` dep, patch, and `augmentedConfig` helper — codegen now runs through oxlint.
1888
+ - Break cyclic workspace dep between `eslint-codegen-model` and `eslint-shared-config`; remove dead `eslint.config.mjs` from `eslint-codegen-model`.
1889
+ - Switch `@effect-app/vue` to oxlint-only (no `.vue` files in `src`); drop its ESLint config and `eslint-shared-config` devDep.
1890
+ - Restore `@typescript-eslint` plugin and rules in shared `baseConfig` so inline `eslint-disable @typescript-eslint/...` directives resolve in `@effect-app/vue-components` (the only remaining ESLint consumer, for `.vue` files).
1891
+ - Add `globals.browser` to `vueConfig` so browser globals (`window`, `console`, `URL`, etc.) resolve.
1892
+ - 50ce7e6: Replace typescript-eslint with oxlint-tsgolint for type-aware lint. Drop ESLint entirely from non-vue packages (cli, effect-app, infra) — they now use only `oxlint --type-aware`. Vue packages keep ESLint to run `@effect-app/no-await-effect` (no tsgolint equivalent) via `@typescript-eslint/parser` + `vue-eslint-parser`.
1893
+ - Updated dependencies [50ce7e6]
1894
+ - effect-app@4.0.0-beta.191
1895
+
1896
+ ## 4.0.0-beta.190
1897
+
1898
+ ### Patch Changes
1899
+
1900
+ - 985176b: Align request handler input typing with the request's `make` signature. Handlers are now classified as no-input only when the request schema declares no payload fields; any payload (even fully-optional) yields a function handler whose input matches `make`'s first parameter. Adds `HandlerInput<I>` and threads it through `CommandFromRequest`.
1901
+ - Updated dependencies [985176b]
1902
+ - effect-app@4.0.0-beta.190
1903
+
1904
+ ## 4.0.0-beta.189
1905
+
1906
+ ### Patch Changes
1907
+
1908
+ - d23e3f6: Delay the in-progress (waiting) toast by 1 second in `withToast` and `withDefaultToastStream`. Fast operations that produce a success/failure (or, for streams, a progress event or terminal state) within the delay window never show a waiting toast at all. Any subsequent waiting/progress/success/failure toast aborts the pending delayed toast so it never flashes after the terminal state.
1909
+ - f44800c: In-progress toasts (`withToast` waiting toast and `withDefaultToastStream` waiting/progress toasts) now persist indefinitely (`timeout: Infinity`) until replaced by the success/failure toast or dismissed. Previously they used the underlying toast adapter's default duration and could disappear before the operation finished.
1910
+ - Updated dependencies [ea32222]
1911
+ - effect-app@4.0.0-beta.189
1912
+
1913
+ ## 4.0.0-beta.188
1914
+
1915
+ ### Minor Changes
1916
+
1917
+ - f16e766: Remove legacy `mutateToResult` stream mutation factory, `wrapStream` command builder, and standard command progress reporting (`running`/`progress` from the old stream factory path). Keep only the `mutate` path for use with `streamFn` combinators. Remove obsolete types (`StreamMutationWithExtensions`, `StreamCommandWithExtensions`, `StreamFnExtension`, `MutateStreamCallOptions`) and the internal `makeStreamMutation` function. Rename `mutate.wrapStream` shorthand to `mutate.wrap` to match the non-stream convention.
1918
+
1919
+ ### Patch Changes
1920
+
1921
+ - ed1b8a9: `mutate.wrap` on stream handlers now works the same as on command/query handlers: it can be called without arguments or with only combinators, with the underlying stream handler pre-baked in.
1922
+ - b2e438f: Remove Operations service and repo
1923
+ - Updated dependencies [b2e438f]
1924
+ - effect-app@4.0.0-beta.188
1925
+
1926
+ ## 4.0.0-beta.187
1927
+
1928
+ ### Patch Changes
1929
+
1930
+ - 0d4e0b8: Fix `isGeneratorFunction` using `isObject` instead of `isFunction`: generator functions have `typeof === "function"`, not `"object"`, so the check always returned `false`. This caused `Command.streamFn` generator-form handlers to silently pass a raw `Generator` object rather than an `Effect<Stream>`, meaning the mutation was never executed.
1931
+ - Updated dependencies [0d4e0b8]
1932
+ - effect-app@4.0.0-beta.187
1933
+
1934
+ ## 4.0.0-beta.186
1935
+
1936
+ ### Patch Changes
1937
+
1938
+ - 89b7d2f: `Command.withDefaultToastStream`: add `progress` option to update the waiting toast with progress text on each stream element
1939
+ - effect-app@4.0.0-beta.186
1940
+
1941
+ ## 4.0.0-beta.185
1942
+
1943
+ ### Patch Changes
1944
+
1945
+ - ddd9505: Rename stream mutation helpers: `mutateStream` → `mutateToResult`, `mutateStream2` → `mutate`.
1946
+ - effect-app@4.0.0-beta.185
1947
+
1948
+ ## 4.0.0-beta.184
1949
+
1950
+ ### Minor Changes
1951
+
1952
+ - d4bf24a: Add `Command.withDefaultToastStream` — a stream-aware combinator for `streamFn` that properly handles the full stream lifecycle (waiting/success/failure toasts). Unlike `withDefaultToast`, it waits for the stream to drain before showing the success toast and correctly handles stream errors.
1953
+
1954
+ Strongly type `CommandBase` with `RA`/`RE` type params for `result`, and update `CommandButton`'s `mapProgress` prop to be typed as `(result: AsyncResult<RA, RE>) => Progress | undefined`.
1955
+
1956
+ ### Patch Changes
1957
+
1958
+ - effect-app@4.0.0-beta.184
1959
+
1960
+ ## 4.0.0-beta.183
1961
+
1962
+ ### Minor Changes
1963
+
1964
+ - 8ff0bf9: Add `Command.streamFn` — a stream-backed variant of `Command.fn`.
1965
+
1966
+ The body generator (or plain function) returns a `Stream` instead of an `Effect`. The command's `waiting` state stays `true` while the stream is running and updates the reactive `result` ref for every emitted value.
1967
+
1968
+ Three handler shapes are accepted:
1969
+
1970
+ 1. **Generator returning a Stream** (primary):
1971
+ ```ts
1972
+ Command.streamFn("exportData")(function* (arg, ctx) {
1973
+ const token = yield* getAuthToken;
1974
+ return Stream.fromEffect(startExport(token, arg.id)).pipe(
1975
+ Stream.flatMap((job) => pollProgress(job.id))
1976
+ );
1977
+ });
1978
+ ```
1979
+ 2. Function returning a `Stream` directly.
1980
+ 3. Function returning `Effect<Stream>` (unwrapped automatically).
1981
+
1982
+ - 8ff0bf9: - `CommandButton`: add optional `:map-progress` prop to compute progress from `command.result` via a custom mapper function
1983
+ - `CommandBase`: add optional `result` field exposing reactive `AsyncResult` state
1984
+ - Export `Progress` type from `@effect-app/vue`
1985
+ - `streamFn`: pipe operators now receive the initial `Effect<Stream>` (or `Stream`) value unchanged; `Stream.unwrap` is deferred until after all combinators, enabling use of `withDefaultToast` and other Effect-level combinators
1986
+ - Add `makeStreamMutation2`: like `makeStreamMutation` but returns `Effect<Stream>` per invocation (with invalidation via `Stream.ensuring`), for use with `streamFn` combinators
1987
+ - Expose `streamFn` on `XClient.Y` stream handlers and on the `Command` object
1988
+ - Expose `mutateStream2` on `XClient.Y` stream handlers, with a `wrapStream` helper that calls `streamFn` with the handler and provided combinators
1989
+ - fc98fb7: Add `streamQuery` support for stream-type Rpc handlers. When an Rpc is of type `"stream"`, the client now exposes a `.streamQuery` property (and `...StreamQuery` in helpers) that uses `streamedQuery` from `@tanstack/query-core` to accumulate chunks reactively as an `AsyncResult<A[], E>`.
1990
+
1991
+ ### Patch Changes
1992
+
1993
+ - effect-app@4.0.0-beta.183
1994
+
1995
+ ## 4.0.0-beta.182
1996
+
1997
+ ### Minor Changes
1998
+
1999
+ - b9586f8: Refine `mutateStream` shape and progress reporting.
2000
+
2001
+ - `mutateStream(options?)` now returns the `execute` callable directly, with `id`, `running?`, and `progress?` attached as properties. Tuple form `[ref, execute]` is gone — invoke the callable to run the stream, or pass it (or the factory) to `Command.fn` / `Command.wrap` / `Command.wrapStream`.
2002
+ - `progress` formatter return type widened from `string | undefined` to `Progress | undefined`, where `Progress = string | { text: string; percentage: number }`.
2003
+ - Stream failures now bubble through the execute effect's typed error channel `E` instead of being swallowed. The reactive `AsyncResult` ref still mirrors the failure for live progress UI.
2004
+ - `CommandBase.progress?: Progress` replaces `progressText?: string`. `CommandButton` overrides the Vuetify `loader` slot when `progress` is set, rendering a `v-progress-circular` (bound to `model-value` when a `percentage` is supplied, otherwise `indeterminate`) alongside the formatted text.
2005
+ - Factories and callables are branded with `_streamFactory` / `_streamCallable` so `Command.fn` / `Command.wrap` can disambiguate them from plain mutate functions.
2006
+
2007
+ ### Patch Changes
2008
+
2009
+ - effect-app@4.0.0-beta.182
2010
+
2011
+ ## 4.0.0-beta.181
2012
+
2013
+ ### Minor Changes
2014
+
2015
+ - 4bbeb19: Add `wrapStream` support to `Command` with separate `result` and `running` props.
2016
+
2017
+ **Key design:**
2018
+
2019
+ - `result` is always the command's own execution outcome (from `asResult`)
2020
+ - `running` holds the stream's live `AsyncResult` ref for progress tracking
2021
+
2022
+ **New behaviour:**
2023
+
2024
+ - `CommanderImpl.wrapStream(mutation)` returns a callable like `wrap` — `wrapStream(mutation)()` gives `CommandOut`.
2025
+ - Accepts either `{ id, mutateStream: [...] }` or the augmented tuple directly (when `.id` is attached).
2026
+ - `Command.wrap` now accepts `{ mutateStream, id }` and the augmented tuple — both delegate to `wrapStream`.
2027
+ - `FnOptions.progress` — pass a `ComputedRef<AsyncResult>` to any `fn`-created command; surfaces as `running`.
2028
+ - `StreamMutationWithExtensions` now includes `.id` on the tuple.
2029
+ - Stream client entries expose `wrapStream` (callable), `fn`, and `mutateStream` (with `.id`).
2030
+ - Stream mutation helpers also carry `.fn` and `.id`.
2031
+
2032
+ ```ts
2033
+ // Via client entry:
2034
+ const exportCmd = Command.wrapStream(client.myExport)();
2035
+ // exportCmd.result = own execution result; exportCmd.running = live stream AsyncResult
2036
+
2037
+ // Via mutateStream tuple (id is attached):
2038
+ const exportCmd = Command.wrapStream(client.myExport.mutateStream)();
2039
+
2040
+ // wrap also accepts the tuple:
2041
+ const exportCmd = Command.wrap(client.myExport.mutateStream)();
2042
+
2043
+ // fn with external progress:
2044
+ const cmd = Command.fn({
2045
+ id: "myExport",
2046
+ progress: client.myExport.mutateStream[0],
2047
+ })(function* (arg) {
2048
+ yield* client.myExport.mutateStream[1](arg);
2049
+ });
2050
+ // cmd.running === the stream AsyncResult ref
2051
+ ```
2052
+
2053
+ ### Patch Changes
2054
+
2055
+ - 583393f: Default the stream `mutateStream` execute resolved value to the request's success type when no `final` schema is declared.
2056
+
2057
+ Previously the type defaulted to `void`, but the runtime already resolves with the last emitted value. Types now match runtime behaviour: `execute` returns `Final` if a `final` schema is set, otherwise the success type.
2058
+
2059
+ - Updated dependencies [583393f]
2060
+ - effect-app@4.0.0-beta.181
2061
+
2062
+ ## 4.0.0-beta.180
2063
+
2064
+ ### Minor Changes
2065
+
2066
+ - 7fa3045: V1/V2/V3: stream and command requests carry invalidation metadata
2067
+
2068
+ **V1** – stream final response includes metadata
2069
+
2070
+ - `Invalidation.StreamResponseChunk` wraps each stream item as `{ _tag: "value", value }` and appends `{ _tag: "done", metadata }` at the end carrying all accumulated invalidation keys.
2071
+
2072
+ **V2** – invalidation keys included in failures
2073
+
2074
+ - `Invalidation.CommandFailureWithMetaData` and `Invalidation.StreamFailureChunk` carry keys accumulated up to the point of failure, so clients can invalidate queries even when a command or stream errors.
2075
+ - `InvalidationMiddlewareLive` wraps command failures; `routing.ts` wraps stream failures.
2076
+ - `apiClientFactory.ts` unwraps both on the client side, forwarding keys before re-failing with the original error.
2077
+
2078
+ **V3** – mid-stream metadata chunks
2079
+
2080
+ - `Invalidation.StreamResponseChunk` now also includes `{ _tag: "metadata", metadata }` for mid-stream invalidation.
2081
+ - After each emitted value, the server drains accumulated keys and emits a "metadata" chunk if any keys were collected since the last drain (bucket reset via `InvalidationSet.drain`).
2082
+ - `apiClientFactory.ts` processes "metadata" chunks the same as "done" chunks, forwarding keys to `InvalidationKeysFromServer` immediately.
2083
+ - `makeInvalidationKeysService` accepts an optional `onAdded` callback that fires after each key addition, enabling `mutate.ts` to trigger query invalidation mid-stream without waiting for the stream to complete.
2084
+
2085
+ ### Patch Changes
2086
+
2087
+ - Updated dependencies [7fa3045]
2088
+ - effect-app@4.0.0-beta.180
2089
+
2090
+ ## 4.0.0-beta.179
2091
+
2092
+ ### Minor Changes
2093
+
2094
+ - 828d264: Stream requests now support an optional `final` schema that models the final success type of the stream. When declared, `mutateStream`'s execute effect resolves with the last emitted value typed as `Final` instead of `void`.
2095
+
2096
+ ```ts
2097
+ class MyStream extends SomethingStream<MyStream>()(
2098
+ "MyStream",
2099
+ { id: S.String },
2100
+ {
2101
+ success: S.Union([OperationProgress, ExportComplete]),
2102
+ final: ExportComplete, // execute now resolves with ExportComplete
2103
+ }
2104
+ ) {}
2105
+ ```
2106
+
2107
+ ### Patch Changes
2108
+
2109
+ - Updated dependencies [828d264]
2110
+ - effect-app@4.0.0-beta.179
2111
+
2112
+ ## 4.0.0-beta.178
2113
+
2114
+ ### Minor Changes
2115
+
2116
+ - 07dd7b9: Add `asStreamResult` utility and stream-based mutation example.
2117
+
2118
+ `asStreamResult` mirrors `asResult` but accepts a `Stream<A, E, R>` (or a factory function that returns one). The reactive ref is updated with each emitted value (`waiting: true`) and finalised once the stream ends (`waiting: false`). Errors surface as `AsyncResult.failure`.
2119
+
2120
+ The included example (`examples/streamMutation.ts`) shows how to model a long-running export operation that streams `OperationProgress | ExportComplete` events into a readonly Vue ref.
2121
+
2122
+ ### Patch Changes
2123
+
2124
+ - effect-app@4.0.0-beta.178
2125
+
2126
+ ## 4.0.0-beta.177
2127
+
2128
+ ### Patch Changes
2129
+
2130
+ - Updated dependencies [89d8b3a]
2131
+ - effect-app@4.0.0-beta.177
2132
+
2133
+ ## 4.0.0-beta.176
2134
+
2135
+ ### Patch Changes
2136
+
2137
+ - pass options
2138
+ - Updated dependencies
2139
+ - effect-app@4.0.0-beta.176
2140
+
2141
+ ## 4.0.0-beta.175
2142
+
2143
+ ### Minor Changes
2144
+
2145
+ - 28777c1: Add `select` option to `MutationOptionsBase` for a second cache invalidation after long-running operations.
2146
+
2147
+ When `select` is provided, cache invalidation fires twice:
2148
+
2149
+ 1. Immediately when the mutation completes (existing behaviour).
2150
+ 2. Again after the `select` effect finishes — useful for polling or waiting for a background job before refreshing data.
2151
+
2152
+ ```ts
2153
+ useMutation(startExportCommand, {
2154
+ select: (result) => pollUntilDone(result.jobId),
2155
+ });
2156
+ ```
2157
+
2158
+ ### Patch Changes
2159
+
2160
+ - 37089ea: Consolidate multiple `invalidateQueries` calls into a single call per group using a `predicate`, reducing the number of TanStack Query invalidation calls in the common case from N to 1.
2161
+ - effect-app@4.0.0-beta.175
2162
+
2163
+ ## 4.0.0-beta.174
2164
+
2165
+ ### Minor Changes
2166
+
2167
+ - 821468d: Add server-driven cache invalidation via RPC response headers.
2168
+
2169
+ - `effect-app/rpc`: new `Invalidation` module with `InvalidationKey` / `InvalidationKeys` schemas, `Invalidates` annotation (for declaring static invalidation on Rpc definitions), `InvalidationSet` reference (request-scoped accumulator), and `makeInvalidationSet` helper.
2170
+ - `effect-app/middleware`: new `InvalidationMiddleware` RPC middleware tag; included in `DefaultGenericMiddlewares`.
2171
+ - `effect-app/client`: new `InvalidationKeys` module with `InvalidationKeysFromServer` reference and `makeInvalidationKeysService` helper; `apiClientFactory` now taps HTTP responses to read the `x-invalidate` header and forward keys to `InvalidationKeysFromServer`.
2172
+ - `@effect-app/infra`: new `InvalidationMiddlewareLive` RPC middleware implementation that owns the full lifecycle — creates a request-scoped `InvalidationSet` (backed by a `Ref`), pre-populates it from the `Invalidates` annotation, provides it to the handler, and after the handler completes registers an HTTP pre-response handler (via `appendPreResponseHandlerUnsafe`) to write the accumulated keys as an `x-invalidate` response header. No separate HTTP middleware is needed.
2173
+ - `@effect-app/vue`: `invalidateQueries` / `useMutation` now reads server-provided invalidation keys from `InvalidationKeysFromServer` after each mutation and applies them alongside the client-side invalidation.
2174
+
2175
+ ### Patch Changes
2176
+
2177
+ - 1b38043: Fix lint: use typescript ~6.0.3 instead of native-preview for ESLint compatibility; keep tsgo for compilation
2178
+ - b241ae5: Merge client and server-driven cache invalidation keys into a single `Effect.forEach` pass so server keys always run regardless of whether client targets are empty or custom invalidation options are used.
2179
+ - Updated dependencies [821468d]
2180
+ - effect-app@4.0.0-beta.174
2181
+
2182
+ ## 4.0.0-beta.173
2183
+
2184
+ ### Patch Changes
2185
+
2186
+ - 4149577: fix queryresources
2187
+ - effect-app@4.0.0-beta.173
2188
+
2189
+ ## 4.0.0-beta.172
2190
+
2191
+ ### Patch Changes
2192
+
2193
+ - effect-app@4.0.0-beta.172
2194
+
2195
+ ## 4.0.0-beta.171
2196
+
2197
+ ### Patch Changes
2198
+
2199
+ - d71d976: fix
2200
+ - Updated dependencies [d71d976]
2201
+ - effect-app@4.0.0-beta.171
2202
+
2203
+ ## 4.0.0-beta.170
2204
+
2205
+ ### Patch Changes
2206
+
2207
+ - 8f09f77: fix
2208
+ - Updated dependencies [8f09f77]
2209
+ - effect-app@4.0.0-beta.170
2210
+
2211
+ ## 4.0.0-beta.169
2212
+
2213
+ ### Patch Changes
2214
+
2215
+ - 8ae8b53: input mess
2216
+ - Updated dependencies [8ae8b53]
2217
+ - effect-app@4.0.0-beta.169
2218
+
2219
+ ## 4.0.0-beta.168
2220
+
2221
+ ### Patch Changes
2222
+
2223
+ - Updated dependencies [178480a]
2224
+ - effect-app@4.0.0-beta.168
2225
+
2226
+ ## 4.0.0-beta.167
2227
+
2228
+ ### Patch Changes
2229
+
2230
+ - 140e192: Relax invalidation resource value constraints to allow arbitrary values while preserving query-only filtering in invalidation handling.
2231
+ - Updated dependencies [140e192]
2232
+ - effect-app@4.0.0-beta.167
2233
+
2234
+ ## 4.0.0-beta.166
2235
+
2236
+ ### Patch Changes
2237
+
2238
+ - dbcc53b: Refactor command invalidation typing: declare resources via `Command<Self, Resources>()`, pass `invalidatesQueries` as the optional 4th argument, and enforce exact `clientFor` invalidation resources when required.
2239
+ - Updated dependencies [dbcc53b]
2240
+ - effect-app@4.0.0-beta.166
2241
+
2242
+ ## 4.0.0-beta.165
2243
+
2244
+ ### Patch Changes
2245
+
2246
+ - f88ea34: Move `makeQueryKey` into `effect-app/client` and update Vue source and tests to import it from the shared client module. Vue still re-exports `makeQueryKey` from `src/lib` for compatibility.
2247
+ - 66fd718: Require `clientFor` invalidation resources when any command in the client configures them.
2248
+ - Updated dependencies [f88ea34]
2249
+ - effect-app@4.0.0-beta.165
2250
+
2251
+ ## 4.0.0-beta.164
2252
+
2253
+ ### Minor Changes
2254
+
2255
+ - 8cb3de4: Add command invalidation helpers that preserve query-only resource types and pass mutation input and `Exit` results into invalidation callbacks. Update Vue `clientFor` to merge request-level invalidation config with call-site invalidation and require matching invalidation resources.
2256
+
2257
+ ### Patch Changes
2258
+
2259
+ - Updated dependencies [8cb3de4]
2260
+ - effect-app@4.0.0-beta.164
2261
+
2262
+ ## 4.0.0-beta.163
2263
+
2264
+ ### Patch Changes
2265
+
2266
+ - b952f19: bye cruft
2267
+ - Updated dependencies [b952f19]
2268
+ - effect-app@4.0.0-beta.163
2269
+
2270
+ ## 4.0.0-beta.162
2271
+
2272
+ ### Patch Changes
2273
+
2274
+ - Updated dependencies [b52b424]
2275
+ - effect-app@4.0.0-beta.162
2276
+
2277
+ ## 4.0.0-beta.161
2278
+
2279
+ ### Patch Changes
2280
+
2281
+ - aa5ef5c: Improve `deepToRaw` to support any root input type, correctly unwrap refs/computed values, and preserve collection/date shapes (`Array`, `Map`, `Set`, `Date`) while deeply removing Vue reactivity wrappers.
2282
+ - effect-app@4.0.0-beta.161
2283
+
2284
+ ## 4.0.0-beta.160
2285
+
2286
+ ### Patch Changes
2287
+
2288
+ - 505bfa9: Add concurrent decode helper APIs and migrate decode callsites to use them.
2289
+
2290
+ - Add `withDefaultParseOptions` and keep `DefaultParseOptions` centralized.
2291
+ - Export `decodeEffectConcurrently` and `decodeUnknownEffectConcurrently` from Schema and SchemaParser modules.
2292
+ - Update repository, queue, client, form, and CLI decode paths to use concurrent decode helpers.
2293
+ - Keep schema constructors free of hardcoded parse concurrency overrides.
2294
+
2295
+ - Updated dependencies [505bfa9]
2296
+ - effect-app@4.0.0-beta.160
2297
+
2298
+ ## 4.0.0-beta.159
2299
+
2300
+ ### Patch Changes
2301
+
2302
+ - c1e73de:
2303
+ - Updated dependencies [c1e73de]
2304
+ - effect-app@4.0.0-beta.159
2305
+
2306
+ ## 4.0.0-beta.158
2307
+
2308
+ ### Patch Changes
2309
+
2310
+ - Updated dependencies [3c1f52d]
2311
+ - Updated dependencies [6ae3050]
2312
+ - effect-app@4.0.0-beta.158
2313
+
2314
+ ## 4.0.0-beta.157
2315
+
2316
+ ### Patch Changes
2317
+
2318
+ - Updated dependencies [6fff09c]
2319
+ - effect-app@4.0.0-beta.157
2320
+
2321
+ ## 4.0.0-beta.156
2322
+
2323
+ ### Patch Changes
2324
+
2325
+ - 4bc4a27: Constrain `project` schema to require matching `Encoded` type with original success schema
2326
+ - effect-app@4.0.0-beta.156
2327
+
2328
+ ## 4.0.0-beta.155
2329
+
2330
+ ### Patch Changes
2331
+
2332
+ - 2e4c018: feat: add client projection
2333
+ - Updated dependencies [c215db8]
2334
+ - effect-app@4.0.0-beta.155
2335
+
2336
+ ## 4.0.0-beta.154
2337
+
2338
+ ### Patch Changes
2339
+
2340
+ - 3200fa8: apply the remaining formatting and autofix cleanup across the vue packages
2341
+ - effect-app@4.0.0-beta.154
2342
+
2343
+ ## 4.0.0-beta.153
2344
+
2345
+ ### Patch Changes
2346
+
2347
+ - effect-app@4.0.0-beta.153
2348
+
2349
+ ## 4.0.0-beta.152
2350
+
2351
+ ### Patch Changes
2352
+
2353
+ - effect-app@4.0.0-beta.152
2354
+
2355
+ ## 4.0.0-beta.151
2356
+
2357
+ ### Patch Changes
2358
+
2359
+ - effect-app@4.0.0-beta.151
2360
+
2361
+ ## 4.0.0-beta.150
2362
+
2363
+ ### Patch Changes
2364
+
2365
+ - Updated dependencies [85a8275]
2366
+ - effect-app@4.0.0-beta.150
2367
+
2368
+ ## 4.0.0-beta.149
2369
+
2370
+ ### Patch Changes
2371
+
2372
+ - Updated dependencies [f317c5e]
2373
+ - effect-app@4.0.0-beta.149
2374
+
2375
+ ## 4.0.0-beta.148
2376
+
2377
+ ### Patch Changes
2378
+
2379
+ - Updated dependencies [199e9a5]
2380
+ - effect-app@4.0.0-beta.148
2381
+
2382
+ ## 4.0.0-beta.147
2383
+
2384
+ ### Patch Changes
2385
+
2386
+ - Updated dependencies [47e3742]
2387
+ - effect-app@4.0.0-beta.147
2388
+
2389
+ ## 4.0.0-beta.146
2390
+
2391
+ ### Patch Changes
2392
+
2393
+ - Updated dependencies [a4dff57]
2394
+ - effect-app@4.0.0-beta.146
2395
+
2396
+ ## 4.0.0-beta.145
2397
+
2398
+ ### Patch Changes
2399
+
2400
+ - Updated dependencies [12abb55]
2401
+ - effect-app@4.0.0-beta.145
2402
+
2403
+ ## 4.0.0-beta.144
2404
+
2405
+ ### Patch Changes
2406
+
2407
+ - 11422f8: Update request helper typing and runtime invocation to rely on schema `.make` instead of class constructors, avoiding `new`-based assumptions for request schemas.
2408
+ - Updated dependencies [11422f8]
2409
+ - Updated dependencies [d31253f]
2410
+ - effect-app@4.0.0-beta.144
2411
+
2412
+ ## 4.0.0-beta.143
2413
+
2414
+ ### Patch Changes
2415
+
2416
+ - Updated dependencies [79eb019]
2417
+ - effect-app@4.0.0-beta.143
2418
+
2419
+ ## 4.0.0-beta.142
2420
+
2421
+ ### Patch Changes
2422
+
2423
+ - Updated dependencies [3436d44]
2424
+ - Updated dependencies [025de47]
2425
+ - effect-app@4.0.0-beta.142
2426
+
2427
+ ## 4.0.0-beta.141
2428
+
2429
+ ### Patch Changes
2430
+
2431
+ - Updated dependencies [7c25dbb]
2432
+ - effect-app@4.0.0-beta.141
2433
+
2434
+ ## 4.0.0-beta.140
2435
+
2436
+ ### Patch Changes
2437
+
2438
+ - effect-app@4.0.0-beta.140
2439
+
2440
+ ## 4.0.0-beta.139
2441
+
2442
+ ### Patch Changes
2443
+
2444
+ - ba61aad: raw dog
2445
+ - effect-app@4.0.0-beta.139
2446
+
2447
+ ## 4.0.0-beta.138
2448
+
2449
+ ### Patch Changes
2450
+
2451
+ - 9be71e1: fix: double guard
2452
+ - effect-app@4.0.0-beta.138
2453
+
2454
+ ## 4.0.0-beta.137
2455
+
2456
+ ### Patch Changes
2457
+
2458
+ - effect-app@4.0.0-beta.137
2459
+
2460
+ ## 4.0.0-beta.136
2461
+
2462
+ ### Patch Changes
2463
+
2464
+ - effect-app@4.0.0-beta.136
2465
+
2466
+ ## 4.0.0-beta.135
2467
+
2468
+ ### Patch Changes
2469
+
2470
+ - Updated dependencies [c7bbc41]
2471
+ - effect-app@4.0.0-beta.135
2472
+
2473
+ ## 4.0.0-beta.134
2474
+
2475
+ ### Patch Changes
2476
+
2477
+ - Updated dependencies [9d3495e]
2478
+ - Updated dependencies [f353d48]
2479
+ - effect-app@4.0.0-beta.134
2480
+
2481
+ ## 4.0.0-beta.133
2482
+
2483
+ ### Patch Changes
2484
+
2485
+ - 99a2e9b: Use warning toasts for expected commander failures, while keeping unexpected errors as error toasts.
2486
+ - c3299f7: update packages
2487
+ - Updated dependencies [c3299f7]
2488
+ - effect-app@4.0.0-beta.133
2489
+
2490
+ ## 4.0.0-beta.132
2491
+
2492
+ ### Patch Changes
2493
+
2494
+ - 8753c52: render
2495
+ - effect-app@4.0.0-beta.132
2496
+
2497
+ ## 4.0.0-beta.131
2498
+
2499
+ ### Patch Changes
2500
+
2501
+ - 1b57aa4: Add a `Commander` error-renderer registry via `Context.Reference` and apply registered guarded renderers before default error formatting.
2502
+ - effect-app@4.0.0-beta.131
2503
+
2504
+ ## 4.0.0-beta.130
2505
+
2506
+ ### Patch Changes
2507
+
2508
+ - fc41dcf: add trace id and span id to toasts
2509
+ - Updated dependencies [ea1bd46]
2510
+ - effect-app@4.0.0-beta.130
2511
+
2512
+ ## 4.0.0-beta.129
2513
+
2514
+ ### Patch Changes
2515
+
2516
+ - 34f6a97: fix missing fn
2517
+ - effect-app@4.0.0-beta.129
2518
+
2519
+ ## 4.0.0-beta.128
2520
+
2521
+ ### Patch Changes
2522
+
2523
+ - 57db551: Split `TaggedRequestFor` into `Query` and `Command` factories, and mark generated request classes with `type: "query" | "command"`.
2524
+
2525
+ Vue client helpers now expose query-only helpers (`query`, `suspense`, `fetch`) for query requests and mutation-only helpers (`mutate`, `fetch`) for command requests.
2526
+
2527
+ - Updated dependencies [57db551]
2528
+ - effect-app@4.0.0-beta.128
2529
+
2530
+ ## 4.0.0-beta.127
2531
+
2532
+ ### Minor Changes
2533
+
2534
+ - 6a3d364: Client entries are now plain objects; use `.request` to invoke the request.
2535
+
2536
+ `client.Xxx` no longer is callable or an `Effect` itself. Call `client.Xxx.request(input)` (or `client.Xxx.request` for input-less requests) instead. `.mutate`, `.query`, `.suspense`, `.wrap`, and `.fn` are unchanged.
2537
+
2538
+ ### Patch Changes
2539
+
2540
+ - effect-app@4.0.0-beta.127
2541
+
2542
+ ## 4.0.0-beta.126
2543
+
2544
+ ### Patch Changes
2545
+
2546
+ - Updated dependencies [458bb1b]
2547
+ - effect-app@4.0.0-beta.126
2548
+
2549
+ ## 4.0.0-beta.125
2550
+
2551
+ ### Patch Changes
2552
+
2553
+ - effect-app@4.0.0-beta.125
2554
+
2555
+ ## 4.0.0-beta.124
2556
+
2557
+ ### Patch Changes
2558
+
2559
+ - 256ae85: cleanup
2560
+ - Updated dependencies [256ae85]
2561
+ - effect-app@4.0.0-beta.124
2562
+
2563
+ ## 4.0.0-beta.123
2564
+
2565
+ ### Patch Changes
2566
+
2567
+ - Updated dependencies [14aba14]
2568
+ - effect-app@4.0.0-beta.123
2569
+
2570
+ ## 4.0.0-beta.122
2571
+
2572
+ ### Patch Changes
2573
+
2574
+ - 07a57b6: Limit `client.method.mutate` extensions to only expose the mutation call and `wrap`.
2575
+ - f052d38: Replace `(...) => Effect.gen` with `Effect.fnUntraced` in commander `withDefaultToast`.
2576
+ - Updated dependencies [f052d38]
2577
+ - effect-app@4.0.0-beta.122
2578
+
2579
+ ## 4.0.0-beta.121
2580
+
2581
+ ### Patch Changes
2582
+
2583
+ - Updated dependencies [5ac46cb]
2584
+ - effect-app@4.0.0-beta.121
2585
+
2586
+ ## 4.0.0-beta.120
2587
+
2588
+ ### Patch Changes
2589
+
2590
+ - Updated dependencies [f21190c]
2591
+ - effect-app@4.0.0-beta.120
2592
+
2593
+ ## 4.0.0-beta.119
2594
+
2595
+ ### Patch Changes
2596
+
2597
+ - effect-app@4.0.0-beta.119
2598
+
2599
+ ## 4.0.0-beta.118
2600
+
2601
+ ### Patch Changes
2602
+
2603
+ - Update effect packages to 4.0.0-beta.52
2604
+ - Updated dependencies [bd26832]
2605
+ - Updated dependencies [08d2e70]
2606
+ - Updated dependencies
2607
+ - effect-app@4.0.0-beta.118
2608
+
2609
+ ## 4.0.0-beta.117
2610
+
2611
+ ### Patch Changes
2612
+
2613
+ - effect-app@4.0.0-beta.117
2614
+
2615
+ ## 4.0.0-beta.116
2616
+
2617
+ ### Patch Changes
2618
+
2619
+ - effect-app@4.0.0-beta.116
2620
+
2621
+ ## 4.0.0-beta.115
2622
+
2623
+ ### Patch Changes
2624
+
2625
+ - effect-app@4.0.0-beta.115
2626
+
2627
+ ## 4.0.0-beta.114
2628
+
2629
+ ### Patch Changes
2630
+
2631
+ - effect-app@4.0.0-beta.114
2632
+
2633
+ ## 4.0.0-beta.113
2634
+
2635
+ ### Patch Changes
2636
+
2637
+ - effect-app@4.0.0-beta.113
2638
+
2639
+ ## 4.0.0-beta.112
2640
+
2641
+ ### Patch Changes
2642
+
2643
+ - effect-app@4.0.0-beta.112
2644
+
2645
+ ## 4.0.0-beta.111
2646
+
2647
+ ### Patch Changes
2648
+
2649
+ - Updated dependencies [ca94edf]
2650
+ - effect-app@4.0.0-beta.111
2651
+
2652
+ ## 4.0.0-beta.110
2653
+
2654
+ ### Patch Changes
2655
+
2656
+ - effect-app@4.0.0-beta.110
2657
+
2658
+ ## 4.0.0-beta.109
2659
+
2660
+ ### Patch Changes
2661
+
2662
+ - effect-app@4.0.0-beta.109
2663
+
2664
+ ## 4.0.0-beta.108
2665
+
2666
+ ### Patch Changes
2667
+
2668
+ - Updated dependencies [3e46e7b]
2669
+ - effect-app@4.0.0-beta.108
2670
+
2671
+ ## 4.0.0-beta.107
2672
+
2673
+ ### Patch Changes
2674
+
2675
+ - effect-app@4.0.0-beta.107
2676
+
2677
+ ## 4.0.0-beta.106
2678
+
2679
+ ### Patch Changes
2680
+
2681
+ - effect-app@4.0.0-beta.106
2682
+
2683
+ ## 4.0.0-beta.105
2684
+
2685
+ ### Patch Changes
2686
+
2687
+ - effect-app@4.0.0-beta.105
2688
+
2689
+ ## 4.0.0-beta.104
2690
+
2691
+ ### Patch Changes
2692
+
2693
+ - Updated dependencies [e944bca]
2694
+ - effect-app@4.0.0-beta.104
2695
+
2696
+ ## 4.0.0-beta.103
2697
+
2698
+ ### Patch Changes
2699
+
2700
+ - Updated dependencies [7119320]
2701
+ - effect-app@4.0.0-beta.103
2702
+
2703
+ ## 4.0.0-beta.102
2704
+
2705
+ ### Patch Changes
2706
+
2707
+ - effect-app@4.0.0-beta.102
2708
+
2709
+ ## 4.0.0-beta.101
2710
+
2711
+ ### Patch Changes
2712
+
2713
+ - effect-app@4.0.0-beta.101
2714
+
2715
+ ## 4.0.0-beta.100
2716
+
2717
+ ### Patch Changes
2718
+
2719
+ - effect-app@4.0.0-beta.100
2720
+
3
2721
  ## 4.0.0-beta.99
4
2722
 
5
2723
  ### Patch Changes