@effect-app/vue 4.0.0-beta.98 → 4.0.0

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