@claudian-collab/protocol 3.2.0 → 3.3.0

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 (35) hide show
  1. package/README.md +8 -6
  2. package/dist/CollabAuthorityTransfer.d.ts +1 -1
  3. package/dist/CollabCloudBinding.d.ts +1 -1
  4. package/dist/CollabCloudBinding.js +7 -0
  5. package/dist/CollabControlOperationCodecs.d.ts +18 -0
  6. package/dist/CollabControlOperationCodecs.js +2 -0
  7. package/dist/CollabProjectBackupCheckpoint.d.ts +93 -4
  8. package/dist/CollabProjectBackupCheckpoint.js +640 -12
  9. package/dist/CollabProjectMembership.d.ts +318 -0
  10. package/dist/CollabProjectMembership.js +714 -0
  11. package/dist/CollabProtocol.d.ts +2 -1
  12. package/dist/esm/CollabAuthorityTransfer.mjs +884 -0
  13. package/dist/esm/CollabCloudBinding.mjs +559 -0
  14. package/dist/esm/CollabCloudProjectEvent.mjs +150 -0
  15. package/dist/esm/CollabCloudProjectSnapshot.mjs +277 -0
  16. package/dist/esm/CollabConstants.mjs +31 -0
  17. package/dist/esm/CollabControlOperationCodecs.mjs +106 -0
  18. package/dist/esm/CollabError.mjs +175 -0
  19. package/dist/esm/CollabMarkdownProse.mjs +54 -0
  20. package/dist/esm/CollabMemberMentionParser.mjs +48 -0
  21. package/dist/esm/CollabProjectBackupCheckpoint.mjs +2101 -0
  22. package/dist/esm/CollabProjectCheckpoint.mjs +1326 -0
  23. package/dist/esm/CollabProjectMembership.mjs +709 -0
  24. package/dist/esm/CollabProjectRetirement.mjs +119 -0
  25. package/dist/esm/CollabProtocol.mjs +64 -0
  26. package/dist/esm/CollabRequestTicketRequestCodecs.mjs +263 -0
  27. package/dist/esm/CollabRequestTicketResponseCodecs.mjs +353 -0
  28. package/dist/esm/CollabTicketReferenceParser.mjs +52 -0
  29. package/dist/esm/CollabValidation.mjs +19 -0
  30. package/dist/esm/DevelopmentBootstrap.mjs +537 -0
  31. package/dist/esm/index.mjs +17 -0
  32. package/dist/esm/types.mjs +8 -0
  33. package/dist/index.d.ts +4 -2
  34. package/dist/index.js +10 -3
  35. package/package.json +5 -2
package/README.md CHANGED
@@ -37,7 +37,7 @@ fixed part of the detail so the whole detail stays within
37
37
  has one compatible final-serialization limit. Request comments and Ticket
38
38
  accepted relations also have shared authority-enforced total limits; summary
39
39
  counts let complete consumers reject partial or cross-snapshot assembly.
40
- Cloud binding v2 adds the authority-neutral Project snapshot, nine redacted durable event kinds plus `snapshot.required`, eleven capability tokens, the exact ordinary Project/Git route catalog, bounded authority-transfer artifact routes, and six private-development bootstrap bindings. The shared checkpoint container is exactly `checkpoint.json`, `coordination.ndjson`, and `repository.bundle`; authority-transfer and export retain wire-visible coordination format v1, while offline backup format v2 adds lifecycle journals, recovery evidence, claim hashes, public receipt verifiers, exact custody/redemption receipts, terminal replay facts, and protected claim-envelope metadata plus ciphertext. Portable profiles exclude engine storage, paths, credentials, tokens, private keys, and operational refs, and backups exclude raw claims and private keys. Domain-separated canonical UTF-8 inputs define protected-claim AEAD associated data and bind every declared field of transferred-membership redemption receipts and authority-relinquishment proofs before consumer-owned Ed25519 signing or verification. Existing LAN v9 Join, invitation, endpoint, membership lifecycle, Host-transfer, snapshot, event, and HTTP bindings remain independently application-owned; the dedicated LAN authority-transfer transport binds these shared payloads without creating another shared operation registry.
40
+ Cloud binding v2 adds the authority-neutral Project snapshot, nine redacted durable event kinds plus `snapshot.required`, eighteen capability tokens, the exact ordinary Project/Git route catalog, bounded authority-transfer artifact routes, and six private-development bootstrap bindings. Wire v6 includes the additive Cloud Project-membership operation family while preserving every existing operation contract. The shared checkpoint container is exactly `checkpoint.json`, `coordination.ndjson`, and `repository.bundle`; authority-transfer and export retain wire-visible coordination format v1, while the pre-production offline backup contract is directly replaced by format v3. Backup v3 adds Project invitations, protected invitation and transferred-claim override envelopes, manager-responsibility offers, membership recovery journals, and secret-replay tombstones to the existing continuity records. Portable profiles exclude engine storage, paths, credentials, tokens, private keys, and operational refs, and backups exclude plaintext invitation secrets, raw claims, and private keys. Domain-separated canonical UTF-8 inputs define protected-claim AEAD associated data and bind every declared field of transferred-membership redemption receipts and authority-relinquishment proofs before consumer-owned Ed25519 signing or verification. Existing LAN v9 Join, invitation, endpoint, membership lifecycle, Host-transfer, snapshot, event, and HTTP bindings remain independently application-owned; the dedicated LAN authority-transfer transport binds these shared payloads without creating another shared operation registry.
41
41
 
42
42
  ## Usage
43
43
 
@@ -62,7 +62,7 @@ part of the public surface.
62
62
 
63
63
  Package SemVer, canonical wire version, and Cloud binding version are independent concepts.
64
64
 
65
- - **Package version** (this `package.json`): `3.2.0`. Patch releases preserve
65
+ - **Package version** (this `package.json`): `3.3.0`. Patch releases preserve
66
66
  every existing public declaration and runtime behavior baseline. Minor
67
67
  releases may add backward-compatible API. Removing or changing an existing
68
68
  declaration, export, runtime behavior, codec, error, limit, ref rule,
@@ -70,10 +70,12 @@ Package SemVer, canonical wire version, and Cloud binding version are independen
70
70
  proven additive control operation may use a package minor release without a
71
71
  wire-version increase; existing operation declarations and fixtures must stay
72
72
  exact. Package 3 and wire 6 support exact transfer-claim batches and a
73
- source-pinned target receipt verifier. Package 3.2 adds offline backup
74
- coordination format v2 without changing authority-transfer/export format v1,
75
- canonical wire v6, or Cloud binding v2. The package version never signals wire
76
- compatibility by itself.
73
+ source-pinned target receipt verifier. Package 3.3 adds the Cloud Project-membership
74
+ operation family and capability tokens and directly replaces the pre-production
75
+ offline backup contract with coordination format v3, without changing
76
+ authority-transfer/export format v1, canonical wire v6, or Cloud binding v2.
77
+ Backup v2 has no supported decoder or migration path. The package version never
78
+ signals wire compatibility by itself.
77
79
  - **Wire version** (`COLLAB_PROTOCOL_VERSION`): currently `6`. The supported
78
80
  range is exactly `[6, 6]`. This is independent from Cloud binding version `2` and the existing application
79
81
  LAN control version `9`. Any change to an existing envelope, DTO, operation
@@ -300,7 +300,7 @@ export declare function decodeCollabAuthorityTransferLifecycleFence(value: unkno
300
300
  batchSha256: string | null;
301
301
  checkpointSha256: string | null;
302
302
  direction: "cloud-to-lan" | "lan-to-cloud";
303
- phase: "collecting-readiness" | "source-quiesced" | "checkpoint-received" | "checkpoint-validated" | "claims-retained" | "repository-published" | "source-relinquished" | "cloud-activated" | "completed" | "cloud-quiesced" | "checkpoint-captured" | "target-staged" | "cloud-relinquished" | "lan-activated" | "cancel-intent" | "target-invalidated" | "target-cleaned" | "source-reopened" | "cancelled";
303
+ phase: "cancelled" | "collecting-readiness" | "source-quiesced" | "checkpoint-received" | "checkpoint-validated" | "claims-retained" | "repository-published" | "source-relinquished" | "cloud-activated" | "completed" | "cloud-quiesced" | "checkpoint-captured" | "target-staged" | "cloud-relinquished" | "lan-activated" | "cancel-intent" | "target-invalidated" | "target-cleaned" | "source-reopened";
304
304
  relinquishmentRequired: boolean;
305
305
  };
306
306
  export declare function decodeCollabAuthorityTransferStatus(value: unknown): CollabAuthorityTransferStatus;
@@ -4,7 +4,7 @@ import { COLLAB_PROJECT_CHECKPOINT_ARTIFACTS } from './CollabProjectCheckpoint';
4
4
  import type { CollabIsoTimestamp, CollabProjectId } from './types';
5
5
  export declare const COLLAB_CLOUD_BINDING_VERSION: 2;
6
6
  export declare const COLLAB_CLOUD_CAPABILITY_DOCUMENT_SCHEMA_VERSION: 2;
7
- export declare const COLLAB_CLOUD_CAPABILITIES: readonly ["accept", "authority-transfer", "development-bootstrap", "git-receive-pack-personal-ref", "git-upload-pack", "project-checkpoint-export", "project-events", "project-retirement", "project-snapshot", "requests", "tickets"];
7
+ export declare const COLLAB_CLOUD_CAPABILITIES: readonly ["accept", "authority-transfer", "cloud-imported-membership-claims", "cloud-project-create", "cloud-project-invitations", "cloud-project-join", "cloud-project-leave", "cloud-project-manager-responsibility", "cloud-project-membership", "development-bootstrap", "git-receive-pack-personal-ref", "git-upload-pack", "project-checkpoint-export", "project-events", "project-retirement", "project-snapshot", "requests", "tickets"];
8
8
  export type CollabCloudCapability = typeof COLLAB_CLOUD_CAPABILITIES[number];
9
9
  export declare const COLLAB_CLOUD_JSON_OPERATIONS: readonly ["getProjectSnapshot", ...(keyof import("./CollabProtocol").CollabControlOperationMap)[]];
10
10
  export type CollabCloudJsonOperation = typeof COLLAB_CLOUD_JSON_OPERATIONS[number];
@@ -28,6 +28,13 @@ exports.COLLAB_CLOUD_CAPABILITY_DOCUMENT_SCHEMA_VERSION = 2;
28
28
  exports.COLLAB_CLOUD_CAPABILITIES = Object.freeze([
29
29
  'accept',
30
30
  'authority-transfer',
31
+ 'cloud-imported-membership-claims',
32
+ 'cloud-project-create',
33
+ 'cloud-project-invitations',
34
+ 'cloud-project-join',
35
+ 'cloud-project-leave',
36
+ 'cloud-project-manager-responsibility',
37
+ 'cloud-project-membership',
31
38
  'development-bootstrap',
32
39
  'git-receive-pack-personal-ref',
33
40
  'git-upload-pack',
@@ -8,6 +8,24 @@ type CodecMap = {
8
8
  readonly [Operation in CollabControlOperation]: CollabControlOperationCodec<CollabControlOperationMap[Operation]['request'], CollabControlOperationMap[Operation]['response']>;
9
9
  };
10
10
  export declare const COLLAB_CONTROL_OPERATION_CODECS: Readonly<{
11
+ readonly createCloudProject: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").CreateCloudProjectRequest, import("./CollabProjectMembership").CreateCloudProjectResponse>;
12
+ readonly createProjectInvitation: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").CreateProjectInvitationRequest, import("./CollabProjectMembership").CreateProjectInvitationResponse>;
13
+ readonly listProjectInvitations: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").CollabProjectRequest, import("./CollabProjectMembership").ListProjectInvitationsResponse>;
14
+ readonly revokeProjectInvitation: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").RevokeProjectInvitationRequest, import("./CollabProjectMembership").RevokeProjectInvitationResponse>;
15
+ readonly joinCloudProject: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").JoinCloudProjectRequest, import("./CollabProjectMembership").JoinCloudProjectResponse>;
16
+ readonly listProjectMembers: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").CollabProjectRequest, import("./CollabProjectMembership").ListProjectMembersResponse>;
17
+ readonly reissueTransferredMembershipClaim: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").ReissueTransferredMembershipClaimRequest, import("./CollabProjectMembership").ReissueTransferredMembershipClaimResponse>;
18
+ readonly revokeTransferredMembershipClaim: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").ReissueTransferredMembershipClaimRequest, import("./CollabProjectMembership").RevokeTransferredMembershipClaimResponse>;
19
+ readonly createManagerResponsibilityOffer: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").CreateManagerResponsibilityOfferRequest, import("./CollabProjectMembership").CollabManagerResponsibilityOfferResponse>;
20
+ readonly listCurrentManagerResponsibilityOffers: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").CollabProjectRequest, import("./CollabProjectMembership").ListCurrentManagerResponsibilityOffersResponse>;
21
+ readonly getManagerResponsibilityOffer: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").GetManagerResponsibilityOfferRequest, import("./CollabProjectMembership").CollabManagerResponsibilityOfferResponse>;
22
+ readonly acknowledgeManagerResponsibility: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").TransitionManagerResponsibilityOfferRequest, import("./CollabProjectMembership").CollabManagerResponsibilityOfferResponse>;
23
+ readonly declineManagerResponsibility: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").TransitionManagerResponsibilityOfferRequest, import("./CollabProjectMembership").CollabManagerResponsibilityOfferResponse>;
24
+ readonly cancelManagerResponsibilityOffer: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").TransitionManagerResponsibilityOfferRequest, import("./CollabProjectMembership").CollabManagerResponsibilityOfferResponse>;
25
+ readonly promoteManager: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").PromoteManagerRequest, import("./CollabProjectMembership").PromoteManagerResponse>;
26
+ readonly demoteManager: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").DemoteManagerRequest, import("./CollabProjectMembership").DemoteManagerResponse>;
27
+ readonly removeMember: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").DemoteManagerRequest, import("./CollabProjectMembership").RemoveMemberResponse>;
28
+ readonly leaveProject: import("./CollabProjectMembership").CollabProjectMembershipOperationCodec<import("./CollabProjectMembership").LeaveProjectRequest, import("./CollabProjectMembership").LeaveProjectResponse>;
11
29
  readonly getRequest: CollabControlOperationCodec<import("./CollabProtocol").GetRequestRequest, import("./types").CollabRequestDetail>;
12
30
  readonly listRequestComments: CollabControlOperationCodec<import("./CollabProtocol").ListRequestCommentsRequest, import("./types").CollabCommentPage>;
13
31
  readonly ensureMyRequest: CollabControlOperationCodec<import("./CollabProtocol").EnsureMyRequestRequest, import("./CollabProtocol").EnsureMyRequestResponse>;
@@ -4,6 +4,7 @@ exports.COLLAB_CONTROL_OPERATION_CODECS = void 0;
4
4
  exports.collabControlOperationCodec = collabControlOperationCodec;
5
5
  const CollabAuthorityTransfer_1 = require("./CollabAuthorityTransfer");
6
6
  const CollabError_1 = require("./CollabError");
7
+ const CollabProjectMembership_1 = require("./CollabProjectMembership");
7
8
  const CollabProjectRetirement_1 = require("./CollabProjectRetirement");
8
9
  const CollabRequestTicketRequestCodecs_1 = require("./CollabRequestTicketRequestCodecs");
9
10
  const CollabRequestTicketResponseCodecs_1 = require("./CollabRequestTicketResponseCodecs");
@@ -95,6 +96,7 @@ exports.COLLAB_CONTROL_OPERATION_CODECS = Object.freeze({
95
96
  cancelProjectAuthorityTransfer: codec('cancelProjectAuthorityTransfer'),
96
97
  retireProject: codec('retireProject'),
97
98
  acknowledgeProjectRetirement: codec('acknowledgeProjectRetirement'),
99
+ ...CollabProjectMembership_1.COLLAB_PROJECT_MEMBERSHIP_OPERATION_CODECS,
98
100
  });
99
101
  function collabControlOperationCodec(operation) {
100
102
  if (!Object.hasOwn(exports.COLLAB_CONTROL_OPERATION_CODECS, operation)) {
@@ -1,9 +1,11 @@
1
1
  import { type CollabAuthorityRelinquishmentProof, type CollabAuthorityTransferReceiptVerifier, type CollabTransferredMembershipClaimCustodyReceipt, type CollabTransferredMembershipRedemptionReceipt } from './CollabAuthorityTransfer';
2
2
  import { type CollabControlOperation } from './CollabControlOperationCodecs';
3
3
  import { type CollabCheckpointAuthority, type CollabCheckpointBackupRecord, type CollabCheckpointGitRef, type CollabProjectCheckpointManifest } from './CollabProjectCheckpoint';
4
+ import { type CollabManagerResponsibilityOfferState, type CollabManagerResponsibilityPurpose, type CollabProjectInvitationState, type CollabProjectMembershipOperation } from './CollabProjectMembership';
4
5
  import type { CollabIsoTimestamp, CollabMemberId, CollabProjectId } from './types';
5
- export declare const COLLAB_PROJECT_BACKUP_COORDINATION_FORMAT_VERSION: 2;
6
- export declare const COLLAB_PROJECT_BACKUP_RECORD_KINDS: readonly ("member" | "request" | "ticket" | "project" | "request-comment" | "ticket-comment" | "ticket-relation" | "ticket-mention" | "cloud-event" | "cloud-event-cursor" | "idempotency-result" | "principal-binding" | "repository-placement" | "lifecycle-state" | "terminal-responder" | "protected-claim-envelope" | "tombstone" | "schema-catalog" | "server-compatibility" | "authority-volume-pair" | "lifecycle-journal" | "authority-transfer-recovery" | "transferred-membership-claim" | "transfer-receipt-key" | "transfer-claim-batch-receipt" | "transfer-redemption-receipt" | "terminal-principal" | "terminal-responder-replay" | "leave-former-principal-replay")[];
6
+ export declare const COLLAB_PROJECT_BACKUP_COMPATIBILITY_STAGE: "pre-production-replaceable";
7
+ export declare const COLLAB_PROJECT_BACKUP_COORDINATION_FORMAT_VERSION: 3;
8
+ export declare const COLLAB_PROJECT_BACKUP_RECORD_KINDS: readonly ["project", "member", "request", "request-comment", "ticket", "ticket-comment", "ticket-relation", "ticket-mention", "cloud-event", "cloud-event-cursor", "idempotency-result", "principal-binding", "repository-placement", "lifecycle-journal", "authority-transfer-recovery", "transferred-membership-claim", "transfer-receipt-key", "transfer-claim-batch-receipt", "transfer-redemption-receipt", "terminal-principal", "terminal-responder-replay", "leave-former-principal-replay", "project-invitation", "protected-invitation-envelope", "transferred-membership-claim-override", "protected-claim-override-envelope", "manager-responsibility-offer", "project-membership-recovery", "secret-replay-tombstone", "terminal-responder", "protected-claim-envelope", "tombstone", "schema-catalog", "server-compatibility", "authority-volume-pair"];
7
9
  export type CollabProjectBackupRecordKind = typeof COLLAB_PROJECT_BACKUP_RECORD_KINDS[number];
8
10
  interface BackupRecordBase<Kind extends string, Value> {
9
11
  readonly kind: Kind;
@@ -11,7 +13,7 @@ interface BackupRecordBase<Kind extends string, Value> {
11
13
  readonly revision: number;
12
14
  readonly value: Value;
13
15
  }
14
- export type CollabProjectBackupLifecycleKind = 'authority-transfer' | 'backup' | 'delete' | 'export' | 'leave' | 'retire';
16
+ export type CollabProjectBackupLifecycleKind = 'authority-transfer' | 'backup' | 'create-project' | 'delete' | 'export' | 'join-project' | 'leave' | 'remove-member' | 'retire';
15
17
  export type CollabProjectBackupLifecycleState = 'active' | 'cancelled' | 'completed' | 'recovery-required';
16
18
  export interface CollabProjectBackupInactiveRepositoryPublication {
17
19
  readonly artifactKey: string;
@@ -140,7 +142,94 @@ export type CollabProjectBackupLeaveFormerPrincipalReplayRecord = BackupRecordBa
140
142
  readonly resultSha256: string | null;
141
143
  readonly state: 'completed' | 'recovering';
142
144
  }>;
143
- export type CollabProjectBackupContinuityRecord = CollabProjectBackupLifecycleJournalRecord | CollabProjectBackupAuthorityTransferRecoveryRecord | CollabProjectBackupTransferredMembershipClaimRecord | CollabProjectBackupTransferReceiptKeyRecord | CollabProjectBackupTransferClaimBatchReceiptRecord | CollabProjectBackupTransferRedemptionReceiptRecord | CollabProjectBackupTerminalPrincipalRecord | CollabProjectBackupTerminalResponderReplayRecord | CollabProjectBackupLeaveFormerPrincipalReplayRecord;
145
+ export type CollabProjectBackupInvitationRecord = BackupRecordBase<'project-invitation', {
146
+ readonly createdAt: CollabIsoTimestamp;
147
+ readonly expiresAt: CollabIsoTimestamp;
148
+ readonly idempotencyKey: string;
149
+ readonly invitationId: string;
150
+ readonly issuedByMemberId: CollabMemberId;
151
+ readonly projectId: CollabProjectId;
152
+ readonly requestFingerprint: string;
153
+ readonly revision: number;
154
+ readonly secretReplayExpiresAt: CollabIsoTimestamp;
155
+ readonly secretSha256: string;
156
+ readonly state: CollabProjectInvitationState;
157
+ readonly terminalAt: CollabIsoTimestamp | null;
158
+ }>;
159
+ export interface CollabProjectBackupProtectedSecretEnvelope {
160
+ readonly associatedDataSha256: string;
161
+ readonly ciphertext: string;
162
+ readonly createdAt: CollabIsoTimestamp;
163
+ readonly expiresAt: CollabIsoTimestamp;
164
+ readonly keyId: string;
165
+ readonly nonce: string;
166
+ readonly projectId: CollabProjectId;
167
+ }
168
+ export type CollabProjectBackupProtectedInvitationEnvelopeRecord = BackupRecordBase<'protected-invitation-envelope', CollabProjectBackupProtectedSecretEnvelope & {
169
+ readonly invitationId: string;
170
+ }>;
171
+ export type CollabProjectBackupTransferredMembershipClaimOverrideRecord = BackupRecordBase<'transferred-membership-claim-override', {
172
+ readonly claimGeneration: number;
173
+ readonly claimSha256: string;
174
+ readonly createdAt: CollabIsoTimestamp;
175
+ readonly expiresAt: CollabIsoTimestamp;
176
+ readonly idempotencyKey: string;
177
+ readonly managerMemberId: CollabMemberId;
178
+ readonly memberId: CollabMemberId;
179
+ readonly projectId: CollabProjectId;
180
+ readonly redemptionReceiptId: string | null;
181
+ readonly requestFingerprint: string;
182
+ readonly secretReplayExpiresAt: CollabIsoTimestamp;
183
+ readonly state: 'active' | 'redeemed' | 'revoked' | 'superseded' | 'expired';
184
+ readonly supersededClaimSha256: string;
185
+ readonly targetPrincipalId: string | null;
186
+ readonly transferId: string;
187
+ readonly updatedAt: CollabIsoTimestamp;
188
+ }>;
189
+ export type CollabProjectBackupProtectedClaimOverrideEnvelopeRecord = BackupRecordBase<'protected-claim-override-envelope', CollabProjectBackupProtectedSecretEnvelope & {
190
+ readonly claimGeneration: number;
191
+ readonly memberId: CollabMemberId;
192
+ readonly transferId: string;
193
+ }>;
194
+ export type CollabProjectBackupManagerResponsibilityOfferRecord = BackupRecordBase<'manager-responsibility-offer', {
195
+ readonly acknowledgedAt: CollabIsoTimestamp | null;
196
+ readonly expiresAt: CollabIsoTimestamp;
197
+ readonly idempotencyKey: string;
198
+ readonly managerSetGenerationAtOffer: number;
199
+ readonly offeredAt: CollabIsoTimestamp;
200
+ readonly offerId: string;
201
+ readonly projectId: CollabProjectId;
202
+ readonly purpose: CollabManagerResponsibilityPurpose;
203
+ readonly requestFingerprint: string;
204
+ readonly revision: number;
205
+ readonly sourceManagerMemberId: CollabMemberId;
206
+ readonly state: CollabManagerResponsibilityOfferState;
207
+ readonly targetMemberId: CollabMemberId;
208
+ readonly targetMembershipRevisionAtOffer: number;
209
+ readonly terminalAt: CollabIsoTimestamp | null;
210
+ }>;
211
+ export type CollabProjectBackupMembershipRecoveryRecord = BackupRecordBase<'project-membership-recovery', {
212
+ readonly expectedMainOid: string;
213
+ readonly expectedPersonalRefOid: string;
214
+ readonly invitationId: string | null;
215
+ readonly memberId: CollabMemberId;
216
+ readonly operationId: string;
217
+ readonly operationKind: 'create-project' | 'join-project' | 'remove-member';
218
+ readonly principalSha256: string | null;
219
+ readonly projectId: CollabProjectId;
220
+ readonly publicationMarkerSha256: string | null;
221
+ readonly repositoryPlanSha256: string | null;
222
+ readonly requestFingerprint: string;
223
+ }>;
224
+ export type CollabProjectBackupSecretReplayTombstoneRecord = BackupRecordBase<'secret-replay-tombstone', {
225
+ readonly actorMemberId: CollabMemberId;
226
+ readonly expiredAt: CollabIsoTimestamp;
227
+ readonly idempotencyKey: string;
228
+ readonly operation: Extract<CollabProjectMembershipOperation, 'createProjectInvitation' | 'reissueTransferredMembershipClaim'>;
229
+ readonly projectId: CollabProjectId;
230
+ readonly requestFingerprint: string;
231
+ }>;
232
+ export type CollabProjectBackupContinuityRecord = CollabProjectBackupLifecycleJournalRecord | CollabProjectBackupAuthorityTransferRecoveryRecord | CollabProjectBackupTransferredMembershipClaimRecord | CollabProjectBackupTransferReceiptKeyRecord | CollabProjectBackupTransferClaimBatchReceiptRecord | CollabProjectBackupTransferRedemptionReceiptRecord | CollabProjectBackupTerminalPrincipalRecord | CollabProjectBackupTerminalResponderReplayRecord | CollabProjectBackupLeaveFormerPrincipalReplayRecord | CollabProjectBackupInvitationRecord | CollabProjectBackupProtectedInvitationEnvelopeRecord | CollabProjectBackupTransferredMembershipClaimOverrideRecord | CollabProjectBackupProtectedClaimOverrideEnvelopeRecord | CollabProjectBackupManagerResponsibilityOfferRecord | CollabProjectBackupMembershipRecoveryRecord | CollabProjectBackupSecretReplayTombstoneRecord;
144
233
  type CollabProjectBackupBaseRecord = Exclude<CollabCheckpointBackupRecord, {
145
234
  readonly kind: 'lifecycle-state';
146
235
  }>;