@serve.zone/interfaces 32.14.0 → 32.15.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.
@@ -2,6 +2,8 @@ import type { TSha256Digest } from './immutableimage.js';
2
2
  import type { IClusterRuntimeReference, TClusterRuntimePhase } from './clusterruntime.js';
3
3
  import type { IRuntimeAssignmentReference, IRuntimeAuthorityReference } from './runtimeassignment.js';
4
4
  import type { IRuntimeSessionBinding } from './runtimesession.js';
5
+ import type { IRuntimeStorageClaim, IRuntimeStorageClaimIntent } from './runtimestorageclaim.js';
6
+ import type { IAppStoreFilesystemStorageRequest } from '../appstore/types.js';
5
7
  import type { ISecretVersionReference } from './secret.js';
6
8
  /**
7
9
  * A server-owned accepted record reference. It contains no bearer, secret, or proof boolean.
@@ -210,6 +212,97 @@ export interface IFleetCutoverVolumeHandoffIntent {
210
212
  acceptedAt: number;
211
213
  digest: TSha256Digest;
212
214
  }
215
+ export interface IFleetCutoverPersistentVolumeMountDescriptor extends IFleetCutoverMountDescriptor {
216
+ type: 'volume';
217
+ classification: 'persistent-volume';
218
+ readOnly: false;
219
+ }
220
+ /**
221
+ * Cloudly-owned desired handoff prepared from authenticated legacy observations. Observed Docker
222
+ * source identity is not physical storage lineage; Corestore proves lineage later under the held
223
+ * native attachment fence.
224
+ */
225
+ export interface IFleetCutoverPreparedVolumeHandoffIntent {
226
+ id: string;
227
+ generation: number;
228
+ clusterId: string;
229
+ nodeId: string;
230
+ serviceId: string;
231
+ volumeId: string;
232
+ observedMount: IFleetCutoverPersistentVolumeMountDescriptor;
233
+ claimIntent: IRuntimeStorageClaimIntent;
234
+ runtime: IClusterRuntimeReference & {
235
+ phase: 'draining';
236
+ };
237
+ scope: IFleetCutoverAcceptedEvidenceReference;
238
+ targetSet: IFleetCutoverTargetSetReference;
239
+ legacyStorageEvidence: IFleetCutoverAcceptedEvidenceReference;
240
+ sourceNodeObservation: IFleetCutoverAcceptedEvidenceReference;
241
+ acceptedAt: number;
242
+ digest: TSha256Digest;
243
+ }
244
+ export interface IFleetCutoverPreparedVolumeHandoffUpsert {
245
+ nodeId: string;
246
+ serviceId: string;
247
+ mountIdentityDigest: TSha256Digest;
248
+ request: IAppStoreFilesystemStorageRequest & {
249
+ accessMode: 'ReadWriteOnce';
250
+ reclaimPolicy: 'retain';
251
+ };
252
+ }
253
+ /** One bounded CAS mutation; the durable aggregate may contain many such 32-entry batches. */
254
+ export interface IFleetCutoverPreparedVolumeHandoffMutation {
255
+ mutationId: string;
256
+ clusterId: string;
257
+ currentRuntime: IClusterRuntimeReference & {
258
+ phase: 'draining';
259
+ };
260
+ scope: IFleetCutoverAcceptedEvidenceReference;
261
+ targetSet: IFleetCutoverTargetSetReference;
262
+ expectedAggregate: IFleetCutoverAcceptedEvidenceReference | null;
263
+ upserts: IFleetCutoverPreparedVolumeHandoffUpsert[];
264
+ removals: IFleetCutoverAcceptedEvidenceReference[];
265
+ }
266
+ /**
267
+ * Revisioned header for one complete expected set. It intentionally contains no page references:
268
+ * immutable pages bind back to this exact revision, avoiding an aggregate/page digest cycle.
269
+ */
270
+ export interface IFleetCutoverPreparedVolumeHandoffAggregate {
271
+ id: string;
272
+ generation: number;
273
+ previous: IFleetCutoverAcceptedEvidenceReference | null;
274
+ clusterId: string;
275
+ runtime: IClusterRuntimeReference & {
276
+ phase: 'draining';
277
+ };
278
+ scope: IFleetCutoverAcceptedEvidenceReference;
279
+ targetSet: IFleetCutoverTargetSetReference;
280
+ state: 'incomplete' | 'complete';
281
+ requiredHandoffCount: number;
282
+ handoffCount: number;
283
+ pageCount: number;
284
+ handoffSetDigest: TSha256Digest;
285
+ acceptedAt: number;
286
+ digest: TSha256Digest;
287
+ }
288
+ /** One immutable 1..32-entry page pinned to one aggregate revision. */
289
+ export interface IFleetCutoverPreparedVolumeHandoffPage {
290
+ id: string;
291
+ generation: 1;
292
+ aggregate: IFleetCutoverAcceptedEvidenceReference;
293
+ pageIndex: number;
294
+ handoffs: IFleetCutoverPreparedVolumeHandoffPageReference[];
295
+ handoffSetPageDigest: TSha256Digest;
296
+ digest: TSha256Digest;
297
+ }
298
+ /** Immutable page membership commits both the handoff revision and its owning physical node. */
299
+ export interface IFleetCutoverPreparedVolumeHandoffPageReference extends IFleetCutoverAcceptedEvidenceReference {
300
+ nodeId: string;
301
+ }
302
+ export interface IFleetCutoverPreparedVolumeHandoffPageSetEntry {
303
+ pageIndex: number;
304
+ handoffSetPageDigest: TSha256Digest;
305
+ }
213
306
  interface IFleetCutoverVolumeFenceBase {
214
307
  id: string;
215
308
  generation: number;
@@ -258,6 +351,43 @@ export interface IFleetCutoverCorestoreAdoptionReceipt {
258
351
  acceptedAt: number;
259
352
  digest: TSha256Digest;
260
353
  }
354
+ /** Current-session Cloudly grant for one post-Pallet adoption attempt. */
355
+ export interface IFleetCutoverStorageAdoptionGrant {
356
+ id: string;
357
+ generation: number;
358
+ previous: IFleetCutoverAcceptedEvidenceReference | null;
359
+ clusterId: string;
360
+ nodeId: string;
361
+ serviceId: string;
362
+ volumeId: string;
363
+ observedMount: IFleetCutoverPersistentVolumeMountDescriptor;
364
+ runtime: IClusterRuntimeReference & {
365
+ phase: 'pallet';
366
+ };
367
+ session: IRuntimeSessionBinding;
368
+ handoffIntent: IFleetCutoverAcceptedEvidenceReference;
369
+ palletFence: IFleetCutoverAcceptedEvidenceReference;
370
+ acceptedAt: number;
371
+ digest: TSha256Digest;
372
+ }
373
+ /** Exact result Pallet persists only after revalidating the current grant following adoption. */
374
+ export interface IFleetCutoverStorageAdoptionBundle {
375
+ grant: IFleetCutoverStorageAdoptionGrant;
376
+ fence: Extract<TFleetCutoverVolumeFence, {
377
+ state: 'consumed';
378
+ }>;
379
+ adoption: IFleetCutoverCorestoreAdoptionReceipt;
380
+ claim: IRuntimeStorageClaim;
381
+ }
382
+ /** One authenticated Spark reporter's complete bounded subset of a full immutable aggregate page. */
383
+ export interface IFleetCutoverHeldVolumeFenceEvidencePage {
384
+ aggregate: IFleetCutoverAcceptedEvidenceReference;
385
+ page: IFleetCutoverPreparedVolumeHandoffPage;
386
+ nodeId: string;
387
+ fences: Extract<TFleetCutoverVolumeFence, {
388
+ state: 'held';
389
+ }>[];
390
+ }
261
391
  export interface IFleetCutoverCoreflowRetirementEvidence {
262
392
  id: string;
263
393
  generation: number;
@@ -424,6 +554,11 @@ export declare const fleetCutoverContract: Readonly<{
424
554
  readonly maximumNodes: 1024;
425
555
  readonly maximumContainersPerNode: 512;
426
556
  readonly maximumMountsPerOwner: 32;
557
+ readonly maximumPreparedVolumeHandoffMutationEntries: 32;
558
+ /** Every admitted task has one node placement and at most 32 mounts: 4096 * 32. */
559
+ readonly maximumPreparedVolumeHandoffs: number;
560
+ readonly maximumPreparedVolumeHandoffPages: number;
561
+ readonly maximumHeldVolumeFenceEvidenceBytes: 131072;
427
562
  readonly maximumClassifications: 512;
428
563
  readonly observationFreshnessMs: 300000;
429
564
  readonly mountSourceIdentityDigestDomain: "serve.zone/fleet-cutover-mount-source-identity";
@@ -435,8 +570,14 @@ export declare const fleetCutoverContract: Readonly<{
435
570
  readonly censusDigestDomain: "serve.zone/fleet-cutover-census";
436
571
  readonly scopeDigestDomain: "serve.zone/fleet-cutover-scope";
437
572
  readonly volumeHandoffDigestDomain: "serve.zone/fleet-cutover-volume-handoff";
573
+ readonly preparedVolumeHandoffDigestDomain: "serve.zone/fleet-cutover-prepared-volume-handoff";
574
+ readonly preparedVolumeHandoffAggregateDigestDomain: "serve.zone/fleet-cutover-prepared-volume-handoff-aggregate";
575
+ readonly preparedVolumeHandoffPageContentDigestDomain: "serve.zone/fleet-cutover-prepared-volume-handoff-page-content";
576
+ readonly preparedVolumeHandoffPageDigestDomain: "serve.zone/fleet-cutover-prepared-volume-handoff-page";
577
+ readonly preparedVolumeHandoffSetDigestDomain: "serve.zone/fleet-cutover-prepared-volume-handoff-set";
438
578
  readonly volumeFenceDigestDomain: "serve.zone/fleet-cutover-volume-fence";
439
579
  readonly corestoreAdoptionDigestDomain: "serve.zone/fleet-cutover-corestore-adoption";
580
+ readonly storageAdoptionGrantDigestDomain: "serve.zone/fleet-cutover-storage-adoption-grant";
440
581
  readonly coreflowRetirementDigestDomain: "serve.zone/fleet-cutover-coreflow-retirement";
441
582
  readonly ingressDesignationDigestDomain: "serve.zone/fleet-cutover-ingress-designation";
442
583
  readonly ingressAuthorityDigestDomain: "serve.zone/fleet-cutover-ingress-authority";
@@ -467,6 +608,12 @@ export declare const fleetCutoverEvidenceReferenceOf: (valueArg: {
467
608
  generation: number;
468
609
  digest: TSha256Digest;
469
610
  }) => IFleetCutoverAcceptedEvidenceReference;
611
+ export declare const fleetCutoverPreparedVolumeHandoffPageReferenceOf: (valueArg: {
612
+ id: string;
613
+ generation: number;
614
+ digest: TSha256Digest;
615
+ nodeId: string;
616
+ }) => IFleetCutoverPreparedVolumeHandoffPageReference;
470
617
  export declare const snapshotFleetCutoverAcceptedEvidenceReference: (valueArg: unknown) => IFleetCutoverAcceptedEvidenceReference;
471
618
  export declare const snapshotFleetCutoverScope: (valueArg: unknown) => IFleetCutoverScope;
472
619
  export declare const computeFleetCutoverScopeDigest: (valueArg: unknown) => Promise<TSha256Digest>;
@@ -475,6 +622,26 @@ export declare const snapshotFleetCutoverScopeClassificationRequest: (valueArg:
475
622
  export declare const snapshotFleetCutoverTargetSetReference: (valueArg: unknown) => IFleetCutoverTargetSetReference;
476
623
  export declare const snapshotFleetCutoverVolumeHandoffIntent: (valueArg: unknown) => IFleetCutoverVolumeHandoffIntent;
477
624
  export declare const computeFleetCutoverVolumeHandoffDigest: (valueArg: unknown) => Promise<TSha256Digest>;
625
+ export declare const snapshotFleetCutoverPreparedVolumeHandoffIntent: (valueArg: unknown) => IFleetCutoverPreparedVolumeHandoffIntent;
626
+ export declare const computeFleetCutoverPreparedVolumeHandoffDigest: (valueArg: unknown) => Promise<TSha256Digest>;
627
+ export declare const validateFleetCutoverPreparedVolumeHandoffIntent: (valueArg: unknown) => Promise<string[]>;
628
+ export declare const snapshotFleetCutoverPreparedVolumeHandoffMutation: (valueArg: unknown) => IFleetCutoverPreparedVolumeHandoffMutation;
629
+ export declare const snapshotFleetCutoverPreparedVolumeHandoffAggregate: (valueArg: unknown) => IFleetCutoverPreparedVolumeHandoffAggregate;
630
+ export declare const computeFleetCutoverPreparedVolumeHandoffAggregateDigest: (valueArg: unknown) => Promise<TSha256Digest>;
631
+ export declare const validateFleetCutoverPreparedVolumeHandoffAggregate: (valueArg: unknown) => Promise<string[]>;
632
+ export declare const snapshotFleetCutoverPreparedVolumeHandoffPage: (valueArg: unknown) => IFleetCutoverPreparedVolumeHandoffPage;
633
+ export declare const computeFleetCutoverPreparedVolumeHandoffPageContentDigest: (pageIndexArg: unknown, handoffsArg: unknown) => Promise<TSha256Digest>;
634
+ export declare const computeFleetCutoverPreparedVolumeHandoffPageDigest: (valueArg: unknown) => Promise<TSha256Digest>;
635
+ export declare const validateFleetCutoverPreparedVolumeHandoffPage: (valueArg: unknown) => Promise<string[]>;
636
+ export declare const computeFleetCutoverPreparedVolumeHandoffSetDigest: (entriesArg: unknown) => Promise<TSha256Digest>;
637
+ /**
638
+ * Full pinned-set proof. The caller must supply every page for the exact aggregate revision; a
639
+ * node-local subset or a mixed revision can never satisfy this binder.
640
+ */
641
+ export declare const bindFleetCutoverPreparedVolumeHandoffPages: (aggregateArg: unknown, pagesArg: unknown) => Promise<{
642
+ aggregate: IFleetCutoverPreparedVolumeHandoffAggregate;
643
+ pages: IFleetCutoverPreparedVolumeHandoffPage[];
644
+ }>;
478
645
  export declare const snapshotFleetCutoverVolumeFence: (valueArg: unknown) => TFleetCutoverVolumeFence;
479
646
  export declare const computeFleetCutoverVolumeFenceDigest: (valueArg: unknown) => Promise<TSha256Digest>;
480
647
  export declare const snapshotFleetCutoverCorestoreAdoptionReceipt: (valueArg: unknown) => IFleetCutoverCorestoreAdoptionReceipt;
@@ -484,9 +651,40 @@ export declare const bindFleetCutoverAdoptionToVolumeFence: (adoptionArg: unknow
484
651
  adoption: IFleetCutoverCorestoreAdoptionReceipt;
485
652
  fence: TFleetCutoverVolumeFence;
486
653
  };
654
+ /**
655
+ * Joins the accepted adoption result to the full handoff and provider-ready claim content.
656
+ * Native attachment fencing and accepted-record dereferencing remain owner checks.
657
+ */
658
+ export declare const bindFleetCutoverAdoptionToStorageClaim: (adoptionArg: unknown, handoffArg: unknown, claimArg: unknown) => Promise<{
659
+ adoption: IFleetCutoverCorestoreAdoptionReceipt;
660
+ handoff: IFleetCutoverPreparedVolumeHandoffIntent;
661
+ claim: IRuntimeStorageClaim;
662
+ }>;
487
663
  export declare const validateFleetCutoverVolumeHandoffIntent: (valueArg: unknown) => Promise<string[]>;
488
664
  export declare const validateFleetCutoverVolumeFence: (valueArg: unknown) => Promise<string[]>;
489
665
  export declare const validateFleetCutoverCorestoreAdoptionReceipt: (valueArg: unknown) => Promise<string[]>;
666
+ export declare const snapshotFleetCutoverStorageAdoptionGrant: (valueArg: unknown) => IFleetCutoverStorageAdoptionGrant;
667
+ export declare const computeFleetCutoverStorageAdoptionGrantDigest: (valueArg: unknown) => Promise<TSha256Digest>;
668
+ export declare const validateFleetCutoverStorageAdoptionGrant: (valueArg: unknown) => Promise<string[]>;
669
+ /** Content join only; the controller must still prove this is the live current session and phase. */
670
+ export declare const bindFleetCutoverStorageAdoptionGrant: (grantArg: unknown, handoffArg: unknown, heldFenceArg: unknown) => Promise<{
671
+ grant: IFleetCutoverStorageAdoptionGrant;
672
+ handoff: IFleetCutoverPreparedVolumeHandoffIntent;
673
+ fence: Extract<TFleetCutoverVolumeFence, {
674
+ state: "held";
675
+ }>;
676
+ }>;
677
+ export declare const snapshotFleetCutoverStorageAdoptionBundle: (valueArg: unknown) => IFleetCutoverStorageAdoptionBundle;
678
+ /**
679
+ * Binds the complete post-adoption content. Physical lineage remains the provider-produced
680
+ * adoption digest and is deliberately never equated to the observed Docker source identity.
681
+ */
682
+ export declare const bindFleetCutoverStorageAdoptionBundle: (valueArg: unknown, handoffArg: unknown) => Promise<{
683
+ bundle: IFleetCutoverStorageAdoptionBundle;
684
+ handoff: IFleetCutoverPreparedVolumeHandoffIntent;
685
+ }>;
686
+ export declare const snapshotFleetCutoverHeldVolumeFenceEvidencePage: (valueArg: unknown) => IFleetCutoverHeldVolumeFenceEvidencePage;
687
+ export declare const validateFleetCutoverHeldVolumeFenceEvidencePage: (valueArg: unknown) => Promise<string[]>;
490
688
  export declare const snapshotFleetCutoverCoreflowRetirementEvidence: (valueArg: unknown) => IFleetCutoverCoreflowRetirementEvidence;
491
689
  export declare const computeFleetCutoverCoreflowRetirementDigest: (valueArg: unknown) => Promise<TSha256Digest>;
492
690
  export declare const validateFleetCutoverCoreflowRetirementEvidence: (valueArg: unknown) => Promise<string[]>;