@squirreljetpack/im-dynamic 0.2.11 → 0.3.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,49 @@
1
+ ## [0.3.0] - 2026-11-03
2
+
3
+ ### 🚀 Features
4
+
5
+ - Sync creates are driven by `sync_schema.json`: a push that creates an
6
+ entity carries every field of its kind, so no peer ever builds a
7
+ half-filled row.
8
+ - The outbox coalesces per cell (`UNIQUE(entity_id, field)`): repeated
9
+ offline edits to the same field update the queued row in place instead
10
+ of queueing a chain of writes.
11
+ - The server pre-validates each create (existence cell, required fields
12
+ and links, timestamp) and reports the failures as per-event verdicts
13
+ with a typed reason. `target_deleted` is new; a reason this build does
14
+ not know deserializes as `unknown` instead of failing the response.
15
+ - Deleting a mood keeps the tracker entries logged against it: their
16
+ `mood` link is cleared and the rows stay, matching the sync cascade.
17
+ Deleting a task still deletes its completions.
18
+ - `im :sync` offers to re-create content another device deleted from a
19
+ snapshot taken before the row was removed, and asks once per entity
20
+ after every push of the run.
21
+
22
+ ### 🐛 Bug Fixes
23
+
24
+ - `sync_once` lands the outbox, the domain rows, the cursor and the
25
+ verdict reconciliation in one transaction, so an interrupted push
26
+ cannot leave a half-applied batch.
27
+ - The existence cell folds monotonically: a stale create can no longer
28
+ resurrect an entity another device deleted, and a create the server
29
+ rejected leaves no cells behind in the log.
30
+ - `clock_ahead` restamps the device forward against the server clock and
31
+ resets its last emitted stamp, so later edits from that device keep
32
+ winning last-writer-wins.
33
+ - Editing a mood's body or a tracker's mood link queues only the cells
34
+ that changed.
35
+ - Pull is bounded and reports `has_more`, so a long log pages instead of
36
+ arriving in one response.
37
+
38
+ ### 💥 Breaking changes
39
+
40
+ - `tracker.time` is required: a create without it is rejected as
41
+ `shape`.
42
+ - `_sync_events` carries its coalescing uniqueness in the table
43
+ definition and no longer stores `image`. Databases from earlier builds
44
+ are not migrated: delete the database file and sign in to rebuild from
45
+ the log.
46
+
1
47
  ## [0.2.11] - 2026-11-02
2
48
 
3
49
  ### 🚀 Features
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "hasInstallScript": true,
20
20
  "name": "@squirreljetpack/im-dynamic",
21
- "version": "0.2.11"
21
+ "version": "0.3.0"
22
22
  },
23
23
  "node_modules/detect-libc": {
24
24
  "engines": {
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "requires": true,
50
- "version": "0.2.11"
50
+ "version": "0.3.0"
51
51
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "artifactDownloadUrls": [
3
- "https://github.com/Squirreljetpack/im/releases/download/v0.2.11"
3
+ "https://github.com/Squirreljetpack/im/releases/download/v0.3.0"
4
4
  ],
5
5
  "bin": {
6
6
  "im-dynamic": "run-im-dynamic.js"
@@ -87,7 +87,7 @@
87
87
  "zipExt": ".tar.xz"
88
88
  }
89
89
  },
90
- "version": "0.2.11",
90
+ "version": "0.3.0",
91
91
  "volta": {
92
92
  "node": "18.14.1",
93
93
  "npm": "9.5.0"