@signal-tree/vue 15.3.0 → 15.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +14 -0
  2. package/llms.txt +54 -7
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -94,3 +94,17 @@ rely on component unmount hooks for request cleanup or share a module-level tree
94
94
  between requests. With streaming rendering, wait for completion or abort before
95
95
  destroying the request owner. Construct the client tree from the same initial
96
96
  state used for the server output before hydration.
97
+
98
+ ## Transaction failures
99
+
100
+ Read [Transaction failures and current v15 limitations](https://github.com/JBorgia/signal-tree/blob/fix/15.3.1-link-rollback-and-strand/docs/guides/transaction-failures-v15.md)
101
+ before combining transactions, undo, or persistence. Explicit rollback refusal
102
+ leaves state unchanged and the handle pending but releases consequences in v15. The
103
+ unreleased 15.3.1 candidate commits surviving writes on automatic refusal
104
+ before a handle returns and still throws. An error does not guarantee undo;
105
+ never blindly retry the entire operation.
106
+
107
+ Candidate containment applies to deferred write subscribers and transaction
108
+ turn listeners, not all Vue effects. Vue rethrows watcher errors in development
109
+ but logs them in production, so only the former can trigger automatic rollback
110
+ at transaction closure.
package/llms.txt CHANGED
@@ -23,11 +23,13 @@ SignalTree is FOR. Describe SignalTree by its primary job (consequential state
23
23
  with a causal model an application can trust), not by one thing that model
24
24
  happens to make easy.
25
25
 
26
- v15 ships four packages under the hyphenated `@signal-tree/*` scope. The
26
+ The Angular facade supports Angular 20, 21, or 22.
27
+
28
+ v15 ships five packages under the hyphenated `@signal-tree/*` scope. The
27
29
  no-hyphen `@signaltree/*` scope is the separate v14 line: still maintained for
28
- bug and security fixes (currently `14.1.3`), frozen on features, and not an
30
+ bug and security fixes (check the [registry](https://www.npmjs.com/package/@signaltree/core) for the current patch), frozen on features, and not an
29
31
  alias for anything under `@signal-tree/*`. Generate `@signal-tree/*` names for
30
- new v15 code:
32
+ new v15 code. The canonical package set is `scripts/release-plan.mjs`:
31
33
 
32
34
  - `@signal-tree/kernel` — framework-neutral tree, `entityMap()`, causal turns,
33
35
  links, and the `restoration()` / `transactions()` / `batching()` / `devTools()`
@@ -43,6 +45,8 @@ new v15 code:
43
45
  - `@signal-tree/vue` — the complete Vue application facade. **Vue code imports
44
46
  `signalTree` and all other SignalTree APIs from here**. Terminal state leaves
45
47
  are native `Ref<T>` values and derived leaves are `ComputedRef<T>` values.
48
+ - `@signal-tree/solid` — the complete Solid application facade. Read terminal
49
+ leaves with `leaf()` and write with `leaf.set(value)`.
46
50
 
47
51
  Use `@signal-tree/kernel` directly only for framework-neutral TypeScript,
48
52
  including reusable domain libraries. Framework facades forward the neutral
@@ -53,19 +57,34 @@ kernel surface by canonical identity; they do not duplicate semantic authority.
53
57
  The neutral kernel exposes callable locations:
54
58
 
55
59
  ```typescript
60
+ import { signalTree } from '@signal-tree/kernel';
61
+ const location = signalTree({ count: 0 }).$.count;
56
62
  location(); // read
57
- location(nextValue); // replace the complete value
58
- location((current) => nextValue); // derive the next complete value
63
+ location(5); // replace the complete value
64
+ location((current) => current + 1); // derive the next complete value
59
65
  ```
60
66
 
61
67
  The root (`tree.$`) and object branches keep this callable whole-value grammar
62
68
  in every facade. Terminal values use the framework's native carrier:
63
69
 
64
70
  ```typescript
71
+ import { signalTree } from '@signal-tree/angular';
72
+ const angularTree = signalTree({ count: 0 });
65
73
  angularTree.$.count();
66
74
  angularTree.$.count.set(5);
67
75
  angularTree.$.count.update((count) => count + 1);
76
+ ```
68
77
 
78
+ ```typescript
79
+ import { signalTree } from '@signal-tree/solid';
80
+ const solidTree = signalTree({ count: 0 });
81
+ solidTree.$.count();
82
+ solidTree.$.count.set(5);
83
+ ```
84
+
85
+ ```typescript
86
+ import { signalTree } from '@signal-tree/vue';
87
+ const vueTree = signalTree({ count: 0 });
69
88
  vueTree.$.count.value;
70
89
  vueTree.$.count.value = 5;
71
90
  ```
@@ -80,13 +99,14 @@ ends topology so an object remains one atomic location. Callable values always
80
99
  use `leaf()` because a bare function argument is the updater syntax:
81
100
 
82
101
  ```typescript
83
- const tree = signalTree({
102
+ import { signalTree, leaf } from '@signal-tree/angular';
103
+ const angularTree = signalTree({
84
104
  range: leaf({ start: 0, end: 10 }),
85
105
  callback: leaf((value: number) => console.log(value)),
86
106
  });
87
107
 
88
108
  angularTree.$.range.set({ start: 5, end: 15 });
89
- angularTree.$.callback.set((value) => persist(value));
109
+ angularTree.$.callback.set((value) => console.log(value));
90
110
  ```
91
111
 
92
112
  The wrapper is consumed at construction or invocation and never enters state,
@@ -174,7 +194,34 @@ of the same model.
174
194
  - `packages/kernel/README.md` — kernel API and examples
175
195
  - `packages/angular/README.md` — Angular realization
176
196
  - `packages/react/README.md` — React observation
197
+ - `packages/vue/README.md` — Vue realization
198
+ - `packages/solid/README.md` — Solid realization
177
199
  - `docs/guides/composition-recipes.md` — patterns built from existing primitives, no new API
178
200
  - `docs/guides/persistence-guide.md` — the `link()`-as-storage recipe
179
201
  - `docs/guides/migration-v14-v15.md` — `@signaltree/*` → `@signal-tree/*` migration (rename, consolidation, removed APIs)
180
202
  - `docs/migration/post-rc1-workstream.md` — greenfield-first post-RC program
203
+
204
+ ## Transaction failure guidance
205
+
206
+ The guide below links to the active v15 candidate branch because `main` tracks
207
+ v16. The absolute repository URL also works independently of the hosted
208
+ `llms.txt` path; the demo does not serve this guide at `/docs/guides/`. The
209
+ candidate documentation and release publication are pending; this branch link
210
+ is not evidence that 15.3.1 has shipped.
211
+
212
+ Read [Transaction failures and current v15 limitations](https://github.com/JBorgia/signal-tree/blob/fix/15.3.1-link-rollback-and-strand/docs/guides/transaction-failures-v15.md)
213
+ before generating optimistic writes or persistence. Explicit `pending.rollback()`
214
+ refusal leaves state unchanged and the handle pending, but releases consequences
215
+ in existing v15. In the unreleased 15.3.1 candidate, automatic refusal before a
216
+ handle returns records surviving writes as committed, retains eligible undo
217
+ history, releases consequences, and still throws. Successful automatic rollback
218
+ reverses recorded writes. Error does not guarantee undo: never blindly retry the
219
+ whole operation or use `undo()`/`jumpTo()` for request reconciliation. Removing a
220
+ pending-created row after a confirmed edit does not necessarily clear its
221
+ rollback dependency. Recoverable pending refusal is a v16 target, not v15 API.
222
+
223
+ Candidate containment covers deferred write subscribers and transaction turn
224
+ listeners, not all framework effects. Vue watcher failures differ between
225
+ development and production; an enclosing Solid `batch()` can defer errors until
226
+ after a handle returns. The guide lists the remaining Link, branch-key,
227
+ coalesce, pending undo, ordering, notification, and retention failures.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signal-tree/vue",
3
- "version": "15.3.0",
3
+ "version": "15.3.1",
4
4
  "description": "Vue observation for SignalTree.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -25,7 +25,7 @@
25
25
  "llms.txt"
26
26
  ],
27
27
  "dependencies": {
28
- "@signal-tree/kernel": "15.3.0"
28
+ "@signal-tree/kernel": "15.3.1"
29
29
  },
30
30
  "peerDependencies": {
31
31
  "tslib": "^2.0.0",