@openge/forge-release-vercel 0.1.1 → 0.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 (92) hide show
  1. package/README.md +32 -5
  2. package/dist/cli-arguments.d.ts +2 -0
  3. package/dist/cli-arguments.d.ts.map +1 -1
  4. package/dist/cli-arguments.js +6 -3
  5. package/dist/cli-arguments.js.map +1 -1
  6. package/dist/cli-runner.js +1 -1
  7. package/dist/cli-runner.js.map +1 -1
  8. package/dist/contracts.d.ts +14 -3
  9. package/dist/contracts.d.ts.map +1 -1
  10. package/dist/node/managed-budget.d.ts +2 -1
  11. package/dist/node/managed-budget.d.ts.map +1 -1
  12. package/dist/node/managed-budget.js +4 -2
  13. package/dist/node/managed-budget.js.map +1 -1
  14. package/dist/node/managed-closure.d.ts +2 -0
  15. package/dist/node/managed-closure.d.ts.map +1 -1
  16. package/dist/node/managed-closure.js +11 -0
  17. package/dist/node/managed-closure.js.map +1 -1
  18. package/dist/node/managed-disposition.d.ts +36 -0
  19. package/dist/node/managed-disposition.d.ts.map +1 -0
  20. package/dist/node/managed-disposition.js +114 -0
  21. package/dist/node/managed-disposition.js.map +1 -0
  22. package/dist/node/managed-history.d.ts +6 -0
  23. package/dist/node/managed-history.d.ts.map +1 -0
  24. package/dist/node/managed-history.js +48 -0
  25. package/dist/node/managed-history.js.map +1 -0
  26. package/dist/node/managed-io.d.ts +3 -2
  27. package/dist/node/managed-io.d.ts.map +1 -1
  28. package/dist/node/managed-io.js +36 -10
  29. package/dist/node/managed-io.js.map +1 -1
  30. package/dist/node/managed-metadata.d.ts +12 -0
  31. package/dist/node/managed-metadata.d.ts.map +1 -0
  32. package/dist/node/managed-metadata.js +73 -0
  33. package/dist/node/managed-metadata.js.map +1 -0
  34. package/dist/node/managed-paths.d.ts.map +1 -1
  35. package/dist/node/managed-paths.js +14 -5
  36. package/dist/node/managed-paths.js.map +1 -1
  37. package/dist/node/managed-process.d.ts.map +1 -1
  38. package/dist/node/managed-process.js +48 -13
  39. package/dist/node/managed-process.js.map +1 -1
  40. package/dist/node/managed-recovery-lock.d.ts +1 -1
  41. package/dist/node/managed-recovery-lock.d.ts.map +1 -1
  42. package/dist/node/managed-recovery-lock.js +28 -7
  43. package/dist/node/managed-recovery-lock.js.map +1 -1
  44. package/dist/node/managed-recovery.d.ts +15 -2
  45. package/dist/node/managed-recovery.d.ts.map +1 -1
  46. package/dist/node/managed-recovery.js +87 -72
  47. package/dist/node/managed-recovery.js.map +1 -1
  48. package/dist/node/managed-release.d.ts.map +1 -1
  49. package/dist/node/managed-release.js +18 -3
  50. package/dist/node/managed-release.js.map +1 -1
  51. package/dist/node/managed-remote-state.d.ts +8 -0
  52. package/dist/node/managed-remote-state.d.ts.map +1 -0
  53. package/dist/node/managed-remote-state.js +63 -0
  54. package/dist/node/managed-remote-state.js.map +1 -0
  55. package/dist/node/managed-retirement.d.ts +5 -0
  56. package/dist/node/managed-retirement.d.ts.map +1 -0
  57. package/dist/node/managed-retirement.js +166 -0
  58. package/dist/node/managed-retirement.js.map +1 -0
  59. package/dist/node/managed-state.d.ts.map +1 -1
  60. package/dist/node/managed-state.js +29 -5
  61. package/dist/node/managed-state.js.map +1 -1
  62. package/dist/node/managed-terminal.d.ts +42 -0
  63. package/dist/node/managed-terminal.d.ts.map +1 -0
  64. package/dist/node/managed-terminal.js +163 -0
  65. package/dist/node/managed-terminal.js.map +1 -0
  66. package/dist/node/publication.d.ts.map +1 -1
  67. package/dist/node/publication.js +5 -1
  68. package/dist/node/publication.js.map +1 -1
  69. package/dist/node/release-context.d.ts +22 -4
  70. package/dist/node/release-context.d.ts.map +1 -1
  71. package/dist/node/release.d.ts.map +1 -1
  72. package/dist/node/release.js +9 -1
  73. package/dist/node/release.js.map +1 -1
  74. package/dist/node/retirement-claim.d.ts +8 -0
  75. package/dist/node/retirement-claim.d.ts.map +1 -0
  76. package/dist/node/retirement-claim.js +47 -0
  77. package/dist/node/retirement-claim.js.map +1 -0
  78. package/dist/node/retirement-host.d.ts +11 -0
  79. package/dist/node/retirement-host.d.ts.map +1 -0
  80. package/dist/node/retirement-host.js +55 -0
  81. package/dist/node/retirement-host.js.map +1 -0
  82. package/dist/node/retirement-lease.d.ts +9 -0
  83. package/dist/node/retirement-lease.d.ts.map +1 -0
  84. package/dist/node/retirement-lease.js +88 -0
  85. package/dist/node/retirement-lease.js.map +1 -0
  86. package/dist/node/retirement-record.d.ts +40 -0
  87. package/dist/node/retirement-record.d.ts.map +1 -0
  88. package/dist/node/retirement-record.js +109 -0
  89. package/dist/node/retirement-record.js.map +1 -0
  90. package/dist/node/workspace-release.js +2 -2
  91. package/dist/node/workspace-release.js.map +1 -1
  92. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"managed-process.js","sourceRoot":"","sources":["../../src/node/managed-process.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"managed-process.js","sourceRoot":"","sources":["../../src/node/managed-process.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { ManagedPaths, ManagedState } from './release-context.js';
2
- import { type OwnedLock } from './lock.js';
2
+ import type { OwnedLock } from './lock.js';
3
3
  export declare function claimManagedRecovery(paths: ManagedPaths, state: ManagedState, signal?: AbortSignal): Promise<{
4
4
  readonly claim: OwnedLock;
5
5
  readonly oldLock?: OwnedLock;
@@ -1 +1 @@
1
- {"version":3,"file":"managed-recovery-lock.d.ts","sourceRoot":"","sources":["../../src/node/managed-recovery-lock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAQxD,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,CAmC/K"}
1
+ {"version":3,"file":"managed-recovery-lock.d.ts","sourceRoot":"","sources":["../../src/node/managed-recovery-lock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAc3C,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC,CAyC/K"}
@@ -1,15 +1,19 @@
1
- import { randomUUID } from 'node:crypto';
2
1
  import { unlink } from 'node:fs/promises';
3
- import { acquireLock } from './lock.js';
4
2
  import { record, ReleaseError } from './errors.js';
5
3
  import { assertManagedPaths, assertManagementUntracked } from './managed-paths.js';
6
4
  import { fileIdentity, measureManagedUsage, pathExists, readBoundedJson, sameIdentity } from './managed-io.js';
7
- import { currentCoordinator } from './process-identities.js';
8
5
  import { parseManagedState } from './managed-state.js';
9
6
  import { Execution } from './execution.js';
7
+ import { hasManagedDisposition } from './managed-disposition.js';
8
+ import { acquireRetirementLease } from './retirement-lease.js';
9
+ import { readRetirementHost } from './retirement-host.js';
10
+ import { claimRetirement } from './retirement-claim.js';
11
+ import { retirementDigest } from './retirement-record.js';
12
+ import { assertMetadataFile, inspectMetadataFile } from './managed-metadata.js';
13
+ import { assertManagedHistory } from './managed-history.js';
10
14
  export async function claimManagedRecovery(paths, state, signal) {
11
15
  await assertManagedPaths(paths);
12
- const management = new Execution(state.source.root, state.source.config, signal, []);
16
+ const management = new Execution(state.source.root, state.source.config, undefined, []);
13
17
  await assertManagementUntracked(state.source, management);
14
18
  const config = state.source.config.source;
15
19
  if (config.mode !== 'managed-commit')
@@ -17,15 +21,32 @@ export async function claimManagedRecovery(paths, state, signal) {
17
21
  const usage = await measureManagedUsage(paths);
18
22
  if (usage.bytes + 1024 > config.maxBytes || usage.freeBytes - 1024 < config.minFreeBytes)
19
23
  throw new ReleaseError('BUDGET_EXCEEDED', { reason: 'RECOVERY_ADMISSION' });
20
- const coordinator = await currentCoordinator(signal), rawClaim = await acquireLock(paths.recoveryLockPath, { runId: randomUUID(), identity: coordinator });
24
+ await assertManagedHistory(paths, state);
25
+ const stateFile = await inspectMetadataFile(paths.statePath);
26
+ const lease = await acquireRetirementLease(paths, await readRetirementHost(signal), signal);
27
+ const guard = async () => { await lease.assertOwned(); await assertManagedPaths(paths); await assertManagementUntracked(state.source, management); await assertMetadataFile(paths.statePath, stateFile); };
28
+ let rawClaim;
29
+ try {
30
+ rawClaim = await claimRetirement(paths, state, retirementDigest({ runId: state.runId, slotId: state.slotId, stateFile }), lease, guard, signal, 'managed-recovery-claim');
31
+ }
32
+ catch (error) {
33
+ await lease.release();
34
+ throw error;
35
+ }
21
36
  const assertClaim = async () => { await assertManagedPaths(paths); await assertManagementUntracked(state.source, management); await rawClaim.assertOwned(); };
22
- const claim = { assertOwned: assertClaim, release: async () => { await assertClaim(); await rawClaim.release(); } };
37
+ const claim = { assertOwned: assertClaim, release: async () => { try {
38
+ await assertClaim();
39
+ await rawClaim.release();
40
+ }
41
+ finally {
42
+ await lease.release();
43
+ } } };
23
44
  try {
24
45
  const current = parseManagedState(await readBoundedJson(paths.statePath), state.source, state.slotId);
25
46
  if (JSON.stringify(current) !== JSON.stringify(state))
26
47
  throw new ReleaseError('RECOVERY_REQUIRED', { reason: 'RUN_CHANGED' });
27
48
  if (!await pathExists(paths.lockPath)) {
28
- if (state.status !== 'closed' || state.pendingPush || Object.values(state.effects).includes('unknown'))
49
+ if (state.status !== 'closed' && !await hasManagedDisposition(paths, state))
29
50
  throw new ReleaseError('LOCK_OWNERSHIP', { reason: 'RUN_LOCK_MISSING' });
30
51
  return { claim };
31
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"managed-recovery-lock.js","sourceRoot":"","sources":["../../src/node/managed-recovery-lock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"managed-recovery-lock.js","sourceRoot":"","sources":["../../src/node/managed-recovery-lock.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
- import type { ManagedPaths, ManagedReceipt, ManagedState } from './release-context.js';
1
+ import type { FrozenSource, ManagedAnchor, ManagedPaths, ManagedReceipt, ManagedState } from './release-context.js';
2
2
  import { Execution } from './execution.js';
3
- import type { ReleaseRefRelation, ReleaseReport, RunReleaseOptions } from '../contracts.js';
3
+ import type { ReleaseRecoveryObservation, ReleaseRefRelation, ReleaseReport, RunReleaseOptions } from '../contracts.js';
4
4
  export declare function classifyRemoteRef(execution: Execution, sha: string, ref: string): Promise<ReleaseRefRelation>;
5
+ export declare function observeRefs(execution: Execution, source: FrozenSource, observation: RecoveryObservation): Promise<ReleaseRecoveryObservation>;
6
+ export declare function observeRefsForDisposition(execution: Execution, source: FrozenSource, observation: RecoveryObservation): Promise<ReleaseRecoveryObservation>;
7
+ export declare function settleManagedSlot(options: RunReleaseOptions): Promise<void>;
5
8
  export declare function runManagedReceiptCommand(options: RunReleaseOptions): Promise<ReleaseReport>;
6
9
  export interface RecoveryObservation {
7
10
  readonly owner: 'inactive' | 'active' | 'unknown';
@@ -9,5 +12,15 @@ export interface RecoveryObservation {
9
12
  readonly knownCount: number;
10
13
  }
11
14
  export declare function inspectManagedRecovery(state: ManagedState, paths: ManagedPaths, signal?: AbortSignal, reader?: import("@openge/forge-process-control").ProcessIdentityReader): Promise<RecoveryObservation>;
15
+ export interface ManagedLocation {
16
+ readonly root: string;
17
+ readonly configPath: string;
18
+ readonly anchor: ManagedAnchor;
19
+ readonly paths: ManagedPaths;
20
+ readonly repository: string;
21
+ }
22
+ export declare function readManagedLocation(cwd: string, configPath: string): Promise<ManagedLocation>;
23
+ export declare function frozenSource(value: unknown, location: ManagedLocation): FrozenSource;
24
+ export declare function assertHistoricalSource(source: FrozenSource, signal?: AbortSignal): Promise<void>;
12
25
  export declare function selectManagedPublication(sourceRoot: string, configPath: string, sha?: string): Promise<ManagedReceipt>;
13
26
  //# sourceMappingURL=managed-recovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"managed-recovery.d.ts","sourceRoot":"","sources":["../../src/node/managed-recovery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA6C,YAAY,EAAE,cAAc,EAA+B,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAM/J,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI3C,OAAO,KAAK,EAAmF,kBAAkB,EAAE,aAAa,EAAgB,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAY3L,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAQnH;AAkHD,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAoDjG;AAED,MAAM,WAAW,mBAAmB;IAAG,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAC7K,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,gEAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA4BpK;AA2DD,wBAAsB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAE5H"}
1
+ {"version":3,"file":"managed-recovery.d.ts","sourceRoot":"","sources":["../../src/node/managed-recovery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAgB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAA+B,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAM/J,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI3C,OAAO,KAAK,EAAuD,0BAA0B,EAAE,kBAAkB,EAAE,aAAa,EAAgB,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAgB3L,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAQnH;AAgBD,wBAAsB,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAMnJ;AACD,wBAAsB,yBAAyB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAQjK;AAwCD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAajF;AAuCD,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAiDjG;AAED,MAAM,WAAW,mBAAmB;IAAG,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAC7K,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,gEAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6BpK;AAED,MAAM,WAAW,eAAe;IAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAMlL,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAsBnG;AACD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,GAAG,YAAY,CAOpF;AACD,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtG;AAaD,wBAAsB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAE5H"}
@@ -3,7 +3,7 @@ import { resolve } from 'node:path';
3
3
  import { assertActive, record, ReleaseError } from './errors.js';
4
4
  import { assertPathChain, pathExists, readBoundedJson, within } from './managed-io.js';
5
5
  import { assertManagedPaths } from './managed-paths.js';
6
- import { createManagedStateStore, parseManagedReceipt, parseManagedState } from './managed-state.js';
6
+ import { parseManagedReceipt, parseManagedState } from './managed-state.js';
7
7
  import { validateReleaseConfig } from './config.js';
8
8
  import { Execution } from './execution.js';
9
9
  import { assertRepository, normalizeRepository, remoteRefs } from './git.js';
@@ -18,7 +18,11 @@ import { openManagedSlot } from './managed-paths.js';
18
18
  import { createManagedSession } from './managed-process.js';
19
19
  import { assertCheckoutFrozen } from './managed-checkout.js';
20
20
  import { publishCandidate } from './publication.js';
21
- import { hasVerifiedManagedClosure } from './managed-closure.js';
21
+ import { hasVerifiedManagedStop } from './managed-closure.js';
22
+ import { discardPreparedState, restoreManagedTerminal } from './managed-terminal.js';
23
+ import { archiveManagedDisposition, assertDispositionSnapshot, hasManagedDisposition, readManagedDisposition } from './managed-disposition.js';
24
+ import { hasFinalizedRetirement } from './retirement-record.js';
25
+ import { assertManagedHistory } from './managed-history.js';
22
26
  export async function classifyRemoteRef(execution, sha, ref) {
23
27
  if (sha === ref)
24
28
  return 'candidate';
@@ -39,29 +43,41 @@ export async function classifyRemoteRef(execution, sha, ref) {
39
43
  if (before)
40
44
  return 'before';
41
45
  const after = await ancestor(sha, ref);
42
- return after === undefined ? 'unknown' : after ? 'after' : 'diverged';
46
+ return after === undefined ? 'unknown' : after ? 'superseded' : 'diverged';
43
47
  }
44
48
  function receiptReport(options, outcome) {
45
49
  const { source, location } = outcome;
46
50
  return { schemaVersion: 2, command: options.command, ok: outcome.failure === undefined, startedAt: outcome.startedAt, finishedAt: new Date().toISOString(),
47
51
  stage: outcome.stage, steps: outcome.steps, effects: { ...outcome.effects }, ...(outcome.runId ? { runId: outcome.runId } : {}),
48
52
  ...(source && location ? { sourceRoot: source.root, executionRoot: location.paths.checkoutRoot, slotId: location.anchor.slotId, candidateSha: source.sha, configSha256: source.configSha256, configPath: source.configPath,
49
- recovery: { candidateSha: source.sha, reportPath: resolve(location.paths.slotRoot, `latest-${outcome.kind ?? 'publish'}.json`), nextCommand: recoveryCommand(outcome.next ?? 'verify', source), ...(outcome.refs ? { observation: outcome.refs } : {}) } } : {}),
53
+ recovery: { candidateSha: source.sha, reportPath: resolve(location.paths.slotRoot, `latest-${outcome.kind ?? 'publish'}.json`), nextCommand: recoveryCommand(outcome.next ?? 'verify', source), ...(outcome.reportExists === undefined ? {} : { reportExists: outcome.reportExists }), ...(outcome.refs ? { observation: outcome.refs } : {}) } } : {}),
50
54
  ...(outcome.observation ? { processes: { status: outcome.observation.processes, knownCount: outcome.observation.knownCount } } : {}),
51
55
  ...(outcome.budget ? { budget: outcome.budget } : {}), ...(outcome.deployment ? { deployment: outcome.deployment } : {}), ...(outcome.failure ? { error: outcome.failure } : {}) };
52
56
  }
53
- async function observeRefs(execution, source, observation) {
57
+ export async function observeRefs(execution, source, observation) {
54
58
  const refs = await remoteRefs(execution, source.config);
55
59
  const development = refs[source.config.git.developmentBranch] ?? '', release = refs[source.config.git.releaseBranch] ?? '';
56
60
  return { owner: observation.owner, processes: observation.processes, observedAt: new Date().toISOString(),
57
61
  developmentRef: { sha: development, relation: await classifyRemoteRef(execution, source.sha, development) },
58
62
  releaseRef: { sha: release, relation: await classifyRemoteRef(execution, source.sha, release) } };
59
63
  }
64
+ export async function observeRefsForDisposition(execution, source, observation) {
65
+ try {
66
+ return await observeRefs(execution, source, observation);
67
+ }
68
+ catch (error) {
69
+ assertActive(execution.signal);
70
+ if (!(error instanceof ReleaseError) || !['GIT_FAILED', 'GIT_DIVERGED', 'COMMAND_TIMEOUT'].includes(error.code))
71
+ throw error;
72
+ return { owner: observation.owner, processes: observation.processes, observedAt: new Date().toISOString(),
73
+ developmentRef: { sha: '', relation: 'unknown' }, releaseRef: { sha: '', relation: 'unknown' } };
74
+ }
75
+ }
60
76
  async function recoverManagedPublication(options) {
61
77
  const startedAt = new Date().toISOString();
62
78
  let location, source, state;
63
79
  let recovery, observation, refs;
64
- let budget, deployment, failure;
80
+ let budget, failure;
65
81
  let effects = { developmentPush: 'not-attempted', releasePush: 'not-attempted' };
66
82
  try {
67
83
  assertActive(options.signal);
@@ -74,56 +90,26 @@ async function recoverManagedPublication(options) {
74
90
  effects = { ...state.effects };
75
91
  await assertHistoricalSource(source, options.signal);
76
92
  recovery = await claimManagedRecovery(location.paths, state, options.signal);
77
- observation = await inspectManagedRecovery(state, location.paths, options.signal);
93
+ const restored = await restoreManagedTerminal(location.paths, state, { allowReleasedLock: !recovery.oldLock, ...(options.signal ? { signal: options.signal } : {}) });
94
+ observation = await inspectManagedRecovery(restored.state, location.paths, options.signal);
95
+ refs = { owner: observation.owner, processes: observation.processes, observedAt: new Date().toISOString() };
78
96
  if (source.config.source.mode !== 'managed-commit')
79
97
  throw new ReleaseError('SOURCE_UNSUPPORTED');
80
98
  budget = new BudgetMonitor(location.paths, source.config.source);
81
99
  await budget.sample();
82
100
  const execution = new Execution(source.root, source.config, options.signal, []);
83
- refs = await observeRefs(execution, source, observation);
84
- const verify = new VercelVerification(source.config, options.transport ?? createTransport(execution), options.signal);
85
- await verify.project();
86
- deployment = await verify.find(source.sha);
101
+ refs = await observeRefsForDisposition(execution, source, observation);
87
102
  if (observation.owner !== 'inactive')
88
103
  throw new ReleaseError('RECOVERY_REQUIRED', { reason: 'OWNER_NOT_INACTIVE', owner: observation.owner });
89
104
  if (observation.processes !== 'closed')
90
105
  throw new ReleaseError('PROCESS_STATE_UNKNOWN', { reason: 'CLOSURE_UNPROVEN', processes: observation.processes });
91
- for (const [effect, ref] of [['developmentPush', refs.developmentRef], ['releasePush', refs.releaseRef]]) {
92
- if (state.effects[effect] !== 'unknown' && state.pendingPush !== effect)
93
- continue;
94
- if (!ref || !['candidate', 'before'].includes(ref.relation))
95
- throw new ReleaseError('RECOVERY_REQUIRED', { reason: 'REMOTE_NOT_RESUMABLE', effect, relation: ref?.relation, sha: ref?.sha });
96
- effects[effect] = ref.relation === 'candidate' ? 'already-current' : 'not-current';
97
- }
98
106
  await budget.sample();
99
- if (recovery.oldLock) {
100
- const oldState = state, oldLocation = location, oldLock = recovery.oldLock, claim = recovery.claim;
101
- const frozen = source;
102
- const guard = async () => { await assertHistoricalSource(frozen, options.signal); await assertManagedPaths(oldLocation.paths); await claim.assertOwned(); await oldLock.assertOwned(); };
103
- const store = createManagedStateStore(location.paths, source, location.anchor.slotId, guard);
104
- const kind = state.command === 'check' ? 'check' : 'publish';
105
- if (state.command !== 'verify') {
106
- const previous = await store.readReceipt(kind);
107
- if (previous && previous.report.runId === state.runId) {
108
- await store.writeReceipt(kind, { ...previous, report: { ...previous.report,
109
- recovery: { candidateSha: source.sha, reportPath: resolve(location.paths.slotRoot, `latest-${kind}.json`), nextCommand: recoveryCommand('publish', source), observation: refs } } });
110
- }
111
- else {
112
- const interrupted = { schemaVersion: 2, command: state.command, ok: false, startedAt, finishedAt: new Date().toISOString(),
113
- candidateSha: source.sha, configSha256: source.configSha256, sourceRoot: source.root, executionRoot: location.paths.checkoutRoot,
114
- slotId: state.slotId, runId: state.runId, configPath: source.configPath, stage: state.stage, steps: [], effects: { ...state.effects },
115
- error: { code: 'RECOVERY_REQUIRED', details: { reason: 'RECOVERED_INTERRUPTED_RUN' } }, recovery: { candidateSha: source.sha,
116
- reportPath: resolve(location.paths.slotRoot, `latest-${kind}.json`), nextCommand: recoveryCommand('publish', source), observation: refs } };
117
- await store.writeReceipt(kind, { schemaVersion: 2, slotId: state.slotId, source, report: interrupted });
118
- }
119
- }
120
- oldState.effects = effects;
121
- delete oldState.pendingPush;
122
- oldState.status = 'closed';
123
- await store.writeState(oldState);
124
- // 旧运行的关键结果全部持久化后,才精确释放原锁;恢复声明仍阻止新运行进入。
125
- await oldLock.release();
126
- }
107
+ const oldLocation = location, claim = recovery.claim, oldLock = recovery.oldLock, frozen = source;
108
+ const guard = async () => { await assertHistoricalSource(frozen, options.signal); await assertManagedPaths(oldLocation.paths); await claim.assertOwned(); await oldLock?.assertOwned(); };
109
+ const archived = await archiveManagedDisposition(location.paths, state, restored.state, guard, refs);
110
+ await discardPreparedState(location.paths, restored.terminal, async () => { await guard(); await assertDispositionSnapshot(oldLocation.paths, archived, !!oldLock); });
111
+ // 原始失败和未决副作用均已归档;这里只结束本地占用,不重放远端操作。
112
+ await oldLock?.release();
127
113
  }
128
114
  catch (error) {
129
115
  failure = diagnostic(error);
@@ -138,15 +124,44 @@ async function recoverManagedPublication(options) {
138
124
  }
139
125
  }
140
126
  }
141
- return receiptReport(options, { startedAt, stage: failure ? 'recover' : 'complete', steps: [], effects,
127
+ let reportExists;
128
+ if (location) {
129
+ try {
130
+ reportExists = await pathExists(resolve(location.paths.slotRoot, state?.command === 'check' ? 'latest-check.json' : 'latest-publish.json'));
131
+ }
132
+ catch { /* 存在性未知时省略此字段,不把路径文本当作文件证据。 */ }
133
+ }
134
+ return receiptReport(options, { startedAt, stage: failure ? 'recover' : 'complete', steps: [], effects, ...(reportExists === undefined ? {} : { reportExists }),
142
135
  ...(source ? { source } : {}), ...(location ? { location } : {}), ...(state ? { runId: state.runId, kind: state.command === 'check' ? 'check' : 'publish' } : {}),
143
- ...(observation ? { observation } : {}), ...(refs ? { refs } : {}), ...(budget ? { budget: budget.summary() } : {}), ...(deployment ? { deployment } : {}), ...(failure ? { failure } : {}),
144
- next: failure ? 'recover' : effects.releasePush === 'pushed' || effects.releasePush === 'already-current' ? 'verify' : 'publish' });
136
+ ...(observation ? { observation } : {}), ...(refs ? { refs } : {}), ...(budget ? { budget: budget.summary() } : {}), ...(failure ? { failure } : {}),
137
+ next: failure ? failure.details.reason === 'CLOSURE_UNPROVEN' && state ? `retire --run-id ${state.runId}` : 'recover' : effects.releasePush === 'pushed' || effects.releasePush === 'already-current' ? 'verify' : 'publish' });
138
+ }
139
+ export async function settleManagedSlot(options) {
140
+ if (!await pathExists(resolve(options.cwd, '.tmp/forge-vercel-release/managed.json')))
141
+ return;
142
+ const location = await readManagedLocation(options.cwd, options.configPath ?? 'release.config.json');
143
+ const value = await readBoundedJson(location.paths.statePath);
144
+ if (value === undefined)
145
+ throw new ReleaseError('RECOVERY_REQUIRED', { reason: 'STATE_MISSING' });
146
+ const source = frozenSource(record(value).source, location), state = parseManagedState(value, source, location.anchor.slotId);
147
+ await assertHistoricalSource(source, options.signal);
148
+ if (!await pathExists(location.paths.lockPath) && (await hasManagedDisposition(location.paths, state)
149
+ || await hasFinalizedRetirement(location.paths, state)
150
+ || (state.status === 'closed' && !state.pendingPush && !Object.values(state.effects).includes('unknown') && state.processes.every(hasVerifiedManagedStop))))
151
+ return;
152
+ const recovered = await recoverManagedPublication({ ...options, command: 'recover' });
153
+ if (!recovered.ok)
154
+ throw new ReleaseError(recovered.error?.code ?? 'RECOVERY_REQUIRED', { ...recovered.error?.details,
155
+ runId: state.runId, ...(recovered.recovery?.nextCommand ? { nextCommand: recovered.recovery.nextCommand } : {}) });
145
156
  }
146
157
  async function runManagedVerification(options) {
147
158
  const startedAt = new Date().toISOString();
148
159
  let selected, slot, session;
149
160
  let failure, deployment, closed = true;
161
+ const report = () => receiptReport(options, { startedAt, stage: session?.state.stage ?? 'source', steps: session?.steps ?? [], effects: session?.state.effects ?? { developmentPush: 'not-attempted', releasePush: 'not-attempted' },
162
+ ...(selected ? { source: selected.receipt.source, location: selected.location, ...(session ? { runId: session.state.runId } : {}) } : {}),
163
+ ...(session ? { observation: { owner: closed ? 'inactive' : 'unknown', processes: closed ? 'closed' : 'unknown', knownCount: new Set(session.state.processes.flatMap(command => [...command.descendants, ...(command.identity ? [command.identity] : [])]).map(identity => `${String(identity.pid)}:${identity.startToken}`)).size }, budget: session.budget.summary() } : {}),
164
+ ...(deployment ? { deployment } : {}), ...(failure ? { failure } : {}), next: closed ? 'verify' : 'recover' });
150
165
  try {
151
166
  if (options.config !== undefined)
152
167
  throw new ReleaseError('SOURCE_UNSUPPORTED', { reason: 'COMMITTED_CONFIG_REQUIRED' });
@@ -155,6 +170,7 @@ async function runManagedVerification(options) {
155
170
  if (!await pathExists(resolve(selected.location.paths.checkoutRoot, '.git')))
156
171
  throw new ReleaseError('RECOVERY_REQUIRED', { reason: 'CHECKOUT_MISSING' });
157
172
  const original = new Execution(source.root, source.config, options.signal, []);
173
+ await settleManagedSlot(options);
158
174
  slot = await openManagedSlot(source, original);
159
175
  session = await createManagedSession(slot, 'verify', options.signal);
160
176
  const current = session;
@@ -172,7 +188,7 @@ async function runManagedVerification(options) {
172
188
  }
173
189
  if (session) {
174
190
  try {
175
- await session.assertClosed();
191
+ await session.assertStopped();
176
192
  }
177
193
  catch {
178
194
  closed = false;
@@ -180,6 +196,11 @@ async function runManagedVerification(options) {
180
196
  session.state.status = closed ? 'closed' : 'unknown';
181
197
  try {
182
198
  await session.persist();
199
+ if (closed) {
200
+ const completed = session;
201
+ await completed.assertStopped();
202
+ await archiveManagedDisposition(completed.slot.paths, completed.state, completed.state, () => completed.slot.lock.assertOwned(), undefined, false, report());
203
+ }
183
204
  }
184
205
  catch (error) {
185
206
  failure ??= diagnostic(error);
@@ -195,10 +216,7 @@ async function runManagedVerification(options) {
195
216
  closed = false;
196
217
  }
197
218
  }
198
- return receiptReport(options, { startedAt, stage: session?.state.stage ?? 'source', steps: session?.steps ?? [], effects: session?.state.effects ?? { developmentPush: 'not-attempted', releasePush: 'not-attempted' },
199
- ...(selected ? { source: selected.receipt.source, location: selected.location, ...(session ? { runId: session.state.runId } : {}) } : {}),
200
- ...(session ? { observation: { owner: closed ? 'inactive' : 'unknown', processes: closed ? 'closed' : 'unknown', knownCount: new Set(session.state.processes.flatMap(command => [...command.descendants, ...(command.identity ? [command.identity] : [])]).map(identity => `${String(identity.pid)}:${identity.startToken}`)).size }, budget: session.budget.summary() } : {}),
201
- ...(deployment ? { deployment } : {}), ...(failure ? { failure } : {}), next: closed ? 'verify' : 'recover' });
219
+ return report();
202
220
  }
203
221
  export async function runManagedReceiptCommand(options) {
204
222
  if (options.command === 'recover')
@@ -225,23 +243,18 @@ export async function runManagedReceiptCommand(options) {
225
243
  const stateSource = frozenSource(record(stateValue).source, location);
226
244
  await assertHistoricalSource(stateSource, options.signal);
227
245
  const state = parseManagedState(stateValue, stateSource, location.anchor.slotId);
228
- observation = await inspectManagedRecovery(state, location.paths, options.signal);
229
- needsRecovery = observation.owner !== 'inactive' || observation.processes !== 'closed' || state.status !== 'closed' || !!state.pendingPush || Object.values(state.effects).includes('unknown');
246
+ await assertManagedHistory(location.paths, state);
247
+ const restored = await restoreManagedTerminal(location.paths, state, { allowReleasedLock: !await pathExists(location.paths.lockPath), ...(options.signal ? { signal: options.signal } : {}) });
248
+ observation = await inspectManagedRecovery(restored.state, location.paths, options.signal);
249
+ const locallyReady = await hasManagedDisposition(location.paths, state);
250
+ needsRecovery = observation.owner !== 'inactive' || observation.processes !== 'closed' || (state.status !== 'closed' && !locallyReady);
230
251
  const execution = new Execution(source.root, source.config, options.signal, []);
231
252
  refs = await observeRefs(execution, source, observation);
232
- const recovered = receipt.report.recovery;
233
- const proof = recovered?.observation;
234
- for (const [effect, previous, current] of [['developmentPush', proof?.developmentRef, refs.developmentRef], ['releasePush', proof?.releaseRef, refs.releaseRef]]) {
253
+ const published = receipt.report.runId ? await readManagedDisposition(location.paths, receipt.report.runId) : undefined;
254
+ for (const [effect, current] of [['developmentPush', refs.developmentRef], ['releasePush', refs.releaseRef]]) {
235
255
  if (effects[effect] !== 'unknown')
236
256
  continue;
237
- const witnessed = recovered?.candidateSha === source.sha && proof?.owner === 'inactive' && proof.processes === 'closed'
238
- && Number.isFinite(Date.parse(proof.observedAt)) && previous && /^[a-f0-9]{40}$/u.test(previous.sha)
239
- && (previous.relation === 'candidate' ? previous.sha === source.sha : previous.relation === 'before' && previous.sha !== source.sha);
240
- if (witnessed && current?.relation === 'candidate')
241
- effects[effect] = 'already-current';
242
- else if (witnessed && current?.relation === 'before')
243
- effects[effect] = 'not-current';
244
- else
257
+ if (!published || published.stopped.source.sha !== source.sha || !current || !['candidate', 'superseded'].includes(current.relation))
245
258
  needsRecovery = true;
246
259
  }
247
260
  stage = 'deployment';
@@ -275,7 +288,7 @@ export async function inspectManagedRecovery(state, paths, signal, reader = iden
275
288
  const controller = new AbortController(), timer = setTimeout(() => controller.abort(), Math.min(30_000, state.source.config.limits.commandMs));
276
289
  const combined = signal ? AbortSignal.any([signal, controller.signal]) : controller.signal;
277
290
  const identities = new Map(state.processes.flatMap(command => [...command.descendants, ...(command.identity ? [command.identity] : [])]).map(value => [`${String(value.pid)}:${value.startToken}`, value]));
278
- const unresolved = state.processes.filter(command => !hasVerifiedManagedClosure(command));
291
+ const unresolved = state.processes.filter(command => !hasVerifiedManagedStop(command));
279
292
  const pendingIdentities = new Map(unresolved.flatMap(command => [...command.descendants, ...(command.identity ? [command.identity] : [])]).map(value => [`${String(value.pid)}:${value.startToken}`, value]));
280
293
  let owner = 'unknown';
281
294
  let unknown = unresolved.length > 0, running = false;
@@ -285,7 +298,9 @@ export async function inspectManagedRecovery(state, paths, signal, reader = iden
285
298
  if (observed.status === 'ABSENT')
286
299
  owner = 'inactive';
287
300
  else if (observed.identity.startToken === state.coordinator.startToken)
288
- owner = await pathExists(paths.lockPath) ? 'active' : state.status === 'closed' ? 'inactive' : 'unknown';
301
+ owner = await pathExists(paths.lockPath) ? 'active' : state.status === 'closed' || await hasManagedDisposition(paths, state) ? 'inactive' : 'unknown';
302
+ else
303
+ owner = 'inactive';
289
304
  }
290
305
  catch {
291
306
  assertActive(signal);
@@ -323,7 +338,7 @@ function identity(value) {
323
338
  throw new ReleaseError('SLOT_STATE', { reason: 'FILE_IDENTITY' });
324
339
  return { dev: item.dev, ino: item.ino };
325
340
  }
326
- async function readManagedLocation(cwd, configPath) {
341
+ export async function readManagedLocation(cwd, configPath) {
327
342
  const root = await realpath(cwd), path = relativeConfigPath(root, configPath), anchorPath = resolve(root, '.tmp/forge-vercel-release/managed.json');
328
343
  await assertPathChain(root, anchorPath);
329
344
  const value = await readBoundedJson(anchorPath, 65_536);
@@ -351,7 +366,7 @@ async function readManagedLocation(cwd, configPath) {
351
366
  await assertManagedPaths(paths);
352
367
  return { root, configPath: path, anchor, paths, repository: owner.repository };
353
368
  }
354
- function frozenSource(value, location) {
369
+ export function frozenSource(value, location) {
355
370
  const item = record(value), config = validateReleaseConfig(item.config);
356
371
  if (item.root !== location.root || item.configPath !== location.configPath || typeof item.sha !== 'string' || !/^[a-f0-9]{40}$/u.test(item.sha)
357
372
  || typeof item.configBlobOid !== 'string' || !/^[a-f0-9]{40}$/u.test(item.configBlobOid) || typeof item.configSha256 !== 'string' || !/^[a-f0-9]{64}$/u.test(item.configSha256)
@@ -360,7 +375,7 @@ function frozenSource(value, location) {
360
375
  throw new ReleaseError('SLOT_STATE', { reason: 'FROZEN_SOURCE' });
361
376
  return { root: location.root, configPath: location.configPath, sha: item.sha, config, configBlobOid: item.configBlobOid, configSha256: item.configSha256, fetchUrl: item.fetchUrl };
362
377
  }
363
- async function assertHistoricalSource(source, signal) {
378
+ export async function assertHistoricalSource(source, signal) {
364
379
  const execution = new Execution(source.root, source.config, signal, []);
365
380
  try {
366
381
  await assertRepository(execution, source.config);