@serve.zone/interfaces 17.2.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,11 @@
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
+
3
9
  ## 2026-07-22 - 17.2.0
4
10
 
5
11
  ### Features
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/interfaces',
6
- version: '17.2.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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serve.zone/interfaces",
3
- "version": "17.2.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.2.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;