@serve.zone/interfaces 31.9.0 → 32.0.1

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 (203) hide show
  1. package/changelog.md +476 -0
  2. package/dist_ts/00_commitinfo_data.js +3 -3
  3. package/dist_ts/appstore/types.d.ts +4 -6
  4. package/dist_ts/appstore/types.js +5 -5
  5. package/dist_ts/data/backup.d.ts +3 -26
  6. package/dist_ts/data/cluster.d.ts +36 -11
  7. package/dist_ts/data/cluster.js +33 -22
  8. package/dist_ts/data/clusteringress.d.ts +8 -0
  9. package/dist_ts/data/clusteringress.js +13 -8
  10. package/dist_ts/data/clusternode.d.ts +121 -74
  11. package/dist_ts/data/clusternode.js +109 -132
  12. package/dist_ts/data/coremail.d.ts +3 -7
  13. package/dist_ts/data/coremail.js +2 -2
  14. package/dist_ts/data/coremail.runtime.d.ts +0 -1
  15. package/dist_ts/data/coremail.runtime.js +5 -22
  16. package/dist_ts/data/deploymentadoption.d.ts +0 -2
  17. package/dist_ts/data/deploymentadoption.js +40 -6
  18. package/dist_ts/data/deploymentoperation.js +16 -3
  19. package/dist_ts/data/deploymentpreflight.d.ts +0 -2
  20. package/dist_ts/data/deploymentpreflight.js +1 -1
  21. package/dist_ts/data/immutableimage.d.ts +38 -21
  22. package/dist_ts/data/immutableimage.js +45 -5
  23. package/dist_ts/data/index.d.ts +1 -1
  24. package/dist_ts/data/isolatedrestore.d.ts +139 -21
  25. package/dist_ts/data/isolatedrestore.golden.d.ts +0 -1
  26. package/dist_ts/data/isolatedrestore.golden.js +6 -9
  27. package/dist_ts/data/isolatedrestore.js +176 -40
  28. package/dist_ts/data/mail.d.ts +1 -1
  29. package/dist_ts/data/networkaddressplan.d.ts +8 -8
  30. package/dist_ts/data/networkaddressplan.js +4 -4
  31. package/dist_ts/data/networkauthority.d.ts +20 -22
  32. package/dist_ts/data/networkauthority.js +26 -28
  33. package/dist_ts/data/networkcredential.d.ts +10 -10
  34. package/dist_ts/data/networkcredential.js +16 -16
  35. package/dist_ts/data/networkdelivery.d.ts +18 -18
  36. package/dist_ts/data/networkdelivery.js +16 -16
  37. package/dist_ts/data/networklease.d.ts +18 -7
  38. package/dist_ts/data/networklease.js +29 -7
  39. package/dist_ts/data/networknode.d.ts +2 -2
  40. package/dist_ts/data/networkprojection.d.ts +59 -60
  41. package/dist_ts/data/networkprojection.js +53 -57
  42. package/dist_ts/data/networkprotection.d.ts +27 -28
  43. package/dist_ts/data/networkprotection.js +36 -36
  44. package/dist_ts/data/networkrouter.d.ts +11 -11
  45. package/dist_ts/data/networkrouter.js +1 -1
  46. package/dist_ts/data/networksigning.d.ts +16 -18
  47. package/dist_ts/data/networksigning.js +20 -21
  48. package/dist_ts/data/nodecredential.d.ts +4 -6
  49. package/dist_ts/data/nodeenrollment.d.ts +35 -40
  50. package/dist_ts/data/nodeenrollment.js +57 -72
  51. package/dist_ts/data/privatenetwork.d.ts +21 -24
  52. package/dist_ts/data/privatenetwork.js +39 -54
  53. package/dist_ts/data/runtimeassignment.d.ts +50 -34
  54. package/dist_ts/data/runtimeassignment.js +79 -45
  55. package/dist_ts/data/runtimeconfig.d.ts +21 -22
  56. package/dist_ts/data/runtimeconfig.js +24 -24
  57. package/dist_ts/data/runtimesession.d.ts +100 -62
  58. package/dist_ts/data/runtimesession.js +98 -79
  59. package/dist_ts/data/runtimeterminalreceipt.d.ts +28 -29
  60. package/dist_ts/data/runtimeterminalreceipt.js +42 -42
  61. package/dist_ts/data/secret.d.ts +18 -25
  62. package/dist_ts/data/secret.js +12 -52
  63. package/dist_ts/data/servicecredential.d.ts +14 -16
  64. package/dist_ts/data/servicecredential.js +17 -28
  65. package/dist_ts/data/serviceruntime.d.ts +7 -7
  66. package/dist_ts/data/serviceruntime.js +4 -4
  67. package/dist_ts/data/sparknodereport.d.ts +27 -14
  68. package/dist_ts/data/sparknodereport.js +35 -28
  69. package/dist_ts/data/webpush.d.ts +0 -1
  70. package/dist_ts/index.d.ts +2 -1
  71. package/dist_ts/index.js +3 -2
  72. package/dist_ts/platform/objectstorageretention.d.ts +21 -24
  73. package/dist_ts/platform/objectstorageretention.js +10 -17
  74. package/dist_ts/platform/storage.d.ts +1 -3
  75. package/dist_ts/platform/storagemigration.d.ts +0 -7
  76. package/dist_ts/platform/storagemigration.golden.d.ts +0 -1
  77. package/dist_ts/platform/storagemigration.golden.js +8 -12
  78. package/dist_ts/platform/storagemigration.js +6 -51
  79. package/dist_ts/platform/types.d.ts +2 -2
  80. package/dist_ts/private/canonicaljson.d.ts +9 -1
  81. package/dist_ts/private/canonicaljson.js +14 -2
  82. package/dist_ts/private/dataproperties.d.ts +62 -0
  83. package/dist_ts/private/dataproperties.js +117 -0
  84. package/dist_ts/private/networkcontract.d.ts +10 -10
  85. package/dist_ts/private/networkcontract.js +1 -1
  86. package/dist_ts/private/releaseversion.d.ts +37 -0
  87. package/dist_ts/private/releaseversion.js +48 -0
  88. package/dist_ts/private/runtimepolicy.d.ts +2 -2
  89. package/dist_ts/private/runtimepolicy.js +1 -1
  90. package/dist_ts/private/tokenlist.d.ts +9 -0
  91. package/dist_ts/private/tokenlist.js +23 -0
  92. package/dist_ts/protocol.d.ts +137 -0
  93. package/dist_ts/protocol.js +255 -0
  94. package/dist_ts/requests/admin.d.ts +8 -8
  95. package/dist_ts/requests/backup.d.ts +102 -112
  96. package/dist_ts/requests/cluster.d.ts +10 -10
  97. package/dist_ts/requests/clusteringress.d.ts +9 -0
  98. package/dist_ts/requests/clusteringress.js +1 -1
  99. package/dist_ts/requests/config.d.ts +3 -3
  100. package/dist_ts/requests/corestore.d.ts +0 -3
  101. package/dist_ts/requests/corestore.js +5 -9
  102. package/dist_ts/requests/network.d.ts +30 -30
  103. package/dist_ts/requests/node.d.ts +15 -28
  104. package/dist_ts/requests/pallet.d.ts +13 -13
  105. package/dist_ts/requests/runtimesession.d.ts +53 -41
  106. package/dist_ts/requests/secret.d.ts +4 -5
  107. package/dist_ts/requests/secret.js +1 -5
  108. package/dist_ts/runtime.corestore.d.ts +56 -74
  109. package/dist_ts/runtime.corestore.databaseexportpackage.d.ts +30 -36
  110. package/dist_ts/runtime.corestore.databaseexportpackage.golden.d.ts +11 -12
  111. package/dist_ts/runtime.corestore.databaseexportpackage.golden.js +54 -71
  112. package/dist_ts/runtime.corestore.databaseexportpackage.js +9 -25
  113. package/dist_ts/runtime.corestore.js +35 -135
  114. package/dist_ts/runtime.corestore.relay.js +2 -7
  115. package/dist_ts/runtime.d.ts +38 -48
  116. package/dist_ts/runtime.js +20 -77
  117. package/dist_ts/runtime.networkprojection.d.ts +4 -4
  118. package/dist_ts/runtime.networkprojection.js +18 -18
  119. package/dist_ts/runtime.workloadinit.d.ts +23 -24
  120. package/dist_ts/runtime.workloadinit.js +6 -13
  121. package/package.json +2 -2
  122. package/readme.md +421 -270
  123. package/ts/00_commitinfo_data.ts +3 -3
  124. package/ts/appstore/types.ts +4 -6
  125. package/ts/data/backup.ts +3 -38
  126. package/ts/data/cluster.ts +51 -34
  127. package/ts/data/clusteringress.ts +12 -12
  128. package/ts/data/clusternode.ts +204 -232
  129. package/ts/data/coremail.runtime.ts +4 -21
  130. package/ts/data/coremail.ts +3 -7
  131. package/ts/data/deploymentadoption.ts +46 -4
  132. package/ts/data/deploymentoperation.ts +16 -1
  133. package/ts/data/deploymentpreflight.ts +0 -2
  134. package/ts/data/immutableimage.ts +71 -24
  135. package/ts/data/index.ts +1 -1
  136. package/ts/data/isolatedrestore.golden.ts +5 -9
  137. package/ts/data/isolatedrestore.ts +339 -54
  138. package/ts/data/mail.ts +1 -1
  139. package/ts/data/networkaddressplan.ts +13 -13
  140. package/ts/data/networkauthority.ts +42 -46
  141. package/ts/data/networkcredential.ts +24 -24
  142. package/ts/data/networkdelivery.ts +27 -27
  143. package/ts/data/networklease.ts +40 -13
  144. package/ts/data/networknode.ts +2 -2
  145. package/ts/data/networkprojection.ts +119 -124
  146. package/ts/data/networkprotection.ts +54 -55
  147. package/ts/data/networkrouter.ts +14 -14
  148. package/ts/data/networksigning.ts +29 -32
  149. package/ts/data/nodecredential.ts +4 -6
  150. package/ts/data/nodeenrollment.ts +96 -114
  151. package/ts/data/privatenetwork.ts +58 -74
  152. package/ts/data/runtimeassignment.ts +143 -94
  153. package/ts/data/runtimeconfig.ts +45 -46
  154. package/ts/data/runtimesession.ts +185 -138
  155. package/ts/data/runtimeterminalreceipt.ts +72 -73
  156. package/ts/data/secret.ts +28 -76
  157. package/ts/data/servicecredential.ts +33 -43
  158. package/ts/data/serviceruntime.ts +11 -11
  159. package/ts/data/sparknodereport.ts +48 -36
  160. package/ts/data/webpush.ts +0 -1
  161. package/ts/index.ts +2 -0
  162. package/ts/platform/objectstorageretention.ts +40 -54
  163. package/ts/platform/storage.ts +1 -3
  164. package/ts/platform/storagemigration.golden.ts +7 -11
  165. package/ts/platform/storagemigration.ts +5 -55
  166. package/ts/platform/types.ts +2 -2
  167. package/ts/private/canonicaljson.ts +13 -1
  168. package/ts/private/dataproperties.ts +139 -0
  169. package/ts/private/networkcontract.ts +9 -9
  170. package/ts/private/releaseversion.ts +70 -0
  171. package/ts/private/runtimepolicy.ts +2 -2
  172. package/ts/private/tokenlist.ts +30 -0
  173. package/ts/protocol.ts +364 -0
  174. package/ts/requests/admin.ts +11 -11
  175. package/ts/requests/backup.ts +112 -117
  176. package/ts/requests/cluster.ts +13 -13
  177. package/ts/requests/clusteringress.ts +9 -0
  178. package/ts/requests/config.ts +3 -3
  179. package/ts/requests/corestore.ts +4 -16
  180. package/ts/requests/network.ts +40 -40
  181. package/ts/requests/node.ts +21 -38
  182. package/ts/requests/pallet.ts +17 -17
  183. package/ts/requests/runtimesession.ts +63 -51
  184. package/ts/requests/secret.ts +5 -10
  185. package/ts/runtime.corestore.databaseexportpackage.golden.ts +77 -95
  186. package/ts/runtime.corestore.databaseexportpackage.ts +51 -73
  187. package/ts/runtime.corestore.relay.ts +1 -10
  188. package/ts/runtime.corestore.ts +118 -268
  189. package/ts/runtime.networkprojection.ts +30 -30
  190. package/ts/runtime.ts +83 -158
  191. package/ts/runtime.workloadinit.ts +36 -48
  192. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.d.ts +0 -902
  193. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.golden.d.ts +0 -35
  194. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.golden.js +0 -315
  195. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.js +0 -3315
  196. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.d.ts +0 -291
  197. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.d.ts +0 -30
  198. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.js +0 -408
  199. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.js +0 -1126
  200. package/ts/runtime.cloudlylegacydeploymentsettlement.golden.ts +0 -421
  201. package/ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.ts +0 -510
  202. package/ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.ts +0 -2470
  203. package/ts/runtime.cloudlylegacydeploymentsettlement.ts +0 -6630
@@ -1,14 +1,14 @@
1
1
  import type { TSha256Digest } from './immutableimage.js';
2
2
  import { isSha256Digest } from './immutableimage.js';
3
- import type { IRuntimeAssignmentReferenceV1, IRuntimeAssignmentV1 } from './runtimeassignment.js';
4
- import { evaluateRuntimeAssignmentV1, getRuntimeAssignmentV1Reference,
5
- snapshotRuntimeAssignmentV1 } from './runtimeassignment.js';
6
- import type { IRuntimeSessionBindingV1, TRuntimeObservationAuthorityUseV1 } from './runtimesession.js';
7
- import { bindRuntimeReporterSessionV1, snapshotRuntimeSessionBindingV1 } from './runtimesession.js';
3
+ import type { IRuntimeAssignmentReference, IRuntimeAssignment } from './runtimeassignment.js';
4
+ import { evaluateRuntimeAssignment, getRuntimeAssignmentReference,
5
+ snapshotRuntimeAssignment } from './runtimeassignment.js';
6
+ import type { IRuntimeSessionBinding, TRuntimeObservationAuthorityUse } from './runtimesession.js';
7
+ import { bindRuntimeReporterSession, snapshotRuntimeSessionBinding } from './runtimesession.js';
8
8
  import { canonicalizeStrictJson, createCanonicalJsonSha256Hex } from '../private/canonicaljson.js';
9
9
 
10
10
  /** Exact value-free native terminal evidence; terminal inspection does not collect addresses. */
11
- export interface IRuntimeAssignmentTerminalEvidenceV1 {
11
+ export interface IRuntimeAssignmentTerminalEvidence {
12
12
  phase: 'stopped' | 'absent';
13
13
  sandboxId: string | null;
14
14
  containerId: string | null;
@@ -28,12 +28,11 @@ export interface IRuntimeAssignmentTerminalEvidenceV1 {
28
28
  * liveness, storage relocation, whole-host, Docker/Coreflow absence, other
29
29
  * controller or cross-organization authority. It has no authoritative wall clock.
30
30
  */
31
- export interface IRuntimeAssignmentTerminalReceiptV1 {
32
- schemaVersion: 1;
31
+ export interface IRuntimeAssignmentTerminalReceipt {
33
32
  /** Exact generation 2 stop or generation 3 remove revision. */
34
- assignment: IRuntimeAssignmentReferenceV1;
33
+ assignment: IRuntimeAssignmentReference;
35
34
  /** Exact immutable generation 1 run revision. */
36
- runAssignment: IRuntimeAssignmentReferenceV1;
35
+ runAssignment: IRuntimeAssignmentReference;
37
36
  reporterSessionId: string;
38
37
  sequence: 1 | 2;
39
38
  operation: {
@@ -41,32 +40,32 @@ export interface IRuntimeAssignmentTerminalReceiptV1 {
41
40
  action: 'stop' | 'remove';
42
41
  bootId: string;
43
42
  status: 'completed';
44
- evidence: IRuntimeAssignmentTerminalEvidenceV1;
43
+ evidence: IRuntimeAssignmentTerminalEvidence;
45
44
  };
46
45
  /** Null for stop; the exact accepted stop receipt digest for remove. */
47
46
  previousReceiptDigest: TSha256Digest | null;
48
47
  digest: TSha256Digest;
49
48
  }
50
49
 
51
- export interface IReportRuntimeAssignmentTerminalReceiptRequestV1 {
50
+ export interface IReportRuntimeAssignmentTerminalReceiptRequest {
52
51
  /** Current physical peer binding, even when the immutable receipt is historical. */
53
- session: IRuntimeSessionBindingV1;
54
- receipt: IRuntimeAssignmentTerminalReceiptV1;
52
+ session: IRuntimeSessionBinding;
53
+ receipt: IRuntimeAssignmentTerminalReceipt;
55
54
  }
56
55
 
57
- export interface IReportRuntimeAssignmentTerminalReceiptResponseV1 {
56
+ export interface IReportRuntimeAssignmentTerminalReceiptResponse {
58
57
  /** Exact immutable body after the owning durable receipt transaction. */
59
- receipt: IRuntimeAssignmentTerminalReceiptV1;
58
+ receipt: IRuntimeAssignmentTerminalReceipt;
60
59
  /** Historical recovery never restores active readiness, routes or liveness. */
61
- authorityUse: TRuntimeObservationAuthorityUseV1;
60
+ authorityUse: TRuntimeObservationAuthorityUse;
62
61
  }
63
62
 
64
- export type TRuntimeAssignmentTerminalReceiptDecisionV1 =
65
- | { status: 'accept' | 'replay'; receipt: IRuntimeAssignmentTerminalReceiptV1 }
63
+ export type TRuntimeAssignmentTerminalReceiptDecision =
64
+ | { status: 'accept' | 'replay'; receipt: IRuntimeAssignmentTerminalReceipt }
66
65
  | { status: 'reject'; reason: 'invalid' | 'conflict' | 'sequence-gap' | 'predecessor-mismatch' };
67
66
 
68
- export const runtimeAssignmentTerminalReceiptV1Contract = Object.freeze({
69
- digestDomain: 'serve.zone/runtime-assignment-terminal-receipt-v1',
67
+ export const runtimeAssignmentTerminalReceiptContract = Object.freeze({
68
+ digestDomain: 'serve.zone/runtime-assignment-terminal-receipt',
70
69
  maximumReceiptCanonicalBytes: 16_384,
71
70
  maximumHistoryCanonicalBytes: 98_304,
72
71
  maximumReceipts: 2,
@@ -74,7 +73,7 @@ export const runtimeAssignmentTerminalReceiptV1Contract = Object.freeze({
74
73
  error: 'Runtime terminal receipt contract rejected.',
75
74
  } as const);
76
75
 
77
- const fail = (): never => { throw new Error(runtimeAssignmentTerminalReceiptV1Contract.error); };
76
+ const fail = (): never => { throw new Error(runtimeAssignmentTerminalReceiptContract.error); };
78
77
  function requireValue(conditionArg: unknown): asserts conditionArg { if (!conditionArg) fail(); }
79
78
  const safe = <T>(operationArg: () => T): T => { try { return operationArg(); } catch { return fail(); } };
80
79
  const canonical = (valueArg: unknown): string => canonicalizeStrictJson(valueArg, fail);
@@ -89,7 +88,7 @@ const digest = (valueArg: unknown): TSha256Digest => {
89
88
  };
90
89
 
91
90
  /** Bounded inert copy before hashing or calling any nested validator. */
92
- const capture = (valueArg: unknown, maximumBytesArg: number = runtimeAssignmentTerminalReceiptV1Contract.maximumHistoryCanonicalBytes): unknown => safe(() => {
91
+ const capture = (valueArg: unknown, maximumBytesArg: number = runtimeAssignmentTerminalReceiptContract.maximumHistoryCanonicalBytes): unknown => safe(() => {
93
92
  let nodes = 0;
94
93
  let bytes = 0;
95
94
  const ancestors = new Set<object>();
@@ -141,13 +140,13 @@ const record = (valueArg: unknown, keysArg: string[]): Record<string, unknown> =
141
140
  requireValue(keys.length === keysArg.length && keys.every((key) => keysArg.includes(key)));
142
141
  return valueArg as Record<string, unknown>;
143
142
  };
144
- const reference = (valueArg: unknown): IRuntimeAssignmentReferenceV1 => {
143
+ const reference = (valueArg: unknown): IRuntimeAssignmentReference => {
145
144
  const value = record(valueArg, ['assignmentId', 'generation', 'digest']);
146
145
  requireValue(typeof value.generation === 'number' && Number.isSafeInteger(value.generation)
147
146
  && value.generation >= 1 && value.generation <= 3);
148
147
  return { assignmentId: identifier(value.assignmentId), generation: value.generation, digest: digest(value.digest) };
149
148
  };
150
- const evidence = (valueArg: unknown): IRuntimeAssignmentTerminalEvidenceV1 => {
149
+ const evidence = (valueArg: unknown): IRuntimeAssignmentTerminalEvidence => {
151
150
  const value = record(valueArg, ['phase', 'sandboxId', 'containerId', 'imageConfigDigest', 'ipAddresses', 'exitCode']);
152
151
  requireValue(value.phase === 'absent' || value.phase === 'stopped');
153
152
  for (const field of ['sandboxId', 'containerId']) requireValue(value[field] === null
@@ -161,35 +160,35 @@ const evidence = (valueArg: unknown): IRuntimeAssignmentTerminalEvidenceV1 => {
161
160
  ? value.sandboxId === null && value.containerId === null && value.imageConfigDigest === null && value.exitCode === null
162
161
  : value.sandboxId !== null);
163
162
  requireValue(value.containerId !== null || (value.imageConfigDigest === null && value.exitCode === null));
164
- return value as unknown as IRuntimeAssignmentTerminalEvidenceV1;
163
+ return value as unknown as IRuntimeAssignmentTerminalEvidence;
165
164
  };
166
165
 
167
166
  /** Detached exact-schema assertion only; digest, journal provenance and authority remain unverified. */
168
- export const snapshotRuntimeAssignmentTerminalReceiptV1 = (valueArg: unknown): IRuntimeAssignmentTerminalReceiptV1 => safe(() => {
169
- const value = record(capture(valueArg, runtimeAssignmentTerminalReceiptV1Contract.maximumReceiptCanonicalBytes),
170
- ['schemaVersion', 'assignment', 'runAssignment', 'reporterSessionId', 'sequence', 'operation', 'previousReceiptDigest', 'digest']);
167
+ export const snapshotRuntimeAssignmentTerminalReceipt = (valueArg: unknown): IRuntimeAssignmentTerminalReceipt => safe(() => {
168
+ const value = record(capture(valueArg, runtimeAssignmentTerminalReceiptContract.maximumReceiptCanonicalBytes),
169
+ ['assignment', 'runAssignment', 'reporterSessionId', 'sequence', 'operation', 'previousReceiptDigest', 'digest']);
171
170
  const assignment = reference(value.assignment);
172
171
  const runAssignment = reference(value.runAssignment);
173
172
  const operation = record(value.operation, ['id', 'action', 'bootId', 'status', 'evidence']);
174
173
  const terminalEvidence = evidence(operation.evidence);
175
- requireValue(value.schemaVersion === 1 && (value.sequence === 1 || value.sequence === 2)
174
+ requireValue((value.sequence === 1 || value.sequence === 2)
176
175
  && operation.status === 'completed' && assignment.generation === value.sequence + 1
177
176
  && runAssignment.generation === 1 && runAssignment.assignmentId === assignment.assignmentId);
178
177
  requireValue(typeof operation.bootId === 'string'
179
178
  && /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/.test(operation.bootId));
180
179
  requireValue(value.sequence === 1 ? operation.action === 'stop' && value.previousReceiptDigest === null
181
180
  : operation.action === 'remove' && terminalEvidence.phase === 'absent' && value.previousReceiptDigest !== null);
182
- return { schemaVersion: 1, assignment, runAssignment, reporterSessionId: identifier(value.reporterSessionId),
181
+ return { assignment, runAssignment, reporterSessionId: identifier(value.reporterSessionId),
183
182
  sequence: value.sequence, operation: { id: identifier(operation.id), action: operation.action as 'stop' | 'remove',
184
183
  bootId: operation.bootId, status: 'completed', evidence: terminalEvidence },
185
184
  previousReceiptDigest: value.previousReceiptDigest === null ? null : digest(value.previousReceiptDigest), digest: digest(value.digest) };
186
185
  });
187
186
 
188
187
  /** Bounded exact receipt history for synchronous persistence assertions; hashes remain unchecked. */
189
- export const snapshotRuntimeAssignmentTerminalReceiptHistoryV1 = (valueArg: unknown): IRuntimeAssignmentTerminalReceiptV1[] => safe(() => {
188
+ export const snapshotRuntimeAssignmentTerminalReceiptHistory = (valueArg: unknown): IRuntimeAssignmentTerminalReceipt[] => safe(() => {
190
189
  const values = capture(valueArg);
191
- requireValue(Array.isArray(values) && values.length <= runtimeAssignmentTerminalReceiptV1Contract.maximumReceipts);
192
- const receipts = values.map(snapshotRuntimeAssignmentTerminalReceiptV1);
190
+ requireValue(Array.isArray(values) && values.length <= runtimeAssignmentTerminalReceiptContract.maximumReceipts);
191
+ const receipts = values.map(snapshotRuntimeAssignmentTerminalReceipt);
193
192
  for (const [index, receipt] of receipts.entries()) {
194
193
  requireValue(receipt.sequence === index + 1);
195
194
  if (index > 0) requireValue(receipt.previousReceiptDigest === receipts[0].digest
@@ -199,41 +198,41 @@ export const snapshotRuntimeAssignmentTerminalReceiptHistoryV1 = (valueArg: unkn
199
198
  return receipts;
200
199
  });
201
200
 
202
- const assignments = (valueArg: unknown): IRuntimeAssignmentV1[] => {
201
+ const assignments = (valueArg: unknown): IRuntimeAssignment[] => {
203
202
  const values = capture(valueArg);
204
203
  requireValue(Array.isArray(values) && values.length >= 2
205
- && values.length <= runtimeAssignmentTerminalReceiptV1Contract.maximumAssignmentRevisions);
206
- return values.map(snapshotRuntimeAssignmentV1);
204
+ && values.length <= runtimeAssignmentTerminalReceiptContract.maximumAssignmentRevisions);
205
+ return values.map(snapshotRuntimeAssignment);
207
206
  };
208
- const checkAssignmentHistory = async (historyArg: IRuntimeAssignmentV1[]): Promise<void> => {
207
+ const checkAssignmentHistory = async (historyArg: IRuntimeAssignment[]): Promise<void> => {
209
208
  const run = historyArg[0];
210
209
  const scope = { controller: run.controller, organizationId: run.organizationId,
211
210
  nodeId: run.nodeId, runtimeNamespace: run.runtimeNamespace };
212
211
  for (const [index, assignment] of historyArg.entries()) {
213
212
  requireValue(assignment.generation === index + 1
214
213
  && assignment.disposition === ['run', 'stop-preserve', 'remove-runtime-preserve-storage'][index]);
215
- requireValue((await evaluateRuntimeAssignmentV1(assignment, index === 0 ? null : historyArg[index - 1], scope)).status === 'accept');
214
+ requireValue((await evaluateRuntimeAssignment(assignment, index === 0 ? null : historyArg[index - 1], scope)).status === 'accept');
216
215
  }
217
216
  };
218
- const computeSnapshotDigest = async (receiptArg: IRuntimeAssignmentTerminalReceiptV1): Promise<TSha256Digest> => {
217
+ const computeSnapshotDigest = async (receiptArg: IRuntimeAssignmentTerminalReceipt): Promise<TSha256Digest> => {
219
218
  const { digest: _digest, ...payload } = receiptArg;
220
219
  return `sha256:${await createCanonicalJsonSha256Hex(canonical({
221
- domain: runtimeAssignmentTerminalReceiptV1Contract.digestDomain, payload,
220
+ domain: runtimeAssignmentTerminalReceiptContract.digestDomain, payload,
222
221
  }), fail)}`;
223
222
  };
224
223
  /** Domain-separated exact body digest; captures before asynchronous hashing. */
225
- export const computeRuntimeAssignmentTerminalReceiptV1Digest = async (
226
- valueArg: IRuntimeAssignmentTerminalReceiptV1,
224
+ export const computeRuntimeAssignmentTerminalReceiptDigest = async (
225
+ valueArg: IRuntimeAssignmentTerminalReceipt,
227
226
  ): Promise<TSha256Digest> => {
228
- try { return await computeSnapshotDigest(snapshotRuntimeAssignmentTerminalReceiptV1(valueArg)); } catch { return fail(); }
227
+ try { return await computeSnapshotDigest(snapshotRuntimeAssignmentTerminalReceipt(valueArg)); } catch { return fail(); }
229
228
  };
230
229
  const checkReceipt = async (
231
- receiptArg: IRuntimeAssignmentTerminalReceiptV1, historyArg: IRuntimeAssignmentV1[],
232
- previousArg: IRuntimeAssignmentTerminalReceiptV1 | null,
230
+ receiptArg: IRuntimeAssignmentTerminalReceipt, historyArg: IRuntimeAssignment[],
231
+ previousArg: IRuntimeAssignmentTerminalReceipt | null,
233
232
  ): Promise<void> => {
234
233
  requireValue(historyArg.length > receiptArg.sequence
235
- && canonical(receiptArg.runAssignment) === canonical(getRuntimeAssignmentV1Reference(historyArg[0]))
236
- && canonical(receiptArg.assignment) === canonical(getRuntimeAssignmentV1Reference(historyArg[receiptArg.sequence]))
234
+ && canonical(receiptArg.runAssignment) === canonical(getRuntimeAssignmentReference(historyArg[0]))
235
+ && canonical(receiptArg.assignment) === canonical(getRuntimeAssignmentReference(historyArg[receiptArg.sequence]))
237
236
  && receiptArg.digest === await computeSnapshotDigest(receiptArg));
238
237
  if (receiptArg.sequence === 1) requireValue(previousArg === null);
239
238
  else {
@@ -244,17 +243,17 @@ const checkReceipt = async (
244
243
  };
245
244
 
246
245
  /** Full immutable run/stop/remove chain and exact prior stop receipt are mandatory for removal. */
247
- export const validateRuntimeAssignmentTerminalReceiptV1 = async (
246
+ export const validateRuntimeAssignmentTerminalReceipt = async (
248
247
  valueArg: unknown, assignmentHistoryArg: unknown, previousReceiptArg: unknown,
249
248
  ): Promise<string[]> => {
250
249
  try {
251
- const receipt = snapshotRuntimeAssignmentTerminalReceiptV1(valueArg);
250
+ const receipt = snapshotRuntimeAssignmentTerminalReceipt(valueArg);
252
251
  const history = assignments(assignmentHistoryArg);
253
- const previous = previousReceiptArg === null ? null : snapshotRuntimeAssignmentTerminalReceiptV1(previousReceiptArg);
252
+ const previous = previousReceiptArg === null ? null : snapshotRuntimeAssignmentTerminalReceipt(previousReceiptArg);
254
253
  await checkAssignmentHistory(history);
255
254
  await checkReceipt(receipt, history, previous);
256
255
  return [];
257
- } catch { return [runtimeAssignmentTerminalReceiptV1Contract.error]; }
256
+ } catch { return [runtimeAssignmentTerminalReceiptContract.error]; }
258
257
  };
259
258
 
260
259
  /**
@@ -263,19 +262,19 @@ export const validateRuntimeAssignmentTerminalReceiptV1 = async (
263
262
  * only a previously persisted exact body can replay after the incumbent changes.
264
263
  * The helper cannot prove either condition. Retain both bodies after removal.
265
264
  */
266
- export const evaluateRuntimeAssignmentTerminalReceiptV1 = async (
265
+ export const evaluateRuntimeAssignmentTerminalReceipt = async (
267
266
  valueArg: unknown, acceptedHistoryArg: unknown, assignmentHistoryArg: unknown,
268
- ): Promise<TRuntimeAssignmentTerminalReceiptDecisionV1> => {
267
+ ): Promise<TRuntimeAssignmentTerminalReceiptDecision> => {
269
268
  try {
270
- const receipt = snapshotRuntimeAssignmentTerminalReceiptV1(valueArg);
271
- const accepted = snapshotRuntimeAssignmentTerminalReceiptHistoryV1(acceptedHistoryArg);
269
+ const receipt = snapshotRuntimeAssignmentTerminalReceipt(valueArg);
270
+ const accepted = snapshotRuntimeAssignmentTerminalReceiptHistory(acceptedHistoryArg);
272
271
  const history = assignments(assignmentHistoryArg);
273
272
  await checkAssignmentHistory(history);
274
273
  for (const existing of accepted) await checkReceipt(existing, history, existing.sequence === 1 ? null : accepted[0]);
275
274
  if (receipt.digest !== await computeSnapshotDigest(receipt)
276
275
  || history.length <= receipt.sequence
277
- || canonical(receipt.runAssignment) !== canonical(getRuntimeAssignmentV1Reference(history[0]))
278
- || canonical(receipt.assignment) !== canonical(getRuntimeAssignmentV1Reference(history[receipt.sequence]))) {
276
+ || canonical(receipt.runAssignment) !== canonical(getRuntimeAssignmentReference(history[0]))
277
+ || canonical(receipt.assignment) !== canonical(getRuntimeAssignmentReference(history[receipt.sequence]))) {
279
278
  return { status: 'reject', reason: 'invalid' };
280
279
  }
281
280
  const existing = accepted[receipt.sequence - 1];
@@ -288,18 +287,18 @@ export const evaluateRuntimeAssignmentTerminalReceiptV1 = async (
288
287
  } catch { return { status: 'reject', reason: 'invalid' }; }
289
288
  };
290
289
 
291
- export const snapshotReportRuntimeAssignmentTerminalReceiptRequestV1 = (
290
+ export const snapshotReportRuntimeAssignmentTerminalReceiptRequest = (
292
291
  valueArg: unknown,
293
- ): IReportRuntimeAssignmentTerminalReceiptRequestV1 => safe(() => {
292
+ ): IReportRuntimeAssignmentTerminalReceiptRequest => safe(() => {
294
293
  const value = record(capture(valueArg), ['session', 'receipt']);
295
- return { session: snapshotRuntimeSessionBindingV1(value.session), receipt: snapshotRuntimeAssignmentTerminalReceiptV1(value.receipt) };
294
+ return { session: snapshotRuntimeSessionBinding(value.session), receipt: snapshotRuntimeAssignmentTerminalReceipt(value.receipt) };
296
295
  });
297
- export const snapshotReportRuntimeAssignmentTerminalReceiptResponseV1 = (
296
+ export const snapshotReportRuntimeAssignmentTerminalReceiptResponse = (
298
297
  valueArg: unknown,
299
- ): IReportRuntimeAssignmentTerminalReceiptResponseV1 => safe(() => {
298
+ ): IReportRuntimeAssignmentTerminalReceiptResponse => safe(() => {
300
299
  const value = record(capture(valueArg), ['receipt', 'authorityUse']);
301
300
  requireValue(value.authorityUse === 'current-session' || value.authorityUse === 'historical-recovery');
302
- return { receipt: snapshotRuntimeAssignmentTerminalReceiptV1(value.receipt), authorityUse: value.authorityUse };
301
+ return { receipt: snapshotRuntimeAssignmentTerminalReceipt(value.receipt), authorityUse: value.authorityUse };
303
302
  });
304
303
 
305
304
  /**
@@ -308,16 +307,16 @@ export const snapshotReportRuntimeAssignmentTerminalReceiptResponseV1 = (
308
307
  * come from the durable owner. This binds content; it does not authenticate,
309
308
  * prove the local operation join, advance CAS, or admit a replacement.
310
309
  */
311
- export const bindReportRuntimeAssignmentTerminalReceiptRequestV1 = async (
310
+ export const bindReportRuntimeAssignmentTerminalReceiptRequest = async (
312
311
  valueArg: unknown, assignmentHistoryArg: unknown, previousReceiptArg: unknown,
313
312
  trustedSessionArg: unknown, reporterHistoryArg: unknown,
314
- ): Promise<{ request: IReportRuntimeAssignmentTerminalReceiptRequestV1; authorityUse: TRuntimeObservationAuthorityUseV1 }> => {
313
+ ): Promise<{ request: IReportRuntimeAssignmentTerminalReceiptRequest; authorityUse: TRuntimeObservationAuthorityUse }> => {
315
314
  try {
316
- const request = snapshotReportRuntimeAssignmentTerminalReceiptRequestV1(valueArg);
315
+ const request = snapshotReportRuntimeAssignmentTerminalReceiptRequest(valueArg);
317
316
  const history = assignments(assignmentHistoryArg);
318
- const previous = previousReceiptArg === null ? null : snapshotRuntimeAssignmentTerminalReceiptV1(previousReceiptArg);
317
+ const previous = previousReceiptArg === null ? null : snapshotRuntimeAssignmentTerminalReceipt(previousReceiptArg);
319
318
  requireValue(history.length > request.receipt.sequence);
320
- const binding = bindRuntimeReporterSessionV1(request.session, request.receipt.reporterSessionId,
319
+ const binding = bindRuntimeReporterSession(request.session, request.receipt.reporterSessionId,
321
320
  history[request.receipt.sequence], trustedSessionArg, reporterHistoryArg);
322
321
  await checkAssignmentHistory(history);
323
322
  await checkReceipt(request.receipt, history, previous);
@@ -326,11 +325,11 @@ export const bindReportRuntimeAssignmentTerminalReceiptRequestV1 = async (
326
325
  };
327
326
 
328
327
  /** Exact ACK of the immutable outbox body; no rewritten session, operation or chain. */
329
- export const bindReportRuntimeAssignmentTerminalReceiptResponseV1 = (
328
+ export const bindReportRuntimeAssignmentTerminalReceiptResponse = (
330
329
  valueArg: unknown, requestArg: unknown,
331
- ): IReportRuntimeAssignmentTerminalReceiptResponseV1 => safe(() => {
332
- const response = snapshotReportRuntimeAssignmentTerminalReceiptResponseV1(valueArg);
333
- const request = snapshotReportRuntimeAssignmentTerminalReceiptRequestV1(requestArg);
330
+ ): IReportRuntimeAssignmentTerminalReceiptResponse => safe(() => {
331
+ const response = snapshotReportRuntimeAssignmentTerminalReceiptResponse(valueArg);
332
+ const request = snapshotReportRuntimeAssignmentTerminalReceiptRequest(requestArg);
334
333
  requireValue(canonical(response.receipt) === canonical(request.receipt)
335
334
  && response.authorityUse === (request.receipt.reporterSessionId === request.session.reporterSessionId
336
335
  ? 'current-session' : 'historical-recovery'));