@ibgib/core-gib 0.1.11 → 0.1.13

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 (36) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/sync/sync-innerspace.respec.mjs +366 -81
  3. package/dist/sync/sync-innerspace.respec.mjs.map +1 -1
  4. package/dist/sync/sync-saga-coordinator.d.mts +57 -2
  5. package/dist/sync/sync-saga-coordinator.d.mts.map +1 -1
  6. package/dist/sync/sync-saga-coordinator.mjs +346 -153
  7. package/dist/sync/sync-saga-coordinator.mjs.map +1 -1
  8. package/dist/timeline/timeline-api.respec.mjs +34 -7
  9. package/dist/timeline/timeline-api.respec.mjs.map +1 -1
  10. package/dist/witness/space/inner-space/inner-space-v1.d.mts +1 -1
  11. package/dist/witness/space/inner-space/inner-space-v1.d.mts.map +1 -1
  12. package/dist/witness/space/inner-space/inner-space-v1.mjs +7 -7
  13. package/dist/witness/space/inner-space/inner-space-v1.mjs.map +1 -1
  14. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.d.mts +18 -0
  15. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.d.mts.map +1 -1
  16. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs +39 -10
  17. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mjs.map +1 -1
  18. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.d.mts.map +1 -1
  19. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs +2 -1
  20. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mjs.map +1 -1
  21. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mjs +6 -4
  22. package/dist/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mjs.map +1 -1
  23. package/dist/witness/space/space-helper.d.mts.map +1 -1
  24. package/dist/witness/space/space-helper.mjs +1 -0
  25. package/dist/witness/space/space-helper.mjs.map +1 -1
  26. package/package.json +1 -1
  27. package/src/sync/sync-innerspace.respec.mts +401 -88
  28. package/src/sync/sync-saga-coordinator.mts +411 -161
  29. package/src/timeline/timeline-api.respec.mts +34 -16
  30. package/src/witness/space/inner-space/inner-space-v1.mts +8 -5
  31. package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace-helper.mts +39 -10
  32. package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.mts +2 -1
  33. package/src/witness/space/metaspace/metaspace-innerspace/metaspace-innerspace.respec.mts +5 -3
  34. package/src/witness/space/reconciliation-space/reconciliation-space-base.mts.OLD.md +884 -0
  35. package/src/witness/space/reconciliation-space/reconciliation-space-helper.mts.OLD.md +125 -0
  36. package/src/witness/space/space-helper.mts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sync-saga-coordinator.d.mts","sourceRoot":"","sources":["../../src/sync/sync-saga-coordinator.mts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAI3D,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,OAAO,EACU,YAAY,EAC5B,MAAM,kBAAkB,CAAC;AAM1B,MAAM,WAAW,WAAW;IACxB;;OAEG;IACH,MAAM,EAAE,aAAa,CAAC;IACtB;;OAEG;IACH,IAAI,EAAE,aAAa,CAAC;IACpB;;OAEG;IACH,QAAQ,EAAE,gBAAgB,CAAC;IAC3B;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,qBAAa,mBAAmB;IAIxB,SAAS,CAAC,QAAQ,EAAE,kBAAkB;IAH1C,SAAS,CAAC,EAAE,EAAE,MAAM,CAAmC;gBAGzC,QAAQ,EAAE,kBAAkB;IAG1C;;;;;;;;OAQG;IACG,IAAI,CAAC,EACP,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,cAAc,EACjB,EAAE;QACC,MAAM,EAAE,aAAa,CAAC;QACtB,IAAI,EAAE,aAAa,CAAC;QACpB,QAAQ,EAAE,gBAAgB,CAAC;QAC3B,YAAY,EAAE,QAAQ,EAAE,CAAC;QACzB,cAAc,CAAC,EAAE,MAAM,CAAC;KAC3B,GAAG,OAAO,CAAC,IAAI,CAAC;cAoMD,eAAe,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,OAAO,EACP,QAAQ,EACX,EAAE;QACC,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,GAAG,CAAC;QACX,OAAO,EAAE,GAAG,CAAC;QACb,QAAQ,EAAE,gBAAgB,CAAA;KAC7B,GAAG,OAAO,CAAC,YAAY,CAAC;cAoCT,uBAAuB,CAAC,EACpC,KAAK,EACL,QAAQ,GACX,EAAE;QACC,KAAK,EAAE,aAAa,CAAC;QACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACtB,GAAG,OAAO,CAAC;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAmC1C,SAAS,CAAC,0BAA0B,CAAC,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAA;KAAE,GAAG,MAAM,EAAE;CA8D3F"}
1
+ {"version":3,"file":"sync-saga-coordinator.d.mts","sourceRoot":"","sources":["../../src/sync/sync-saga-coordinator.mts"],"names":[],"mappings":"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"}
@@ -1,14 +1,15 @@
1
- import { extractErrorMsg, getUUID } from "@ibgib/helper-gib/dist/helpers/utils-helper.mjs";
1
+ import { extractErrorMsg, getUUID, // so our timestamp in ticks as a string are uniform
2
+ pretty, clone } from "@ibgib/helper-gib/dist/helpers/utils-helper.mjs";
2
3
  import { getIbGibAddr } from "@ibgib/ts-gib/dist/helper.mjs";
3
4
  import { splitPerTjpAndOrDna, getTimelinesGroupedByTjp } from "../common/other/ibgib-helper.mjs";
4
5
  import { Factory_V1 } from "@ibgib/ts-gib/dist/V1/factory.mjs";
5
6
  import { isPrimitive } from "@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs";
6
7
  import { GLOBAL_LOG_A_LOT } from "../core-constants.mjs";
7
- import { putInSpace, lockSpace, unlockSpace, getSpaceArgMetadata } from "../witness/space/space-helper.mjs";
8
+ import { putInSpace, lockSpace, unlockSpace, getLatestAddrs, getFromSpace } from "../witness/space/space-helper.mjs";
8
9
  import { SyncStage, SYNC_ATOM } from "./sync-constants.mjs";
9
10
  import { getSyncIb } from "./sync-helpers.mjs";
10
11
  import { getDependencyGraph } from "../common/other/graph-helper.mjs";
11
- const logalot = GLOBAL_LOG_A_LOT;
12
+ const logalot = GLOBAL_LOG_A_LOT || true;
12
13
  /**
13
14
  * Orchestrates the synchronization process between two spaces (Source and Destination).
14
15
  *
@@ -82,7 +83,7 @@ export class SyncSagaCoordinator {
82
83
  * @param opts.domainIbGibs The root ibGibs that define the scope of the sync (the "Dependency Graph").
83
84
  * @param opts.identitySecret Optional secret if needed (usually handled by `keystone` service).
84
85
  */
85
- async sync({ source, dest, identity, domainIbGibs, identitySecret }) {
86
+ async sync({ source, dest, identity, domainIbGibs, identitySecret, conflictStrategy }) {
86
87
  const lc = `${this.lc}[${this.sync.name}]`;
87
88
  try {
88
89
  if (logalot) {
@@ -97,122 +98,54 @@ export class SyncSagaCoordinator {
97
98
  // ---------------------------------------------------------
98
99
  // 1. Graph Generation & Classification
99
100
  // ---------------------------------------------------------
100
- // We want a live dependency graph to ensure we get the latest
101
- // states of timelines.
102
- const graph = await getDependencyGraph({
103
- ibGibs: domainIbGibs,
104
- live: true,
105
- space: source,
101
+ const { srcStones, srcTimelinesMap, srcSortedTjps, srcGraph } = await this.analyzeTimelines({
102
+ domainIbGibs,
103
+ space: source
106
104
  });
107
- const validGraph = graph && Object.keys(graph).length > 0;
108
- if (logalot) {
109
- console.log(`${lc} graph generated. nodes: ${validGraph ? Object.keys(graph).length : 0}`);
110
- }
111
- // 2. Classification
112
- // We differentiate between "Stones" (Immutable, no timeline) and "Living" (Timelines).
113
- // Stones can be synced in bulk without ordering.
114
- // Living ibGibs must be grouped by timeline and ordered.
115
- const ibGibs = validGraph ? Object.values(graph) : [];
116
- const { mapWithTjp_YesDna, mapWithTjp_NoDna, mapWithoutTjps } = splitPerTjpAndOrDna({ ibGibs });
117
- // "Stones" come from mapWithoutTjps
118
- const stones = Object.values(mapWithoutTjps);
119
- // "Living" come from both TJP maps
120
- // We combine them to group by TJP
121
- const living = [...Object.values(mapWithTjp_YesDna), ...Object.values(mapWithTjp_NoDna)];
122
- if (logalot) {
123
- console.log(`${lc} classification results (count):`);
124
- console.log(`stones: ${stones.length}`);
125
- console.log(`living: ${living.length}`);
126
- }
127
- // 3. Timeline Ordering
128
- // Group living ibGibs by TJP to identify distinct timelines.
129
- // The helper returns them sorted by 'n' ascending.
130
- const timelinesMap = getTimelinesGroupedByTjp({ ibGibs: living });
131
- // todo: perform topological sort on timelinesMap based on inter-timeline references.
132
- // For now, we sync independent timelines.
133
- const payloadAddrs = [];
134
- payloadAddrs.push(...stones.map(x => getIbGibAddr({ ibGib: x })));
135
- // 3. Timeline Ordering (Topological Sort)
136
- // Living ibGibs are grouped by timeline (TJP).
137
- // We need to order these timelines based on dependencies.
138
- const sortedTjps = this.sortTimelinesTopologically(timelinesMap);
139
- // Add ordered timelines to payload
140
- sortedTjps.forEach(tjp => {
141
- const timeline = timelinesMap[tjp];
142
- payloadAddrs.push(...timeline.map(x => getIbGibAddr({ ibGib: x })));
143
- });
144
- // 2. INIT & Phase 2: Knowledge Exchange
105
+ // ---------------------------------------------------------
106
+ // 2. Knowledge Exchange (Init) & 3. Conflict Resolution
107
+ // ---------------------------------------------------------
108
+ // Phase 1: Init Data
145
109
  const srcKnowledgeVector = {};
146
- Object.keys(timelinesMap).forEach(tjp => {
147
- const timeline = timelinesMap[tjp];
148
- const tip = timeline[timeline.length - 1];
110
+ Object.keys(srcTimelinesMap).forEach(tjp => {
111
+ const timeline = srcTimelinesMap[tjp];
112
+ const tip = timeline.at(-1);
149
113
  srcKnowledgeVector[tjp] = getIbGibAddr({ ibGib: tip });
150
114
  });
115
+ // Need to determine mode correctly. Just defaulting to push for now
116
+ // as per original impl instructions (or TODO)
151
117
  const initData = {
152
118
  knowledgeVector: srcKnowledgeVector,
153
119
  identity: identity,
154
120
  mode: 'push'
155
121
  };
156
- // Get Source Knowledge (Time -> Latest)
157
- const srcTjps = Object.keys(timelinesMap);
158
- // Get Dest Knowledge
159
- const destKnowledge = await this.getLatestAddrsFromSpace({ space: dest, tjpAddrs: srcTjps });
160
- const conflicts = [];
161
- for (const tjp of srcTjps) {
162
- const srcTimeline = timelinesMap[tjp];
163
- const srcTip = srcTimeline[srcTimeline.length - 1];
164
- const srcTipAddr = getIbGibAddr({ ibGib: srcTip });
165
- const destTipAddr = destKnowledge[tjp];
166
- if (destTipAddr && destTipAddr !== srcTipAddr) {
167
- // Divergence found. Check if Source knows Dest's tip.
168
- if (graph[destTipAddr]) {
169
- // Fast-Forward: Dest tip IS in our graph, so we are ahead.
170
- // No action needed, proceed to push.
171
- }
172
- else {
173
- // Conflict: Dest has a tip we don't know about.
174
- conflicts.push(tjp);
175
- }
176
- }
177
- }
178
- // Lock conflicts
179
- for (const tjp of conflicts) {
180
- if (logalot) {
181
- console.log(`${lc} Conflict detected for TJP ${tjp}. Acquiring lock...`);
182
- }
183
- // Lock VALIDITY: 60 seconds?
184
- await lockSpace({
185
- space: dest,
186
- scope: tjp,
187
- secondsValid: 60,
188
- instanceId: uuid,
189
- });
190
- // todo: Implement Pull & Merge here
191
- // 1. Pull delta from Dest (destTip -> ... -> common ancestor)
192
- // 2. Merge locally
193
- // 3. Update graph/timelinesMap with merged result
194
- if (logalot) {
195
- console.warn(`${lc} Merge not fully implemented yet. Releasing lock.`);
196
- }
197
- await unlockSpace({
198
- space: dest,
199
- scope: tjp,
200
- instanceId: uuid,
201
- });
202
- }
203
122
  const initFrame = await this.createSyncFrame({
204
123
  uuid,
205
124
  stage: SyncStage.init,
206
125
  payload: initData,
207
126
  identity
208
127
  });
209
- // Persist Init to Dest (Handshake)
210
128
  await putInSpace({ space: dest, ibGib: initFrame });
211
- // 3. DELTA
212
- // const payloadAddrs = [getIbGibAddr({ ibGib: identity })]; // Already computed above
213
- const deltaData = {
214
- payloadAddrs
215
- };
129
+ // Phase 2: Resolving Conflicts (Pull/Merge)
130
+ await this.resolveConflicts({
131
+ source,
132
+ dest,
133
+ srcTimelinesMap,
134
+ srcKnowledgeVector,
135
+ srcGraph,
136
+ uuid,
137
+ conflictStrategy: conflictStrategy || 'abort',
138
+ });
139
+ // ---------------------------------------------------------
140
+ // 4. Batch Stream (Delta)
141
+ // ---------------------------------------------------------
142
+ const payloadAddrs = [];
143
+ payloadAddrs.push(...srcStones.map(x => getIbGibAddr({ ibGib: x })));
144
+ srcSortedTjps.forEach(tjp => {
145
+ const timeline = srcTimelinesMap[tjp];
146
+ payloadAddrs.push(...timeline.map(x => getIbGibAddr({ ibGib: x })));
147
+ });
148
+ const deltaData = { payloadAddrs };
216
149
  const deltaFrame = await this.createSyncFrame({
217
150
  uuid,
218
151
  stage: SyncStage.delta,
@@ -220,34 +153,16 @@ export class SyncSagaCoordinator {
220
153
  identity
221
154
  });
222
155
  await putInSpace({ space: dest, ibGib: deltaFrame });
223
- // 3.1 Stream the actual data (Batch Stream)
224
- // We must preserve the order in payloadAddrs to respect dependencies.
225
- // We batch them to improve throughput.
226
- const BATCH_SIZE = 20;
227
- for (let i = 0; i < payloadAddrs.length; i += BATCH_SIZE) {
228
- const chunkAddrs = payloadAddrs.slice(i, i + BATCH_SIZE);
229
- const chunkIbGibs = chunkAddrs
230
- .map(addr => {
231
- const ibGib = graph[addr];
232
- if (!ibGib) {
233
- throw new Error(`(UNEXPECTED) addr not found in graph: ${addr} (E: 8a402324057849318625aa85721665a5)`);
234
- }
235
- return ibGib;
236
- })
237
- .filter(ibGib => !isPrimitive({ ibGib }));
238
- if (chunkIbGibs.length > 0) {
239
- if (logalot) {
240
- console.log(`${lc} streaming batch ${Math.ceil(i / BATCH_SIZE) + 1} (${chunkIbGibs.length} ibGibs)...`);
241
- }
242
- // We don't set isDna: true here because the batch might contain mixed types.
243
- // The Space implementation should handle routing based on internal metadata if needed.
244
- await putInSpace({ space: dest, ibGibs: chunkIbGibs });
245
- }
246
- }
247
- // 4. COMMIT
248
- const commitData = {
249
- success: true
250
- };
156
+ // Streaming Logic
157
+ await this.processBatchStream({
158
+ dest,
159
+ payloadAddrs,
160
+ srcGraph
161
+ });
162
+ // ---------------------------------------------------------
163
+ // 5. Commit
164
+ // ---------------------------------------------------------
165
+ const commitData = { success: true };
251
166
  const commitFrame = await this.createSyncFrame({
252
167
  uuid,
253
168
  stage: SyncStage.commit,
@@ -266,6 +181,237 @@ export class SyncSagaCoordinator {
266
181
  }
267
182
  }
268
183
  }
184
+ /**
185
+ * Analyses the timelines in the provided graph, classifying them into stones and living timelines,
186
+ * and performing topological sort on the timelines.
187
+ */
188
+ async analyzeTimelines({ domainIbGibs, space, }) {
189
+ const lc = `${this.lc}[${this.analyzeTimelines.name}]`;
190
+ const srcGraph = await getDependencyGraph({
191
+ ibGibs: domainIbGibs,
192
+ live: true,
193
+ space,
194
+ });
195
+ const srcGraphIsValid = srcGraph && Object.keys(srcGraph).length > 0;
196
+ if (logalot) {
197
+ console.log(`${lc} graph generated. nodes: ${srcGraphIsValid ? Object.keys(srcGraph).length : 0}`);
198
+ }
199
+ const srcIbGibs = srcGraphIsValid ? Object.values(srcGraph) : [];
200
+ const { mapWithTjp_YesDna: srcMapWithTjp_YesDna, mapWithTjp_NoDna: srcMapWithTjp_NoDna, mapWithoutTjps: src_MapWithoutTjps } = splitPerTjpAndOrDna({ ibGibs: srcIbGibs });
201
+ const srcStones = Object.values(src_MapWithoutTjps);
202
+ const srcLiving = [...Object.values(srcMapWithTjp_YesDna), ...Object.values(srcMapWithTjp_NoDna)];
203
+ if (logalot) {
204
+ console.log(`${lc} classification results (count):`);
205
+ console.log(`srcStones.length: ${srcStones.length}`);
206
+ console.log(`srcLiving.length: ${srcLiving.length}`);
207
+ }
208
+ const srcTimelinesMap = getTimelinesGroupedByTjp({ ibGibs: srcLiving });
209
+ const srcSortedTjps = this.sortTimelinesTopologically(srcTimelinesMap);
210
+ return { srcStones, srcTimelinesMap, srcSortedTjps, srcGraph };
211
+ }
212
+ async resolveConflicts({ source, dest, srcTimelinesMap, srcKnowledgeVector, srcGraph, uuid, conflictStrategy, }) {
213
+ const lc = `${this.lc}[${this.resolveConflicts.name}]`;
214
+ const srcTjps = Object.keys(srcTimelinesMap);
215
+ if (logalot) {
216
+ console.log(`${lc} getting latest addrs from space as destKnowledge. srcTjps: ${srcTjps} (I: a954369f2b58843a6773b00dd18eb325)`);
217
+ }
218
+ // Get Dest Knowledge
219
+ const destKnowledge = await this.getLatestAddrsFromSpace({ space: dest, tjpAddrs: srcTjps });
220
+ if (logalot) {
221
+ console.log(`${lc} destKnowledge:\n${pretty(destKnowledge)} (I: f76108b5f228f4e2e1e79ad387deb325)`);
222
+ }
223
+ const conflicts = [];
224
+ for (const tjp of srcTjps) {
225
+ const srcTimeline = srcTimelinesMap[tjp];
226
+ const srcTip = srcTimeline[srcTimeline.length - 1];
227
+ const srcTipAddr = getIbGibAddr({ ibGib: srcTip });
228
+ const destTipAddr = destKnowledge[tjp];
229
+ if (logalot) {
230
+ console.log(`${lc} Checking TJP: ${tjp}`);
231
+ console.log(`${lc} Source Tip: ${srcTipAddr}`);
232
+ console.log(`${lc} Dest Tip: ${destTipAddr}`);
233
+ }
234
+ if (destTipAddr && destTipAddr !== srcTipAddr) {
235
+ if (logalot) {
236
+ console.log(`${lc} Divergence found. Check if Source knows Dest's tip. (I: d084d8abb6a84cc4a8301b51dec98825)`);
237
+ }
238
+ if (srcGraph[destTipAddr]) {
239
+ // Fast-Forward: Dest tip IS in our graph, so we are ahead.
240
+ // No action needed, proceed to push.
241
+ if (logalot) {
242
+ console.log(`${lc} Fast-Forward (Source is ahead).`);
243
+ }
244
+ }
245
+ else {
246
+ // Conflict: Dest has a tip we don't know about.
247
+ conflicts.push(tjp);
248
+ if (logalot) {
249
+ console.log(`${lc} CONFLICT detected (Desc is ahead/divergent).`);
250
+ }
251
+ }
252
+ }
253
+ else {
254
+ if (logalot) {
255
+ console.log(`${lc} No divergence detected (Tips match or Dest unknown).`);
256
+ }
257
+ }
258
+ }
259
+ // Lock conflicts
260
+ for (const tjp of conflicts) {
261
+ if (logalot) {
262
+ console.log(`${lc} Conflict detected for TJP ${tjp}. Acquiring lock...`);
263
+ }
264
+ // Lock VALIDITY: 60 seconds?
265
+ await lockSpace({
266
+ space: dest,
267
+ scope: tjp,
268
+ secondsValid: 60,
269
+ instanceId: uuid,
270
+ });
271
+ // Pull & Merge Logic
272
+ try {
273
+ const destTipAddr = destKnowledge[tjp];
274
+ if (!destTipAddr) {
275
+ console.warn(`${lc} destTipAddr falsy in conflict loop? skipping. (W: 1a2b3c)`);
276
+ continue;
277
+ }
278
+ const srcTipAddr = srcKnowledgeVector[tjp];
279
+ if (logalot) {
280
+ console.log(`${lc} Pulling TJP ${tjp} from Dest...`);
281
+ }
282
+ // 1. Get Delta from Dest
283
+ // We want everything from Dest's tip back to what Source has.
284
+ // We can use getDependencyGraph with 'skipAddrs' if we know what to skip.
285
+ // Or just get the graph for the tip and filter?
286
+ // Graph helper is robust. Let's try to get the graph stopping at Source's tip.
287
+ // Optimization: We can't easily pass "stop at" to getDependencyGraph directly like "stopAt: [srcTipAddr]",
288
+ // but we can pass `gotten` or `skipAddrs`.
289
+ // If we pass `skipAddrs: [srcTipAddr]`, it should prune the graph traversal beyond that point?
290
+ // Actually `skipAddrs` prevents retrieving that node AND its past. So yes!
291
+ const skipAddrs = [];
292
+ if (srcTipAddr) {
293
+ skipAddrs.push(srcTipAddr);
294
+ }
295
+ const deltaGraph = await getDependencyGraph({
296
+ space: dest,
297
+ ibGibs: [],
298
+ ibGibAddrs: [destTipAddr],
299
+ live: false, // We usually just want the static graph back to the divergence point for now? Or live? Live is safer but slower.
300
+ // If Dest is ahead, its tip IS the latest.
301
+ skipAddrs,
302
+ });
303
+ if (logalot) {
304
+ console.log(`${lc} Delta graph size: ${Object.keys(deltaGraph).length}`);
305
+ }
306
+ // 2. Put Delta into Source
307
+ const deltaIbGibs = Object.values(deltaGraph);
308
+ if (deltaIbGibs.length > 0) {
309
+ if (logalot) {
310
+ console.log(`${lc} Putting ${deltaIbGibs.length} ibGibs into Source (UUID: ${source.data?.uuid})...`);
311
+ console.log(`${lc} Delta addrs: ${deltaIbGibs.map(x => getIbGibAddr({ ibGib: x })).join(', ')}`);
312
+ }
313
+ await putInSpace({ space: source, ibGibs: deltaIbGibs });
314
+ if (logalot) {
315
+ console.log(`${lc} Put complete.`);
316
+ }
317
+ }
318
+ // 3. Re-evaluate / Merge
319
+ // Now Source has destTipAddr.
320
+ // If Source was strictly behind, srcTipAddr was an ancestor of destTipAddr.
321
+ // Source is now effectively fast-forwarded to destTipAddr.
322
+ // We need to check if we need to do a "Merge" (i.e. if Source HAD changes that are not in Dest).
323
+ // If srcTipAddr was in deltaGraph (Wait, we skipped it), or rather if srcTipAddr is an ancestor of destTip.
324
+ // If `skipAddrs` worked, we stopped AT srcTipAddr.
325
+ // Ideally check if `destTipAddr` reaches `srcTipAddr`.
326
+ // For now, in "Dest Ahead" scenario, we just assume we updated Source.
327
+ // We update our local tracking to proceed with potential Pushing back (if we were merging).
328
+ // If we simply pulled, do we need to push back?
329
+ // If Dest was strictly ahead, Source catch up. Source == Dest. No Push needed.
330
+ // Logic:
331
+ // If Source now has destTipAddr as Latest, we are good.
332
+ // TODO: Handle actual DIVERGENCE (Merge).
333
+ // This implementation covers "Dest Ahead" (Fast-Backward).
334
+ // But if we truly diverged (Source has changes not in Dest, and Dest has changes not in Source),
335
+ // checks are needed.
336
+ // If conflictStrategy is abort, we should probably check if `srcTipAddr` is an ancestor of `destTipAddr`.
337
+ // If `srcTipAddr` is NOT an ancestor, then we have a divergence.
338
+ // Getting ancestry is expensive without graph traversal.
339
+ // But we just pulled `deltaGraph`. If `srcTipAddr` was `skipped` during traversal,
340
+ // it implies it WAS reachable from `destTipAddr`.
341
+ // Wait, `skipAddrs` just stops traversal. It doesn't confirm reachability if we assume it stops *at* the addr.
342
+ // Actually `getDependencyGraph` with `skipAddrs` stops descending if it hits a skipped addr.
343
+ // If it hits it, it means `srcTipAddr` IS an ancestor.
344
+ // If it never hits it, `srcTipAddr` might NOT be an ancestor (divergence).
345
+ // Or `srcTipAddr` is just disjoint?
346
+ // Let's rely on the fact that if we simply "Pull", we are essentially overwriting Source's "Latest" pointer
347
+ // if we don't do anything else.
348
+ // If Source had 'A', and Dest had 'B', and we pull 'B'. Source now has 'A' and 'B'.
349
+ // If we don't merge, Source is now just "containing" B.
350
+ if (conflictStrategy === 'abort') {
351
+ // Verify if it's a true divergence or just a Fast-Forward we haven't tracked yet.
352
+ // If srcTipAddr is an ancestor of destTipAddr, it is a valid FF.
353
+ if (srcTipAddr) {
354
+ const isFF = await this.isAncestor({
355
+ ancestorAddr: srcTipAddr,
356
+ descendantAddr: destTipAddr,
357
+ space: source
358
+ });
359
+ if (isFF) {
360
+ if (logalot) {
361
+ console.log(`${lc} Verified Fast-Forward/Pull (srcTip is ancestor). No abort.`);
362
+ }
363
+ }
364
+ else {
365
+ throw new Error(`Sync Aborted: Divergence detected on TJP ${tjp}. Source Tip: ${srcTipAddr}, Dest Tip: ${destTipAddr}. Strategy is 'abort'.`);
366
+ }
367
+ }
368
+ else {
369
+ // source has no tip (new timeline for source), so it's a valid pull.
370
+ }
371
+ }
372
+ else if (conflictStrategy === 'optimistic') {
373
+ console.warn(`${lc} Optimistic merge not yet fully implemented. Proceeding with Pulled data but Source Tip is still the effective 'latest' for this session unless merged. (W: todo_merge)`);
374
+ }
375
+ }
376
+ catch (err) {
377
+ console.error(`${lc} Error dealing with conflict/pull for TJP ${tjp}: ${extractErrorMsg(err)}`);
378
+ if (conflictStrategy === 'abort')
379
+ throw err;
380
+ }
381
+ await unlockSpace({
382
+ space: dest,
383
+ scope: tjp,
384
+ instanceId: uuid,
385
+ });
386
+ }
387
+ }
388
+ async processBatchStream({ dest, payloadAddrs, srcGraph }) {
389
+ const lc = `${this.lc}[${this.processBatchStream.name}]`;
390
+ // 3.1 Stream the actual data (Batch Stream)
391
+ // We must preserve the order in payloadAddrs to respect dependencies.
392
+ // We batch them to improve throughput.
393
+ const BATCH_SIZE = 20;
394
+ for (let i = 0; i < payloadAddrs.length; i += BATCH_SIZE) {
395
+ const chunkAddrs = payloadAddrs.slice(i, i + BATCH_SIZE);
396
+ const chunkIbGibs = chunkAddrs
397
+ .map(addr => {
398
+ const ibGib = srcGraph[addr];
399
+ if (!ibGib) {
400
+ throw new Error(`(UNEXPECTED) addr not found in graph: ${addr} (E: 8a402324057849318625aa85721665a5)`);
401
+ }
402
+ return ibGib;
403
+ })
404
+ .filter(ibGib => !isPrimitive({ ibGib }));
405
+ if (chunkIbGibs.length > 0) {
406
+ if (logalot) {
407
+ console.log(`${lc} streaming batch ${Math.ceil(i / BATCH_SIZE) + 1} (${chunkIbGibs.length} ibGibs)...`);
408
+ }
409
+ // We don't set isDna: true here because the batch might contain mixed types.
410
+ // The Space implementation should handle routing based on internal metadata if needed.
411
+ await putInSpace({ space: dest, ibGibs: chunkIbGibs });
412
+ }
413
+ }
414
+ }
269
415
  async createSyncFrame({ uuid, stage, payload, identity }) {
270
416
  const data = {
271
417
  uuid,
@@ -305,31 +451,45 @@ export class SyncSagaCoordinator {
305
451
  const lc = `${this.lc}[${this.getLatestAddrsFromSpace.name}]`;
306
452
  try {
307
453
  if (tjpAddrs.length === 0) {
454
+ console.warn(`${lc} getting latest addrs for empty tjpAddrs? this may be reasonable but sounds odd. (W: 2f57c6d7c195034e982dfd38201db825)`);
308
455
  return {};
309
456
  }
310
- // Using the space's witness/argy pattern to invoke 'get' with 'latest' modifier
311
- const arg = await space.argy({
312
- ibMetadata: getSpaceArgMetadata({ space }),
313
- argData: {
314
- cmd: 'get',
315
- cmdModifiers: ['latest', 'addrs'],
316
- ibGibAddrs: tjpAddrs,
317
- }
457
+ let map = {};
458
+ const resLatest = await getLatestAddrs({
459
+ tjpAddrs,
460
+ space,
318
461
  });
319
- const result = await space.witness(arg);
320
- const map = {};
321
- if (result?.data?.success && result.data.addrs) {
322
- // assume 1-to-1 mapping order as per convention if successful
323
- // verification is hard without specific return map
324
- if (result.data.addrs.length === tjpAddrs.length) {
325
- for (let i = 0; i < tjpAddrs.length; i++) {
326
- map[tjpAddrs[i]] = result.data.addrs[i];
327
- }
328
- }
329
- else {
330
- console.warn(`${lc} result addrs length mismatch. requested: ${tjpAddrs.length}, got: ${result.data.addrs.length}. Mapping might be unsafe.`);
331
- }
462
+ if (!resLatest.data) {
463
+ throw new Error(`(UNEXPECTED) resLatest.data falsy? (E: 289dd61a79fa33a4f87baaa83e3c0825)`);
464
+ }
465
+ if (resLatest.data.success) {
466
+ map = clone(resLatest.data.latestAddrsMap);
467
+ }
468
+ else {
469
+ tjpAddrs.forEach(x => { map[x] = null; });
332
470
  }
471
+ // Using the space's witness/argy pattern to invoke 'get' with 'latest' modifier
472
+ // const arg = await space.argy({
473
+ // ibMetadata: getSpaceArgMetadata({ space }),
474
+ // argData: {
475
+ // cmd: 'get',
476
+ // cmdModifiers: ['latest', 'addrs'],
477
+ // ibGibAddrs: tjpAddrs,
478
+ // }
479
+ // });
480
+ // const result = await space.witness(arg);
481
+ // const map: { [tjp: string]: string } = {};
482
+ // if (result?.data?.success && result.data.addrs) {
483
+ // // assume 1-to-1 mapping order as per convention if successful
484
+ // // verification is hard without specific return map
485
+ // if (result.data.addrs.length === tjpAddrs.length) {
486
+ // for (let i = 0; i < tjpAddrs.length; i++) {
487
+ // map[tjpAddrs[i]] = result.data.addrs[i];
488
+ // }
489
+ // } else {
490
+ // console.warn(`${lc} result addrs length mismatch. requested: ${tjpAddrs.length}, got: ${result.data.addrs.length}. Mapping might be unsafe.`);
491
+ // }
492
+ // }
333
493
  return map;
334
494
  }
335
495
  catch (error) {
@@ -395,5 +555,38 @@ export class SyncSagaCoordinator {
395
555
  });
396
556
  return sorted;
397
557
  }
558
+ /**
559
+ * Checks if an address is an ancestor of another by traversing `past` relations.
560
+ * Uses BFS. Returns true if `ancestorAddr` is found in the history of `descendantAddr`.
561
+ */
562
+ async isAncestor({ ancestorAddr, descendantAddr, space, }) {
563
+ if (ancestorAddr === descendantAddr)
564
+ return true;
565
+ const queue = [descendantAddr];
566
+ const visited = new Set();
567
+ while (queue.length > 0) {
568
+ const currentAddr = queue.shift();
569
+ if (visited.has(currentAddr))
570
+ continue;
571
+ visited.add(currentAddr);
572
+ if (currentAddr === ancestorAddr)
573
+ return true;
574
+ // Get node to find past
575
+ const res = await getFromSpace({ space, addr: currentAddr });
576
+ if (!res.success || !res.ibGibs || res.ibGibs.length === 0) {
577
+ continue;
578
+ }
579
+ const node = res.ibGibs[0];
580
+ if (node.rel8ns && node.rel8ns.past) {
581
+ // Check pasts
582
+ for (const pastAddr of node.rel8ns.past) {
583
+ if (!visited.has(pastAddr)) {
584
+ queue.push(pastAddr);
585
+ }
586
+ }
587
+ }
588
+ }
589
+ return false;
590
+ }
398
591
  }
399
592
  //# sourceMappingURL=sync-saga-coordinator.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync-saga-coordinator.mjs","sourceRoot":"","sources":["../../src/sync/sync-saga-coordinator.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-saga-coordinator.mjs","sourceRoot":"","sources":["../../src/sync/sync-saga-coordinator.mts"],"names":[],"mappings":"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"}