@msn-control/liftoff 0.11.3 → 0.12.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 (332) hide show
  1. package/DEVELOPER.md +26 -35
  2. package/README.md +18 -18
  3. package/assets/governance/single-maintainer-gitflow/activation-v2-graph.json +1583 -0
  4. package/dist/adapters/credentials/github-enrollment.d.ts +51 -0
  5. package/dist/adapters/credentials/github-enrollment.js +226 -0
  6. package/dist/adapters/credentials/github-enrollment.js.map +1 -0
  7. package/dist/adapters/credentials/protected-input.d.ts +7 -0
  8. package/dist/adapters/credentials/protected-input.js +68 -0
  9. package/dist/adapters/credentials/protected-input.js.map +1 -0
  10. package/dist/adapters/filesystem/executables.d.ts +2 -0
  11. package/dist/adapters/filesystem/executables.js +70 -0
  12. package/dist/adapters/filesystem/executables.js.map +1 -0
  13. package/dist/adapters/filesystem/update-previews.d.ts +9 -0
  14. package/dist/adapters/filesystem/update-previews.js +44 -0
  15. package/dist/adapters/filesystem/update-previews.js.map +1 -1
  16. package/dist/adapters/filesystem/workstation-attempts.d.ts +13 -0
  17. package/dist/adapters/filesystem/workstation-attempts.js +78 -0
  18. package/dist/adapters/filesystem/workstation-attempts.js.map +1 -0
  19. package/dist/adapters/github/activation-rest.d.ts +40 -0
  20. package/dist/adapters/github/activation-rest.js +272 -0
  21. package/dist/adapters/github/activation-rest.js.map +1 -0
  22. package/dist/adapters/state/azure-blob.d.ts +43 -0
  23. package/dist/adapters/state/azure-blob.js +335 -0
  24. package/dist/adapters/state/azure-blob.js.map +1 -0
  25. package/dist/adapters/state/darwin-capabilities.d.ts +33 -0
  26. package/dist/adapters/state/darwin-capabilities.js +146 -0
  27. package/dist/adapters/state/darwin-capabilities.js.map +1 -0
  28. package/dist/adapters/state/darwin-native-host.d.ts +32 -0
  29. package/dist/adapters/state/darwin-native-host.js +294 -0
  30. package/dist/adapters/state/darwin-native-host.js.map +1 -0
  31. package/dist/adapters/state/darwin-profile.d.ts +6 -0
  32. package/dist/adapters/state/darwin-profile.js +56 -0
  33. package/dist/adapters/state/darwin-profile.js.map +1 -0
  34. package/dist/adapters/state/darwin-system-program.d.ts +1 -0
  35. package/dist/adapters/state/darwin-system-program.js +94 -0
  36. package/dist/adapters/state/darwin-system-program.js.map +1 -0
  37. package/dist/adapters/state/local-qualification.d.ts +16 -0
  38. package/dist/adapters/state/local-qualification.js +299 -0
  39. package/dist/adapters/state/local-qualification.js.map +1 -0
  40. package/dist/adapters/state/local.d.ts +25 -0
  41. package/dist/adapters/state/local.js +145 -0
  42. package/dist/adapters/state/local.js.map +1 -0
  43. package/dist/adapters/state/native-command.d.ts +21 -0
  44. package/dist/adapters/state/native-command.js +82 -0
  45. package/dist/adapters/state/native-command.js.map +1 -0
  46. package/dist/adapters/state/native-files.d.ts +2 -0
  47. package/dist/adapters/state/native-files.js +47 -0
  48. package/dist/adapters/state/native-files.js.map +1 -0
  49. package/dist/adapters/state/native-system.d.ts +38 -0
  50. package/dist/adapters/state/native-system.js +86 -0
  51. package/dist/adapters/state/native-system.js.map +1 -0
  52. package/dist/adapters/state/opentofu.d.ts +35 -0
  53. package/dist/adapters/state/opentofu.js +350 -0
  54. package/dist/adapters/state/opentofu.js.map +1 -0
  55. package/dist/adapters/state/owned-process.d.ts +43 -0
  56. package/dist/adapters/state/owned-process.js +252 -0
  57. package/dist/adapters/state/owned-process.js.map +1 -0
  58. package/dist/adapters/state/posix-lock-program.d.ts +1 -0
  59. package/dist/adapters/state/posix-lock-program.js +185 -0
  60. package/dist/adapters/state/posix-lock-program.js.map +1 -0
  61. package/dist/adapters/state/posix-native-lock.d.ts +15 -0
  62. package/dist/adapters/state/posix-native-lock.js +145 -0
  63. package/dist/adapters/state/posix-native-lock.js.map +1 -0
  64. package/dist/adapters/state/protected-workspace.d.ts +57 -0
  65. package/dist/adapters/state/protected-workspace.js +412 -0
  66. package/dist/adapters/state/protected-workspace.js.map +1 -0
  67. package/dist/application/context.d.ts +3 -0
  68. package/dist/application/diagnose/doctor.d.ts +5 -0
  69. package/dist/application/diagnose/doctor.js +21 -5
  70. package/dist/application/diagnose/doctor.js.map +1 -1
  71. package/dist/application/diagnose/generated-project.js +2 -7
  72. package/dist/application/diagnose/generated-project.js.map +1 -1
  73. package/dist/application/initialize/fixture.js +8 -1
  74. package/dist/application/initialize/fixture.js.map +1 -1
  75. package/dist/application/initialize/use-case.js +70 -36
  76. package/dist/application/initialize/use-case.js.map +1 -1
  77. package/dist/application/project/manifest.js +5 -4
  78. package/dist/application/project/manifest.js.map +1 -1
  79. package/dist/application/state-migration/execution.d.ts +32 -0
  80. package/dist/application/state-migration/execution.js +440 -0
  81. package/dist/application/state-migration/execution.js.map +1 -0
  82. package/dist/application/state-migration/index.d.ts +22 -0
  83. package/dist/application/state-migration/index.js +17 -0
  84. package/dist/application/state-migration/index.js.map +1 -0
  85. package/dist/application/state-migration/lifecycle.d.ts +3 -0
  86. package/dist/application/state-migration/lifecycle.js +149 -0
  87. package/dist/application/state-migration/lifecycle.js.map +1 -0
  88. package/dist/application/state-migration/planning.d.ts +7 -0
  89. package/dist/application/state-migration/planning.js +150 -0
  90. package/dist/application/state-migration/planning.js.map +1 -0
  91. package/dist/application/state-migration/recovery.d.ts +5 -0
  92. package/dist/application/state-migration/recovery.js +145 -0
  93. package/dist/application/state-migration/recovery.js.map +1 -0
  94. package/dist/application/state-migration/runtime.d.ts +32 -0
  95. package/dist/application/state-migration/runtime.js +188 -0
  96. package/dist/application/state-migration/runtime.js.map +1 -0
  97. package/dist/application/state-migration/service.d.ts +2 -0
  98. package/dist/application/state-migration/service.js +20 -0
  99. package/dist/application/state-migration/service.js.map +1 -0
  100. package/dist/application/update/inspection.d.ts +16 -2
  101. package/dist/application/update/inspection.js +76 -23
  102. package/dist/application/update/inspection.js.map +1 -1
  103. package/dist/application/update/migration-runtime.js +24 -11
  104. package/dist/application/update/migration-runtime.js.map +1 -1
  105. package/dist/application/update/output.d.ts +2 -0
  106. package/dist/application/update/output.js +11 -1
  107. package/dist/application/update/output.js.map +1 -1
  108. package/dist/application/update/revalidation-plan.d.ts +1 -0
  109. package/dist/application/update/revalidation-plan.js +25 -12
  110. package/dist/application/update/revalidation-plan.js.map +1 -1
  111. package/dist/application/update/revalidation.d.ts +4 -1
  112. package/dist/application/update/revalidation.js +62 -21
  113. package/dist/application/update/revalidation.js.map +1 -1
  114. package/dist/application/update/use-case.js +25 -17
  115. package/dist/application/update/use-case.js.map +1 -1
  116. package/dist/application/upgrade/use-case.js +3 -0
  117. package/dist/application/upgrade/use-case.js.map +1 -1
  118. package/dist/cli/args/definitions.js +11 -3
  119. package/dist/cli/args/definitions.js.map +1 -1
  120. package/dist/cli/args/parser.js +29 -3
  121. package/dist/cli/args/parser.js.map +1 -1
  122. package/dist/domain/governance/activation/approvals.d.ts +264 -7
  123. package/dist/domain/governance/activation/approvals.js +166 -23
  124. package/dist/domain/governance/activation/approvals.js.map +1 -1
  125. package/dist/domain/governance/activation/capabilities.js +5 -2
  126. package/dist/domain/governance/activation/capabilities.js.map +1 -1
  127. package/dist/domain/governance/activation/evidence.d.ts +2 -1
  128. package/dist/domain/governance/activation/evidence.js +64 -11
  129. package/dist/domain/governance/activation/evidence.js.map +1 -1
  130. package/dist/domain/governance/activation/graph.d.ts +11 -384
  131. package/dist/domain/governance/activation/graph.js +424 -379
  132. package/dist/domain/governance/activation/graph.js.map +1 -1
  133. package/dist/domain/governance/activation/inputs.d.ts +3 -1
  134. package/dist/domain/governance/activation/inputs.js +47 -6
  135. package/dist/domain/governance/activation/inputs.js.map +1 -1
  136. package/dist/domain/governance/activation/operations.d.ts +4 -1
  137. package/dist/domain/governance/activation/operations.js +110 -22
  138. package/dist/domain/governance/activation/operations.js.map +1 -1
  139. package/dist/domain/governance/activation/readiness.d.ts +10 -0
  140. package/dist/domain/governance/activation/readiness.js +77 -38
  141. package/dist/domain/governance/activation/readiness.js.map +1 -1
  142. package/dist/domain/governance/activation/types.d.ts +151 -9
  143. package/dist/domain/governance/activation/types.js +23 -1
  144. package/dist/domain/governance/activation/types.js.map +1 -1
  145. package/dist/domain/governance/activation/validators.d.ts +4 -1
  146. package/dist/domain/governance/activation/validators.js +419 -26
  147. package/dist/domain/governance/activation/validators.js.map +1 -1
  148. package/dist/domain/governance/policy/identity.d.ts +55 -13
  149. package/dist/domain/governance/policy/identity.js +28 -8
  150. package/dist/domain/governance/policy/identity.js.map +1 -1
  151. package/dist/domain/project/artifact-lifecycle.d.ts +2 -1
  152. package/dist/domain/project/artifact-lifecycle.js +7 -1
  153. package/dist/domain/project/artifact-lifecycle.js.map +1 -1
  154. package/dist/domain/project/catalog.d.ts +50 -1
  155. package/dist/domain/project/catalog.js +104 -4
  156. package/dist/domain/project/catalog.js.map +1 -1
  157. package/dist/domain/project/contracts.d.ts +9 -1
  158. package/dist/domain/project/infrastructure-layout.d.ts +1 -1
  159. package/dist/domain/project/infrastructure-layout.js +3 -1
  160. package/dist/domain/project/infrastructure-layout.js.map +1 -1
  161. package/dist/domain/project/manifest/governance.d.ts +1 -1
  162. package/dist/domain/project/manifest/governance.js +9 -10
  163. package/dist/domain/project/manifest/governance.js.map +1 -1
  164. package/dist/domain/project/planning.js +4 -5
  165. package/dist/domain/project/planning.js.map +1 -1
  166. package/dist/domain/repair/stateful-bounded.d.ts +1 -0
  167. package/dist/domain/repair/stateful-bounded.js +37 -0
  168. package/dist/domain/repair/stateful-bounded.js.map +1 -0
  169. package/dist/domain/repair/stateful-invariants.d.ts +28 -0
  170. package/dist/domain/repair/stateful-invariants.js +278 -0
  171. package/dist/domain/repair/stateful-invariants.js.map +1 -0
  172. package/dist/domain/repair/stateful.d.ts +690 -0
  173. package/dist/domain/repair/stateful.js +26 -0
  174. package/dist/domain/repair/stateful.js.map +1 -0
  175. package/dist/domain/workstation/constraints.d.ts +1 -0
  176. package/dist/domain/workstation/constraints.js.map +1 -1
  177. package/dist/domain/workstation/contracts.d.ts +42 -0
  178. package/dist/domain/workstation/contracts.js +2 -0
  179. package/dist/domain/workstation/contracts.js.map +1 -0
  180. package/dist/domain/workstation/executables.d.ts +19 -0
  181. package/dist/domain/workstation/executables.js +68 -0
  182. package/dist/domain/workstation/executables.js.map +1 -0
  183. package/dist/domain/workstation/versions.d.ts +8 -0
  184. package/dist/domain/workstation/versions.js +145 -0
  185. package/dist/domain/workstation/versions.js.map +1 -0
  186. package/dist/framework-adapters.d.ts +2 -0
  187. package/dist/framework-adapters.js +148 -22
  188. package/dist/framework-adapters.js.map +1 -1
  189. package/dist/framework-validation.d.ts +6 -0
  190. package/dist/framework-validation.js +89 -24
  191. package/dist/framework-validation.js.map +1 -1
  192. package/dist/generators/common/base.js +57 -17
  193. package/dist/generators/common/base.js.map +1 -1
  194. package/dist/governance-activation/activation-state.js +39 -7
  195. package/dist/governance-activation/activation-state.js.map +1 -1
  196. package/dist/governance-activation/authority-records.d.ts +4 -0
  197. package/dist/governance-activation/authority-records.js +24 -0
  198. package/dist/governance-activation/authority-records.js.map +1 -0
  199. package/dist/governance-activation/commands.d.ts +9 -1
  200. package/dist/governance-activation/commands.js +392 -97
  201. package/dist/governance-activation/commands.js.map +1 -1
  202. package/dist/governance-activation/compatibility.d.ts +11 -8
  203. package/dist/governance-activation/compatibility.js +37 -23
  204. package/dist/governance-activation/compatibility.js.map +1 -1
  205. package/dist/governance-activation/doctor.js +40 -16
  206. package/dist/governance-activation/doctor.js.map +1 -1
  207. package/dist/governance-activation/github-config.d.ts +17 -0
  208. package/dist/governance-activation/github-config.js +88 -0
  209. package/dist/governance-activation/github-config.js.map +1 -0
  210. package/dist/governance-activation/github-discovery.d.ts +18 -0
  211. package/dist/governance-activation/github-discovery.js +229 -0
  212. package/dist/governance-activation/github-discovery.js.map +1 -0
  213. package/dist/governance-activation/github-ports.d.ts +12 -0
  214. package/dist/governance-activation/github-ports.js +4 -0
  215. package/dist/governance-activation/github-ports.js.map +1 -0
  216. package/dist/governance-activation/github-publication.d.ts +3 -0
  217. package/dist/governance-activation/github-publication.js +190 -0
  218. package/dist/governance-activation/github-publication.js.map +1 -0
  219. package/dist/governance-activation/historical-common.d.ts +98 -0
  220. package/dist/governance-activation/historical-common.js +269 -0
  221. package/dist/governance-activation/historical-common.js.map +1 -0
  222. package/dist/governance-activation/historical-credential-policy.d.ts +3 -0
  223. package/dist/governance-activation/historical-credential-policy.js +91 -0
  224. package/dist/governance-activation/historical-credential-policy.js.map +1 -0
  225. package/dist/governance-activation/historical-inputs.d.ts +6 -0
  226. package/dist/governance-activation/historical-inputs.js +57 -0
  227. package/dist/governance-activation/historical-inputs.js.map +1 -0
  228. package/dist/governance-activation/historical-safety.d.ts +9 -0
  229. package/dist/governance-activation/historical-safety.js +102 -0
  230. package/dist/governance-activation/historical-safety.js.map +1 -0
  231. package/dist/governance-activation/historical-source-metadata.d.ts +31 -0
  232. package/dist/governance-activation/historical-source-metadata.js +55 -0
  233. package/dist/governance-activation/historical-source-metadata.js.map +1 -0
  234. package/dist/governance-activation/historical-state.d.ts +12 -50
  235. package/dist/governance-activation/historical-state.js +195 -308
  236. package/dist/governance-activation/historical-state.js.map +1 -1
  237. package/dist/governance-activation/historical-v1-auxiliary.d.ts +1 -0
  238. package/dist/governance-activation/historical-v1-auxiliary.js +43 -0
  239. package/dist/governance-activation/historical-v1-auxiliary.js.map +1 -0
  240. package/dist/governance-activation/historical-v1-phase-contracts.d.ts +31 -0
  241. package/dist/governance-activation/historical-v1-phase-contracts.js +46 -0
  242. package/dist/governance-activation/historical-v1-phase-contracts.js.map +1 -0
  243. package/dist/governance-activation/historical-v2.d.ts +53 -0
  244. package/dist/governance-activation/historical-v2.js +313 -0
  245. package/dist/governance-activation/historical-v2.js.map +1 -0
  246. package/dist/governance-activation/history-contracts.d.ts +21 -12
  247. package/dist/governance-activation/history-contracts.js +99 -27
  248. package/dist/governance-activation/history-contracts.js.map +1 -1
  249. package/dist/governance-activation/inputs.d.ts +8 -2
  250. package/dist/governance-activation/inputs.js +41 -6
  251. package/dist/governance-activation/inputs.js.map +1 -1
  252. package/dist/governance-activation/migration-history.d.ts +43 -5
  253. package/dist/governance-activation/migration-history.js +231 -50
  254. package/dist/governance-activation/migration-history.js.map +1 -1
  255. package/dist/governance-activation/migration.d.ts +7 -4
  256. package/dist/governance-activation/migration.js +53 -252
  257. package/dist/governance-activation/migration.js.map +1 -1
  258. package/dist/governance-activation/phase-azure.d.ts +3 -0
  259. package/dist/governance-activation/phase-azure.js +205 -0
  260. package/dist/governance-activation/phase-azure.js.map +1 -0
  261. package/dist/governance-activation/phase-bootstrap-state.js +3 -0
  262. package/dist/governance-activation/phase-bootstrap-state.js.map +1 -1
  263. package/dist/governance-activation/phase-github.d.ts +3 -0
  264. package/dist/governance-activation/phase-github.js +192 -0
  265. package/dist/governance-activation/phase-github.js.map +1 -0
  266. package/dist/governance-activation/phase-governance.js +8 -2
  267. package/dist/governance-activation/phase-governance.js.map +1 -1
  268. package/dist/governance-activation/public-plans.d.ts +36 -0
  269. package/dist/governance-activation/public-plans.js +100 -0
  270. package/dist/governance-activation/public-plans.js.map +1 -0
  271. package/dist/governance-activation/read-only.d.ts +3 -1
  272. package/dist/governance-activation/read-only.js +7 -3
  273. package/dist/governance-activation/read-only.js.map +1 -1
  274. package/dist/governance-activation/reconciliation.js +10 -0
  275. package/dist/governance-activation/reconciliation.js.map +1 -1
  276. package/dist/governance-activation/seed-lifecycle.js +14 -25
  277. package/dist/governance-activation/seed-lifecycle.js.map +1 -1
  278. package/dist/governance-activation/source-of-truth.d.ts +21 -5
  279. package/dist/governance-activation/source-of-truth.js +102 -13
  280. package/dist/governance-activation/source-of-truth.js.map +1 -1
  281. package/dist/governance-activation/task-projection.d.ts +4 -1
  282. package/dist/governance-activation/task-projection.js +32 -3
  283. package/dist/governance-activation/task-projection.js.map +1 -1
  284. package/dist/governance-activation/task-writes.d.ts +42 -0
  285. package/dist/governance-activation/task-writes.js +250 -0
  286. package/dist/governance-activation/task-writes.js.map +1 -0
  287. package/dist/governance-activation/transition-files.d.ts +12 -0
  288. package/dist/governance-activation/transition-files.js +109 -0
  289. package/dist/governance-activation/transition-files.js.map +1 -0
  290. package/dist/governance-activation/transition-planning.d.ts +3 -1
  291. package/dist/governance-activation/transition-planning.js +158 -20
  292. package/dist/governance-activation/transition-planning.js.map +1 -1
  293. package/dist/governance-activation/transition-ports.d.ts +31 -3
  294. package/dist/governance-activation/transition-records.d.ts +11 -1
  295. package/dist/governance-activation/transition-records.js +52 -6
  296. package/dist/governance-activation/transition-records.js.map +1 -1
  297. package/dist/governance-activation/transitions.d.ts +5 -0
  298. package/dist/governance-activation/transitions.js +271 -37
  299. package/dist/governance-activation/transitions.js.map +1 -1
  300. package/dist/governance-assessment/engine.js +22 -15
  301. package/dist/governance-assessment/engine.js.map +1 -1
  302. package/dist/governance-assessment/project.d.ts +2 -0
  303. package/dist/governance-assessment/project.js +2 -1
  304. package/dist/governance-assessment/project.js.map +1 -1
  305. package/dist/interactive.d.ts +0 -1
  306. package/dist/interactive.js +3 -22
  307. package/dist/interactive.js.map +1 -1
  308. package/dist/openspec-profile.d.ts +2 -1
  309. package/dist/openspec-profile.js +11 -41
  310. package/dist/openspec-profile.js.map +1 -1
  311. package/dist/repository-governance.d.ts +10 -5
  312. package/dist/repository-governance.js +178 -92
  313. package/dist/repository-governance.js.map +1 -1
  314. package/dist/self-upgrade.d.ts +8 -2
  315. package/dist/self-upgrade.js +180 -47
  316. package/dist/self-upgrade.js.map +1 -1
  317. package/dist/telemetry/contract.d.ts +1 -1
  318. package/dist/telemetry/contract.js +3 -0
  319. package/dist/telemetry/contract.js.map +1 -1
  320. package/dist/workstation-catalog.d.ts +13 -1
  321. package/dist/workstation-catalog.js +122 -0
  322. package/dist/workstation-catalog.js.map +1 -1
  323. package/dist/workstation.d.ts +69 -14
  324. package/dist/workstation.js +600 -215
  325. package/dist/workstation.js.map +1 -1
  326. package/docs/cli-reference.md +69 -22
  327. package/docs/configuration-and-manifests.md +9 -8
  328. package/docs/prerequisites.md +93 -18
  329. package/docs/repository-governance.md +68 -40
  330. package/docs/spec-workflows-and-agents.md +132 -13
  331. package/docs/troubleshooting.md +32 -2
  332. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentofu.js","sourceRoot":"","sources":["../../../src/adapters/state/opentofu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { ChildProcessWithoutNullStreams } from 'node:child_process';
2
+ import { StateMigrationError } from '../../domain/repair/stateful.js';
3
+ export declare class StateProcessTerminationError extends StateMigrationError {
4
+ readonly processRef: string;
5
+ constructor(processRef: string);
6
+ }
7
+ export declare function spawnOwnedStateProcess(request: {
8
+ executable: string;
9
+ args: readonly string[];
10
+ cwd: string;
11
+ environment: NodeJS.ProcessEnv;
12
+ role?: 'command' | 'lease';
13
+ }): ChildProcessWithoutNullStreams;
14
+ export declare function stopOwnedStateProcess(child: ChildProcessWithoutNullStreams, options?: {
15
+ immediate?: boolean;
16
+ cleanupMs?: number;
17
+ }): Promise<{
18
+ forced: boolean;
19
+ }>;
20
+ export declare function stopOwnedStateProcessesIn(directory: string, cleanupMs?: number): Promise<void>;
21
+ export declare function cleanupOwnedStateScratch(directory: string, cleanup: () => Promise<void>): Promise<void>;
22
+ export declare function terminateRegisteredStateProcess(pid: number): Promise<void>;
23
+ export declare class OwnedPrivateStateProcessRunner {
24
+ #private;
25
+ private readonly cleanupMs;
26
+ constructor(cleanupMs?: number);
27
+ quiesce(): Promise<void>;
28
+ run(request: {
29
+ executable: string;
30
+ args: readonly string[];
31
+ cwd: string;
32
+ environment: NodeJS.ProcessEnv;
33
+ stdin?: Uint8Array;
34
+ timeoutMs: number;
35
+ maximumBytes: number;
36
+ signal?: AbortSignal;
37
+ captureStderr?: boolean;
38
+ }): Promise<{
39
+ exitCode: number;
40
+ stdout: Uint8Array;
41
+ stderr: Uint8Array;
42
+ }>;
43
+ }
@@ -0,0 +1,252 @@
1
+ import spawn from 'cross-spawn';
2
+ import { randomUUID } from 'node:crypto';
3
+ import path from 'node:path';
4
+ import { StateMigrationError } from '../../domain/repair/stateful.js';
5
+ import { stateAssert } from '../../domain/repair/stateful-invariants.js';
6
+ const owned = new Map();
7
+ const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
8
+ export class StateProcessTerminationError extends StateMigrationError {
9
+ processRef;
10
+ constructor(processRef) {
11
+ super('process-tree-termination-unproven');
12
+ this.processRef = processRef;
13
+ }
14
+ }
15
+ function groupAbsent(group) {
16
+ if (group.groupGone)
17
+ return true;
18
+ if (group.spawnFailed && group.child.pid === undefined)
19
+ return true;
20
+ if (group.child.pid === undefined)
21
+ return false;
22
+ try {
23
+ process.kill(-group.child.pid, 0);
24
+ return false;
25
+ }
26
+ catch (error) {
27
+ if (error.code !== 'ESRCH')
28
+ return false;
29
+ group.groupGone = true;
30
+ return true;
31
+ }
32
+ }
33
+ function stopped(group) {
34
+ return groupAbsent(group) && (group.streamsClosed || group.spawnFailed);
35
+ }
36
+ function signalGroup(group, signal) {
37
+ if (group.child.pid === undefined || group.groupGone)
38
+ return;
39
+ try {
40
+ process.kill(-group.child.pid, signal);
41
+ }
42
+ catch (error) {
43
+ if (error.code !== 'ESRCH')
44
+ throw new StateProcessTerminationError(group.ref);
45
+ }
46
+ }
47
+ async function waitStopped(group, duration) {
48
+ const end = Date.now() + duration;
49
+ do {
50
+ if (stopped(group))
51
+ return true;
52
+ await delay(20);
53
+ } while (Date.now() < end);
54
+ return stopped(group);
55
+ }
56
+ async function proveTermination(group, immediate, cleanupMs) {
57
+ await group.ready;
58
+ if (!immediate && await waitStopped(group, 100)) {
59
+ owned.delete(group.child);
60
+ return { forced: false };
61
+ }
62
+ let signalled = false;
63
+ try {
64
+ signalGroup(group, 'SIGTERM');
65
+ signalled = true;
66
+ }
67
+ catch { /* The final proof, not signal delivery, determines success. */ }
68
+ if (await waitStopped(group, Math.min(200, cleanupMs))) {
69
+ owned.delete(group.child);
70
+ return { forced: signalled };
71
+ }
72
+ try {
73
+ signalGroup(group, 'SIGKILL');
74
+ }
75
+ catch { /* Retain the group if proof fails. */ }
76
+ if (await waitStopped(group, cleanupMs)) {
77
+ owned.delete(group.child);
78
+ return { forced: true };
79
+ }
80
+ // Keep ownership and pipe observers alive for an explicit later quiescence
81
+ // attempt. Closing inherited pipes here would manufacture a false proof.
82
+ throw new StateProcessTerminationError(group.ref);
83
+ }
84
+ export function spawnOwnedStateProcess(request) {
85
+ stateAssert(process.platform === 'darwin' || process.platform === 'linux', 'unsupported-native-platform');
86
+ let ready;
87
+ const started = new Promise((resolve) => { ready = resolve; });
88
+ // As in process-runner.ts, setsid owns the inherited process group. Pipes and
89
+ // the child remain referenced: this is not an unref'ed/background daemon.
90
+ const child = spawn(request.executable, [...request.args], {
91
+ cwd: request.cwd, env: { ...request.environment }, shell: false,
92
+ detached: true, windowsHide: true, stdio: ['pipe', 'pipe', 'pipe']
93
+ });
94
+ const group = {
95
+ ref: `state-process:${randomUUID()}`, child, cwd: path.resolve(request.cwd), ready: started,
96
+ rootExited: false, streamsClosed: false, exitCode: null, spawnFailed: false, groupGone: false,
97
+ role: request.role ?? 'command', terminating: null
98
+ };
99
+ owned.set(child, group);
100
+ child.once('spawn', ready);
101
+ child.once('error', () => { group.spawnFailed = true; group.rootExited = true; ready(); });
102
+ child.once('exit', (code) => { group.rootExited = true; group.exitCode = code; });
103
+ child.once('close', () => { group.streamsClosed = true; });
104
+ return child;
105
+ }
106
+ export async function stopOwnedStateProcess(child, options = {}) {
107
+ const group = owned.get(child);
108
+ if (!group)
109
+ return { forced: false };
110
+ const cleanupMs = options.cleanupMs ?? 2_000;
111
+ stateAssert(Number.isSafeInteger(cleanupMs) && cleanupMs >= 50 && cleanupMs <= 10_000, 'invalid-binding');
112
+ if (group.terminating)
113
+ return group.terminating;
114
+ group.terminating = proveTermination(group, options.immediate ?? true, cleanupMs);
115
+ try {
116
+ return await group.terminating;
117
+ }
118
+ finally {
119
+ group.terminating = null;
120
+ }
121
+ }
122
+ export async function stopOwnedStateProcessesIn(directory, cleanupMs = 2_000) {
123
+ const root = path.resolve(directory);
124
+ const groups = [...owned.values()].filter((group) => {
125
+ if (group.role !== 'command')
126
+ return false;
127
+ const relative = path.relative(root, group.cwd);
128
+ return relative === '' || (!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative));
129
+ });
130
+ const results = await Promise.allSettled(groups.map((group) => stopOwnedStateProcess(group.child, { cleanupMs })));
131
+ const failure = results.find((result) => result.status === 'rejected');
132
+ if (failure?.status === 'rejected')
133
+ throw failure.reason;
134
+ }
135
+ export async function cleanupOwnedStateScratch(directory, cleanup) {
136
+ await stopOwnedStateProcessesIn(directory);
137
+ await cleanup();
138
+ }
139
+ export async function terminateRegisteredStateProcess(pid) {
140
+ const group = [...owned.values()].find((entry) => entry.child.pid === pid);
141
+ stateAssert(group, 'process-tree-termination-unproven');
142
+ await stopOwnedStateProcess(group.child);
143
+ }
144
+ export class OwnedPrivateStateProcessRunner {
145
+ cleanupMs;
146
+ #children = new Set();
147
+ #generation = 0;
148
+ constructor(cleanupMs = 2_000) {
149
+ this.cleanupMs = cleanupMs;
150
+ }
151
+ async quiesce() {
152
+ this.#generation++;
153
+ const results = await Promise.allSettled([...this.#children].map(async (child) => {
154
+ await stopOwnedStateProcess(child, { cleanupMs: this.cleanupMs });
155
+ this.#children.delete(child);
156
+ }));
157
+ const failure = results.find((result) => result.status === 'rejected');
158
+ if (failure?.status === 'rejected')
159
+ throw failure.reason;
160
+ }
161
+ async run(request) {
162
+ stateAssert(Number.isSafeInteger(request.timeoutMs) && request.timeoutMs > 0 && request.timeoutMs <= 300_000
163
+ && Number.isSafeInteger(request.maximumBytes) && request.maximumBytes > 0, 'invalid-binding');
164
+ stateAssert(!request.signal?.aborted, 'cancelled');
165
+ if (this.#children.size) {
166
+ throw new StateProcessTerminationError(owned.get([...this.#children][0])?.ref ?? 'state-process:unproven');
167
+ }
168
+ const generation = this.#generation;
169
+ const child = spawnOwnedStateProcess(request);
170
+ this.#children.add(child);
171
+ return new Promise((resolve, reject) => {
172
+ const stdout = [];
173
+ const stderr = [];
174
+ const input = request.stdin ? Buffer.from(request.stdin) : undefined;
175
+ let bytes = 0;
176
+ let failure = null;
177
+ let exitCode = null;
178
+ let finishing = false;
179
+ let discarded = false;
180
+ const discard = () => {
181
+ discarded = true;
182
+ for (const buffer of [...stdout, ...stderr])
183
+ buffer.fill(0);
184
+ stdout.length = 0;
185
+ stderr.length = 0;
186
+ input?.fill(0);
187
+ };
188
+ const finish = async (immediate) => {
189
+ if (finishing)
190
+ return;
191
+ finishing = true;
192
+ try {
193
+ const termination = await stopOwnedStateProcess(child, { immediate, cleanupMs: this.cleanupMs });
194
+ this.#children.delete(child);
195
+ if (!failure && termination.forced)
196
+ failure = 'native-command-failed';
197
+ if (failure) {
198
+ discard();
199
+ reject(new StateMigrationError(failure));
200
+ }
201
+ else {
202
+ const result = { exitCode: exitCode ?? 1, stdout: Buffer.concat(stdout), stderr: Buffer.concat(stderr) };
203
+ discard();
204
+ resolve(result);
205
+ }
206
+ }
207
+ catch (error) {
208
+ discard();
209
+ reject(error instanceof StateProcessTerminationError ? error : new StateProcessTerminationError(`state-process:unproven`));
210
+ }
211
+ finally {
212
+ clearTimeout(timer);
213
+ request.signal?.removeEventListener('abort', abort);
214
+ }
215
+ };
216
+ const stop = (code) => {
217
+ failure ??= code;
218
+ discard();
219
+ void finish(true);
220
+ };
221
+ const abort = () => stop('cancelled');
222
+ const timer = setTimeout(() => stop('timeout'), request.timeoutMs);
223
+ const collect = (buffers, chunk, keep) => {
224
+ bytes += chunk.length;
225
+ if (discarded || failure || finishing && !owned.has(child)) {
226
+ chunk.fill(0);
227
+ return;
228
+ }
229
+ if (bytes > request.maximumBytes) {
230
+ chunk.fill(0);
231
+ stop('storage-limit');
232
+ return;
233
+ }
234
+ if (keep)
235
+ buffers.push(chunk);
236
+ else
237
+ chunk.fill(0);
238
+ };
239
+ child.stdout.on('data', (chunk) => collect(stdout, chunk, true));
240
+ child.stderr.on('data', (chunk) => collect(stderr, chunk, request.captureStderr !== false));
241
+ child.once('error', () => stop('native-command-failed'));
242
+ child.once('exit', (code) => { exitCode = code; void finish(false); });
243
+ child.stdin.on('error', () => stop('native-command-failed'));
244
+ request.signal?.addEventListener('abort', abort, { once: true });
245
+ if (request.signal?.aborted || generation !== this.#generation)
246
+ abort();
247
+ if (!failure)
248
+ child.stdin.end(input, () => input?.fill(0));
249
+ });
250
+ }
251
+ }
252
+ //# sourceMappingURL=owned-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owned-process.js","sourceRoot":"","sources":["../../../src/adapters/state/owned-process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const posixStateLockProgram: string;
@@ -0,0 +1,185 @@
1
+ // The protocol is pinned to OpenTofu 1.12.6 internal/flock and statemgr.
2
+ // lockf uses POSIX fcntl record locks, NOT BSD flock. The holder must never
3
+ // open/close another descriptor to its state inode: POSIX would drop its locks.
4
+ export const posixStateLockProgram = String.raw `
5
+ import base64, datetime, errno, fcntl, hashlib, json, os, select, signal, stat, sys, time
6
+
7
+ MAX = 32 * 1024 * 1024
8
+ fd = None
9
+ info_path = None
10
+ info_bytes = None
11
+ current_digest = None
12
+
13
+ class Blocked(Exception):
14
+ def __init__(self, code):
15
+ self.code = code
16
+
17
+ def emit(value):
18
+ sys.stdout.write(json.dumps(value, separators=(",", ":")) + "\n")
19
+ sys.stdout.flush()
20
+
21
+ def version(s):
22
+ value = {"dev": str(s.st_dev), "ino": str(s.st_ino), "size": str(s.st_size),
23
+ "mtime": str(s.st_mtime_ns), "ctime": str(s.st_ctime_ns)}
24
+ return hashlib.sha256(json.dumps(value, sort_keys=True, separators=(",", ":")).encode()).hexdigest()
25
+
26
+ def read_state():
27
+ s = os.fstat(fd)
28
+ if not stat.S_ISREG(s.st_mode) or s.st_nlink != 1 or s.st_size > MAX:
29
+ raise Blocked("unsafe-path")
30
+ pieces = []
31
+ offset = 0
32
+ while offset < s.st_size:
33
+ part = os.pread(fd, min(65536, s.st_size - offset), offset)
34
+ if not part:
35
+ raise Blocked("stale-state")
36
+ pieces.append(part)
37
+ offset += len(part)
38
+ return b"".join(pieces)
39
+
40
+ def assert_path():
41
+ s = os.fstat(fd)
42
+ p = os.lstat(target)
43
+ if not stat.S_ISREG(p.st_mode) or p.st_nlink != 1 or (s.st_dev, s.st_ino) != (p.st_dev, p.st_ino):
44
+ raise Blocked("lock-lost")
45
+ if os.path.realpath(os.path.dirname(target)) != os.path.dirname(target):
46
+ raise Blocked("lock-lost")
47
+ with open(info_path, "rb") as marker:
48
+ if marker.read(8193) != info_bytes:
49
+ raise Blocked("lock-lost")
50
+ # Reassert on the SAME descriptor. No additional state fd is opened.
51
+ fcntl.lockf(fd, fcntl.LOCK_EX | fcntl.LOCK_NB, 0, 0, os.SEEK_SET)
52
+ return s
53
+
54
+ def terminate(_number, _frame):
55
+ raise Blocked("cancelled")
56
+
57
+ signal.signal(signal.SIGTERM, terminate)
58
+ signal.signal(signal.SIGINT, terminate)
59
+
60
+ try:
61
+ if sys.platform != "darwin":
62
+ raise Blocked("unsupported-native-platform")
63
+ if sys.version_info[:2] != (3, 14):
64
+ raise Blocked("native-lock-provider-required")
65
+ opening = sys.stdin.buffer.readline(16385)
66
+ if len(opening) > 16384:
67
+ raise Blocked("storage-limit")
68
+ request = json.loads(opening)
69
+ target = request["path"]
70
+ operation = request["operationId"]
71
+ if not os.path.isabs(target) or os.path.realpath(os.path.dirname(target)) != os.path.dirname(target):
72
+ raise Blocked("unsafe-path")
73
+ before = os.lstat(target)
74
+ if not stat.S_ISREG(before.st_mode) or before.st_nlink != 1 or before.st_uid != os.getuid() or before.st_mode & 0o077:
75
+ raise Blocked("unsafe-path")
76
+ fd = os.open(target, os.O_RDWR | os.O_NOFOLLOW)
77
+ try:
78
+ fcntl.lockf(fd, fcntl.LOCK_EX | fcntl.LOCK_NB, 0, 0, os.SEEK_SET)
79
+ except OSError as error:
80
+ if error.errno in (errno.EACCES, errno.EAGAIN):
81
+ raise Blocked("lock-unavailable")
82
+ raise
83
+ held = os.fstat(fd)
84
+ if (held.st_dev, held.st_ino) != (before.st_dev, before.st_ino) or version(held) != request["expectedVersion"]:
85
+ raise Blocked("stale-state")
86
+ current_digest = hashlib.sha256(read_state()).hexdigest()
87
+ name = os.path.basename(target)
88
+ if name.startswith("."):
89
+ name = name[1:]
90
+ info_path = os.path.join(os.path.dirname(target), "." + name + ".lock.info")
91
+ info = {"ID": operation, "Operation": "liftoff-state-migration", "Info": "Protected existing-inode POSIX lock",
92
+ "Who": "liftoff:" + str(os.getuid()), "Version": "1.12.6",
93
+ "Created": datetime.datetime.now(datetime.timezone.utc).isoformat(), "Path": target,
94
+ "LiftoffProtocol": "opentofu-1.12.6-posix-fcntl"}
95
+ info_bytes = json.dumps(info, sort_keys=True, separators=(",", ":")).encode()
96
+ try:
97
+ marker_fd = os.open(info_path, os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW, 0o600)
98
+ except FileExistsError:
99
+ # An unknown/stale marker is not permission to delete somebody else's record.
100
+ info_bytes = None
101
+ raise Blocked("lock-unavailable")
102
+ try:
103
+ os.write(marker_fd, info_bytes)
104
+ os.fsync(marker_fd)
105
+ finally:
106
+ os.close(marker_fd)
107
+ emit({"ok": True, "version": version(held)})
108
+ deadline = time.monotonic() + min(int(request.get("holdSeconds", 1800)), 1800)
109
+ while True:
110
+ remaining = deadline - time.monotonic()
111
+ if remaining <= 0:
112
+ raise Blocked("timeout")
113
+ ready, _, _ = select.select([sys.stdin.buffer], [], [], remaining)
114
+ if not ready:
115
+ raise Blocked("timeout")
116
+ line = sys.stdin.buffer.readline(MAX * 2 + 1)
117
+ if not line:
118
+ break
119
+ if len(line) > MAX * 2:
120
+ raise Blocked("storage-limit")
121
+ command = json.loads(line)
122
+ action = command["action"]
123
+ if action == "release":
124
+ emit({"ok": True})
125
+ break
126
+ observed = assert_path()
127
+ if action == "assert":
128
+ emit({"ok": True, "version": version(observed)})
129
+ continue
130
+ if action != "replace":
131
+ raise Blocked("unsupported-local-state-operation")
132
+ if version(observed) != command["expectedVersion"]:
133
+ raise Blocked("stale-state")
134
+ prior = read_state()
135
+ if hashlib.sha256(prior).hexdigest() != current_digest:
136
+ raise Blocked("stale-state")
137
+ candidate = base64.b64decode(command["bytes"], validate=True)
138
+ if not candidate or len(candidate) > MAX:
139
+ raise Blocked("storage-limit")
140
+ old_state, new_state = json.loads(prior), json.loads(candidate)
141
+ if old_state.get("version") != 4 or new_state.get("version") != 4:
142
+ raise Blocked("unsupported-state")
143
+ if old_state.get("lineage") != new_state.get("lineage") or new_state.get("serial", -1) < old_state.get("serial", 0):
144
+ raise Blocked("stale-state")
145
+ assert_path()
146
+ # OpenTofu also writes in place. Rename/unlink would replace the inode
147
+ # and let a second native writer bypass the lock. This is NOT atomic.
148
+ previous_mask = signal.pthread_sigmask(signal.SIG_BLOCK, {signal.SIGTERM, signal.SIGINT})
149
+ try:
150
+ os.ftruncate(fd, 0)
151
+ offset = 0
152
+ while offset < len(candidate):
153
+ count = os.pwrite(fd, candidate[offset:], offset)
154
+ if count <= 0:
155
+ raise Blocked("operation-failed")
156
+ offset += count
157
+ os.fsync(fd)
158
+ current_digest = hashlib.sha256(candidate).hexdigest()
159
+ finally:
160
+ signal.pthread_sigmask(signal.SIG_SETMASK, previous_mask)
161
+ emit({"ok": True, "version": version(os.fstat(fd)), "digest": current_digest})
162
+ except Blocked as error:
163
+ emit({"ok": False, "code": error.code})
164
+ except FileNotFoundError:
165
+ emit({"ok": False, "code": "unsupported-local-state-operation"})
166
+ except Exception:
167
+ emit({"ok": False, "code": "operation-failed"})
168
+ finally:
169
+ if fd is not None:
170
+ if info_path and info_bytes:
171
+ try:
172
+ entry = os.lstat(info_path)
173
+ if stat.S_ISREG(entry.st_mode) and entry.st_nlink == 1:
174
+ with open(info_path, "rb") as marker:
175
+ matches = marker.read(8193) == info_bytes
176
+ if matches:
177
+ os.unlink(info_path)
178
+ except Exception:
179
+ pass
180
+ try:
181
+ fcntl.lockf(fd, fcntl.LOCK_UN, 0, 0, os.SEEK_SET)
182
+ finally:
183
+ os.close(fd)
184
+ `;
185
+ //# sourceMappingURL=posix-lock-program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posix-lock-program.js","sourceRoot":"","sources":["../../../src/adapters/state/posix-lock-program.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,4EAA4E;AAC5E,gFAAgF;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoL9C,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type NativeLocalStateLockProvider, type StateRegisteredExecutable } from '../../domain/repair/stateful.js';
2
+ export declare class DarwinPosixStateLockProvider implements NativeLocalStateLockProvider {
3
+ private readonly options;
4
+ readonly capabilities: Readonly<{
5
+ protocol: "opentofu-1.12.6-posix-fcntl";
6
+ existingInPlace: true;
7
+ createAbsent: false;
8
+ remove: false;
9
+ }>;
10
+ constructor(options: {
11
+ python: StateRegisteredExecutable;
12
+ timeoutMs?: number;
13
+ });
14
+ acquire(request: Parameters<NativeLocalStateLockProvider['acquire']>[0]): ReturnType<NativeLocalStateLockProvider['acquire']>;
15
+ }