@ibgib/core-gib 0.1.27 → 0.1.29

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 (48) hide show
  1. package/dist/common/meta-stone/meta-stone-helper.d.mts.map +1 -1
  2. package/dist/common/meta-stone/meta-stone-helper.mjs +19 -7
  3. package/dist/common/meta-stone/meta-stone-helper.mjs.map +1 -1
  4. package/dist/sync/sync-helpers.d.mts +11 -5
  5. package/dist/sync/sync-helpers.d.mts.map +1 -1
  6. package/dist/sync/sync-helpers.mjs +33 -9
  7. package/dist/sync/sync-helpers.mjs.map +1 -1
  8. package/dist/sync/sync-innerspace-constants.respec.mjs +36 -36
  9. package/dist/sync/sync-innerspace-constants.respec.mjs.map +1 -1
  10. package/dist/sync/sync-innerspace-deep-updates.respec.mjs +5 -3
  11. package/dist/sync/sync-innerspace-deep-updates.respec.mjs.map +1 -1
  12. package/dist/sync/sync-innerspace-multiple-timelines.respec.mjs +2 -2
  13. package/dist/sync/sync-innerspace-multiple-timelines.respec.mjs.map +1 -1
  14. package/dist/sync/sync-innerspace-partial-update.respec.mjs +3 -3
  15. package/dist/sync/sync-innerspace-partial-update.respec.mjs.map +1 -1
  16. package/dist/sync/sync-innerspace.respec.mjs +49 -20
  17. package/dist/sync/sync-innerspace.respec.mjs.map +1 -1
  18. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.d.mts +0 -9
  19. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.d.mts.map +1 -1
  20. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs +13 -42
  21. package/dist/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mjs.map +1 -1
  22. package/dist/sync/sync-peer/sync-peer-v1.mjs +2 -2
  23. package/dist/sync/sync-peer/sync-peer-v1.mjs.map +1 -1
  24. package/dist/sync/sync-saga-coordinator.d.mts +23 -159
  25. package/dist/sync/sync-saga-coordinator.d.mts.map +1 -1
  26. package/dist/sync/sync-saga-coordinator.mjs +508 -172
  27. package/dist/sync/sync-saga-coordinator.mjs.map +1 -1
  28. package/dist/sync/sync-saga-message/sync-saga-message-types.d.mts +12 -17
  29. package/dist/sync/sync-saga-message/sync-saga-message-types.d.mts.map +1 -1
  30. package/dist/sync/sync-types.d.mts +18 -23
  31. package/dist/sync/sync-types.d.mts.map +1 -1
  32. package/dist/sync/sync-types.mjs +15 -21
  33. package/dist/sync/sync-types.mjs.map +1 -1
  34. package/package.json +1 -1
  35. package/src/common/meta-stone/meta-stone-helper.mts +17 -7
  36. package/src/sync/sync-helpers.mts +36 -13
  37. package/src/sync/sync-innerspace-constants.respec.mts +39 -39
  38. package/src/sync/sync-innerspace-deep-updates.respec.mts +6 -6
  39. package/src/sync/sync-innerspace-multiple-timelines.respec.mts +1 -1
  40. package/src/sync/sync-innerspace-partial-update.respec.mts +2 -2
  41. package/src/sync/sync-innerspace.respec.mts +20 -19
  42. package/src/sync/sync-peer/sync-peer-innerspace/sync-peer-innerspace-v1.mts +11 -58
  43. package/src/sync/sync-peer/sync-peer-v1.mts +2 -2
  44. package/src/sync/sync-saga-coordinator.mts +472 -191
  45. package/src/sync/sync-saga-message/sync-saga-message-types.mts +13 -18
  46. package/src/sync/sync-types.mts +26 -33
  47. package/test_output.log +0 -0
  48. package/tmp.md +170 -62
@@ -6,6 +6,7 @@ import { SyncStage } from "../sync-constants.mjs";
6
6
  import { SyncMode, SyncConflictStrategy, } from "../sync-types.mjs";
7
7
  import { SYNC_SAGA_MSG_ATOM } from "./sync-saga-message-constants.mjs";
8
8
  import type { getDeltaDependencyGraph } from '../../common/other/graph-helper.mjs';
9
+ import type { SyncSagaContextIbGib_V1, SyncSagaContextData_V1 } from '../sync-saga-context/sync-saga-context-types.mjs';
9
10
 
10
11
  export interface SyncSagaMessageIb_V1 {
11
12
  atom: typeof SYNC_SAGA_MSG_ATOM;
@@ -145,28 +146,16 @@ export interface SyncSagaConflictInfo {
145
146
  export interface SyncSagaMessageAckData_V1 extends SyncSagaMessageData_V1 {
146
147
  stage: typeof SyncStage.ack;
147
148
  deltaRequestAddrInfos: SyncSagaRequestAddrInfo[];
148
- pushOfferInfos: SyncSagaPushOfferInfo[];
149
149
  /**
150
- * Map of group keys (TJP addr/constant addr) to list of known addresses
151
- * in that timeline.
152
- *
153
- * This will be used by Sender to calculate differential payloads. So
154
- * when the sender goes to get the dependency graph of its tip ibgib,
155
- * it can skip all of the addrs in this.
156
- *
157
- * For example, say sender has A^5 and receiver only has A^3. Sender
158
- * will see in this map { [A^0]: [A^0, A^1, A^2, A^3] } and know that
159
- * it needs all of the dependencies of A^5 (including A^4), but it does
160
- * NOT need to send A^0-A^3 (and dependencies) because receiver already has
161
- * these.
150
+ * Infos regarding ibgibs that the receiver (generator of this ack)
151
+ * knows/believes that the sender does NOT have (after looking at knowledge
152
+ * vector of sender).
162
153
  *
163
- * ## notes
154
+ * This includes addrs that will correspond to the context.payloadAddrsDomain
164
155
  *
165
- * I dislike this name in my rewrite/cleanup of this algorithm. However, I'm
166
- * keeping it and am using it right now in handleInitFrame for including
167
- * the receiver's latest addr/tip for the deltaReqAddrs. But really, I should
156
+ * ## note
168
157
  */
169
- // knowledgeVector?: { [tjpAddr: string]: string[] };
158
+ pushOfferInfos: SyncSagaPushOfferInfo[];
170
159
  /**
171
160
  * List of identified conflicts.
172
161
  *
@@ -194,6 +183,12 @@ export interface SyncSagaMessageDeltaData_V1 extends SyncSagaMessageData_V1 {
194
183
  /**
195
184
  * Domain ibgib addresses (actual user data being synced).
196
185
  * These go to tempSpace ONLY until final commit.
186
+ *
187
+ * NOTE: There is also a payloadAddrsDomain on the actual context itself on
188
+ * {@link SyncSagaContextData_V1}.
189
+ * NOTE: There is also payload info in {@link SyncSagaMessageAckData_V1}
190
+ * in {@link SyncSagaMessageAckData_V1.pushOfferInfos}. Not quite as elegant
191
+ * as I want it to be but there ya go.
197
192
  */
198
193
  payloadAddrsDomain?: string[];
199
194
  }
@@ -9,7 +9,7 @@ import { IbGibSpaceAny } from "../witness/space/space-base-v1.mjs";
9
9
  import { MetaspaceService } from "../witness/space/metaspace/metaspace-types.mjs";
10
10
  import { SyncPeerWitness } from "./sync-peer/sync-peer-types.mjs";
11
11
  import { FlatIbGibGraph } from "../common/other/graph-types.mjs";
12
- import { SyncSagaConflictInfo } from "./sync-saga-message/sync-saga-message-types.mjs";
12
+ import { SyncSagaConflictInfo, SyncSagaMessageIbGib_V1 } from "./sync-saga-message/sync-saga-message-types.mjs";
13
13
 
14
14
 
15
15
  // #region SyncMode
@@ -54,54 +54,47 @@ export function isValidSyncConflictStrategy(strategy: string): strategy is SyncC
54
54
  }
55
55
  // #endregion SyncConflictStrategy
56
56
 
57
- // #region SyncExecutionContext
58
- export const SYNC_EXECUTION_CONTEXT_SENDER = 'sender';
59
- export const SYNC_EXECUTION_CONTEXT_RECEIVER = 'receiver';
60
- export type SyncExecutionContext =
61
- | typeof SYNC_EXECUTION_CONTEXT_SENDER
62
- | typeof SYNC_EXECUTION_CONTEXT_RECEIVER
57
+ // #region SyncSagaFrameOrigin
58
+ export const SYNC_SAGA_FRAME_ORIGIN_SENDER = 'sender';
59
+ export const SYNC_SAGA_FRAME_ORIGIN_RECEIVER = 'receiver';
60
+ export type SyncSagaFrameOrigin =
61
+ | typeof SYNC_SAGA_FRAME_ORIGIN_SENDER
62
+ | typeof SYNC_SAGA_FRAME_ORIGIN_RECEIVER
63
63
  ;
64
64
  /**
65
- * if the current code execution is executing on the original sender (the
66
- * initiator of the sync saga operation) or the other party, the "receiver" (the
67
- * one responding).
65
+ * if the frame was created by the original sender (the initiator of the sync
66
+ * saga operation) or the other party, the "receiver" (the one responding).
68
67
  *
69
68
  * This is driven by looking at the latest value of `sagaFrame.data.n` value.
70
- *
71
- * NOTE: This is not to be confused with the sync saga context ibgib, which is
72
- * something else entirely. That is the transport wrapper ibgib around the saga.
73
- * this is strictly the enum for where the code is executing.
74
69
  */
75
- export const SyncExecutionContext = {
70
+ export const SyncSagaFrameOrigin = {
76
71
  /**
77
- * The current code is executing on the initial location that started the
78
- * sync.
72
+ * The frame was created on the initial location that started the sync.
79
73
  */
80
- sender: SYNC_EXECUTION_CONTEXT_SENDER,
74
+ sender: SYNC_SAGA_FRAME_ORIGIN_SENDER,
81
75
  /**
82
- * The current code is executing on the receiving end, which is either a
83
- * physically different location or is the logical "receiver" of an
84
- * in-memory sync execution.
76
+ * The frame was created on the receiving end, which is either a physically
77
+ * different location or is the logical "receiver" of an in-memory sync
78
+ * execution.
85
79
  */
86
- receiver: SYNC_EXECUTION_CONTEXT_RECEIVER,
87
- } satisfies { [key in SyncExecutionContext]: SyncExecutionContext };
88
- export const SYNC_EXECUTION_CONTEXT_VALID_VALUES = Object.values(SyncExecutionContext);
89
- export function isValidSyncExecutionContext(executionContext: string): executionContext is SyncExecutionContext {
90
- return SYNC_EXECUTION_CONTEXT_VALID_VALUES.includes(executionContext as SyncExecutionContext);
80
+ receiver: SYNC_SAGA_FRAME_ORIGIN_RECEIVER,
81
+ } satisfies { [key in SyncSagaFrameOrigin]: SyncSagaFrameOrigin };
82
+ export const SYNC_SAGA_FRAME_ORIGIN_VALID_VALUES = Object.values(SyncSagaFrameOrigin);
83
+ export function isValidSyncSagaFrameOrigin(sagaFrameOrigin: string): sagaFrameOrigin is SyncSagaFrameOrigin {
84
+ return SYNC_SAGA_FRAME_ORIGIN_VALID_VALUES.includes(sagaFrameOrigin as SyncSagaFrameOrigin);
91
85
  }
92
86
  // #endregion SyncConflictStrategy
93
87
 
94
88
  export interface NextSagaFrameInfo_Frame {
95
89
  frame: SyncIbGib_V1;
96
90
  payloadIbGibsDomain?: IbGib_V1[];
97
- // conflictInfos?: SyncSagaConflictInfo;
98
- responseWasNull?: undefined;
91
+ sagaComplete?: undefined;
99
92
  }
100
- export interface NextSagaFrameInfo_Null {
93
+ export interface NextSagaFrameInfo_SagaComplete {
101
94
  frame?: never;
102
95
  payloadIbGibsDomain?: never;
103
96
  conflictInfos?: never;
104
- responseWasNull: true;
97
+ sagaComplete: true;
105
98
  }
106
99
  /**
107
100
  * Result of handling a saga frame.
@@ -112,8 +105,7 @@ export interface NextSagaFrameInfo_Null {
112
105
  * defined, thus the discriminated union type.
113
106
  */
114
107
  export type NextSagaFrameInfo =
115
- NextSagaFrameInfo_Frame | NextSagaFrameInfo_Null;
116
-
108
+ NextSagaFrameInfo_Frame | NextSagaFrameInfo_SagaComplete;
117
109
 
118
110
  export interface HandleSagaResponseContextResult_Base {
119
111
  /**
@@ -207,7 +199,8 @@ export interface SyncSagaInfo {
207
199
 
208
200
  export interface SyncSagaFrameDependencyGraph {
209
201
  sagaIbGib: SyncIbGib_V1;
210
- msgStones: IbGib_V1[];
202
+ // msgStones: IbGib_V1[];
203
+ msgStones: SyncSagaMessageIbGib_V1[];
211
204
  identities: KeystoneIbGib_V1[];
212
205
  }
213
206
 
package/test_output.log CHANGED
Binary file
package/tmp.md CHANGED
@@ -1,62 +1,170 @@
1
- Great! Ty for going through that! In crafting my response for you, I have since updated the libs\core-gib\src\sync\README.md file, so please re-read that file for me. There were several inaccuracies and it is much improved.
2
-
3
- Now for your questions. Let's get to them!
4
-
5
- ## foundational
6
-
7
- 1. I don't know if the conflict merging aspect is working well or not. I have implemented a similar optimistic strategy before in a previous sync prototype that worked well (though that implementation was very slow). This approach is the same, except two additions: a) naive text merge if the transform targets `data.text`, and b) adding "graft info" (libs\core-gib\src\sync\graft-info) to the timeline after the merge so that original divergent states aren't lost. Both of these should be straightforward though. The main problem right now is trying to isolate the various stages of the "ping-pong" exchange.
8
-
9
- 2. Tjp is fully implemented and has been for several years now. Including the tjpGib in the full address, instead of just using a bare hash, has proved immensely useful (and as you know, this is completely novel/innovative as there is no other protocol that does this).
10
-
11
- 3. We originally had control and domain payloads grouped together and we had to separate them. However, this was done poorly by the original agent, and may yet still be incomplete. AFAICT though, the most recent attempt at completing the separation was successful. The current blocking issue is that it's hard to tell what is causing the test in sync-conflict.respec.mts to fail. The logging gets too verbose and is hard to track throughout the entire transaction.
12
-
13
- 4. We are deferring integrating the session keystones until we get the non-keystone workflow going.
14
-
15
- ## current state
16
-
17
- 5. The immediate symptom is the test in `sync-conflict.respect.mts` is failing. You can see the output of the most recent run in C:\Users\billm\antigravity\ibgib\libs\core-gib\test_output.log . But it is a coarse test, and really, it's hard to even read the test itself. But it's also hard to try to create more granular unit tests, though that may be the right path forward.
18
-
19
- 6. AFAICT the v16 implementation plan has been partially implemented. For example, `handleAckFrame` in `saga-coordinator.mts` still has not had the `payloadIbGibs` separated properly, i.e., there is still a variable called `payloadIbGibs`, despite us mandating that there should be NO references to this. Every instance of that string should be separated into control and domain payload ibgibs. It's actually looking like that `handleAckFrame` is not right anymore, though the libs\core-gib\src\sync\sync-innerspace-dest-ahead.respec.mts test is still passing so it's not completely wrong. But if you read through that method, you'll see it's not right and there is a not-implemented error line in there.
20
-
21
- The same is true for `payloadAddrs`, which should NOT exist anywhere. But it still is on `SyncDeltaData`. It should not be "deprecated", it should have been removed and references to it should have led us to more places to complete the separation of control and domain addrs.
22
-
23
- 7. I think part of the problem is that our implementation plans have been too complex and we didn't follow through to ensure that each and every piece was taken care of. Perhaps a todo/checklist would be more appropriate. But I devote quite a bit of time to refine the implementation plan, and then the nuances get lost. So we have a bunch of messy, half-completed code. Granted, this is a relatively complex sync algorithm, but it should absolutely be feasible.
24
-
25
- But let me speak to your specific questions on this:
26
-
27
- * Too many iterations/refactorings without clear direction?
28
- * I don't mind the iterations. I mind thinking that something is complete and it is not. This is partially my fault in not breaking it down and unit testing it more granularly, but that would add a huge amount of overhead, and what inevitably happens is we troubleshoot the tests and not the code.
29
- * Type boundaries bleeding between concerns?
30
- * Our types are pretty well created by this point.
31
- * The polling mechanism feeling hacky?
32
- * No, the polling mechanism is fine.
33
- * Race conditions or timing issues?
34
- * There have been no race conditions that I know of.
35
-
36
- I had previous success with Antigravity on other smaller tasks, but this one seems to have been a little too advanced for the Gemini 3 High model. Your model seems to be performing better, however we hit the smaller context window rather quickly. Overall, I am just trying not to have to go through every single LoC myself, though it's looking like that is more and more likely.
37
-
38
- Here is another example I've come across that is messy. Look at the following code found in `sync-saga-coordinator.mts`:
39
-
40
- ```
41
- // 4. EXECUTE SAGA LOOP (FSM)
42
- // Inject tempSpace into peer so it can pull control payloads to the right place
43
- if ('opts' in peer && peer.opts) {
44
- (peer.opts as any).senderTempSpace = tempSpace;
45
- }
46
- ```
47
-
48
- This is terrible! This is a hack so that if we have a `SyncPeerInnerspace_V1`, we set its temp space. This is "messy" to say the least.
49
-
50
- ### sync test results
51
-
52
- * libs\core-gib\src\sync\sync-innerspace.respec.mts PASSING
53
- * libs\core-gib\src\sync\sync-innerspace-constants.respec.mts PASSING
54
- * libs\core-gib\src\sync\sync-innerspace-dest-ahead.respec.mts PASSING
55
- * libs\core-gib\src\sync\sync-innerspace-deep-updates.respec.mts PASSING
56
- * libs\core-gib\src\sync\sync-innerspace-multiple-timelines.respec.mts PASSING
57
- * libs\core-gib\src\sync\sync-innerspace-partial-update.respec.mts PASSING
58
- * libs\core-gib\src\sync\sync-conflict.respec.mts FAILING
59
-
60
- ## how you can help
61
-
62
- All of the simpler tests that don't require a Delta frame back and forth (short back-and-forth to resolve the conflict) are all passing. I _think_ that the merge logic itself is fine, though I haven't gone through that with a fine-tooth comb yet. To me, the most obvious problem right now is that the mechanism for passing domain ibgibs back and forth is not working. For example, look in libs\core-gib\src\sync\sync-saga-coordinator.mts for `srcGraph`. That was added early on in the code sketch. IIRC, it was supposed to be for the domain ibgibs in the original sender's location. Is that another name for payloadIbGibs, but stored in a map? How does it get populated? How do the payload ibgibs go from the peer to the handle____ methods? So don't do any coding right now. Perhaps this whole conversation will just be you and I talking about the code as I go through it. So just point me to things that you see and I will make changes, because I need to wrap this up in the next 3 days. Do note that I have made some changes since starting this message to you, and it doesn't build at the moment. But overall there are still things that you can just point me to if you just examine the logic.
1
+ [SyncSagaCoordinator][executeLocalCommit] currentExecutionContext: receiver (I: 3add8f8390c89743ae554bd3cc60b826)
2
+ [SyncSagaCoordinator][executeLocalCommit][receiver] history slice: {
3
+ "sagaIbGib": {
4
+ "ib": "sync 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b",
5
+ "gib": "614E694D3F27A1B636E7344A91A3BA3562D0615A5626BF46EA8D0D4A99ED2EAA",
6
+ "data": {
7
+ "n": 0,
8
+ "timestamp": "Thu, 22 Jan 2026 18:43:36 GMT",
9
+ "timestampMs": 972,
10
+ "uuid": "27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b",
11
+ "conflictStrategy": "abort",
12
+ "isTjp": true
13
+ },
14
+ "rel8ns": {
15
+ "ancestor": [
16
+ "sync^gib"
17
+ ],
18
+ "syncmsg": [
19
+ "sync_sagamsg 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b init^A07224377D6DD1C25F0291F5F67AA5CC2E52B95B6904B4BC8CBCDA198CF4C456"
20
+ ]
21
+ }
22
+ },
23
+ "msgStones": [
24
+ {
25
+ "ib": "sync_sagamsg 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b init",
26
+ "gib": "A07224377D6DD1C25F0291F5F67AA5CC2E52B95B6904B4BC8CBCDA198CF4C456",
27
+ "data": {
28
+ "timestamp": "Thu, 22 Jan 2026 18:43:36 GMT",
29
+ "timestampMs": 956,
30
+ "sagaId": "27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b",
31
+ "stage": "init",
32
+ "knowledgeVector": {},
33
+ "mode": "sync",
34
+ "stones": [
35
+ "constant_c1^2B4B05537B40B9B5FC501E58EE9256B6F33259BA629A4633113B8104C1B5B08C"
36
+ ],
37
+ "uuid": "4a4acb6d42d99168e20e899931bed0291450ec3dfaecfdcab09ed64606eff43b"
38
+ },
39
+ "rel8ns": {
40
+ "ancestor": [
41
+ "sync_sagamsg^gib"
42
+ ]
43
+ }
44
+ }
45
+ ],
46
+ "identities": []
47
+ } (I: e5a9436fb66b0df3183bd6d81be2ca26)
48
+ [SyncSagaCoordinator][executeLocalCommit][receiver] history slice: {
49
+ "sagaIbGib": {
50
+ "ib": "sync 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b",
51
+ "gib": "7F787D985C836D0C340155AD38E18F6A7F3A76AA7805FD040EBAFABC045354E9.614E694D3F27A1B636E7344A91A3BA3562D0615A5626BF46EA8D0D4A99ED2EAA",
52
+ "data": {
53
+ "n": 2,
54
+ "timestamp": "Thu, 22 Jan 2026 18:43:37 GMT",
55
+ "timestampMs": 157,
56
+ "uuid": "27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b",
57
+ "conflictStrategy": "abort"
58
+ },
59
+ "rel8ns": {
60
+ "ancestor": [
61
+ "sync^gib"
62
+ ],
63
+ "syncmsg": [
64
+ "sync_sagamsg 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b delta^83B967620C334ADCCB6749DBDC9A69CE40284FDC3948D1299CBF8E68DD2F3B40"
65
+ ],
66
+ "past": [
67
+ "sync 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b^614E694D3F27A1B636E7344A91A3BA3562D0615A5626BF46EA8D0D4A99ED2EAA",
68
+ "sync 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b^485E8579F73B991039C636843E19B03BC597E6BF71F48018257FDD3FEDEF5AE2.614E694D3F27A1B636E7344A91A3BA3562D0615A5626BF46EA8D0D4A99ED2EAA"
69
+ ],
70
+ "tjp": [
71
+ "sync 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b^614E694D3F27A1B636E7344A91A3BA3562D0615A5626BF46EA8D0D4A99ED2EAA"
72
+ ]
73
+ }
74
+ },
75
+ "msgStones": [
76
+ {
77
+ "ib": "sync_sagamsg 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b delta",
78
+ "gib": "83B967620C334ADCCB6749DBDC9A69CE40284FDC3948D1299CBF8E68DD2F3B40",
79
+ "data": {
80
+ "timestamp": "Thu, 22 Jan 2026 18:43:37 GMT",
81
+ "timestampMs": 136,
82
+ "sagaId": "27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b",
83
+ "stage": "delta",
84
+ "payloadAddrsDomain": [
85
+ "constant_c1^2B4B05537B40B9B5FC501E58EE9256B6F33259BA629A4633113B8104C1B5B08C"
86
+ ],
87
+ "proposeCommit": false,
88
+ "uuid": "984932f854d515a22d6dceefb390a3b4500ad3da5eb745c217bea025aa3a12c0"
89
+ },
90
+ "rel8ns": {
91
+ "ancestor": [
92
+ "sync_sagamsg^gib"
93
+ ]
94
+ }
95
+ }
96
+ ],
97
+ "identities": []
98
+ } (I: e5a9436fb66b0df3183bd6d81be2ca26)
99
+ [SyncSagaCoordinator][executeLocalCommit][receiver] history slice: {
100
+ "sagaIbGib": {
101
+ "ib": "sync 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b",
102
+ "gib": "F83441D677AA434A5A6BB2B071BB91A77FC2D310834602630425B80C310C0062.614E694D3F27A1B636E7344A91A3BA3562D0615A5626BF46EA8D0D4A99ED2EAA",
103
+ "data": {
104
+ "n": 4,
105
+ "timestamp": "Thu, 22 Jan 2026 18:43:37 GMT",
106
+ "timestampMs": 392,
107
+ "uuid": "27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b",
108
+ "conflictStrategy": "abort"
109
+ },
110
+ "rel8ns": {
111
+ "ancestor": [
112
+ "sync^gib"
113
+ ],
114
+ "syncmsg": [
115
+ "sync_sagamsg 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b commit^0E66808B115227AA36DCB34AE5B07C85FD89FB8F9AACFBC8B943D276DB1449E0"
116
+ ],
117
+ "past": [
118
+ "sync 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b^614E694D3F27A1B636E7344A91A3BA3562D0615A5626BF46EA8D0D4A99ED2EAA",
119
+ "sync 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b^485E8579F73B991039C636843E19B03BC597E6BF71F48018257FDD3FEDEF5AE2.614E694D3F27A1B636E7344A91A3BA3562D0615A5626BF46EA8D0D4A99ED2EAA",
120
+ "sync 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b^7F787D985C836D0C340155AD38E18F6A7F3A76AA7805FD040EBAFABC045354E9.614E694D3F27A1B636E7344A91A3BA3562D0615A5626BF46EA8D0D4A99ED2EAA",
121
+ "sync 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b^C5CA645BB939F80F5453D2F20009A52952D878A39F7317A4054B11B8FE4FA7CC.614E694D3F27A1B636E7344A91A3BA3562D0615A5626BF46EA8D0D4A99ED2EAA"
122
+ ],
123
+ "tjp": [
124
+ "sync 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b^614E694D3F27A1B636E7344A91A3BA3562D0615A5626BF46EA8D0D4A99ED2EAA"
125
+ ]
126
+ }
127
+ },
128
+ "msgStones": [
129
+ {
130
+ "ib": "sync_sagamsg 27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b commit",
131
+ "gib": "0E66808B115227AA36DCB34AE5B07C85FD89FB8F9AACFBC8B943D276DB1449E0",
132
+ "data": {
133
+ "timestamp": "Thu, 22 Jan 2026 18:43:37 GMT",
134
+ "timestampMs": 372,
135
+ "sagaId": "27343ef70b00902267f66910704e105aaac6dbd731dd416e2a94dabc9f53307b",
136
+ "stage": "commit",
137
+ "success": true,
138
+ "uuid": "f50c37e8e459d9bf1493a1c9c6c0ebdf31ecf63533cbc94357c3a8773f70fe50"
139
+ },
140
+ "rel8ns": {
141
+ "ancestor": [
142
+ "sync_sagamsg^gib"
143
+ ]
144
+ }
145
+ }
146
+ ],
147
+ "identities": []
148
+ } (I: e5a9436fb66b0df3183bd6d81be2ca26)
149
+ [SyncSagaCoordinator][executeLocalCommit][receiver] allPayloadAddrsDomainTransferred: constant_c1^2B4B05537B40B9B5FC501E58EE9256B6F33259BA629A4633113B8104C1B5B08C (I: a1950eb3ca95bdc9ec18a4b8823e9826)
150
+ [SyncSagaCoordinator][executeLocalCommit][receiver] 1 changes detected (I: fa30d18e83a87ee9e8487fbb5d632b26)
151
+ [SyncSagaCoordinator][executeLocalCommit] put all into localSpace (witness space InnerSpace_V1 source source_uuid undefined undefined) starting... (I: d5e0d9870e380b61e80c729660058826)
152
+ [putInSpace] [InnerSpace_V1][putImpl] already had addr(s): constant_c1^2B4B05537B40B9B5FC501E58EE9256B6F33259BA629A4633113B8104C1B5B08C
153
+ [putInSpace] (W: 7120c8267c2aaf8cad5d2f3850666826)
154
+ [SyncSagaCoordinator][executeLocalCommit] put all into localSpace (witness space InnerSpace_V1 source source_uuid undefined undefined) complete. (I: d5e0d9870e380b61e80c729660058826)
155
+ [SyncSagaCoordinator][executeLocalCommit] register mapWithoutTjps starting... (I: 2b84d8f8dda85adde88696d8419bf726)
156
+ [SyncSagaCoordinator][executeLocalCommit] registering constant_c1^2B4B05537B40B9B5FC501E58EE9256B6F33259BA629A4633113B8104C1B5B08C (I: 4647b4f42d27cffe0fbfce8846755826)
157
+ [SyncSagaCoordinator][executeLocalCommit] mapWithoutTjps complete. (I: 2b84d8f8dda85adde88696d8419bf726)
158
+ [SyncSagaCoordinator][executeLocalCommit] register mapWithTjp_NoDna starting... (I: 96e648e4db382499b8bfaa1b37c24826)
159
+ [SyncSagaCoordinator][executeLocalCommit] register mapWithTjp_NoDna complete. (I: 96e648e4db382499b8bfaa1b37c24826)
160
+ [SyncSagaCoordinator][executeLocalCommit] register mapWithTjp_YesDna starting... (I: d54a820e9442dee4681f6228a6795926)
161
+ [SyncSagaCoordinator][executeLocalCommit] register mapWithTjp_YesDna complete. (I: d54a820e9442dee4681f6228a6795926)
162
+ [SyncSagaCoordinator][executeLocalCommit] complete.
163
+ [SyncSagaCoordinator][handleCommitFrame] NAG ERROR (NOT THROWN): implement cleanup logic, including add a cleanup method to the peer (E: 3a9a24befb98a981a88fbdbf52920e26)
164
+ [SyncSagaCoordinator][handleCommitFrame] Peer committed. Finalizing saga locally. Saga Complete.
165
+ [SyncSagaCoordinator][handleCommitFrame] complete.
166
+ [SyncSagaCoordinator][handleResponseSagaContext] nextFrameInfo: {
167
+ "sagaComplete": true
168
+ } (I: a8ad281ca8e89385686d18327a105726)
169
+ [SyncSagaCoordinator][handleResponseSagaContext] complete.
170
+ [SyncSagaCoordinator][executeSagaLoop] Handler returned null (Saga End). (I: 123bf9e7dca8886de72553a8d4f29e26)