@cello-protocol/daemon 0.0.161 → 0.0.163

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 (65) hide show
  1. package/dist/daemon.js +15 -5
  2. package/dist/daemon.js.map +1 -1
  3. package/dist/document-ack-inbound.d.ts +8 -1
  4. package/dist/document-ack-inbound.d.ts.map +1 -1
  5. package/dist/document-ack-inbound.js +31 -8
  6. package/dist/document-ack-inbound.js.map +1 -1
  7. package/dist/document-amendment-store.d.ts +72 -0
  8. package/dist/document-amendment-store.d.ts.map +1 -0
  9. package/dist/document-amendment-store.js +151 -0
  10. package/dist/document-amendment-store.js.map +1 -0
  11. package/dist/document-control-notifier.d.ts +29 -0
  12. package/dist/document-control-notifier.d.ts.map +1 -1
  13. package/dist/document-control-notifier.js +62 -6
  14. package/dist/document-control-notifier.js.map +1 -1
  15. package/dist/document-delivery-transport.d.ts +2 -1
  16. package/dist/document-delivery-transport.d.ts.map +1 -1
  17. package/dist/document-delivery-transport.js +1 -1
  18. package/dist/document-delivery-transport.js.map +1 -1
  19. package/dist/document-delivery.d.ts +6 -1
  20. package/dist/document-delivery.d.ts.map +1 -1
  21. package/dist/document-delivery.js +167 -201
  22. package/dist/document-delivery.js.map +1 -1
  23. package/dist/document-frame-router.d.ts +15 -1
  24. package/dist/document-frame-router.d.ts.map +1 -1
  25. package/dist/document-frame-router.js +22 -1
  26. package/dist/document-frame-router.js.map +1 -1
  27. package/dist/document-gate.js +1 -1
  28. package/dist/document-gate.js.map +1 -1
  29. package/dist/document-handlers.d.ts.map +1 -1
  30. package/dist/document-handlers.js +649 -5
  31. package/dist/document-handlers.js.map +1 -1
  32. package/dist/document-handshake.d.ts +13 -0
  33. package/dist/document-handshake.d.ts.map +1 -1
  34. package/dist/document-handshake.js +24 -0
  35. package/dist/document-handshake.js.map +1 -1
  36. package/dist/document-inbound.d.ts +12 -0
  37. package/dist/document-inbound.d.ts.map +1 -1
  38. package/dist/document-inbound.js +141 -10
  39. package/dist/document-inbound.js.map +1 -1
  40. package/dist/document-join-store.d.ts +80 -0
  41. package/dist/document-join-store.d.ts.map +1 -0
  42. package/dist/document-join-store.js +197 -0
  43. package/dist/document-join-store.js.map +1 -0
  44. package/dist/document-layer.d.ts +52 -2
  45. package/dist/document-layer.d.ts.map +1 -1
  46. package/dist/document-layer.js +457 -12
  47. package/dist/document-layer.js.map +1 -1
  48. package/dist/document-lifecycle.d.ts +32 -1
  49. package/dist/document-lifecycle.d.ts.map +1 -1
  50. package/dist/document-lifecycle.js +88 -20
  51. package/dist/document-lifecycle.js.map +1 -1
  52. package/dist/document-publish.d.ts +7 -0
  53. package/dist/document-publish.d.ts.map +1 -1
  54. package/dist/document-publish.js +20 -4
  55. package/dist/document-publish.js.map +1 -1
  56. package/dist/document-rejection.js +1 -1
  57. package/dist/document-rejection.js.map +1 -1
  58. package/dist/document-store.d.ts +97 -4
  59. package/dist/document-store.d.ts.map +1 -1
  60. package/dist/document-store.js +335 -21
  61. package/dist/document-store.js.map +1 -1
  62. package/dist/vocabulary.d.ts.map +1 -1
  63. package/dist/vocabulary.js +2 -0
  64. package/dist/vocabulary.js.map +1 -1
  65. package/package.json +5 -5
@@ -21,6 +21,7 @@
21
21
  * would be a default answer to "is this authentic", and both inbound paths refuse rather than
22
22
  * admit when it says no.
23
23
  */
24
+ import { createHash } from "node:crypto";
24
25
  import { verify } from "@cello-protocol/crypto";
25
26
  import { DocumentStore } from "./document-store.js";
26
27
  import { DocumentEngine } from "./document-engine.js";
@@ -29,6 +30,8 @@ import { screeningRule, SCREEN_RULE_ID } from "./document-screen.js";
29
30
  import { DocumentRejections } from "./document-rejection.js";
30
31
  import { DocumentInbound } from "./document-inbound.js";
31
32
  import { DocumentAckInbound } from "./document-ack-inbound.js";
33
+ import { DocumentAmendmentStore } from "./document-amendment-store.js";
34
+ import { DocumentJoinStore } from "./document-join-store.js";
32
35
  import { DocumentFrameRouter } from "./document-frame-router.js";
33
36
  import { LiveDocuments } from "./document-live-docs.js";
34
37
  import { DocumentLifecycle } from "./document-lifecycle.js";
@@ -38,7 +41,7 @@ import { projectDocumentText } from "./document-json.js";
38
41
  import { rootForDocumentType } from "./document-types.js";
39
42
  import { DocumentHandshake } from "./document-handshake.js";
40
43
  import { DocumentWritePath } from "./document-write-path.js";
41
- import { decodeDocumentRejection, buildDocumentRejectionTbs, documentRejectionHash, decodeDocumentProposalAck, buildDocumentProposalAckTbs, decodeDocumentControl, buildDocumentControlTbs, decodeDocumentUpdateEnvelope, encodeDocumentAck, buildDocumentAckTbs, } from "@cello-protocol/protocol-types";
44
+ import { decodeDocumentRejection, buildDocumentRejectionTbs, documentRejectionHash, decodeDocumentProposalAck, buildDocumentProposalAckTbs, decodeDocumentControl, buildDocumentControlTbs, decodeDocumentUpdateEnvelope, buildDocumentUpdateTbs, documentEnvelopeHash, buildDocumentJoinAnswerTbs, encodeDocumentJoinAnswer, buildDocumentJoinOfferTbs, decodeDocumentJoinOffer, decodeDocumentAmendment, decodeDocumentProposal, encodeDocumentProposalAck, DOCUMENT_PROPOSAL_ACK_VERSION, MAX_PROPOSAL_REFUSAL_REASON_LENGTH, documentAmendmentHash, validateDocumentJoinOffer, documentGovernancePolicy, arrangementGenesisFromProposal, deriveArrangement, encodeDocumentAck, buildDocumentAckTbs, } from "@cello-protocol/protocol-types";
42
45
  import { LEAF_KIND_REJECT } from "./session-relay-client.js";
43
46
  /**
44
47
  * The default `publicKeyFor`: a remote agent's id IS its K_local public key, hex-encoded (M14-D5).
@@ -81,7 +84,12 @@ export function createDocumentLayer(deps) {
81
84
  const record = handshake.get(ownerAgentId, documentId);
82
85
  return record?.envelope.starting_content ?? null;
83
86
  });
84
- const lifecycle = new DocumentLifecycle(store, logger, { notifyPeer: deps.notifyPeer }, deps.rollback);
87
+ const lifecycle = new DocumentLifecycle(store, logger, { notifyPeer: deps.notifyPeer }, deps.rollback, undefined,
88
+ // DOD-MP-CONTROL-N-1 — the inbound gate. `holdersFor` is declared below and resolved lazily,
89
+ // the same shape `live` uses above; the gate is only ever called long after construction.
90
+ // Wired HERE rather than left to the daemon so every consumer of the layer — including the
91
+ // e2e fixture — gets the real derivation and cannot silently keep the bilateral gate.
92
+ (ownerAgentId, documentId) => holdersFor(ownerAgentId, documentId));
85
93
  const notifications = new DocumentNotifications(store, logger);
86
94
  // THE FILE SURFACE. Built, tested and instantiated NOWHERE until now — the same defect the tool
87
95
  // surface had: a complete unit with no production caller reads exactly like a working feature.
@@ -115,20 +123,28 @@ export function createDocumentLayer(deps) {
115
123
  logger,
116
124
  verifySignature,
117
125
  liveDocFor: (ownerAgentId, documentId) => live.get(ownerAgentId, documentId),
126
+ membershipOf: (ownerAgentId, documentId, agentId) => amendments.membershipOf(ownerAgentId, documentId, agentId),
127
+ currentHolders: (ownerAgentId, documentId) => holdersFor(ownerAgentId, documentId),
118
128
  sign: deps.sign,
119
129
  });
120
130
  // WAITERS for `awaitAck`, keyed by owner + envelope. A Set per key because two callers may wait
121
131
  // on the same envelope (a redelivery racing the original), and dropping one of them would leave a
122
132
  // session held open for the full grace period with the answer already in hand.
133
+ // KEYED BY ACKER TOO (FANOUT-1 review H1): an envelope-keyed waiter let ANY holder's ack —
134
+ // including a redelivered one from an already-settled holder — resolve the grace wait for
135
+ // whichever holder was being dialed, and the worker then settled the DIALED holder's row for
136
+ // content that never reached them. §7-1's silent divergence, through the sender's own
137
+ // bookkeeping.
123
138
  const ackWaiters = new Map();
124
- const waiterKey = (ownerAgentId, envelopeHash) => `${ownerAgentId}\u0000${envelopeHash}`;
139
+ const waiterKey = (ownerAgentId, envelopeHash, ackerAgentId) => `${ownerAgentId}\u0000${envelopeHash}\u0000${ackerAgentId}`;
125
140
  const ackInbound = new DocumentAckInbound({
126
141
  store,
127
142
  rejections,
128
143
  logger,
129
144
  verifySignature,
130
- onSettled: (ownerAgentId, envelopeHash, admitted) => {
131
- const key = waiterKey(ownerAgentId, envelopeHash);
145
+ currentHolders: (o, d) => holdersFor(o, d),
146
+ onSettled: (ownerAgentId, envelopeHash, ackerAgentId, admitted) => {
147
+ const key = waiterKey(ownerAgentId, envelopeHash, ackerAgentId);
132
148
  const waiting = ackWaiters.get(key);
133
149
  if (!waiting)
134
150
  return;
@@ -140,14 +156,14 @@ export function createDocumentLayer(deps) {
140
156
  wake(admitted);
141
157
  },
142
158
  });
143
- const awaitAck = async (ownerAgentId, envelopeHash, timeoutMs) => {
144
- // ALREADY SETTLED WINS. The ack round trip was measured at 4ms on a local pair; the caller
145
- // reaches this line after a network send. Checking the store first is not an optimisation —
146
- // without it the common case waits out the entire grace period for an answer already recorded.
147
- const already = store.envelopeSettlement(ownerAgentId, envelopeHash);
159
+ const awaitAck = async (ownerAgentId, envelopeHash, expectedAckerAgentId, timeoutMs) => {
160
+ // ALREADY SETTLED WINS by THE HOLDER BEING DIALED (H1): the per-acker read first, the
161
+ // envelope-level read only for the zero-row bilateral legacy.
162
+ const already = store.holderSettlement(ownerAgentId, envelopeHash, expectedAckerAgentId) ??
163
+ store.envelopeSettlement(ownerAgentId, envelopeHash);
148
164
  if (already)
149
165
  return already;
150
- const key = waiterKey(ownerAgentId, envelopeHash);
166
+ const key = waiterKey(ownerAgentId, envelopeHash, expectedAckerAgentId);
151
167
  return new Promise((resolve) => {
152
168
  let timer;
153
169
  const wake = (admitted) => {
@@ -173,6 +189,107 @@ export function createDocumentLayer(deps) {
173
189
  // proposal is refused before it can occupy a document_id (ON CONFLICT DO NOTHING makes the first
174
190
  // arrival's bytes permanent for that id).
175
191
  const handshake = new DocumentHandshake(db, logger, verifySignature);
192
+ // M14B / DOD-MP-JOIN-1 — the amendment chain and the join-consent stores. The membership READ
193
+ // path (`currentDocumentEpoch`) has run through DocumentStore since AMEND-1; these are the
194
+ // WRITE path, and every append below validates first (the standing AMEND-1 condition).
195
+ const amendments = new DocumentAmendmentStore(db, logger);
196
+ const joins = new DocumentJoinStore(db, logger);
197
+ /**
198
+ * M14B / DOD-MP-FANOUT-1 — the CURRENT holders of a document, derived from genesis + the
199
+ * recorded chain. Null when the document is unknown or its chain does not derive — NOT an
200
+ * empty list, because "nobody holds this" and "this cannot be answered" are different facts
201
+ * and the worker schedules them differently.
202
+ */
203
+ const holdersFor = (ownerAgentId, documentId) => {
204
+ const genesisRecord = handshake.get(ownerAgentId, documentId);
205
+ if (!genesisRecord) {
206
+ // The SAME event the publish refusal points at — an operator hunting
207
+ // document.holders.underivable must find it for BOTH null causes (review M6).
208
+ logger.error("document.holders.underivable", {
209
+ documentId,
210
+ reason: "no_genesis_record: the document has a row but no stored genesis proposal",
211
+ });
212
+ return null;
213
+ }
214
+ const derived = deriveArrangement(arrangementGenesisFromProposal(genesisRecord.envelope), amendments.chain(ownerAgentId, documentId), documentGovernancePolicy, verifySignature);
215
+ if (!derived.ok) {
216
+ logger.error("document.holders.underivable", {
217
+ documentId,
218
+ reason: derived.reason,
219
+ });
220
+ return null;
221
+ }
222
+ return [...derived.arrangement.participants];
223
+ };
224
+ /**
225
+ * Who a control frame (`close`, `kill`) must be addressed to — DOD-MP-CONTROL-N-1.
226
+ *
227
+ * THIS LIVES HERE, not as a closure in the composition root, for the reason
228
+ * `document-control-notifier.ts`'s own header records about itself: a closure in `daemon.ts` has
229
+ * no test, so every fixture hand-copies it, and a hand-copy cannot disagree with the original.
230
+ * The first draft of this WAS such a closure and had already drifted — it re-derived the
231
+ * arrangement itself and so never emitted `document.holders.underivable`, leaving the control
232
+ * path invisible to the exact log search meant to find it.
233
+ *
234
+ * Everyone EXCEPT the owner, because the owner is the one doing the ending. A chain that will
235
+ * not derive is refused by name rather than falling back to the genesis `peerAgentId` — that
236
+ * fallback is the original defect, and after a removal it aims the frame at precisely the
237
+ * removed holder.
238
+ */
239
+ const controlHolders = (ownerAgentId, documentId) => {
240
+ let derivedHolders;
241
+ try {
242
+ derivedHolders = holdersFor(ownerAgentId, documentId);
243
+ }
244
+ catch (err) {
245
+ // CONTAINED for the same reason `cello_doc_list` contains it: a chain this build cannot
246
+ // decode THROWS, and an uncontained throw would take down the close/kill verb entirely
247
+ // rather than reporting why the frame could not be addressed.
248
+ return {
249
+ ok: false,
250
+ reason: `document_chain_undecodable: ${err instanceof Error ? err.message : String(err)}`,
251
+ };
252
+ }
253
+ if (derivedHolders === null)
254
+ return { ok: false, reason: "document_holders_underivable" };
255
+ return { ok: true, holders: derivedHolders.filter((p) => p !== ownerAgentId).sort() };
256
+ };
257
+ /** Is this agent a CURRENT holder — the ack gate's membership question. */
258
+ const isCurrentHolder = (ownerAgentId, documentId, agentId) => {
259
+ const holders = holdersFor(ownerAgentId, documentId);
260
+ return holders !== null && holders.includes(agentId);
261
+ };
262
+ /** Sign and send a join answer — best-effort, never a veto over the local decision. */
263
+ const sendJoinAnswer = async (ownerAgentId, inviterAgentId, documentId, amendmentHash, accepted, reason) => {
264
+ try {
265
+ const answer = {
266
+ type: "document_join_answer",
267
+ document_id: documentId,
268
+ amendment_hash: amendmentHash,
269
+ invitee_agent_id: ownerAgentId,
270
+ accepted,
271
+ refusal_reason: accepted ? null : reason,
272
+ answered_at_ms: Date.now(),
273
+ signature: new Uint8Array(0),
274
+ };
275
+ answer.signature = await deps.sign(ownerAgentId, buildDocumentJoinAnswerTbs(answer));
276
+ await deps.sendFrame(ownerAgentId, inviterAgentId, encodeDocumentJoinAnswer(answer));
277
+ }
278
+ catch (err) {
279
+ logger.warn("document.join.answer_send_failed", {
280
+ documentId,
281
+ amendmentHash,
282
+ error: err instanceof Error ? err.message : String(err),
283
+ });
284
+ }
285
+ };
286
+ /** Re-send the STANDING decision for an already-decided offer a redelivery just matched. */
287
+ const resendJoinAnswer = async (ownerAgentId, amendmentHash, inviterAgentId) => {
288
+ const record = joins.get(ownerAgentId, amendmentHash);
289
+ if (!record || record.state === "pending")
290
+ return;
291
+ await sendJoinAnswer(ownerAgentId, inviterAgentId, record.documentId, amendmentHash, record.state === "accepted", record.reason);
292
+ };
176
293
  const router = new DocumentFrameRouter({
177
294
  inbound,
178
295
  ackInbound,
@@ -181,7 +298,129 @@ export function createDocumentLayer(deps) {
181
298
  recordProposal: (ownerAgentId, wire, nowMs) => {
182
299
  // THROWS on a forged or misaddressed proposal, which the router contains and reports. That is
183
300
  // right: those are refusals, and nothing should be recorded for them.
184
- handshake.recordProposal(ownerAgentId, wire, nowMs);
301
+ const recorded = handshake.recordProposal(ownerAgentId, wire, nowMs);
302
+ // BOTH ENDS GET THE SENTENCE (TOPOLOGY-1 review F1, the join path's rule applied here):
303
+ // an arrival auto-refusal — seam violation, version mismatch — used to write its sentence
304
+ // to OUR database and answer the proposer with silence, a hang they diagnose as a network
305
+ // fault. The signed refusal ack now travels best-effort; the proposal verified against its
306
+ // named proposer at record time, so the answer goes to an authenticated party.
307
+ const refusalReason = recorded.reason;
308
+ if (recorded.state === "refused" && refusalReason !== undefined) {
309
+ const proposal = decodeDocumentProposal(wire);
310
+ void (async () => {
311
+ try {
312
+ const ack = {
313
+ type: "document_proposal_ack",
314
+ ack_version: DOCUMENT_PROPOSAL_ACK_VERSION,
315
+ document_id: recorded.documentId,
316
+ acker_agent_id: ownerAgentId,
317
+ accepted: false,
318
+ refusal_reason: refusalReason.slice(0, MAX_PROPOSAL_REFUSAL_REASON_LENGTH),
319
+ decided_at_ms: Date.now(),
320
+ signature: new Uint8Array(0),
321
+ };
322
+ ack.signature = await deps.sign(ownerAgentId, buildDocumentProposalAckTbs(ack));
323
+ await deps.sendFrame(ownerAgentId, proposal.proposer_agent_id, encodeDocumentProposalAck(ack));
324
+ }
325
+ catch (err) {
326
+ logger.warn("document.proposal.auto_refusal_ack_failed", {
327
+ documentId: recorded.documentId,
328
+ error: err instanceof Error ? err.message : String(err),
329
+ });
330
+ }
331
+ })();
332
+ }
333
+ },
334
+ recordJoinOffer: (ownerAgentId, wire, nowMs) => {
335
+ const offer = decodeDocumentJoinOffer(wire);
336
+ // ADDRESSED TO US — the same multi-agent-daemon rule recordProposal enforces: consent
337
+ // belongs to the agent the inviter named, and a throw here is contained by the router.
338
+ if (offer.invitee_agent_id !== ownerAgentId) {
339
+ throw new Error(`document_join_wrong_invitee: this offer is addressed to ${offer.invitee_agent_id}, ` +
340
+ `not to ${ownerAgentId}`);
341
+ }
342
+ const validation = validateDocumentJoinOffer(offer, documentGovernancePolicy, verifySignature);
343
+ if (validation.ok) {
344
+ const stored = joins.recordIncoming(ownerAgentId, wire, validation.pendingAmendmentHash, { state: "pending" }, nowMs);
345
+ // REDELIVERY OF A DECIDED OFFER RE-SENDS THE ANSWER. A lost answer was otherwise lost
346
+ // forever: the invitee's decision stood, the inviter's row sat pending, and the
347
+ // inviter's only lever — re-inviting, which redelivers this exact offer — reached a
348
+ // DO-NOTHING insert. Now that redelivery is the recovery: the standing decision is
349
+ // re-signed and travels again. Best-effort, like every answer.
350
+ if (stored.state !== "pending") {
351
+ void resendJoinAnswer(ownerAgentId, validation.pendingAmendmentHash, offer.inviter_agent_id);
352
+ }
353
+ return;
354
+ }
355
+ // A REFUSAL IS RECORDED — AND ANSWERED — ONLY WHEN IT IS AUTHENTICATED. The first cut
356
+ // recorded every refusal under the admitting amendment's hash, and that was a standing
357
+ // veto: any party holding the amendment bytes (every holder gets them in the fan-out)
358
+ // could deliver a garbage offer FIRST, occupy the real settle key with a refused row, and
359
+ // the genuine offer would arrive to a DO-NOTHING insert — the admin's admission silently
360
+ // suppressed, both operators seeing nothing. So: an offer whose signature does not verify
361
+ // against its named inviter THROWS (contained + logged, nothing recorded — the forged-
362
+ // proposal treatment), and an authenticated refusal is recorded under the hash of ITS OWN
363
+ // BYTES — visible to the operator, never able to occupy a real join's settle key.
364
+ if (!verifySignature(offer.inviter_agent_id, buildDocumentJoinOfferTbs(offer), offer.signature)) {
365
+ throw new Error(validation.reason);
366
+ }
367
+ const refusalKey = createHash("sha256").update(wire).digest("hex");
368
+ joins.recordIncoming(ownerAgentId, wire, refusalKey, { state: "refused", reason: validation.reason }, nowMs);
369
+ // BOTH ENDS get the sentence: the refusal answer travels back to the authenticated
370
+ // inviter, settling their row with the reason — the version-mismatch sentence was written
371
+ // for a human and was reaching a database column. The settle key is the admitting
372
+ // amendment's hash when one is recoverable (the inviter's row lives under it).
373
+ const last = offer.amendments[offer.amendments.length - 1];
374
+ if (last !== undefined) {
375
+ try {
376
+ const settleKey = Buffer.from(documentAmendmentHash(decodeDocumentAmendment(last).body)).toString("hex");
377
+ void sendJoinAnswer(ownerAgentId, offer.inviter_agent_id, offer.document_id, settleKey, false, validation.reason);
378
+ }
379
+ catch {
380
+ // No recoverable settle key — the refusal stays visible locally and the inviter's
381
+ // re-invite (which redelivers) will meet the same recorded refusal.
382
+ }
383
+ }
384
+ },
385
+ recordJoinAnswer: (ownerAgentId, wire, nowMs) => {
386
+ const r = joins.recordAnswer(ownerAgentId, wire, verifySignature, nowMs);
387
+ // A refusal is a verdict the router contains and reports — never a silent drop.
388
+ if (!r.ok)
389
+ throw new Error(r.reason);
390
+ },
391
+ recordAmendment: (ownerAgentId, wire, nowMs) => {
392
+ // An amendment reaching an EXISTING holder. VALIDATE-BEFORE-APPEND (the AMEND-1 standing
393
+ // condition): the whole chain, including this arrival, must replay through the real policy
394
+ // before one byte lands in the table — a row in document_amendments is post-validation by
395
+ // invariant, and epoch stamping rests on that.
396
+ const env = decodeDocumentAmendment(wire);
397
+ const documentId = env.body.document_id;
398
+ if (!store.getDocument(ownerAgentId, documentId)) {
399
+ throw new Error(`document_unknown: no document ${documentId.slice(0, 16)}… for this agent`);
400
+ }
401
+ const record = handshake.get(ownerAgentId, documentId);
402
+ if (!record) {
403
+ throw new Error(`document_genesis_missing: ${documentId.slice(0, 16)}… has a row but no stored genesis ` +
404
+ `proposal to replay from`);
405
+ }
406
+ const derived = deriveArrangement(arrangementGenesisFromProposal(record.envelope), [...amendments.chain(ownerAgentId, documentId), env], documentGovernancePolicy, verifySignature);
407
+ if (!derived.ok)
408
+ throw new Error(derived.reason);
409
+ amendments.append(ownerAgentId, documentId, wire, nowMs);
410
+ // DOD-MP-REMOVE-1 — a removal NAMING THIS AGENT is applied and SURFACED, not just stored:
411
+ // the row flips to `removed` (publishes refuse locally, naming the condition; the copy,
412
+ // the file, the history all remain — forward-only by doctrine), and the event is the
413
+ // operator's notice. Everyone else's arrangement changes are visible through list/inbox
414
+ // derivation; being written out of one is the change an operator must not miss.
415
+ if (env.body.kind === "remove_holder" && env.body.subject_agent_id === ownerAgentId) {
416
+ // Applied by DERIVATION — the recorded chain IS the removal; publish gates and the list
417
+ // overlay read it. This warn is the operator's notice.
418
+ logger.warn("document.removed_from", {
419
+ documentId,
420
+ epochId: env.body.epoch_id,
421
+ removedBy: env.collection.required_signers.join(","),
422
+ });
423
+ }
185
424
  },
186
425
  // `_nowMs` unused: the received-rejection row takes its clock where it is written, and the
187
426
  // rejection's own SIGNED timestamp is inside the envelope. A second clock read here would put a
@@ -357,7 +596,213 @@ export function createDocumentLayer(deps) {
357
596
  });
358
597
  },
359
598
  });
599
+ /**
600
+ * M14B / DOD-MP-JOIN-1 — the invitee's ACCEPT: consent becomes a held document.
601
+ *
602
+ * VALIDATE EVERYTHING, THEN MUTATE. The stored offer is re-validated at the moment of
603
+ * consequence (validate-before-append, on the bytes that will be appended), and the whole
604
+ * envelope-log snapshot is verified — every signature, every document binding — before one row
605
+ * lands. A snapshot with one bad envelope refuses the accept naming it, because skipping it
606
+ * silently would hand the joiner a document that reads complete and diverges from every other
607
+ * holder (NO-SILENT-DROP).
608
+ *
609
+ * Historical log envelopes are accepted at the epoch their SIGNED bytes claim — the inbound
610
+ * epoch gate is for live arrivals; a snapshot legitimately spans epochs 0..N.
611
+ */
612
+ const acceptJoin = async (ownerAgentId, amendmentHash, nowMs) => {
613
+ const record = joins.get(ownerAgentId, amendmentHash);
614
+ if (!record || record.role !== "invitee") {
615
+ return {
616
+ ok: false,
617
+ reason: "join_unknown_offer",
618
+ detail: `no join offer for this agent settles on ${amendmentHash.slice(0, 16)}…`,
619
+ };
620
+ }
621
+ if (record.state !== "pending") {
622
+ return {
623
+ ok: false,
624
+ reason: "join_already_decided",
625
+ detail: `this offer was already ${record.state} — a consent decision is made once`,
626
+ };
627
+ }
628
+ const validation = validateDocumentJoinOffer(record.offer, documentGovernancePolicy, verifySignature);
629
+ if (!validation.ok) {
630
+ // Recorded, not just returned: an offer that no longer validates is a settled fact.
631
+ joins.decide(ownerAgentId, amendmentHash, false, validation.reason, nowMs);
632
+ return { ok: false, reason: "join_offer_invalid", detail: validation.reason };
633
+ }
634
+ const documentId = record.documentId;
635
+ // WHO MAY APPEAR IN THE SNAPSHOT: anyone who held the document at ANY epoch of the carried
636
+ // chain — the genesis pair plus every add_holder subject (a removed holder's history stays
637
+ // legal). Without this, a malicious inviter plants envelopes signed by keys they control
638
+ // under identities that were never holders, and the joiner materializes content no
639
+ // legitimate holder ever saw — silent divergence the live path's sender-is-peer check
640
+ // would have refused.
641
+ const everHeld = new Set([
642
+ validation.genesis.proposer_agent_id,
643
+ validation.genesis.peer_agent_id,
644
+ ]);
645
+ for (const amendment of validation.amendments) {
646
+ if (amendment.body.kind === "add_holder" && amendment.body.subject_agent_id !== null) {
647
+ everHeld.add(amendment.body.subject_agent_id);
648
+ }
649
+ }
650
+ // The WHOLE snapshot verified before any mutation.
651
+ const verified = [];
652
+ for (let i = 0; i < record.offer.envelope_log.length; i++) {
653
+ const bytes = record.offer.envelope_log[i];
654
+ let env;
655
+ try {
656
+ env = decodeDocumentUpdateEnvelope(bytes);
657
+ }
658
+ catch (err) {
659
+ return {
660
+ ok: false,
661
+ reason: "join_log_invalid",
662
+ detail: `snapshot envelope ${i} does not decode: ${err instanceof Error ? err.message : String(err)}`,
663
+ };
664
+ }
665
+ if (env.document_id !== documentId) {
666
+ return {
667
+ ok: false,
668
+ reason: "join_log_invalid",
669
+ detail: `snapshot envelope ${i} names document ${env.document_id.slice(0, 16)}…, not this one`,
670
+ };
671
+ }
672
+ if (!verifySignature(env.sender_agent_id, buildDocumentUpdateTbs(env), env.signature)) {
673
+ return {
674
+ ok: false,
675
+ reason: "join_log_invalid",
676
+ detail: `snapshot envelope ${i} does not verify against its sender ${env.sender_agent_id}`,
677
+ };
678
+ }
679
+ if (!everHeld.has(env.sender_agent_id)) {
680
+ return {
681
+ ok: false,
682
+ reason: "join_log_invalid",
683
+ detail: `snapshot envelope ${i} is signed by ${env.sender_agent_id}, who never held this ` +
684
+ `document at any epoch of the carried chain — refused before anything materializes`,
685
+ };
686
+ }
687
+ verified.push({
688
+ envelopeHash: documentEnvelopeHash(env),
689
+ documentId,
690
+ senderAgentId: env.sender_agent_id,
691
+ docPrevHash: env.doc_prev_hash,
692
+ epochId: env.epoch_id,
693
+ signature: env.signature,
694
+ stateVector: env.state_vector,
695
+ payload: env.update,
696
+ kind: "update",
697
+ referencesEnvelopeHash: null,
698
+ createdAtMs: nowMs,
699
+ });
700
+ }
701
+ // Mutations, in dependency order: genesis (LiveDocuments reads starting_content from it),
702
+ // the chain (idempotent on redelivery), the row, the log, the live rebuild, the file.
703
+ handshake.recordJoined(ownerAgentId, record.offer.genesis, nowMs);
704
+ try {
705
+ for (const bytes of record.offer.amendments) {
706
+ amendments.append(ownerAgentId, documentId, bytes, nowMs);
707
+ }
708
+ }
709
+ catch (err) {
710
+ // TWO ADMINS INVITED THE SAME AGENT INDEPENDENTLY: each offer's chain is self-consistent
711
+ // and both sat pending, but their admitting amendments rival at one epoch — the second
712
+ // accept hits the store's fork refusal mid-append. Settled as refused with the conflict's
713
+ // own reason rather than thrown: a raw exception left the row pending and every retry
714
+ // rethrowing, a wedge the operator could not see past.
715
+ const reason = err instanceof Error ? err.message : String(err);
716
+ joins.decide(ownerAgentId, amendmentHash, false, reason, nowMs);
717
+ return { ok: false, reason: "join_conflicting_admission", detail: reason };
718
+ }
719
+ if (!store.getDocument(ownerAgentId, documentId)) {
720
+ store.createDocument({
721
+ documentId,
722
+ ownerAgentId,
723
+ // The inviter is this holder's live counterpart until fan-out delivery (P2) — the
724
+ // participants that MATTER derive from the amendment chain (Entry 9's decision).
725
+ peerAgentId: record.inviterAgentId,
726
+ documentType: validation.genesis.document_type,
727
+ properties: validation.genesis.properties,
728
+ status: "active",
729
+ createdAtMs: nowMs,
730
+ });
731
+ }
732
+ for (const row of verified)
733
+ store.appendEnvelope(ownerAgentId, row);
734
+ const doc = live.get(ownerAgentId, documentId);
735
+ if (writePath) {
736
+ await writePath.materialize(ownerAgentId, documentId, validation.genesis.document_type, doc);
737
+ }
738
+ joins.decide(ownerAgentId, amendmentHash, true, null, nowMs);
739
+ const answer = {
740
+ type: "document_join_answer",
741
+ document_id: documentId,
742
+ amendment_hash: amendmentHash,
743
+ invitee_agent_id: ownerAgentId,
744
+ accepted: true,
745
+ refusal_reason: null,
746
+ answered_at_ms: nowMs,
747
+ signature: new Uint8Array(0),
748
+ };
749
+ answer.signature = await deps.sign(ownerAgentId, buildDocumentJoinAnswerTbs(answer));
750
+ logger.info("document.join.accepted", { documentId, amendmentHash, applied: verified.length });
751
+ return {
752
+ ok: true,
753
+ documentId,
754
+ inviterAgentId: record.inviterAgentId,
755
+ documentType: validation.genesis.document_type,
756
+ applied: verified.length,
757
+ answerBytes: encodeDocumentJoinAnswer(answer),
758
+ };
759
+ };
760
+ /** The invitee's REFUSE — local and final; the signed answer travels best-effort. */
761
+ const refuseJoin = async (ownerAgentId, amendmentHash, reason, nowMs) => {
762
+ const record = joins.get(ownerAgentId, amendmentHash);
763
+ if (!record || record.role !== "invitee") {
764
+ return {
765
+ ok: false,
766
+ reason: "join_unknown_offer",
767
+ detail: `no join offer for this agent settles on ${amendmentHash.slice(0, 16)}…`,
768
+ };
769
+ }
770
+ const decided = joins.decide(ownerAgentId, amendmentHash, false, reason, nowMs);
771
+ if (!decided.decided) {
772
+ return {
773
+ ok: false,
774
+ reason: "join_already_decided",
775
+ detail: `this offer was already ${decided.state} — a consent decision is made once`,
776
+ };
777
+ }
778
+ const answer = {
779
+ type: "document_join_answer",
780
+ document_id: record.documentId,
781
+ amendment_hash: amendmentHash,
782
+ invitee_agent_id: ownerAgentId,
783
+ accepted: false,
784
+ refusal_reason: reason,
785
+ answered_at_ms: nowMs,
786
+ signature: new Uint8Array(0),
787
+ };
788
+ answer.signature = await deps.sign(ownerAgentId, buildDocumentJoinAnswerTbs(answer));
789
+ logger.info("document.join.refused", { documentId: record.documentId, amendmentHash });
790
+ return {
791
+ ok: true,
792
+ documentId: record.documentId,
793
+ inviterAgentId: record.inviterAgentId,
794
+ answerBytes: encodeDocumentJoinAnswer(answer),
795
+ };
796
+ };
360
797
  return {
798
+ amendments,
799
+ joins,
800
+ verifySignature,
801
+ holdersFor,
802
+ controlHolders,
803
+ isCurrentHolder,
804
+ acceptJoin,
805
+ refuseJoin,
361
806
  store,
362
807
  writePath,
363
808
  handshake,
@@ -1 +1 @@
1
- {"version":3,"file":"document-layer.js","sourceRoot":"","sources":["../src/document-layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document-layer.js","sourceRoot":"","sources":["../src/document-layer.ts"],"names":[],"mappings":"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"}