@volter/world-runtime 2.0.41 → 2.0.43

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.
@@ -1810,7 +1810,11 @@ export class WorldDoors {
1810
1810
  prints.push(`${vendor}=${fingerprint}`);
1811
1811
  if (this.timelineByTwin.get(vendor)?.fingerprint === fingerprint)
1812
1812
  continue;
1813
- this.timelineByTwin.set(vendor, { fingerprint, rows: wholeLog(state, controlRoot).map((entry, i) => ({ twin: vendor, position: i + 1, entry })) });
1813
+ // one write is one row: a branch's write the origin holds too (pushed, then pulled back under its own id) is in the
1814
+ // parent and the branch alike, and folds once (landedIds); its first place in the log is kept, as positions are
1815
+ const seen = new Set();
1816
+ const rows = wholeLog(state, controlRoot).flatMap((entry, i) => (seen.has(entry.id) ? [] : (seen.add(entry.id), [{ twin: vendor, position: i + 1, entry }])));
1817
+ this.timelineByTwin.set(vendor, { fingerprint, rows });
1814
1818
  }
1815
1819
  const all = prints.join(',');
1816
1820
  if (this.timelineMerged?.fingerprint !== all) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volter/world-runtime",
3
- "version": "2.0.41",
3
+ "version": "2.0.43",
4
4
  "description": "World configs for twins: boot named local runtimes, allocate ports, generate world.env/instance.json, and run apps against fake-key twin worlds.",
5
5
  "keywords": [
6
6
  "twin",
@@ -67,14 +67,14 @@
67
67
  "node": ">=22.3"
68
68
  },
69
69
  "peerDependencies": {
70
- "@volter/world-core": "2.0.23",
70
+ "@volter/world-core": "2.0.25",
71
71
  "@volter/world-console": "2.0.13"
72
72
  },
73
73
  "dependencies": {
74
74
  "@electric-sql/pglite": "0.5.8",
75
75
  "@electric-sql/pglite-pgvector": "0.0.9",
76
76
  "@volter/world-access": "2.0.2",
77
- "@volter/world-core": "2.0.23",
77
+ "@volter/world-core": "2.0.25",
78
78
  "pg-gateway": "0.3.0-beta.4",
79
79
  "smol-toml": "^1.8.0"
80
80
  },
@@ -84,6 +84,6 @@
84
84
  }
85
85
  },
86
86
  "optionalDependencies": {
87
- "@volter/twin-mongodb": "0.1.23"
87
+ "@volter/twin-mongodb": "0.1.25"
88
88
  }
89
89
  }
@@ -1526,7 +1526,11 @@ export class WorldDoors {
1526
1526
  .map((p) => { const s = store.stat(p); return s ? `${s.size}:${s.mtimeMs}` : '-'; }).join('|');
1527
1527
  prints.push(`${vendor}=${fingerprint}`);
1528
1528
  if (this.timelineByTwin.get(vendor)?.fingerprint === fingerprint) continue;
1529
- this.timelineByTwin.set(vendor, { fingerprint, rows: wholeLog(state, controlRoot).map((entry, i) => ({ twin: vendor, position: i + 1, entry })) });
1529
+ // one write is one row: a branch's write the origin holds too (pushed, then pulled back under its own id) is in the
1530
+ // parent and the branch alike, and folds once (landedIds); its first place in the log is kept, as positions are
1531
+ const seen = new Set<string>();
1532
+ const rows = wholeLog(state, controlRoot).flatMap((entry, i) => (seen.has(entry.id) ? [] : (seen.add(entry.id), [{ twin: vendor, position: i + 1, entry }])));
1533
+ this.timelineByTwin.set(vendor, { fingerprint, rows });
1530
1534
  }
1531
1535
  const all = prints.join(',');
1532
1536
  if (this.timelineMerged?.fingerprint !== all) {