@cello-protocol/daemon 0.0.167 → 0.0.169
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/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +115 -254
- package/dist/daemon.js.map +1 -1
- package/dist/document-amendment-store.d.ts +94 -46
- package/dist/document-amendment-store.d.ts.map +1 -1
- package/dist/document-amendment-store.js +217 -102
- package/dist/document-amendment-store.js.map +1 -1
- package/dist/document-delivery-transport.d.ts +41 -52
- package/dist/document-delivery-transport.d.ts.map +1 -1
- package/dist/document-delivery-transport.js +6 -156
- package/dist/document-delivery-transport.js.map +1 -1
- package/dist/document-frame-router.d.ts +13 -17
- package/dist/document-frame-router.d.ts.map +1 -1
- package/dist/document-frame-router.js +21 -93
- package/dist/document-frame-router.js.map +1 -1
- package/dist/document-handlers.d.ts +1 -1
- package/dist/document-handlers.d.ts.map +1 -1
- package/dist/document-handlers.js +471 -466
- package/dist/document-handlers.js.map +1 -1
- package/dist/document-handshake.d.ts +4 -1
- package/dist/document-handshake.d.ts.map +1 -1
- package/dist/document-handshake.js +3 -1
- package/dist/document-handshake.js.map +1 -1
- package/dist/document-inbound.d.ts +18 -5
- package/dist/document-inbound.d.ts.map +1 -1
- package/dist/document-inbound.js +94 -110
- package/dist/document-inbound.js.map +1 -1
- package/dist/document-layer.d.ts +28 -67
- package/dist/document-layer.d.ts.map +1 -1
- package/dist/document-layer.js +670 -565
- package/dist/document-layer.js.map +1 -1
- package/dist/document-lifecycle.d.ts +11 -157
- package/dist/document-lifecycle.d.ts.map +1 -1
- package/dist/document-lifecycle.js +26 -561
- package/dist/document-lifecycle.js.map +1 -1
- package/dist/document-publish.d.ts +13 -0
- package/dist/document-publish.d.ts.map +1 -1
- package/dist/document-publish.js +19 -11
- package/dist/document-publish.js.map +1 -1
- package/dist/document-reconcile-engine.d.ts +66 -0
- package/dist/document-reconcile-engine.d.ts.map +1 -0
- package/dist/document-reconcile-engine.js +225 -0
- package/dist/document-reconcile-engine.js.map +1 -0
- package/dist/document-reconcile-scheduler.d.ts +91 -0
- package/dist/document-reconcile-scheduler.d.ts.map +1 -0
- package/dist/document-reconcile-scheduler.js +153 -0
- package/dist/document-reconcile-scheduler.js.map +1 -0
- package/dist/document-rejection.d.ts +2 -0
- package/dist/document-rejection.d.ts.map +1 -1
- package/dist/document-rejection.js +5 -1
- package/dist/document-rejection.js.map +1 -1
- package/dist/document-store.d.ts +18 -220
- package/dist/document-store.d.ts.map +1 -1
- package/dist/document-store.js +95 -717
- package/dist/document-store.js.map +1 -1
- package/dist/initiate-session-handler.d.ts +5 -0
- package/dist/initiate-session-handler.d.ts.map +1 -1
- package/dist/initiate-session-handler.js +1 -0
- package/dist/initiate-session-handler.js.map +1 -1
- package/package.json +5 -5
- package/dist/delivery-sweep-bound.d.ts +0 -79
- package/dist/delivery-sweep-bound.d.ts.map +0 -1
- package/dist/delivery-sweep-bound.js +0 -109
- package/dist/delivery-sweep-bound.js.map +0 -1
- package/dist/document-ack-inbound.d.ts +0 -71
- package/dist/document-ack-inbound.d.ts.map +0 -1
- package/dist/document-ack-inbound.js +0 -210
- package/dist/document-ack-inbound.js.map +0 -1
- package/dist/document-control-notifier.d.ts +0 -107
- package/dist/document-control-notifier.d.ts.map +0 -1
- package/dist/document-control-notifier.js +0 -137
- package/dist/document-control-notifier.js.map +0 -1
- package/dist/document-delivery.d.ts +0 -229
- package/dist/document-delivery.d.ts.map +0 -1
- package/dist/document-delivery.js +0 -449
- package/dist/document-delivery.js.map +0 -1
- package/dist/document-join-store.d.ts +0 -80
- package/dist/document-join-store.d.ts.map +0 -1
- package/dist/document-join-store.js +0 -197
- package/dist/document-join-store.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-lifecycle.js","sourceRoot":"","sources":["../src/document-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"document-lifecycle.js","sourceRoot":"","sources":["../src/document-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,13 @@ export type PublishResult = {
|
|
|
37
37
|
detail: string;
|
|
38
38
|
};
|
|
39
39
|
export interface DocumentPublishDeps {
|
|
40
|
+
/**
|
|
41
|
+
* SYNC-G1 — the author's governance frontier at publish time (entry hashes, the fold's
|
|
42
|
+
* heads). Stamped into the signed envelope as content's causal link to the governance that
|
|
43
|
+
* makes it admissible; receivers rule R20/R30 on it. Null when the frontier cannot be
|
|
44
|
+
* derived — the publish REFUSES rather than stamping a guess.
|
|
45
|
+
*/
|
|
46
|
+
governanceFrontierFor(ownerAgentId: string, documentId: string): string[] | null;
|
|
40
47
|
store: DocumentStore;
|
|
41
48
|
engine: DocumentEngine;
|
|
42
49
|
logger: Logger;
|
|
@@ -59,6 +66,12 @@ export interface DocumentPublishDeps {
|
|
|
59
66
|
* envelope-first rule exists to prevent, arriving through the other door).
|
|
60
67
|
*/
|
|
61
68
|
holdersFor(ownerAgentId: string, documentId: string): string[] | null;
|
|
69
|
+
/**
|
|
70
|
+
* SYNC-P4 (R39's first trigger): a publish NUDGES every other seat by initiating a reconcile
|
|
71
|
+
* exchange with them — fire-and-forget, no ledger, no schedule. A nudge that does not land
|
|
72
|
+
* strands nothing: the difference it would have closed is recomputed at any later exchange.
|
|
73
|
+
*/
|
|
74
|
+
nudgeSeats(ownerAgentId: string, documentId: string, seats: readonly string[]): void;
|
|
62
75
|
}
|
|
63
76
|
export declare class DocumentPublish {
|
|
64
77
|
#private;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-publish.d.ts","sourceRoot":"","sources":["../src/document-publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC;AAO9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjE,gGAAgG;IAChG,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjD,wFAAwF;IACxF,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACnH;;;;;OAKG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"document-publish.d.ts","sourceRoot":"","sources":["../src/document-publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,KAAK,CAAC,MAAM,KAAK,CAAC;AAO9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,MAAM,aAAa,GACrB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACjF,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACjE,gGAAgG;IAChG,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACjD,wFAAwF;IACxF,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACnH;;;;;OAKG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACtE;;;;OAIG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CACtF;AAQD,qBAAa,eAAe;;gBAGd,IAAI,EAAE,mBAAmB;IAIrC;;;;;OAKG;IACG,OAAO,CACX,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,CAAC,CAAC,GAAG,EACV,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,CAAC;CAuI1B"}
|
package/dist/document-publish.js
CHANGED
|
@@ -93,12 +93,20 @@ export class DocumentPublish {
|
|
|
93
93
|
detail: "the peer already has everything in this document",
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
|
+
// SYNC-G1: the frontier is stamped, or the publish refuses — a guessed anchor would let
|
|
97
|
+
// this envelope claim governance its author never held.
|
|
98
|
+
const governanceParents = this.#d.governanceFrontierFor(ownerAgentId, documentId);
|
|
99
|
+
if (governanceParents === null) {
|
|
100
|
+
return {
|
|
101
|
+
ok: false,
|
|
102
|
+
reason: "document_frontier_underivable",
|
|
103
|
+
detail: "this document's governance could not be derived, so the envelope cannot name the " +
|
|
104
|
+
"frontier it was authored under — fix the chain before publishing",
|
|
105
|
+
};
|
|
106
|
+
}
|
|
96
107
|
const envelope = {
|
|
97
108
|
type: "document_update",
|
|
98
109
|
document_id: documentId,
|
|
99
|
-
// The CURRENT epoch from the recorded amendment chain (M14B / DOD-MP-AMEND-1) — the
|
|
100
|
-
// constant-0 era ends the moment a document's first amendment lands.
|
|
101
|
-
epoch_id: this.#d.store.currentDocumentEpoch(ownerAgentId, documentId),
|
|
102
110
|
// READ, never cached. Anything else appended since — a rejection, a withdrawal — moves this,
|
|
103
111
|
// and a wrong link is refused by the peer and stops the document rebuilding locally.
|
|
104
112
|
doc_prev_hash: this.#d.store.lastEnvelopeHashBySender(ownerAgentId, documentId, senderId),
|
|
@@ -107,6 +115,7 @@ export class DocumentPublish {
|
|
|
107
115
|
update_encoding: DOCUMENT_UPDATE_ENCODING_V1,
|
|
108
116
|
state_vector: ourNow,
|
|
109
117
|
update,
|
|
118
|
+
governance_parents: [...governanceParents].sort(),
|
|
110
119
|
signature: new Uint8Array(0),
|
|
111
120
|
};
|
|
112
121
|
// TARGETS BEFORE THE ENVELOPE: a publish that cannot name its holders refuses before it
|
|
@@ -122,15 +131,12 @@ export class DocumentPublish {
|
|
|
122
131
|
}
|
|
123
132
|
envelope.signature = await this.#d.sign(ownerAgentId, buildDocumentUpdateTbs(envelope));
|
|
124
133
|
const envelopeHash = documentEnvelopeHash(envelope);
|
|
125
|
-
|
|
126
|
-
// in the log with zero delivery rows, and the bilateral backfill would re-seed only the
|
|
127
|
-
// genesis peer — every other holder silently never receiving it, forever.
|
|
128
|
-
const appended = this.#d.store.appendEnvelopeWithDeliveries(ownerAgentId, {
|
|
134
|
+
const appended = this.#d.store.appendEnvelope(ownerAgentId, {
|
|
129
135
|
envelopeHash,
|
|
130
136
|
documentId,
|
|
131
137
|
senderAgentId: senderId,
|
|
132
138
|
docPrevHash: envelope.doc_prev_hash,
|
|
133
|
-
|
|
139
|
+
governanceParents: [...envelope.governance_parents],
|
|
134
140
|
signature: envelope.signature,
|
|
135
141
|
stateVector: envelope.state_vector,
|
|
136
142
|
payload: update,
|
|
@@ -140,7 +146,7 @@ export class DocumentPublish {
|
|
|
140
146
|
// inbound path stores for their envelopes.
|
|
141
147
|
senderClientId: doc.clientID,
|
|
142
148
|
createdAtMs: nowMs,
|
|
143
|
-
}
|
|
149
|
+
});
|
|
144
150
|
if (!appended) {
|
|
145
151
|
// The same content published twice hashes the same, so this is a genuine no-op rather than a
|
|
146
152
|
// fault — but it is reported, because a caller that believes it published something new and
|
|
@@ -157,8 +163,10 @@ export class DocumentPublish {
|
|
|
157
163
|
bytes: update.length,
|
|
158
164
|
senderClientId: doc.clientID,
|
|
159
165
|
});
|
|
160
|
-
// Fire and forget: the
|
|
161
|
-
//
|
|
166
|
+
// Fire and forget: the NUDGE (an initiated reconcile per seat) is how the envelope travels
|
|
167
|
+
// now — there is no delivery ledger and no worker. Nothing here waits for a peer, and a nudge
|
|
168
|
+
// that does not land is repaired by any later exchange.
|
|
169
|
+
this.#d.nudgeSeats(ownerAgentId, documentId, holders.filter((h) => h !== senderId));
|
|
162
170
|
return { ok: true, envelopeHash, bytes: update.length };
|
|
163
171
|
}
|
|
164
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-publish.js","sourceRoot":"","sources":["../src/document-publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,GAE5B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"document-publish.js","sourceRoot":"","sources":["../src/document-publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,GAE5B,MAAM,gCAAgC,CAAC;AAyCxC,SAAS,UAAU,CAAC,CAAa,EAAE,CAAa;IAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAO,eAAe;IACjB,EAAE,CAAsB;IAEjC,YAAY,IAAyB;QACnC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,OAAO,CACX,YAAoB,EACpB,UAAkB,EAClB,GAAU,EACV,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,kBAAkB;gBAC1B,MAAM,EAAE,eAAe,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB;aACjE,CAAC;QACJ,CAAC;QAED,gGAAgG;QAChG,uFAAuF;QACvF,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QAEtF,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACnD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,8BAA8B;gBACtC,MAAM,EAAE,2BAA2B,YAAY,qCAAqC;aACrF,CAAC;QACJ,CAAC;QAED,uFAAuF;QACvF,4FAA4F;QAC5F,6FAA6F;QAC7F,iFAAiF;QACjF,MAAM,eAAe,GACnB,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;QAC7F,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QAEhE,4FAA4F;QAC5F,6FAA6F;QAC7F,6FAA6F;QAC7F,4FAA4F;QAC5F,yBAAyB;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,wBAAwB,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,OAAO,KAAK,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;YACpD,gFAAgF;YAChF,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,6BAA6B;gBACrC,MAAM,EAAE,8DAA8D;aACvE,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,6BAA6B;gBACrC,MAAM,EAAE,kDAAkD;aAC3D,CAAC;QACJ,CAAC;QAED,wFAAwF;QACxF,wDAAwD;QACxD,MAAM,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAClF,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;YAC/B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,+BAA+B;gBACvC,MAAM,EACJ,mFAAmF;oBACnF,kEAAkE;aACrE,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAA2B;YACvC,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,UAAU;YACvB,6FAA6F;YAC7F,qFAAqF;YACrF,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,wBAAwB,CAAC,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC;YACzF,eAAe,EAAE,QAAQ;YACzB,gBAAgB,EAAE,GAAG,CAAC,QAAQ;YAC9B,eAAe,EAAE,2BAA2B;YAC5C,YAAY,EAAE,MAAM;YACpB,MAAM;YACN,kBAAkB,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,IAAI,EAAE;YACjD,SAAS,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC;SAC7B,CAAC;QACF,wFAAwF;QACxF,4FAA4F;QAC5F,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC7D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,wBAAwB;gBAChC,MAAM,EACJ,uFAAuF;oBACvF,sEAAsE;aACzE,CAAC;QACJ,CAAC;QACD,QAAQ,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxF,MAAM,YAAY,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,EAAE;YAC1D,YAAY;YACZ,UAAU;YACV,aAAa,EAAE,QAAQ;YACvB,WAAW,EAAE,QAAQ,CAAC,aAAa;YACnC,iBAAiB,EAAE,CAAC,GAAG,QAAQ,CAAC,kBAAkB,CAAC;YACnD,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,WAAW,EAAE,QAAQ,CAAC,YAAY;YAClC,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,QAAQ;YACd,sBAAsB,EAAE,IAAI;YAC5B,8FAA8F;YAC9F,2CAA2C;YAC3C,cAAc,EAAE,GAAG,CAAC,QAAQ;YAC5B,WAAW,EAAE,KAAK;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,6FAA6F;YAC7F,4FAA4F;YAC5F,8CAA8C;YAC9C,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,4BAA4B;gBACpC,MAAM,EAAE,8CAA8C,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;aACnF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;YACxC,UAAU;YACV,YAAY;YACZ,KAAK,EAAE,MAAM,CAAC,MAAM;YACpB,cAAc,EAAE,GAAG,CAAC,QAAQ;SAC7B,CAAC,CAAC;QACH,2FAA2F;QAC3F,8FAA8F;QAC9F,wDAAwD;QACxD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;QACpF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC1D,CAAC;CACF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SYNC-P3 (R10, R17–R20, R36) — the responder half of the reconcile exchange.
|
|
3
|
+
*
|
|
4
|
+
* Given a peer's position for one document, decide from OUR OWN state alone whether they may be
|
|
5
|
+
* answered at all (the four entitlement classes, R17), and if so compute exactly what they lack:
|
|
6
|
+
* governance entries first, then content envelopes, never anything in their refusal set (R36).
|
|
7
|
+
* The reply carries our own position so the initiator can send step 3 if WE are behind — the
|
|
8
|
+
* exchange is symmetric by construction.
|
|
9
|
+
*
|
|
10
|
+
* Everything here is derived at the moment of the exchange from the entry set and the envelope
|
|
11
|
+
* log. There is no per-peer record consulted and none written (R8/R9): asked twice, we answer
|
|
12
|
+
* twice, identically — idempotence is not bookkeeping, it is the absence of bookkeeping.
|
|
13
|
+
*/
|
|
14
|
+
import { type DocumentReconcileBlock, type DocumentStateView } from "@cello-protocol/protocol-types";
|
|
15
|
+
import type { DocumentEnvelopeRow } from "./document-store.js";
|
|
16
|
+
import type { AuthorWatermark } from "./document-amendment-store.js";
|
|
17
|
+
/** The reads the engine needs — a seam so the tests exercise decisions, not plumbing. */
|
|
18
|
+
export interface ReconcileReads {
|
|
19
|
+
deriveState(documentId: string): {
|
|
20
|
+
ok: true;
|
|
21
|
+
state: DocumentStateView;
|
|
22
|
+
} | {
|
|
23
|
+
ok: false;
|
|
24
|
+
reason: string;
|
|
25
|
+
};
|
|
26
|
+
watermarks(documentId: string): Map<string, AuthorWatermark>;
|
|
27
|
+
entriesByAuthorAfter(documentId: string, author: string, afterSeq: number): Uint8Array[];
|
|
28
|
+
envelopeLog(documentId: string): DocumentEnvelopeRow[];
|
|
29
|
+
/** Hashes THIS holder has refused — its own decisions, surfaced into its position (R36). */
|
|
30
|
+
refusedHashes(documentId: string): string[];
|
|
31
|
+
/** SYNC-R35: this holder's own SIGNED refusal records (document_rejection wires). */
|
|
32
|
+
refusalRecords(documentId: string): Uint8Array[];
|
|
33
|
+
/** SYNC-D8 — the fold-derived standing; "removed" is the one verdict consulted here. */
|
|
34
|
+
standingOf(documentId: string, agentId: string): "participant" | "invited" | "removed" | "stranger" | "unknown";
|
|
35
|
+
/** The signed genesis proposal bytes — the anchor a joiner-with-nothing must be handed. */
|
|
36
|
+
genesisBytes(documentId: string): Uint8Array | null;
|
|
37
|
+
/**
|
|
38
|
+
* R32 — the LAST removal entry naming this agent plus its full ancestor closure, as wire
|
|
39
|
+
* bytes in a foldable order, or null when no removal names them. This is what a removed
|
|
40
|
+
* holder is owed: enough to derive their own removal and nothing authored after it.
|
|
41
|
+
*/
|
|
42
|
+
removalClosure(documentId: string, agentId: string): Uint8Array[] | null;
|
|
43
|
+
}
|
|
44
|
+
export type ReconcileAnswer = {
|
|
45
|
+
block: DocumentReconcileBlock;
|
|
46
|
+
/** True when the peer's position shows them holding something we lack — step 3 is wanted. */
|
|
47
|
+
peerAhead: boolean;
|
|
48
|
+
/** True when the byte budget cut the payload short — the peer's next exchange gets the rest. */
|
|
49
|
+
truncated: boolean;
|
|
50
|
+
};
|
|
51
|
+
/** A mutable byte allowance shared across the blocks of one reply frame (P3 review F3). */
|
|
52
|
+
export interface ReplyBudget {
|
|
53
|
+
remainingBytes: number;
|
|
54
|
+
}
|
|
55
|
+
/** Our own position for one document — step 1's payload, and the position half of every reply. */
|
|
56
|
+
export declare function buildReconcileBlock(reads: ReconcileReads, documentId: string): DocumentReconcileBlock;
|
|
57
|
+
/**
|
|
58
|
+
* Answer a peer's position for one document. The entitlement ruling comes FIRST and from our
|
|
59
|
+
* own state alone (R18); a refusal rides the BLOCK (never silenced by a batch, review F4), and
|
|
60
|
+
* a refusal-bearing block carries EMPTY positions — a stranger learns nothing about where this
|
|
61
|
+
* holder stands. The removed holder is the one refusal that also DELIVERS: their own removal
|
|
62
|
+
* and its ancestors travel with the terminal ruling (R32), so a holder who was offline at
|
|
63
|
+
* removal time can derive why the document went quiet.
|
|
64
|
+
*/
|
|
65
|
+
export declare function respondToReconcile(reads: ReconcileReads, peerAgentId: string, peerBlock: DocumentReconcileBlock, budget?: ReplyBudget): ReconcileAnswer;
|
|
66
|
+
//# sourceMappingURL=document-reconcile-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-reconcile-engine.d.ts","sourceRoot":"","sources":["../src/document-reconcile-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAKL,KAAK,sBAAsB,EAG3B,KAAK,iBAAiB,EACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,yFAAyF;AACzF,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,iBAAiB,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACxG,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7D,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IACzF,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACvD,4FAA4F;IAC5F,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5C,qFAAqF;IACrF,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;IACjD,wFAAwF;IACxF,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAChH,2FAA2F;IAC3F,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACpD;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC;CAC1E;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,sBAAsB,CAAC;IAC9B,6FAA6F;IAC7F,SAAS,EAAE,OAAO,CAAC;IACnB,gGAAgG;IAChG,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,2FAA2F;AAC3F,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,kGAAkG;AAClG,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,MAAM,GACjB,sBAAsB,CAmBxB;AAkBD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,EACrB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,sBAAsB,EACjC,MAAM,CAAC,EAAE,WAAW,GACnB,eAAe,CA+KjB"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SYNC-P3 (R10, R17–R20, R36) — the responder half of the reconcile exchange.
|
|
3
|
+
*
|
|
4
|
+
* Given a peer's position for one document, decide from OUR OWN state alone whether they may be
|
|
5
|
+
* answered at all (the four entitlement classes, R17), and if so compute exactly what they lack:
|
|
6
|
+
* governance entries first, then content envelopes, never anything in their refusal set (R36).
|
|
7
|
+
* The reply carries our own position so the initiator can send step 3 if WE are behind — the
|
|
8
|
+
* exchange is symmetric by construction.
|
|
9
|
+
*
|
|
10
|
+
* Everything here is derived at the moment of the exchange from the entry set and the envelope
|
|
11
|
+
* log. There is no per-peer record consulted and none written (R8/R9): asked twice, we answer
|
|
12
|
+
* twice, identically — idempotence is not bookkeeping, it is the absence of bookkeeping.
|
|
13
|
+
*/
|
|
14
|
+
import { decodeDocumentAmendment, documentAmendmentHash, encodeDocumentUpdateEnvelope, DOCUMENT_UPDATE_ENCODING_V1, } from "@cello-protocol/protocol-types";
|
|
15
|
+
/** Our own position for one document — step 1's payload, and the position half of every reply. */
|
|
16
|
+
export function buildReconcileBlock(reads, documentId) {
|
|
17
|
+
const governance = [...reads.watermarks(documentId)]
|
|
18
|
+
.map(([author, mark]) => ({
|
|
19
|
+
author,
|
|
20
|
+
seq: mark.seq,
|
|
21
|
+
head_hashes: [...mark.headHashes].sort(),
|
|
22
|
+
}))
|
|
23
|
+
.sort((a, b) => (a.author < b.author ? -1 : 1));
|
|
24
|
+
const content = contentPositions(reads.envelopeLog(documentId));
|
|
25
|
+
return {
|
|
26
|
+
document_id: documentId,
|
|
27
|
+
governance,
|
|
28
|
+
content,
|
|
29
|
+
refused: [...reads.refusedHashes(documentId)].sort(),
|
|
30
|
+
entries: [],
|
|
31
|
+
envelopes: [],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function contentPositions(log) {
|
|
35
|
+
const bySender = new Map();
|
|
36
|
+
for (const row of log) {
|
|
37
|
+
const rows = bySender.get(row.senderAgentId);
|
|
38
|
+
if (rows)
|
|
39
|
+
rows.push(row);
|
|
40
|
+
else
|
|
41
|
+
bySender.set(row.senderAgentId, [row]);
|
|
42
|
+
}
|
|
43
|
+
return [...bySender]
|
|
44
|
+
.map(([author, rows]) => ({
|
|
45
|
+
author,
|
|
46
|
+
count: rows.length,
|
|
47
|
+
head_hash: rows[rows.length - 1].envelopeHash,
|
|
48
|
+
}))
|
|
49
|
+
.sort((a, b) => (a.author < b.author ? -1 : 1));
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Answer a peer's position for one document. The entitlement ruling comes FIRST and from our
|
|
53
|
+
* own state alone (R18); a refusal rides the BLOCK (never silenced by a batch, review F4), and
|
|
54
|
+
* a refusal-bearing block carries EMPTY positions — a stranger learns nothing about where this
|
|
55
|
+
* holder stands. The removed holder is the one refusal that also DELIVERS: their own removal
|
|
56
|
+
* and its ancestors travel with the terminal ruling (R32), so a holder who was offline at
|
|
57
|
+
* removal time can derive why the document went quiet.
|
|
58
|
+
*/
|
|
59
|
+
export function respondToReconcile(reads, peerAgentId, peerBlock, budget) {
|
|
60
|
+
const documentId = peerBlock.document_id;
|
|
61
|
+
const refusalBlock = (reason, terminal, entries = []) => ({
|
|
62
|
+
block: {
|
|
63
|
+
document_id: documentId,
|
|
64
|
+
governance: [],
|
|
65
|
+
content: [],
|
|
66
|
+
refused: [],
|
|
67
|
+
entries,
|
|
68
|
+
envelopes: [],
|
|
69
|
+
refusal: { reason, terminal },
|
|
70
|
+
},
|
|
71
|
+
peerAhead: false,
|
|
72
|
+
truncated: false,
|
|
73
|
+
});
|
|
74
|
+
const derived = reads.deriveState(documentId);
|
|
75
|
+
if (!derived.ok) {
|
|
76
|
+
return refusalBlock(`document_reconcile_underivable: ${derived.reason}`, false);
|
|
77
|
+
}
|
|
78
|
+
const state = derived.state;
|
|
79
|
+
// R17 — the four classes, from OUR state, never a stored flag.
|
|
80
|
+
const isParticipant = state.participants.has(peerAgentId);
|
|
81
|
+
const isInvited = state.invited.has(peerAgentId);
|
|
82
|
+
if (!isParticipant && !isInvited) {
|
|
83
|
+
if (reads.standingOf(documentId, peerAgentId) === "removed") {
|
|
84
|
+
// R32: the ruling is terminal, but it DELIVERS — the removal entry and its ancestors,
|
|
85
|
+
// so the removed holder can derive their own removal, surface it with its reason, and
|
|
86
|
+
// stop asking. Idempotent like everything here: asking again gets the same closure.
|
|
87
|
+
const closure = reads.removalClosure(documentId, peerAgentId) ?? [];
|
|
88
|
+
return refusalBlock(`document_reconcile_removed: this holder was removed — the removal is forward-only ` +
|
|
89
|
+
`(the copy is theirs); the removal entry and its ancestors are attached so their own ` +
|
|
90
|
+
`derivation can say so, and there is nothing further to reconcile`, true, closure);
|
|
91
|
+
}
|
|
92
|
+
// R18 + R19: refused by name, NON-terminal, and the sentence says why it is not final — a
|
|
93
|
+
// legitimate joiner is exactly this refusal whenever their inviter's admission has not yet
|
|
94
|
+
// reached us, and a terminal answer here would strand them (the failure R19 names).
|
|
95
|
+
return refusalBlock(`document_reconcile_stranger: ${peerAgentId} is not a party to this document AS THIS ` +
|
|
96
|
+
`HOLDER CURRENTLY DERIVES IT — non-terminal: if you were admitted, the admission may ` +
|
|
97
|
+
`not have reached us yet; reconcile again after your inviter's entries spread`, false);
|
|
98
|
+
}
|
|
99
|
+
const peerRefused = new Set(peerBlock.refused);
|
|
100
|
+
const block = buildReconcileBlock(reads, documentId);
|
|
101
|
+
let truncated = false;
|
|
102
|
+
const spend = (wire) => {
|
|
103
|
+
if (!budget)
|
|
104
|
+
return true;
|
|
105
|
+
if (budget.remainingBytes < wire.length) {
|
|
106
|
+
truncated = true;
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
budget.remainingBytes -= wire.length;
|
|
110
|
+
return true;
|
|
111
|
+
};
|
|
112
|
+
// Governance difference — R12 says these apply first, so they are FIRST in the frame.
|
|
113
|
+
const peerGov = new Map(peerBlock.governance.map((g) => [g.author, g]));
|
|
114
|
+
const entries = [];
|
|
115
|
+
for (const mine of block.governance) {
|
|
116
|
+
const theirs = peerGov.get(mine.author);
|
|
117
|
+
// Behind: everything past their contiguous seq. Fork at the SAME seq (heads differ):
|
|
118
|
+
// re-offer from one before the fork point, so both branches reach them and their fold —
|
|
119
|
+
// like ours — rules on the fork (the Entry 48 §3 detection path).
|
|
120
|
+
let fromSeq = null;
|
|
121
|
+
if (!theirs)
|
|
122
|
+
fromSeq = 0;
|
|
123
|
+
else if (theirs.seq < mine.seq)
|
|
124
|
+
fromSeq = theirs.seq;
|
|
125
|
+
else if (theirs.seq === mine.seq &&
|
|
126
|
+
[...theirs.head_hashes].sort().join(",") !== mine.head_hashes.join(",")) {
|
|
127
|
+
fromSeq = Math.max(0, mine.seq - 1);
|
|
128
|
+
}
|
|
129
|
+
if (fromSeq === null)
|
|
130
|
+
continue;
|
|
131
|
+
for (const wire of reads.entriesByAuthorAfter(documentId, mine.author, fromSeq)) {
|
|
132
|
+
const hash = Buffer.from(documentAmendmentHash(decodeDocumentAmendment(wire).body)).toString("hex");
|
|
133
|
+
if (peerRefused.has(hash))
|
|
134
|
+
continue; // R36: nothing refused is ever re-offered
|
|
135
|
+
if (!spend(wire))
|
|
136
|
+
break;
|
|
137
|
+
entries.push(wire);
|
|
138
|
+
}
|
|
139
|
+
if (truncated)
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
// Content difference — the sender-chain suffix past the peer's count, re-encoded losslessly
|
|
143
|
+
// from the log rows (the join-offer snapshot precedent). Refused rows carry no payload and
|
|
144
|
+
// cannot be re-offered; the hole they leave is named by OUR refusal set in the block.
|
|
145
|
+
const peerContent = new Map(peerBlock.content.map((c) => [c.author, c]));
|
|
146
|
+
const log = reads.envelopeLog(documentId);
|
|
147
|
+
const bySender = new Map();
|
|
148
|
+
for (const row of log) {
|
|
149
|
+
const rows = bySender.get(row.senderAgentId);
|
|
150
|
+
if (rows)
|
|
151
|
+
rows.push(row);
|
|
152
|
+
else
|
|
153
|
+
bySender.set(row.senderAgentId, [row]);
|
|
154
|
+
}
|
|
155
|
+
const envelopes = [];
|
|
156
|
+
for (const [author, rows] of [...bySender].sort((a, b) => (a[0] < b[0] ? -1 : 1))) {
|
|
157
|
+
if (truncated)
|
|
158
|
+
break;
|
|
159
|
+
const theirs = peerContent.get(author);
|
|
160
|
+
const from = theirs ? theirs.count : 0;
|
|
161
|
+
for (const row of rows.slice(from)) {
|
|
162
|
+
if (row.kind !== "update" || row.payload === null)
|
|
163
|
+
continue;
|
|
164
|
+
if (peerRefused.has(row.envelopeHash))
|
|
165
|
+
continue;
|
|
166
|
+
const wire = new Uint8Array(encodeDocumentUpdateEnvelope({
|
|
167
|
+
type: "document_update",
|
|
168
|
+
document_id: row.documentId,
|
|
169
|
+
doc_prev_hash: row.docPrevHash,
|
|
170
|
+
sender_agent_id: row.senderAgentId,
|
|
171
|
+
sender_client_id: row.senderClientId ?? 0,
|
|
172
|
+
update_encoding: DOCUMENT_UPDATE_ENCODING_V1,
|
|
173
|
+
state_vector: row.stateVector,
|
|
174
|
+
governance_parents: [...row.governanceParents],
|
|
175
|
+
update: row.payload,
|
|
176
|
+
signature: row.signature,
|
|
177
|
+
}));
|
|
178
|
+
if (!spend(wire))
|
|
179
|
+
break;
|
|
180
|
+
envelopes.push(wire);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Is the PEER ahead of us anywhere? Then the initiator owes step 3.
|
|
184
|
+
const myGov = new Map(block.governance.map((g) => [g.author, g]));
|
|
185
|
+
const myContent = new Map(block.content.map((c) => [c.author, c]));
|
|
186
|
+
const peerAhead = peerBlock.governance.some((g) => {
|
|
187
|
+
const mine = myGov.get(g.author);
|
|
188
|
+
if (!mine)
|
|
189
|
+
return g.seq > 0;
|
|
190
|
+
if (g.seq > mine.seq)
|
|
191
|
+
return true;
|
|
192
|
+
return (g.seq === mine.seq &&
|
|
193
|
+
[...g.head_hashes].sort().join(",") !== mine.head_hashes.join(","));
|
|
194
|
+
}) ||
|
|
195
|
+
peerBlock.content.some((c) => {
|
|
196
|
+
const mine = myContent.get(c.author);
|
|
197
|
+
return mine ? c.count > mine.count : c.count > 0;
|
|
198
|
+
});
|
|
199
|
+
// A peer whose position is EMPTY holds nothing — a joiner (spec §4: "simply very far
|
|
200
|
+
// behind"). Hand them the anchor everything derives from; it is the one record that is not an
|
|
201
|
+
// entry, and the bootstrap on their side is idempotent.
|
|
202
|
+
const peerHoldsNothing = peerBlock.governance.length === 0 && peerBlock.content.length === 0;
|
|
203
|
+
const genesis = peerHoldsNothing ? reads.genesisBytes(documentId) : null;
|
|
204
|
+
// SYNC-R35: our own signed refusal records ride every reply, whole — few by construction
|
|
205
|
+
// (each one is a retry round), deduplicated on the receiving side, and the only way a THIRD
|
|
206
|
+
// holder wedged behind a refused hash ever learns its name and reason (P3 review F5/F8).
|
|
207
|
+
const refusals = [];
|
|
208
|
+
for (const wire of reads.refusalRecords(documentId)) {
|
|
209
|
+
if (!spend(wire))
|
|
210
|
+
break;
|
|
211
|
+
refusals.push(wire);
|
|
212
|
+
}
|
|
213
|
+
return {
|
|
214
|
+
block: {
|
|
215
|
+
...block,
|
|
216
|
+
entries,
|
|
217
|
+
envelopes,
|
|
218
|
+
...(refusals.length > 0 ? { refusals } : {}),
|
|
219
|
+
...(genesis ? { genesis } : {}),
|
|
220
|
+
},
|
|
221
|
+
peerAhead,
|
|
222
|
+
truncated,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=document-reconcile-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-reconcile-engine.js","sourceRoot":"","sources":["../src/document-reconcile-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SYNC-P5 (R39–R43) — WHEN reconciling is attempted. The exchange itself (P3) is stateless and
|
|
3
|
+
* idempotent; this module only decides moments, and every piece of state it holds is VOLATILE
|
|
4
|
+
* scheduling state in the R41 sense: it may delay an exchange, it must never forbid one, gate
|
|
5
|
+
* admissibility, or survive a restart as authority. Losing all of it costs at most one sweep
|
|
6
|
+
* interval of latency.
|
|
7
|
+
*
|
|
8
|
+
* The three triggers (R39):
|
|
9
|
+
* 1. committing an entry / publishing — the layer nudges directly (P4's `nudgeSeats` and the
|
|
10
|
+
* entry fan-out); not this module's job.
|
|
11
|
+
* 2. a party becoming reachable — `onReachable`, wired to session establishment. An explicit
|
|
12
|
+
* reachability signal RESETS backoff: the backoff modeled "they do not answer", and here
|
|
13
|
+
* they demonstrably just did.
|
|
14
|
+
* 3. the periodic sweep — `sweep`, wired to a timer. Bounded per R43: batched per party (R16's
|
|
15
|
+
* cap is the exchange's own), suppressed for parties believed current (display cache only —
|
|
16
|
+
* R44 permits it precisely because a wrong suppression costs latency, never correctness),
|
|
17
|
+
* and backed off for parties that do not answer.
|
|
18
|
+
*
|
|
19
|
+
* R42: the in-flight mark is TIME-BOUNDED and released LOUDLY on expiry. An unbounded in-flight
|
|
20
|
+
* mark is the stall this milestone already paid for twice.
|
|
21
|
+
*/
|
|
22
|
+
import type { Logger } from "./types.js";
|
|
23
|
+
/** How long one attempt may hold the in-flight mark before the sweep stops honoring it. */
|
|
24
|
+
export declare const RECONCILE_INFLIGHT_BOUND_MS = 60000;
|
|
25
|
+
/** First back-off step for a party that did not answer; doubles per consecutive failure. */
|
|
26
|
+
export declare const RECONCILE_BACKOFF_BASE_MS = 30000;
|
|
27
|
+
export declare const RECONCILE_BACKOFF_CAP_MS: number;
|
|
28
|
+
/**
|
|
29
|
+
* A party whose every shared document reads in_sync, heard from within this window, is believed
|
|
30
|
+
* current and skipped (R43). Past the window the sweep asks anyway — the cache is a belief.
|
|
31
|
+
*/
|
|
32
|
+
export declare const RECONCILE_BELIEVED_CURRENT_MS: number;
|
|
33
|
+
/** R16's per-frame batching ceiling, honored by chunking a party's documents. */
|
|
34
|
+
export declare const RECONCILE_BATCH_CAP = 32;
|
|
35
|
+
export interface ReconcileSchedulerDeps {
|
|
36
|
+
now(): number;
|
|
37
|
+
logger: Logger;
|
|
38
|
+
/**
|
|
39
|
+
* Every (party → shared ACTIVE documents) pair one owner's sweep should consider. DERIVED by
|
|
40
|
+
* the caller from the fold — the scheduler never decides who is a party.
|
|
41
|
+
*/
|
|
42
|
+
sweepTargets(ownerAgentId: string): Map<string, string[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Display-cache read (R44-safe): in_sync/behind/unseen plus when this party last exchanged.
|
|
45
|
+
* Used ONLY to suppress, never to forbid — an unseen or behind party is always fair game.
|
|
46
|
+
*/
|
|
47
|
+
partySync(ownerAgentId: string, documentId: string, partyAgentId: string): {
|
|
48
|
+
sync: "in_sync" | "behind" | "unseen";
|
|
49
|
+
lastSyncedAtMs: number | null;
|
|
50
|
+
};
|
|
51
|
+
initiateReconcile(ownerAgentId: string, peerAgentId: string, documentIds: readonly string[]): Promise<{
|
|
52
|
+
ok: true;
|
|
53
|
+
} | {
|
|
54
|
+
ok: false;
|
|
55
|
+
reason?: string;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Test-pace override for the failure backoff (the enforcers' lesson: a restarted daemon's
|
|
59
|
+
* first attempts can fail while its own signaling settles, and the production 30s-doubling
|
|
60
|
+
* ladder walks a fast-sweep test out of its window). Omitted = the production constants.
|
|
61
|
+
*/
|
|
62
|
+
backoffBaseMs?: number;
|
|
63
|
+
/**
|
|
64
|
+
* Same test-pace escape for the believed-current window — see backoffBaseMs. CLAMPED to the
|
|
65
|
+
* production constant as a CEILING (review F5): the backoff has a cap and this did not, and an
|
|
66
|
+
* override longer than the production window would let one mis-set environment variable suppress
|
|
67
|
+
* sweeps for as long as it liked. R41 permits scheduling state to DELAY an exchange, never to
|
|
68
|
+
* forbid one, so the only direction this knob may move is shorter.
|
|
69
|
+
*/
|
|
70
|
+
believedCurrentMs?: number;
|
|
71
|
+
}
|
|
72
|
+
export interface SweepResult {
|
|
73
|
+
attempted: number;
|
|
74
|
+
skippedBackoff: number;
|
|
75
|
+
skippedInFlight: number;
|
|
76
|
+
skippedCurrent: number;
|
|
77
|
+
failed: number;
|
|
78
|
+
}
|
|
79
|
+
export declare class ReconcileScheduler {
|
|
80
|
+
#private;
|
|
81
|
+
constructor(deps: ReconcileSchedulerDeps);
|
|
82
|
+
/**
|
|
83
|
+
* R39's second trigger: this party is demonstrably reachable RIGHT NOW — a session with them
|
|
84
|
+
* just came up. Backoff is reset (it modeled silence; they answered) and the attempt fires
|
|
85
|
+
* for every shared document, in R16-capped batches.
|
|
86
|
+
*/
|
|
87
|
+
onReachable(ownerAgentId: string, peerAgentId: string): Promise<void>;
|
|
88
|
+
/** R39's third trigger — one bounded pass for one owner. */
|
|
89
|
+
sweep(ownerAgentId: string): Promise<SweepResult>;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=document-reconcile-scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-reconcile-scheduler.d.ts","sourceRoot":"","sources":["../src/document-reconcile-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,2FAA2F;AAC3F,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAClD,4FAA4F;AAC5F,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAChD,eAAO,MAAM,wBAAwB,QAAc,CAAC;AACpD;;;GAGG;AACH,eAAO,MAAM,6BAA6B,QAAc,CAAC;AACzD,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,MAAM,WAAW,sBAAsB;IACrC,GAAG,IAAI,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1D;;;OAGG;IACH,SAAS,CACP,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB;QAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;QAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC5E,iBAAiB,CACf,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAQD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAkB;;gBAKjB,IAAI,EAAE,sBAAsB;IAiBxC;;;;OAIG;IACG,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3E,4DAA4D;IACtD,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA2FxD"}
|