@serve.zone/interfaces 17.1.0 → 17.2.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.
package/changelog.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026-07-22 - 17.2.1
4
+
5
+ ### Fixes
6
+
7
+ - persist exact original placement and target confirmation in service migration contracts
8
+
9
+ ## 2026-07-22 - 17.2.0
10
+
11
+ ### Features
12
+
13
+ - add deployment-scoped Coreflow routing proof contracts for exact route promotion and compensation acknowledgement
14
+
3
15
  ## 2026-07-21 - 17.1.0
4
16
 
5
17
  ### Features
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/interfaces',
6
- version: '17.1.0',
6
+ version: '17.2.1',
7
7
  description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHVGQUF1RjtDQUNyRyxDQUFBIn0=
@@ -1,3 +1,4 @@
1
+ import type { IServicePlacement } from './service.js';
1
2
  export type TServiceMigrationStatus = 'running' | 'completed' | 'failed';
2
3
  export type TServiceMigrationStepStatus = 'pending' | 'running' | 'completed' | 'failed' | 'skipped';
3
4
  export type TServiceMigrationStepKey = 'validate' | 'stop-source' | 'snapshot' | 'restore' | 'deploy-target' | 'verify';
@@ -13,7 +14,9 @@ export interface IServiceMigrationStep {
13
14
  * A node-to-node service migration orchestrated by Cloudly:
14
15
  * gracefully stop everywhere -> snapshot data on the source ->
15
16
  * restore on the target -> deploy pinned to the target -> verify.
16
- * On failure before deploy, placement rolls back to the source.
17
+ * Until the target deployment is confirmed, failure rollback restores the
18
+ * exact original placement snapshot. Target confirmation is the durable
19
+ * commit point; after it, rollback must not reactivate the source placement.
17
20
  */
18
21
  export interface IServiceMigration {
19
22
  id: string;
@@ -23,6 +26,22 @@ export interface IServiceMigration {
23
26
  targetNodeName: string;
24
27
  /** Backup archive id used for the data move (migration-<id>). */
25
28
  backupId?: string;
29
+ /**
30
+ * Exact placement captured before the migration mutates desired state.
31
+ * A non-null value is restored verbatim during pre-commit rollback. `null`
32
+ * means the service originally had no placement property, so rollback must
33
+ * remove that property. `undefined` is reserved for legacy records whose
34
+ * original placement is unknown and must not be interpreted as absent.
35
+ */
36
+ originalPlacement?: IServicePlacement | null;
37
+ /**
38
+ * Timestamp at which the target deployment was positively verified and the
39
+ * migration crossed its durable commit point. While `null` or absent, a
40
+ * failure is pre-commit and restores `originalPlacement`; once set, failure
41
+ * handling must keep the target authoritative and must not restore source
42
+ * placement.
43
+ */
44
+ targetDeploymentConfirmedAt?: number | null;
26
45
  status: TServiceMigrationStatus;
27
46
  steps: IServiceMigrationStep[];
28
47
  startedAt: number;
@@ -26,7 +26,28 @@ export interface IReq_Admin_ConfigureServiceDeploymentMachineUser extends plugin
26
26
  export interface ICoreflowBaseServiceReconciliationResult {
27
27
  status: 'fulfilled' | 'rejected';
28
28
  nodeNames: string[];
29
+ clusterId?: string;
29
30
  message?: string;
31
+ routingProof?: ICoreflowRoutingProofResult;
32
+ }
33
+ export interface ICoreflowRoutingProofEntry {
34
+ serviceId: string;
35
+ hostname: string;
36
+ destinationPort: number;
37
+ }
38
+ export interface ICoreflowRoutingProofRequest {
39
+ requestId: string;
40
+ reason?: string;
41
+ requiredPresent: ICoreflowRoutingProofEntry[];
42
+ requiredAbsentHostnames: string[];
43
+ }
44
+ export interface ICoreflowRoutingProofResult {
45
+ requestId: string;
46
+ routingGeneration: number;
47
+ provenPresent: ICoreflowRoutingProofEntry[];
48
+ confirmedAbsentHostnames: string[];
49
+ requiredFailures: string[];
50
+ unrelatedFailures: string[];
30
51
  }
31
52
  export interface IReq_Any_Cloudly_ReconcileBaseServices extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_ReconcileBaseServices> {
32
53
  method: 'reconcileBaseServices';
@@ -42,8 +63,11 @@ export interface IReq_Any_Cloudly_ReconcileBaseServices extends plugins.typedreq
42
63
  }
43
64
  export interface IReq_Cloudly_Coreflow_ReconcileBaseServices extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Cloudly_Coreflow_ReconcileBaseServices> {
44
65
  method: 'coreflowReconcileBaseServices';
45
- request: Record<string, never>;
66
+ request: {
67
+ routingProof?: ICoreflowRoutingProofRequest;
68
+ };
46
69
  response: {
47
70
  success: boolean;
71
+ routingProof?: ICoreflowRoutingProofResult;
48
72
  };
49
73
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serve.zone/interfaces",
3
- "version": "17.1.0",
3
+ "version": "17.2.1",
4
4
  "private": false,
5
5
  "description": "Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.",
6
6
  "exports": {
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/interfaces',
6
- version: '17.1.0',
6
+ version: '17.2.1',
7
7
  description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
8
8
  }
@@ -1,3 +1,5 @@
1
+ import type { IServicePlacement } from './service.js';
2
+
1
3
  export type TServiceMigrationStatus = 'running' | 'completed' | 'failed';
2
4
 
3
5
  export type TServiceMigrationStepStatus = 'pending' | 'running' | 'completed' | 'failed' | 'skipped';
@@ -23,7 +25,9 @@ export interface IServiceMigrationStep {
23
25
  * A node-to-node service migration orchestrated by Cloudly:
24
26
  * gracefully stop everywhere -> snapshot data on the source ->
25
27
  * restore on the target -> deploy pinned to the target -> verify.
26
- * On failure before deploy, placement rolls back to the source.
28
+ * Until the target deployment is confirmed, failure rollback restores the
29
+ * exact original placement snapshot. Target confirmation is the durable
30
+ * commit point; after it, rollback must not reactivate the source placement.
27
31
  */
28
32
  export interface IServiceMigration {
29
33
  id: string;
@@ -33,6 +37,22 @@ export interface IServiceMigration {
33
37
  targetNodeName: string;
34
38
  /** Backup archive id used for the data move (migration-<id>). */
35
39
  backupId?: string;
40
+ /**
41
+ * Exact placement captured before the migration mutates desired state.
42
+ * A non-null value is restored verbatim during pre-commit rollback. `null`
43
+ * means the service originally had no placement property, so rollback must
44
+ * remove that property. `undefined` is reserved for legacy records whose
45
+ * original placement is unknown and must not be interpreted as absent.
46
+ */
47
+ originalPlacement?: IServicePlacement | null;
48
+ /**
49
+ * Timestamp at which the target deployment was positively verified and the
50
+ * migration crossed its durable commit point. While `null` or absent, a
51
+ * failure is pre-commit and restores `originalPlacement`; once set, failure
52
+ * handling must keep the target authoritative and must not restore source
53
+ * placement.
54
+ */
55
+ targetDeploymentConfirmedAt?: number | null;
36
56
  status: TServiceMigrationStatus;
37
57
  steps: IServiceMigrationStep[];
38
58
  startedAt: number;
@@ -36,7 +36,31 @@ extends plugins.typedrequestInterfaces.implementsTR<
36
36
  export interface ICoreflowBaseServiceReconciliationResult {
37
37
  status: 'fulfilled' | 'rejected';
38
38
  nodeNames: string[];
39
+ clusterId?: string;
39
40
  message?: string;
41
+ routingProof?: ICoreflowRoutingProofResult;
42
+ }
43
+
44
+ export interface ICoreflowRoutingProofEntry {
45
+ serviceId: string;
46
+ hostname: string;
47
+ destinationPort: number;
48
+ }
49
+
50
+ export interface ICoreflowRoutingProofRequest {
51
+ requestId: string;
52
+ reason?: string;
53
+ requiredPresent: ICoreflowRoutingProofEntry[];
54
+ requiredAbsentHostnames: string[];
55
+ }
56
+
57
+ export interface ICoreflowRoutingProofResult {
58
+ requestId: string;
59
+ routingGeneration: number;
60
+ provenPresent: ICoreflowRoutingProofEntry[];
61
+ confirmedAbsentHostnames: string[];
62
+ requiredFailures: string[];
63
+ unrelatedFailures: string[];
40
64
  }
41
65
 
42
66
  export interface IReq_Any_Cloudly_ReconcileBaseServices extends plugins.typedrequestInterfaces.implementsTR<
@@ -60,8 +84,11 @@ export interface IReq_Cloudly_Coreflow_ReconcileBaseServices extends plugins.typ
60
84
  IReq_Cloudly_Coreflow_ReconcileBaseServices
61
85
  > {
62
86
  method: 'coreflowReconcileBaseServices';
63
- request: Record<string, never>;
87
+ request: {
88
+ routingProof?: ICoreflowRoutingProofRequest;
89
+ };
64
90
  response: {
65
91
  success: boolean;
92
+ routingProof?: ICoreflowRoutingProofResult;
66
93
  };
67
94
  }