@cello-protocol/protocol-types 0.0.54 → 0.0.55
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/document-amendment.d.ts +27 -22
- package/dist/document-amendment.d.ts.map +1 -1
- package/dist/document-amendment.js +63 -181
- package/dist/document-amendment.js.map +1 -1
- package/dist/document-derive.d.ts +96 -0
- package/dist/document-derive.d.ts.map +1 -0
- package/dist/document-derive.js +605 -0
- package/dist/document-derive.js.map +1 -0
- package/dist/document-envelope.d.ts +18 -8
- package/dist/document-envelope.d.ts.map +1 -1
- package/dist/document-envelope.js +35 -19
- package/dist/document-envelope.js.map +1 -1
- package/dist/document-governance.d.ts +1 -1
- package/dist/document-governance.d.ts.map +1 -1
- package/dist/document-governance.js +41 -6
- package/dist/document-governance.js.map +1 -1
- package/dist/document-proposal.d.ts +6 -0
- package/dist/document-proposal.d.ts.map +1 -1
- package/dist/document-proposal.js +21 -0
- package/dist/document-proposal.js.map +1 -1
- package/dist/document-reconcile.d.ts +100 -0
- package/dist/document-reconcile.d.ts.map +1 -0
- package/dist/document-reconcile.js +197 -0
- package/dist/document-reconcile.js.map +1 -0
- package/dist/index.d.ts +9 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/document-ack.d.ts +0 -111
- package/dist/document-ack.d.ts.map +0 -1
- package/dist/document-ack.js +0 -228
- package/dist/document-ack.js.map +0 -1
- package/dist/document-control.d.ts +0 -74
- package/dist/document-control.d.ts.map +0 -1
- package/dist/document-control.js +0 -174
- package/dist/document-control.js.map +0 -1
- package/dist/document-join-answer.d.ts +0 -34
- package/dist/document-join-answer.d.ts.map +0 -1
- package/dist/document-join-answer.js +0 -100
- package/dist/document-join-answer.js.map +0 -1
- package/dist/document-join.d.ts +0 -83
- package/dist/document-join.d.ts.map +0 -1
- package/dist/document-join.js +0 -225
- package/dist/document-join.js.map +0 -1
|
@@ -27,26 +27,29 @@
|
|
|
27
27
|
* the binding is LEARNABLE, and this envelope is where it is learned. Outside
|
|
28
28
|
* the signature, "learnable" would mean "assertable by anyone on the wire".
|
|
29
29
|
*
|
|
30
|
-
* `
|
|
31
|
-
*
|
|
32
|
-
*
|
|
30
|
+
* `doc_prev_hash` is not optional and is not defaulted (§14): the chain link is what lets the
|
|
31
|
+
* document log be extracted and verified across sealed sessions, and a decoder that read absence
|
|
32
|
+
* as null would turn every gap into a valid-looking genesis. `governance_parents` is likewise
|
|
33
|
+
* mandatory — it is content's only causal link to the governance that makes it admissible.
|
|
33
34
|
*/
|
|
34
35
|
/** Domain tag in slot 0 of the to-be-signed array. */
|
|
35
|
-
|
|
36
|
+
/**
|
|
37
|
+
* v2 (SYNC-G1, journal Entry 58): the envelope gains `governance_parents` — the author's
|
|
38
|
+
* governance frontier at authoring — inside the signed preimage. It is the content's causal
|
|
39
|
+
* link to the governance that made it admissible; the per-envelope epoch stamp it replaces is
|
|
40
|
+
* deleted by the same phase. No compatibility owed: nothing was published between bumps.
|
|
41
|
+
*/
|
|
42
|
+
export declare const DOCUMENT_UPDATE_DOMAIN = "CELLO-DOCUMENT-UPDATE-v3";
|
|
36
43
|
/**
|
|
37
44
|
* The pinned Yjs update encoding (§16.7-8). Pinned in the protocol types precisely so that two
|
|
38
45
|
* supporting clients can never disagree silently — the failure mode of disagreement is an empty
|
|
39
46
|
* document, not an error.
|
|
40
47
|
*/
|
|
41
48
|
export declare const DOCUMENT_UPDATE_ENCODING_V1 = "yjs-v1";
|
|
42
|
-
/** V1 has exactly one epoch. Compaction (which mints new epochs) is V2. */
|
|
43
|
-
export declare const DOCUMENT_EPOCH_V1 = 0;
|
|
44
49
|
export interface DocumentUpdateEnvelope {
|
|
45
50
|
type: "document_update";
|
|
46
51
|
/** Hash of the handshake proposal envelope that minted this document. */
|
|
47
52
|
document_id: string;
|
|
48
|
-
/** Constant `DOCUMENT_EPOCH_V1` in V1 — carried explicitly, never omitted. */
|
|
49
|
-
epoch_id: number;
|
|
50
53
|
/**
|
|
51
54
|
* The per-sender chain link: the `documentEnvelopeHash` of this sender's previous envelope for
|
|
52
55
|
* this document, or `null` for this sender's FIRST envelope. `null` and absent are different
|
|
@@ -62,6 +65,13 @@ export interface DocumentUpdateEnvelope {
|
|
|
62
65
|
state_vector: Uint8Array;
|
|
63
66
|
/** The Yjs update payload. */
|
|
64
67
|
update: Uint8Array;
|
|
68
|
+
/**
|
|
69
|
+
* SYNC-G1 — the author's GOVERNANCE frontier when authoring: governance entry hashes,
|
|
70
|
+
* canonical (strictly ascending, capped). This is what R20/R30 rule on for content: was the
|
|
71
|
+
* author a participant at THESE ancestors, and is no ending among them. Empty = authored at
|
|
72
|
+
* genesis, before any governance entry existed.
|
|
73
|
+
*/
|
|
74
|
+
governance_parents: string[];
|
|
65
75
|
/** Ed25519 (RFC 8032) over `buildDocumentUpdateTbs`. */
|
|
66
76
|
signature: Uint8Array;
|
|
67
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-envelope.d.ts","sourceRoot":"","sources":["../src/document-envelope.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"document-envelope.d.ts","sourceRoot":"","sources":["../src/document-envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAKH,sDAAsD;AACtD;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,6BAA6B,CAAC;AAEjE;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,WAAW,CAAC;AAOpD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,iBAAiB,CAAC;IACxB,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,gBAAgB,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,eAAe,EAAE,MAAM,CAAC;IACxB,yFAAyF;IACzF,YAAY,EAAE,UAAU,CAAC;IACzB,8BAA8B;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB;;;;;OAKG;IACH,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,wDAAwD;IACxD,SAAS,EAAE,UAAU,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,sBAAsB,EAC3B,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/B,UAAU,CAcZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,sBAAsB,GAAG,MAAM,CAIxE;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,sBAAsB,GAAG,UAAU,CAapF;AAmCD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,UAAU,GAAG,sBAAsB,CAkFtF;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,sBAAsB,EAC3B,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GAC1D;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,CAiCxB"}
|
|
@@ -27,14 +27,21 @@
|
|
|
27
27
|
* the binding is LEARNABLE, and this envelope is where it is learned. Outside
|
|
28
28
|
* the signature, "learnable" would mean "assertable by anyone on the wire".
|
|
29
29
|
*
|
|
30
|
-
* `
|
|
31
|
-
*
|
|
32
|
-
*
|
|
30
|
+
* `doc_prev_hash` is not optional and is not defaulted (§14): the chain link is what lets the
|
|
31
|
+
* document log be extracted and verified across sealed sessions, and a decoder that read absence
|
|
32
|
+
* as null would turn every gap into a valid-looking genesis. `governance_parents` is likewise
|
|
33
|
+
* mandatory — it is content's only causal link to the governance that makes it admissible.
|
|
33
34
|
*/
|
|
34
35
|
import { createHash } from "node:crypto";
|
|
35
36
|
import { encodeCbor, decodeCbor } from "./cbor.js";
|
|
36
37
|
/** Domain tag in slot 0 of the to-be-signed array. */
|
|
37
|
-
|
|
38
|
+
/**
|
|
39
|
+
* v2 (SYNC-G1, journal Entry 58): the envelope gains `governance_parents` — the author's
|
|
40
|
+
* governance frontier at authoring — inside the signed preimage. It is the content's causal
|
|
41
|
+
* link to the governance that made it admissible; the per-envelope epoch stamp it replaces is
|
|
42
|
+
* deleted by the same phase. No compatibility owed: nothing was published between bumps.
|
|
43
|
+
*/
|
|
44
|
+
export const DOCUMENT_UPDATE_DOMAIN = "CELLO-DOCUMENT-UPDATE-v3";
|
|
38
45
|
/**
|
|
39
46
|
* The pinned Yjs update encoding (§16.7-8). Pinned in the protocol types precisely so that two
|
|
40
47
|
* supporting clients can never disagree silently — the failure mode of disagreement is an empty
|
|
@@ -42,7 +49,6 @@ export const DOCUMENT_UPDATE_DOMAIN = "CELLO-DOCUMENT-UPDATE-v1";
|
|
|
42
49
|
*/
|
|
43
50
|
export const DOCUMENT_UPDATE_ENCODING_V1 = "yjs-v1";
|
|
44
51
|
/** V1 has exactly one epoch. Compaction (which mints new epochs) is V2. */
|
|
45
|
-
export const DOCUMENT_EPOCH_V1 = 0;
|
|
46
52
|
/** A 32-byte hex digest — the shape of `document_id` and of every chain link. */
|
|
47
53
|
const HEX32 = /^[0-9a-f]{64}$/;
|
|
48
54
|
/**
|
|
@@ -63,13 +69,13 @@ export function buildDocumentUpdateTbs(env, opts = {}) {
|
|
|
63
69
|
const preimage = encodeCbor([
|
|
64
70
|
DOCUMENT_UPDATE_DOMAIN,
|
|
65
71
|
env.document_id,
|
|
66
|
-
env.epoch_id,
|
|
67
72
|
env.doc_prev_hash, // null encodes distinctly from any string — genesis is unambiguous
|
|
68
73
|
env.sender_agent_id,
|
|
69
74
|
env.sender_client_id,
|
|
70
75
|
env.update_encoding,
|
|
71
76
|
env.state_vector,
|
|
72
77
|
env.update,
|
|
78
|
+
[...env.governance_parents],
|
|
73
79
|
]);
|
|
74
80
|
if (opts.preHash === false)
|
|
75
81
|
return preimage;
|
|
@@ -94,20 +100,20 @@ export function encodeDocumentUpdateEnvelope(env) {
|
|
|
94
100
|
return encodeCbor({
|
|
95
101
|
type: env.type,
|
|
96
102
|
document_id: env.document_id,
|
|
97
|
-
epoch_id: env.epoch_id,
|
|
98
103
|
doc_prev_hash: env.doc_prev_hash,
|
|
99
104
|
sender_agent_id: env.sender_agent_id,
|
|
100
105
|
sender_client_id: env.sender_client_id,
|
|
101
106
|
update_encoding: env.update_encoding,
|
|
102
107
|
state_vector: env.state_vector,
|
|
103
108
|
update: env.update,
|
|
109
|
+
governance_parents: [...env.governance_parents],
|
|
104
110
|
signature: env.signature,
|
|
105
111
|
});
|
|
106
112
|
}
|
|
107
113
|
function requirePresent(map, field) {
|
|
108
114
|
// `in`, not a truthiness or nullish check. ABSENT and `null` are different facts: absent
|
|
109
|
-
// doc_prev_hash read as null would turn every gap in a chain into a fresh valid-looking genesis
|
|
110
|
-
//
|
|
115
|
+
// doc_prev_hash read as null would turn every gap in a chain into a fresh valid-looking genesis.
|
|
116
|
+
// A decoder that
|
|
111
117
|
// supplies a default for a field the spec calls mandatory is manufacturing the sender's claim.
|
|
112
118
|
if (!(field in map)) {
|
|
113
119
|
throw new Error(`document_envelope_missing_field: ${field} is mandatory and was not present`);
|
|
@@ -152,15 +158,6 @@ export function decodeDocumentUpdateEnvelope(bytes) {
|
|
|
152
158
|
if (!HEX32.test(documentId)) {
|
|
153
159
|
throw new Error(`document_envelope_document_id: must be a 32-byte lowercase hex digest, got "${documentId}"`);
|
|
154
160
|
}
|
|
155
|
-
const epochId = requirePresent(map, "epoch_id");
|
|
156
|
-
// SHAPE ONLY (M14B / DOD-MP-AMEND-1 — relaxed from a hard `!== 0` refusal). Epoch CORRECTNESS
|
|
157
|
-
// is a per-document fact — the current epoch is derived from the amendment chain — and a
|
|
158
|
-
// decoder cannot know it. The inbound path rules on it, and may trust this decoded value
|
|
159
|
-
// because `epoch_id` sits inside the signed TBS: a lie about the epoch fails verification
|
|
160
|
-
// before any epoch comparison runs.
|
|
161
|
-
if (typeof epochId !== "number" || !Number.isInteger(epochId) || epochId < 0) {
|
|
162
|
-
throw new Error(`document_envelope_epoch: must be a non-negative integer, got ${String(epochId)}`);
|
|
163
|
-
}
|
|
164
161
|
const prev = requirePresent(map, "doc_prev_hash");
|
|
165
162
|
if (prev !== null && (typeof prev !== "string" || !HEX32.test(prev))) {
|
|
166
163
|
throw new Error(`document_envelope_prev_hash: must be a 32-byte hex digest or explicit null, got "${String(prev)}"`);
|
|
@@ -178,16 +175,35 @@ export function decodeDocumentUpdateEnvelope(bytes) {
|
|
|
178
175
|
// The one refusal that cannot be replaced by a heuristic. See the header.
|
|
179
176
|
throw new Error(`document_envelope_encoding: this build speaks ${DOCUMENT_UPDATE_ENCODING_V1} only, got "${encoding}"`);
|
|
180
177
|
}
|
|
178
|
+
const rawParents = requirePresent(map, "governance_parents");
|
|
179
|
+
if (!Array.isArray(rawParents)) {
|
|
180
|
+
throw new Error("document_envelope_governance_parents: must be an array of entry hashes");
|
|
181
|
+
}
|
|
182
|
+
if (rawParents.length > 64) {
|
|
183
|
+
throw new Error(`document_envelope_governance_parents_cap: ${rawParents.length} exceeds the ceiling of 64`);
|
|
184
|
+
}
|
|
185
|
+
const governanceParents = rawParents.map((h) => {
|
|
186
|
+
if (typeof h !== "string" || !HEX32.test(h)) {
|
|
187
|
+
throw new Error("document_envelope_governance_parents: must hold 64-hex entry hashes");
|
|
188
|
+
}
|
|
189
|
+
return h;
|
|
190
|
+
});
|
|
191
|
+
for (let i = 1; i < governanceParents.length; i++) {
|
|
192
|
+
if (governanceParents[i] <= governanceParents[i - 1]) {
|
|
193
|
+
throw new Error("document_envelope_governance_parents_canonical: strictly ascending, no duplicates — " +
|
|
194
|
+
"one envelope, one identity");
|
|
195
|
+
}
|
|
196
|
+
}
|
|
181
197
|
return {
|
|
182
198
|
type: "document_update",
|
|
183
199
|
document_id: documentId,
|
|
184
|
-
epoch_id: epochId,
|
|
185
200
|
doc_prev_hash: prev,
|
|
186
201
|
sender_agent_id: senderAgentId,
|
|
187
202
|
sender_client_id: clientId,
|
|
188
203
|
update_encoding: encoding,
|
|
189
204
|
state_vector: requireBytes(map, "state_vector"),
|
|
190
205
|
update: requireBytes(map, "update"),
|
|
206
|
+
governance_parents: governanceParents,
|
|
191
207
|
signature: requireBytes(map, "signature"),
|
|
192
208
|
};
|
|
193
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-envelope.js","sourceRoot":"","sources":["../src/document-envelope.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"document-envelope.js","sourceRoot":"","sources":["../src/document-envelope.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* deadlock in one move. Demote first, under remove_admin's rule.
|
|
24
24
|
*
|
|
25
25
|
* Kind/subject semantics (does the subject hold? is it already an admin? last-admin protection)
|
|
26
|
-
* are
|
|
26
|
+
* are the causal fold's job (`deriveDocumentState`) and run BEFORE this policy is consulted — it may assume a
|
|
27
27
|
* semantically coherent amendment.
|
|
28
28
|
*/
|
|
29
29
|
import type { AmendmentKind } from "./document-amendment.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-governance.d.ts","sourceRoot":"","sources":["../src/document-governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAiB7E,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,aAAa,EACnB,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,KAAK,EAAE;IAAE,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,EACzE,kBAAkB,EAAE,SAAS,MAAM,EAAE,GACpC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"document-governance.d.ts","sourceRoot":"","sources":["../src/document-governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAiB7E,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,aAAa,EACnB,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,KAAK,EAAE;IAAE,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,EACzE,kBAAkB,EAAE,SAAS,MAAM,EAAE,GACpC,iBAAiB,CAyHnB"}
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
* deadlock in one move. Demote first, under remove_admin's rule.
|
|
24
24
|
*
|
|
25
25
|
* Kind/subject semantics (does the subject hold? is it already an admin? last-admin protection)
|
|
26
|
-
* are
|
|
26
|
+
* are the causal fold's job (`deriveDocumentState`) and run BEFORE this policy is consulted — it may assume a
|
|
27
27
|
* semantically coherent amendment.
|
|
28
28
|
*/
|
|
29
29
|
function canonical(ids) {
|
|
30
30
|
return [...new Set(ids)].sort();
|
|
31
31
|
}
|
|
32
32
|
/** A duplicated claim is a builder bug, refused — deduping here would hand the multisig layer a
|
|
33
|
-
* collection it THROWS on (`multisig_duplicate_signer`), escaping
|
|
33
|
+
* collection it THROWS on (`multisig_duplicate_signer`), escaping the derivation's never-throw
|
|
34
34
|
* contract. The two layers agree: duplicates refuse, loudly, at the first gate they reach. */
|
|
35
35
|
function hasDuplicates(ids) {
|
|
36
36
|
return new Set(ids).size !== ids.length;
|
|
@@ -52,8 +52,41 @@ export function documentGovernancePolicy(kind, subjectAgentId, state, claimedReq
|
|
|
52
52
|
reason: "governance_claim_shape: a collection nobody is required to sign authorizes nothing",
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
|
+
// SYNC-P2 — the subject's own acts: consent answers an admission, refuse_join declines one.
|
|
56
|
+
// The claim is EXACTLY the subject; no admin can consent on anyone's behalf (R22).
|
|
57
|
+
if (kind === "consent" || kind === "refuse_join" || kind === "close") {
|
|
58
|
+
if (subjectAgentId !== null && claimed.length === 1 && claimed[0] === subjectAgentId) {
|
|
59
|
+
return { ok: true };
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
ok: false,
|
|
63
|
+
reason: `governance_consent_self: ${kind} is the subject's own act — the claim must be exactly ` +
|
|
64
|
+
`[${subjectAgentId ?? "the subject"}] and the collection claims [${claimed.join(", ")}]`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// SYNC-P4 (R28): a kill is one admin's own act — self-claimed AND admin-held.
|
|
68
|
+
if (kind === "kill") {
|
|
69
|
+
if (subjectAgentId !== null &&
|
|
70
|
+
claimed.length === 1 &&
|
|
71
|
+
claimed[0] === subjectAgentId &&
|
|
72
|
+
state.admins.has(subjectAgentId)) {
|
|
73
|
+
return { ok: true };
|
|
74
|
+
}
|
|
75
|
+
if (subjectAgentId !== null && !state.admins.has(subjectAgentId)) {
|
|
76
|
+
return {
|
|
77
|
+
ok: false,
|
|
78
|
+
reason: `governance_not_admin: ${subjectAgentId} holds no admin power over this document — ` +
|
|
79
|
+
`ending everyone's document takes a current admin's own signature`,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
ok: false,
|
|
84
|
+
reason: `governance_consent_self: kill is the admin's own act — the claim must be exactly ` +
|
|
85
|
+
`[${subjectAgentId ?? "the admin"}] and the collection claims [${claimed.join(", ")}]`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
55
88
|
if (kind === "remove_admin") {
|
|
56
|
-
//
|
|
89
|
+
// The fold already refused a non-admin subject and the last-admin case.
|
|
57
90
|
if (state.admins.size === 2) {
|
|
58
91
|
return {
|
|
59
92
|
ok: false,
|
|
@@ -84,9 +117,11 @@ export function documentGovernancePolicy(kind, subjectAgentId, state, claimedReq
|
|
|
84
117
|
if (kind === "remove_holder" && subjectAgentId !== null && state.admins.has(subjectAgentId)) {
|
|
85
118
|
return {
|
|
86
119
|
ok: false,
|
|
87
|
-
reason: "governance_remove_admin_first:
|
|
88
|
-
"
|
|
89
|
-
"
|
|
120
|
+
reason: "governance_remove_admin_first: a fellow admin cannot be expelled through the holder " +
|
|
121
|
+
"door — holder removal would drop their admin status with it. Demotion takes every " +
|
|
122
|
+
"other admin's signature, and NO VERB FOR THAT EXISTS YET: today the only way an admin " +
|
|
123
|
+
"leaves is to remove themselves (pass their own agent id). Do not wait for a demote " +
|
|
124
|
+
"command; there isn't one.",
|
|
90
125
|
};
|
|
91
126
|
}
|
|
92
127
|
// The single-admin kinds: add_holder, promote_admin, remove_holder (non-admin), change_property.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-governance.js","sourceRoot":"","sources":["../src/document-governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,SAAS,SAAS,CAAC,GAAsB;IACvC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC;AAED;;8FAE8F;AAC9F,SAAS,aAAa,CAAC,GAAsB;IAC3C,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC;AAC1C,CAAC;AAED,SAAS,OAAO,CAAC,CAAoB,EAAE,CAAoB;IACzD,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,IAAmB,EACnB,cAA6B,EAC7B,KAAyE,EACzE,kBAAqC;IAErC,IAAI,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,gFAAgF;SACzF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,oFAAoF;SAC7F,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,
|
|
1
|
+
{"version":3,"file":"document-governance.js","sourceRoot":"","sources":["../src/document-governance.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
* answered and the operator sees a hang. `documentFeatureIncompatibility` turns that into "your
|
|
32
32
|
* peer's client doesn't support shared documents yet — ask them to upgrade".
|
|
33
33
|
*/
|
|
34
|
+
import type { ArrangementGenesis } from "./document-amendment.js";
|
|
34
35
|
/** Domain tag in slot 0 of the to-be-signed array. Distinct from the UPDATE envelope's domain. */
|
|
35
36
|
export declare const DOCUMENT_PROPOSAL_DOMAIN = "CELLO-DOCUMENT-PROPOSAL-v1";
|
|
36
37
|
/**
|
|
@@ -146,4 +147,9 @@ export declare function encodeDocumentProposal(env: DocumentProposalEnvelope): U
|
|
|
146
147
|
* version exists to replace.
|
|
147
148
|
*/
|
|
148
149
|
export declare function decodeDocumentProposal(input: Uint8Array): DocumentProposalEnvelope;
|
|
150
|
+
/**
|
|
151
|
+
* The genesis PROPOSAL as the fold's anchor (SYNC-P1). Lived in the join-offer module until D5
|
|
152
|
+
* deleted it; the conversion belongs to the proposal itself — every derivation starts here.
|
|
153
|
+
*/
|
|
154
|
+
export declare function arrangementGenesisFromProposal(genesis: DocumentProposalEnvelope): ArrangementGenesis;
|
|
149
155
|
//# sourceMappingURL=document-proposal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-proposal.d.ts","sourceRoot":"","sources":["../src/document-proposal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;
|
|
1
|
+
{"version":3,"file":"document-proposal.d.ts","sourceRoot":"","sources":["../src/document-proposal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,kGAAkG;AAClG,eAAO,MAAM,wBAAwB,+BAA+B,CAAC;AAErE;;;GAGG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,2FAA2F;AAC3F,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AACjD;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,SAAS,CAAC;AACvC,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAAsC,CAAC;AAE5F,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oFAAoF;IACpF,QAAQ,EAAE,MAAM,CAAC;IACjB,4FAA4F;IAC5F,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,mGAAmG;IACnG,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,iFAAiF;IACjF,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,kBAAkB,CAAC;IAC/B;;;;OAIG;IACH,gBAAgB,EAAE,UAAU,GAAG,IAAI,CAAC;IACpC,yFAAyF;IACzF,KAAK,EAAE,UAAU,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,SAAS,EAAE,UAAU,CAAC;CACvB;AAgCD,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,wBAAwB,EAC7B,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/B,UAAU,CA8CZ;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,wBAAwB,GAAG,MAAM,CAI5E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAkDtE;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,kBAAkB,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAoB/F;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,wBAAwB,GAAG,UAAU,CA4BhF;AA6BD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,wBAAwB,CAoFlF;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,wBAAwB,GAChC,kBAAkB,CAgBpB"}
|
|
@@ -341,4 +341,25 @@ export function decodeDocumentProposal(input) {
|
|
|
341
341
|
signature: bytes(map, "signature"),
|
|
342
342
|
};
|
|
343
343
|
}
|
|
344
|
+
/**
|
|
345
|
+
* The genesis PROPOSAL as the fold's anchor (SYNC-P1). Lived in the join-offer module until D5
|
|
346
|
+
* deleted it; the conversion belongs to the proposal itself — every derivation starts here.
|
|
347
|
+
*/
|
|
348
|
+
export function arrangementGenesisFromProposal(genesis) {
|
|
349
|
+
return {
|
|
350
|
+
documentId: documentIdFromProposal(genesis),
|
|
351
|
+
proposerAgentId: genesis.proposer_agent_id,
|
|
352
|
+
peerAgentId: genesis.peer_agent_id,
|
|
353
|
+
adminSet: genesis.properties.admin_set ?? [genesis.proposer_agent_id, genesis.peer_agent_id],
|
|
354
|
+
properties: {
|
|
355
|
+
assurance_tier: genesis.properties.assurance_tier,
|
|
356
|
+
schema_enforcement: genesis.properties.schema_enforcement,
|
|
357
|
+
topology: genesis.properties.topology,
|
|
358
|
+
append_only: genesis.properties.append_only,
|
|
359
|
+
...(genesis.properties.content_profile !== undefined
|
|
360
|
+
? { content_profile: genesis.properties.content_profile }
|
|
361
|
+
: {}),
|
|
362
|
+
},
|
|
363
|
+
};
|
|
364
|
+
}
|
|
344
365
|
//# sourceMappingURL=document-proposal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-proposal.js","sourceRoot":"","sources":["../src/document-proposal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"document-proposal.js","sourceRoot":"","sources":["../src/document-proposal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SYNC-P3 (R10–R16) — the reconcile frame: ONE wire shape for all three exchange steps.
|
|
3
|
+
*
|
|
4
|
+
* | Step | Direction | Carries |
|
|
5
|
+
* |------|-----------|---------|
|
|
6
|
+
* | 1 | A → B | per document: A's positions + A's refusal set (payload arrays empty) |
|
|
7
|
+
* | 2 | B → A | entries/envelopes A lacks, plus B's positions + refusal set |
|
|
8
|
+
* | 3 | A → B | entries/envelopes B lacks — sent only if B is behind |
|
|
9
|
+
*
|
|
10
|
+
* One shape means a lost reply degrades to a fresh exchange; there is no half-open protocol
|
|
11
|
+
* state to wedge, and reconciling stays idempotent by construction (R15).
|
|
12
|
+
*
|
|
13
|
+
* POSITION IS THE R7 PRIMITIVE, both halves:
|
|
14
|
+
* - governance: per author, the highest CONTIGUOUS entry seq held, with the head hash(es) at
|
|
15
|
+
* that seq — plural heads make a forked (equivocating) author visible on the wire instead of
|
|
16
|
+
* silently divergent (the Entry 48 §3 finding).
|
|
17
|
+
* - content: per author, the length of that author's own envelope chain held, with its head —
|
|
18
|
+
* the store's chain-linkage invariant already guarantees every sender's links form one
|
|
19
|
+
* unbroken chain, so the primitive is the same shape. Refused envelopes occupy chain
|
|
20
|
+
* positions (they are bridged as payload-less stubs); the refusal set is what stops their
|
|
21
|
+
* payloads from being re-offered (R36).
|
|
22
|
+
*
|
|
23
|
+
* NOT SIGNED, deliberately: the frame rides an authenticated session, and a position is
|
|
24
|
+
* advisory by design (R44 — no correctness decision reads it; a peer lying about its position
|
|
25
|
+
* earns wasted bytes, spec §5). What is load-bearing — every entry and envelope carried — is
|
|
26
|
+
* individually signed by its author, and the receiver verifies each itself (R2: forwarding
|
|
27
|
+
* confers no trust).
|
|
28
|
+
*/
|
|
29
|
+
/** R11: a version mismatch is refused BY NAME at both ends, with both versions in the sentence. */
|
|
30
|
+
export declare const DOCUMENT_RECONCILE_EXCHANGE_VERSION = 1;
|
|
31
|
+
/** R16 batching ceiling — one frame cannot be made unbounded by naming every document at once. */
|
|
32
|
+
export declare const MAX_RECONCILE_DOCUMENTS = 32;
|
|
33
|
+
export interface GovernancePosition {
|
|
34
|
+
author: string;
|
|
35
|
+
/** Highest contiguous entry seq held from this author (R13: contiguous, never highest-received). */
|
|
36
|
+
seq: number;
|
|
37
|
+
/** Entry hash(es) at that seq. More than one = a fork, visible by design. */
|
|
38
|
+
head_hashes: string[];
|
|
39
|
+
}
|
|
40
|
+
export interface ContentPosition {
|
|
41
|
+
author: string;
|
|
42
|
+
/** How many of this author's own-chain envelopes are held (refused stubs included). */
|
|
43
|
+
count: number;
|
|
44
|
+
/** The envelope hash at the head of this author's chain as held. */
|
|
45
|
+
head_hash: string;
|
|
46
|
+
}
|
|
47
|
+
export interface DocumentReconcileBlock {
|
|
48
|
+
document_id: string;
|
|
49
|
+
governance: GovernancePosition[];
|
|
50
|
+
content: ContentPosition[];
|
|
51
|
+
/** Hashes this holder has refused (entries or envelopes) — never re-offer these (R36). */
|
|
52
|
+
refused: string[];
|
|
53
|
+
/** Governance entry wires the peer lacks. Empty on step 1. */
|
|
54
|
+
entries: Uint8Array[];
|
|
55
|
+
/** Content envelope wires the peer lacks. Empty on step 1. */
|
|
56
|
+
envelopes: Uint8Array[];
|
|
57
|
+
/**
|
|
58
|
+
* SYNC-R35: this holder's OWN signed refusal records (document_rejection wires) for this
|
|
59
|
+
* document — the refusal travels by the ordinary exchange like anything else, so a third
|
|
60
|
+
* holder wedged behind a refused hash can learn its name and reason from any reply, not only
|
|
61
|
+
* from the refuser's one-shot frame. Few by construction (each is a retry round); attached
|
|
62
|
+
* whole and deduplicated by the receiver.
|
|
63
|
+
*/
|
|
64
|
+
refusals?: Uint8Array[];
|
|
65
|
+
/**
|
|
66
|
+
* The signed genesis proposal, included when the peer's position shows them holding NOTHING —
|
|
67
|
+
* a joiner is simply very far behind (spec §4), and the anchor everything derives from is the
|
|
68
|
+
* one record that is not an entry. Harmless when they already hold it: the bootstrap is
|
|
69
|
+
* idempotent, like everything else in the exchange.
|
|
70
|
+
*/
|
|
71
|
+
genesis?: Uint8Array;
|
|
72
|
+
/**
|
|
73
|
+
* A PER-DOCUMENT refusal (P3 review F4): in a batched frame, one document's stranger or
|
|
74
|
+
* removed ruling must not be silenced by another document's ordinary reply — refused-by-name
|
|
75
|
+
* is per document, so the refusal rides the block. May coexist with entries: a removed
|
|
76
|
+
* holder's block carries their own removal's closure AND the terminal ruling (R32 + R17).
|
|
77
|
+
*/
|
|
78
|
+
refusal?: {
|
|
79
|
+
reason: string;
|
|
80
|
+
terminal: boolean;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export interface DocumentReconcileFrame {
|
|
84
|
+
type: "document_reconcile";
|
|
85
|
+
exchange_version: number;
|
|
86
|
+
documents: DocumentReconcileBlock[];
|
|
87
|
+
/**
|
|
88
|
+
* R11: a refusal rides the SAME frame — a version mismatch (or an entitlement refusal) is
|
|
89
|
+
* answered by name with a sentence, never by silence, and inventing a second frame kind for
|
|
90
|
+
* "no" would be the second carrier this design exists to avoid. A refusal reply carries no
|
|
91
|
+
* documents.
|
|
92
|
+
*/
|
|
93
|
+
refusal?: {
|
|
94
|
+
reason: string;
|
|
95
|
+
terminal: boolean;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export declare function encodeDocumentReconcile(frame: DocumentReconcileFrame): Uint8Array;
|
|
99
|
+
export declare function decodeDocumentReconcile(input: Uint8Array): DocumentReconcileFrame;
|
|
100
|
+
//# sourceMappingURL=document-reconcile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-reconcile.d.ts","sourceRoot":"","sources":["../src/document-reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,mGAAmG;AACnG,eAAO,MAAM,mCAAmC,IAAI,CAAC;AAErD,kGAAkG;AAClG,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,oGAAoG;IACpG,GAAG,EAAE,MAAM,CAAC;IACZ,6EAA6E;IAC7E,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,KAAK,EAAE,MAAM,CAAC;IACd,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,0FAA0F;IAC1F,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8DAA8D;IAC9D,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,8DAA8D;IAC9D,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;CACjD;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC;;;;;OAKG;IACH,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;CACjD;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,UAAU,CA6BjF;AA6DD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,sBAAsB,CAsFjF"}
|