@lmzhen/dsh-evolution-state-json 0.3.31 → 0.3.33

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/README.md CHANGED
@@ -22,5 +22,5 @@ Independent of request-prefix construction. This package does not alter the asse
22
22
  ## Known Limitations and Deferred Work
23
23
 
24
24
 
25
- - JSON provider serializes writers inside one process. Cross-process locking is a DSH storage-layer limitation (`storage-json` documents no cross-process write locking); multi-process deployments should route the evolution domain to a backend with cross-process semantics such as SQLite or remote storage.
25
+ - JSON provider serializes writers inside one process AND through the IO backend's cross-process transact lock (`jsonTransact` wraps every mutation, 0.3.20/0.3.27) — this provider is NOT limited to single-process safety. The caveat below is about the DSH storage-domain providers (`storage-json` documents no cross-process write locking) when the DOMAIN provider is used instead; multi-process deployments should route the evolution domain to a backend with cross-process semantics such as SQLite or remote storage.
26
26
 
package/lib/index.js CHANGED
@@ -175,6 +175,13 @@ function apply(ctx, rawConfig) {
175
175
  const parsed = JSON.parse(current);
176
176
  if (Array.isArray(parsed)) archive = parsed;
177
177
  } catch {}
178
+ const archiveKeys = /* @__PURE__ */ new Set();
179
+ archive = archive.filter((entry) => {
180
+ const key = pendingArchiveKey(entry);
181
+ if (archiveKeys.has(key)) return false;
182
+ archiveKeys.add(key);
183
+ return true;
184
+ });
178
185
  const seen = new Set(archive.map(pendingArchiveKey));
179
186
  const fresh = records.filter((record) => !seen.has(pendingArchiveKey(record)));
180
187
  if (fresh.length === 0) return current;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lmzhen/dsh-evolution-state-json",
3
3
  "description": "JSON-file evolution state provider over the IO seam (community build)",
4
- "version": "0.3.31",
4
+ "version": "0.3.33",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -31,17 +31,17 @@
31
31
  "license": "MIT",
32
32
  "dependencies": {
33
33
  "@deepseek-ai/schemastery": "^3.18.1",
34
- "@lmzhen/dsh-evolution-core": "^0.3.31"
34
+ "@lmzhen/dsh-evolution-core": "^0.3.33"
35
35
  },
36
36
  "peerDependencies": {
37
37
  "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
38
38
  "@deepseek-ai/cordis": "^4.0.1",
39
- "@lmzhen/dsh-evolution-io": "^0.3.31",
40
- "@lmzhen/dsh-evolution-state-storage": "^0.3.31"
39
+ "@lmzhen/dsh-evolution-io": "^0.3.33",
40
+ "@lmzhen/dsh-evolution-state-storage": "^0.3.33"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
44
- "@lmzhen/dsh-evolution-io": "^0.3.31",
45
- "@lmzhen/dsh-evolution-state-storage": "^0.3.31"
44
+ "@lmzhen/dsh-evolution-io": "^0.3.33",
45
+ "@lmzhen/dsh-evolution-state-storage": "^0.3.33"
46
46
  }
47
47
  }