@msn-control/liftoff 0.11.3 → 0.12.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 (326) hide show
  1. package/DEVELOPER.md +19 -18
  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/cli/args/definitions.js +11 -3
  117. package/dist/cli/args/definitions.js.map +1 -1
  118. package/dist/cli/args/parser.js +29 -3
  119. package/dist/cli/args/parser.js.map +1 -1
  120. package/dist/domain/governance/activation/approvals.d.ts +264 -7
  121. package/dist/domain/governance/activation/approvals.js +166 -23
  122. package/dist/domain/governance/activation/approvals.js.map +1 -1
  123. package/dist/domain/governance/activation/capabilities.js +5 -2
  124. package/dist/domain/governance/activation/capabilities.js.map +1 -1
  125. package/dist/domain/governance/activation/evidence.d.ts +2 -1
  126. package/dist/domain/governance/activation/evidence.js +64 -11
  127. package/dist/domain/governance/activation/evidence.js.map +1 -1
  128. package/dist/domain/governance/activation/graph.d.ts +11 -384
  129. package/dist/domain/governance/activation/graph.js +424 -379
  130. package/dist/domain/governance/activation/graph.js.map +1 -1
  131. package/dist/domain/governance/activation/inputs.d.ts +3 -1
  132. package/dist/domain/governance/activation/inputs.js +47 -6
  133. package/dist/domain/governance/activation/inputs.js.map +1 -1
  134. package/dist/domain/governance/activation/operations.d.ts +4 -1
  135. package/dist/domain/governance/activation/operations.js +110 -22
  136. package/dist/domain/governance/activation/operations.js.map +1 -1
  137. package/dist/domain/governance/activation/readiness.d.ts +10 -0
  138. package/dist/domain/governance/activation/readiness.js +77 -38
  139. package/dist/domain/governance/activation/readiness.js.map +1 -1
  140. package/dist/domain/governance/activation/types.d.ts +151 -9
  141. package/dist/domain/governance/activation/types.js +23 -1
  142. package/dist/domain/governance/activation/types.js.map +1 -1
  143. package/dist/domain/governance/activation/validators.d.ts +4 -1
  144. package/dist/domain/governance/activation/validators.js +419 -26
  145. package/dist/domain/governance/activation/validators.js.map +1 -1
  146. package/dist/domain/governance/policy/identity.d.ts +55 -13
  147. package/dist/domain/governance/policy/identity.js +28 -8
  148. package/dist/domain/governance/policy/identity.js.map +1 -1
  149. package/dist/domain/project/artifact-lifecycle.d.ts +2 -1
  150. package/dist/domain/project/artifact-lifecycle.js +7 -1
  151. package/dist/domain/project/artifact-lifecycle.js.map +1 -1
  152. package/dist/domain/project/catalog.d.ts +50 -1
  153. package/dist/domain/project/catalog.js +104 -4
  154. package/dist/domain/project/catalog.js.map +1 -1
  155. package/dist/domain/project/contracts.d.ts +9 -1
  156. package/dist/domain/project/infrastructure-layout.d.ts +1 -1
  157. package/dist/domain/project/infrastructure-layout.js +2 -1
  158. package/dist/domain/project/infrastructure-layout.js.map +1 -1
  159. package/dist/domain/project/manifest/governance.d.ts +1 -1
  160. package/dist/domain/project/manifest/governance.js +9 -10
  161. package/dist/domain/project/manifest/governance.js.map +1 -1
  162. package/dist/domain/project/planning.js +4 -5
  163. package/dist/domain/project/planning.js.map +1 -1
  164. package/dist/domain/repair/stateful-bounded.d.ts +1 -0
  165. package/dist/domain/repair/stateful-bounded.js +37 -0
  166. package/dist/domain/repair/stateful-bounded.js.map +1 -0
  167. package/dist/domain/repair/stateful-invariants.d.ts +28 -0
  168. package/dist/domain/repair/stateful-invariants.js +278 -0
  169. package/dist/domain/repair/stateful-invariants.js.map +1 -0
  170. package/dist/domain/repair/stateful.d.ts +690 -0
  171. package/dist/domain/repair/stateful.js +26 -0
  172. package/dist/domain/repair/stateful.js.map +1 -0
  173. package/dist/domain/workstation/constraints.d.ts +1 -0
  174. package/dist/domain/workstation/constraints.js.map +1 -1
  175. package/dist/domain/workstation/contracts.d.ts +42 -0
  176. package/dist/domain/workstation/contracts.js +2 -0
  177. package/dist/domain/workstation/contracts.js.map +1 -0
  178. package/dist/domain/workstation/executables.d.ts +19 -0
  179. package/dist/domain/workstation/executables.js +68 -0
  180. package/dist/domain/workstation/executables.js.map +1 -0
  181. package/dist/domain/workstation/versions.d.ts +8 -0
  182. package/dist/domain/workstation/versions.js +145 -0
  183. package/dist/domain/workstation/versions.js.map +1 -0
  184. package/dist/framework-adapters.d.ts +2 -0
  185. package/dist/framework-adapters.js +148 -22
  186. package/dist/framework-adapters.js.map +1 -1
  187. package/dist/framework-validation.d.ts +6 -0
  188. package/dist/framework-validation.js +89 -24
  189. package/dist/framework-validation.js.map +1 -1
  190. package/dist/generators/common/base.js +57 -17
  191. package/dist/generators/common/base.js.map +1 -1
  192. package/dist/governance-activation/activation-state.js +39 -7
  193. package/dist/governance-activation/activation-state.js.map +1 -1
  194. package/dist/governance-activation/authority-records.d.ts +4 -0
  195. package/dist/governance-activation/authority-records.js +24 -0
  196. package/dist/governance-activation/authority-records.js.map +1 -0
  197. package/dist/governance-activation/commands.d.ts +9 -1
  198. package/dist/governance-activation/commands.js +392 -97
  199. package/dist/governance-activation/commands.js.map +1 -1
  200. package/dist/governance-activation/compatibility.d.ts +11 -8
  201. package/dist/governance-activation/compatibility.js +37 -23
  202. package/dist/governance-activation/compatibility.js.map +1 -1
  203. package/dist/governance-activation/doctor.js +40 -16
  204. package/dist/governance-activation/doctor.js.map +1 -1
  205. package/dist/governance-activation/github-config.d.ts +17 -0
  206. package/dist/governance-activation/github-config.js +88 -0
  207. package/dist/governance-activation/github-config.js.map +1 -0
  208. package/dist/governance-activation/github-discovery.d.ts +18 -0
  209. package/dist/governance-activation/github-discovery.js +229 -0
  210. package/dist/governance-activation/github-discovery.js.map +1 -0
  211. package/dist/governance-activation/github-ports.d.ts +12 -0
  212. package/dist/governance-activation/github-ports.js +4 -0
  213. package/dist/governance-activation/github-ports.js.map +1 -0
  214. package/dist/governance-activation/github-publication.d.ts +3 -0
  215. package/dist/governance-activation/github-publication.js +190 -0
  216. package/dist/governance-activation/github-publication.js.map +1 -0
  217. package/dist/governance-activation/historical-common.d.ts +98 -0
  218. package/dist/governance-activation/historical-common.js +269 -0
  219. package/dist/governance-activation/historical-common.js.map +1 -0
  220. package/dist/governance-activation/historical-credential-policy.d.ts +3 -0
  221. package/dist/governance-activation/historical-credential-policy.js +91 -0
  222. package/dist/governance-activation/historical-credential-policy.js.map +1 -0
  223. package/dist/governance-activation/historical-inputs.d.ts +6 -0
  224. package/dist/governance-activation/historical-inputs.js +57 -0
  225. package/dist/governance-activation/historical-inputs.js.map +1 -0
  226. package/dist/governance-activation/historical-safety.d.ts +9 -0
  227. package/dist/governance-activation/historical-safety.js +102 -0
  228. package/dist/governance-activation/historical-safety.js.map +1 -0
  229. package/dist/governance-activation/historical-source-metadata.d.ts +31 -0
  230. package/dist/governance-activation/historical-source-metadata.js +55 -0
  231. package/dist/governance-activation/historical-source-metadata.js.map +1 -0
  232. package/dist/governance-activation/historical-state.d.ts +12 -50
  233. package/dist/governance-activation/historical-state.js +195 -308
  234. package/dist/governance-activation/historical-state.js.map +1 -1
  235. package/dist/governance-activation/historical-v1-auxiliary.d.ts +1 -0
  236. package/dist/governance-activation/historical-v1-auxiliary.js +43 -0
  237. package/dist/governance-activation/historical-v1-auxiliary.js.map +1 -0
  238. package/dist/governance-activation/historical-v1-phase-contracts.d.ts +31 -0
  239. package/dist/governance-activation/historical-v1-phase-contracts.js +46 -0
  240. package/dist/governance-activation/historical-v1-phase-contracts.js.map +1 -0
  241. package/dist/governance-activation/historical-v2.d.ts +53 -0
  242. package/dist/governance-activation/historical-v2.js +313 -0
  243. package/dist/governance-activation/historical-v2.js.map +1 -0
  244. package/dist/governance-activation/history-contracts.d.ts +21 -12
  245. package/dist/governance-activation/history-contracts.js +99 -27
  246. package/dist/governance-activation/history-contracts.js.map +1 -1
  247. package/dist/governance-activation/inputs.d.ts +8 -2
  248. package/dist/governance-activation/inputs.js +41 -6
  249. package/dist/governance-activation/inputs.js.map +1 -1
  250. package/dist/governance-activation/migration-history.d.ts +43 -5
  251. package/dist/governance-activation/migration-history.js +231 -50
  252. package/dist/governance-activation/migration-history.js.map +1 -1
  253. package/dist/governance-activation/migration.d.ts +7 -4
  254. package/dist/governance-activation/migration.js +53 -252
  255. package/dist/governance-activation/migration.js.map +1 -1
  256. package/dist/governance-activation/phase-azure.d.ts +3 -0
  257. package/dist/governance-activation/phase-azure.js +205 -0
  258. package/dist/governance-activation/phase-azure.js.map +1 -0
  259. package/dist/governance-activation/phase-bootstrap-state.js +3 -0
  260. package/dist/governance-activation/phase-bootstrap-state.js.map +1 -1
  261. package/dist/governance-activation/phase-github.d.ts +3 -0
  262. package/dist/governance-activation/phase-github.js +192 -0
  263. package/dist/governance-activation/phase-github.js.map +1 -0
  264. package/dist/governance-activation/phase-governance.js +8 -2
  265. package/dist/governance-activation/phase-governance.js.map +1 -1
  266. package/dist/governance-activation/public-plans.d.ts +36 -0
  267. package/dist/governance-activation/public-plans.js +100 -0
  268. package/dist/governance-activation/public-plans.js.map +1 -0
  269. package/dist/governance-activation/read-only.d.ts +3 -1
  270. package/dist/governance-activation/read-only.js +7 -3
  271. package/dist/governance-activation/read-only.js.map +1 -1
  272. package/dist/governance-activation/reconciliation.js +10 -0
  273. package/dist/governance-activation/reconciliation.js.map +1 -1
  274. package/dist/governance-activation/seed-lifecycle.js +14 -25
  275. package/dist/governance-activation/seed-lifecycle.js.map +1 -1
  276. package/dist/governance-activation/source-of-truth.d.ts +21 -5
  277. package/dist/governance-activation/source-of-truth.js +102 -13
  278. package/dist/governance-activation/source-of-truth.js.map +1 -1
  279. package/dist/governance-activation/task-projection.d.ts +4 -1
  280. package/dist/governance-activation/task-projection.js +32 -3
  281. package/dist/governance-activation/task-projection.js.map +1 -1
  282. package/dist/governance-activation/task-writes.d.ts +42 -0
  283. package/dist/governance-activation/task-writes.js +250 -0
  284. package/dist/governance-activation/task-writes.js.map +1 -0
  285. package/dist/governance-activation/transition-files.d.ts +12 -0
  286. package/dist/governance-activation/transition-files.js +109 -0
  287. package/dist/governance-activation/transition-files.js.map +1 -0
  288. package/dist/governance-activation/transition-planning.d.ts +3 -1
  289. package/dist/governance-activation/transition-planning.js +158 -20
  290. package/dist/governance-activation/transition-planning.js.map +1 -1
  291. package/dist/governance-activation/transition-ports.d.ts +31 -3
  292. package/dist/governance-activation/transition-records.d.ts +11 -1
  293. package/dist/governance-activation/transition-records.js +52 -6
  294. package/dist/governance-activation/transition-records.js.map +1 -1
  295. package/dist/governance-activation/transitions.d.ts +5 -0
  296. package/dist/governance-activation/transitions.js +271 -37
  297. package/dist/governance-activation/transitions.js.map +1 -1
  298. package/dist/governance-assessment/engine.js +22 -15
  299. package/dist/governance-assessment/engine.js.map +1 -1
  300. package/dist/governance-assessment/project.d.ts +2 -0
  301. package/dist/governance-assessment/project.js +2 -1
  302. package/dist/governance-assessment/project.js.map +1 -1
  303. package/dist/interactive.d.ts +0 -1
  304. package/dist/interactive.js +3 -22
  305. package/dist/interactive.js.map +1 -1
  306. package/dist/openspec-profile.d.ts +2 -1
  307. package/dist/openspec-profile.js +11 -41
  308. package/dist/openspec-profile.js.map +1 -1
  309. package/dist/repository-governance.d.ts +10 -5
  310. package/dist/repository-governance.js +178 -92
  311. package/dist/repository-governance.js.map +1 -1
  312. package/dist/telemetry/contract.d.ts +1 -1
  313. package/dist/telemetry/contract.js +3 -0
  314. package/dist/telemetry/contract.js.map +1 -1
  315. package/dist/workstation-catalog.d.ts +13 -1
  316. package/dist/workstation-catalog.js +122 -0
  317. package/dist/workstation-catalog.js.map +1 -1
  318. package/dist/workstation.d.ts +69 -14
  319. package/dist/workstation.js +600 -215
  320. package/dist/workstation.js.map +1 -1
  321. package/docs/cli-reference.md +59 -21
  322. package/docs/configuration-and-manifests.md +9 -8
  323. package/docs/prerequisites.md +93 -18
  324. package/docs/repository-governance.md +68 -40
  325. package/docs/spec-workflows-and-agents.md +132 -13
  326. package/package.json +1 -1
@@ -0,0 +1,690 @@
1
+ export declare const statefulRecipeVersion: 'opentofu-state-migration/1';
2
+ export type StateRecipe = 'address-refactor' | 'backend-relocation' | 'state-partition';
3
+ export type StateBackendKind = 'local' | 'azurerm';
4
+ export type StateAuthorityKind = 'state-read' | 'state-write' | 'state-recovery' | 'state-disposal';
5
+ export type StateArtifactPurpose = 'inspection' | 'state' | 'plan' | 'journal' | 'backup' | 'candidate' | 'recovery';
6
+ export type StateArtifactRef = string;
7
+ interface StateBackendBase {
8
+ id: string;
9
+ ownerId: string;
10
+ format: 'opentofu-v4-json';
11
+ }
12
+ export interface LocalStateBinding extends StateBackendBase {
13
+ kind: 'local';
14
+ statePath: string;
15
+ readOnlySource?: boolean;
16
+ }
17
+ export interface AzureBlobStateBinding extends StateBackendBase {
18
+ kind: 'azurerm';
19
+ tenantId: string;
20
+ subscriptionId: string;
21
+ resourceGroup: string;
22
+ account: string;
23
+ container: string;
24
+ key: string;
25
+ network: 'private' | 'public';
26
+ }
27
+ export type StateBackendBinding = LocalStateBinding | AzureBlobStateBinding;
28
+ export interface StateExecutionContext {
29
+ projectRoot: string;
30
+ projectId: string;
31
+ configurationDigest: string;
32
+ artifactDigest: string;
33
+ cliDigest: string;
34
+ hostId: string;
35
+ principalId: string;
36
+ }
37
+ export interface StateAuthority {
38
+ kind: StateAuthorityKind;
39
+ fingerprint: string;
40
+ expiresAt: number;
41
+ }
42
+ export declare const stateFailureCodes: readonly ['invalid-binding', 'duplicate-binding', 'unsupported-backend', 'unsupported-encryption', 'live-scope-required', 'state-read-approval-required', 'approval-mismatch', 'expired', 'protected-workspace-required', 'key-unavailable', 'unsafe-path', 'storage-limit', 'artifact-integrity', 'artifact-purpose', 'access-denied', 'incomplete-observation', 'stale-state', 'lock-unavailable', 'lock-lost', 'native-lock-provider-required', 'invalid-state', 'unsupported-state', 'mapping-incomplete', 'mapping-conflict', 'resource-change', 'resource-identity-changed', 'destination-conflict', 'configuration-changed', 'unsafe-planning-contract', 'unqualified-combination', 'tool-unavailable', 'native-command-failed', 'timeout', 'cancelled', 'writers-not-quiesced', 'verification-incomplete', 'recovery-required', 'recovery-conflict', 'not-due', 'ownership-mismatch', 'operation-failed', 'unsupported-local-state-operation', 'unsupported-native-platform', 'process-tree-termination-unproven'];
43
+ export type StateFailureCode = typeof stateFailureCodes[number];
44
+ export interface StateBlocker {
45
+ code: StateFailureCode;
46
+ backendRef?: string;
47
+ }
48
+ export declare class StateMigrationError extends Error {
49
+ readonly code: StateFailureCode;
50
+ constructor(code: StateFailureCode);
51
+ }
52
+ export interface StateBackendMetadata {
53
+ backendId: string;
54
+ bindingDigest: string;
55
+ exists: boolean;
56
+ version: string | null;
57
+ etag: string | null;
58
+ size: number;
59
+ observedAt: number;
60
+ operationId?: string;
61
+ }
62
+ export interface StateSnapshot extends StateBackendMetadata {
63
+ lineage: string | null;
64
+ serial: number | null;
65
+ digest: string | null;
66
+ inventoryDigest: string;
67
+ }
68
+ export interface StateInstance {
69
+ address: string;
70
+ mode: 'managed' | 'data';
71
+ type: string;
72
+ provider: string;
73
+ identityDigest: string;
74
+ valueDigest: string;
75
+ }
76
+ export interface InspectedState {
77
+ snapshot: StateSnapshot;
78
+ instances: readonly StateInstance[];
79
+ stateRef: StateArtifactRef | null;
80
+ }
81
+ export interface StateInspectionRecord {
82
+ schemaVersion: 1;
83
+ context: StateExecutionContext;
84
+ bindings: readonly StateBackendBinding[];
85
+ states: readonly InspectedState[];
86
+ readFingerprint: string;
87
+ live: boolean;
88
+ expiresAt: number;
89
+ }
90
+ export interface StateMetadataResult {
91
+ schemaVersion: 1;
92
+ operationKind: 'state-metadata';
93
+ contextDigest: string;
94
+ bindingsDigest: string;
95
+ fingerprint: string;
96
+ observations: readonly StateBackendMetadata[];
97
+ expiresAt: number;
98
+ blockers: readonly StateBlocker[];
99
+ }
100
+ export interface StateInspectionResult {
101
+ schemaVersion: 1;
102
+ operationKind: 'state-inspection';
103
+ inspectionRef: StateArtifactRef;
104
+ fingerprint: string;
105
+ workspaceRef: string;
106
+ states: readonly {
107
+ backendRef: string;
108
+ exists: boolean;
109
+ stateDigest: string | null;
110
+ inventoryDigest: string;
111
+ instanceCount: number;
112
+ serial: number | null;
113
+ lineageDigest: string | null;
114
+ }[];
115
+ expiresAt: number;
116
+ }
117
+ export interface StateInstanceMapping {
118
+ sourceAddress: string;
119
+ destinationBackendId: string;
120
+ destinationAddress: string;
121
+ disposition: 'move' | 'preserve';
122
+ }
123
+ export interface StateMigrationIntent {
124
+ recipe: StateRecipe;
125
+ sourceBackendId: string;
126
+ destinationBackendIds: readonly string[];
127
+ mappings: readonly StateInstanceMapping[];
128
+ sourceConfigurationRef: string;
129
+ targetConfigurationRefs: Readonly<Record<string, string>>;
130
+ targetConfigurationDigest: string;
131
+ targetInventoryDigest: string;
132
+ writerInventoryDigest: string;
133
+ retentionMs: number;
134
+ recovery: readonly ('forward' | 'remove-new-destinations')[];
135
+ }
136
+ export interface StateNativeReview {
137
+ configurationDigest: string;
138
+ configurationDigests: Readonly<Record<string, string>>;
139
+ contractDigest: string;
140
+ savedPlanRefs: readonly StateArtifactRef[];
141
+ savedPlanDigests: readonly string[];
142
+ }
143
+ export interface StateMigrationPlan {
144
+ schemaVersion: 1;
145
+ recipeVersion: typeof statefulRecipeVersion;
146
+ context: StateExecutionContext;
147
+ inspectionRef: StateArtifactRef;
148
+ inspection: StateInspectionRecord;
149
+ intent: StateMigrationIntent;
150
+ review: StateNativeReview;
151
+ fingerprint: string;
152
+ expiresAt: number;
153
+ }
154
+ export interface StatePlanResult {
155
+ schemaVersion: 1;
156
+ operationKind: 'stateful-migration';
157
+ executable: boolean;
158
+ planRef: StateArtifactRef | null;
159
+ fingerprint: string | null;
160
+ recipe: StateRecipe;
161
+ recipeVersion: typeof statefulRecipeVersion;
162
+ authority: 'state-write';
163
+ workspaceRef: string;
164
+ mappingDigest: string;
165
+ sourceRef: string;
166
+ destinationRefs: readonly string[];
167
+ instanceCount: number;
168
+ expiresAt: number;
169
+ blockers: readonly StateBlocker[];
170
+ }
171
+ export interface StateBackendLease {
172
+ readonly backendId: string;
173
+ readonly kind: 'native-file' | 'blob-lease' | 'conditional-create';
174
+ assertHeld(signal?: AbortSignal): Promise<void>;
175
+ release(): Promise<void>;
176
+ }
177
+ /** Adapter payloads are private; only application result projections may be rendered. */
178
+ export interface StateBackendAdapter {
179
+ readonly binding: StateBackendBinding;
180
+ metadata(context: StateExecutionContext, signal?: AbortSignal): Promise<StateBackendMetadata>;
181
+ assertAccess(context: StateExecutionContext, write: boolean, signal?: AbortSignal): Promise<void>;
182
+ readPrivate(expected: StateBackendMetadata, context: StateExecutionContext, lease?: StateBackendLease, signal?: AbortSignal): Promise<Uint8Array>;
183
+ acquire(expected: StateBackendMetadata, context: StateExecutionContext, operationId: string, signal?: AbortSignal): Promise<StateBackendLease>;
184
+ writePrivate(request: {
185
+ bytes: Uint8Array;
186
+ expected: StateSnapshot;
187
+ lease: StateBackendLease;
188
+ context: StateExecutionContext;
189
+ operationId: string;
190
+ signal?: AbortSignal;
191
+ }): Promise<StateBackendMetadata>;
192
+ remove(request: {
193
+ expected: StateSnapshot;
194
+ lease: StateBackendLease;
195
+ context: StateExecutionContext;
196
+ operationId: string;
197
+ signal?: AbortSignal;
198
+ }): Promise<StateBackendMetadata>;
199
+ }
200
+ export interface StateArtifactDescriptor {
201
+ ref: StateArtifactRef;
202
+ digest: string;
203
+ purpose: StateArtifactPurpose;
204
+ scope: string;
205
+ }
206
+ export interface ProtectedStateWorkspace {
207
+ readonly workspaceRef: string;
208
+ assertAvailable(context: StateExecutionContext): Promise<void>;
209
+ put(purpose: StateArtifactPurpose, scope: string, bytes: Uint8Array, id?: string): Promise<StateArtifactDescriptor>;
210
+ get(ref: StateArtifactRef, purpose: StateArtifactPurpose, scope: string): Promise<Uint8Array>;
211
+ describe(ref: StateArtifactRef, purpose: StateArtifactPurpose, scope: string): Promise<StateArtifactDescriptor | null>;
212
+ replace(ref: StateArtifactRef, purpose: StateArtifactPurpose, scope: string, previousDigest: string, bytes: Uint8Array): Promise<StateArtifactDescriptor>;
213
+ removeExact(descriptor: StateArtifactDescriptor): Promise<void>;
214
+ withScratch<T>(context: StateExecutionContext, action: (directory: string) => Promise<T>): Promise<T>;
215
+ }
216
+ export interface PreparedStateMigration {
217
+ candidates: Readonly<Record<string, InspectedState>>;
218
+ verificationDigest: string;
219
+ }
220
+ export interface StateNativeDriver {
221
+ quiesce?(): Promise<void>;
222
+ review(plan: {
223
+ context: StateExecutionContext;
224
+ inspection: StateInspectionRecord;
225
+ intent: StateMigrationIntent;
226
+ signal?: AbortSignal;
227
+ }): Promise<StateNativeReview>;
228
+ prepare(plan: StateMigrationPlan, signal?: AbortSignal): Promise<PreparedStateMigration>;
229
+ verifyDestinations(plan: StateMigrationPlan, current: Readonly<Record<string, InspectedState>>, signal?: AbortSignal): Promise<string>;
230
+ verify(plan: StateMigrationPlan, current: Readonly<Record<string, InspectedState>>, signal?: AbortSignal): Promise<string>;
231
+ }
232
+ export interface StateWriterCoordinator {
233
+ inspectConfiguration(context: StateExecutionContext, signal?: AbortSignal): Promise<string>;
234
+ quiesce(request: {
235
+ operationId: string;
236
+ context: StateExecutionContext;
237
+ backendIds: readonly string[];
238
+ writerInventoryDigest: string;
239
+ signal?: AbortSignal;
240
+ }): Promise<string>;
241
+ assertQuiesced(handle: string, writerInventoryDigest: string, signal?: AbortSignal): Promise<void>;
242
+ commitConfiguration(request: {
243
+ operationId: string;
244
+ writerHandle: string;
245
+ beforeDigest: string;
246
+ afterDigest: string;
247
+ mappingDigest: string;
248
+ signal?: AbortSignal;
249
+ }): Promise<void>;
250
+ verifyCutover(request: {
251
+ operationId: string;
252
+ writerHandle: string;
253
+ configurationDigest: string;
254
+ mappingDigest: string;
255
+ signal?: AbortSignal;
256
+ }): Promise<string>;
257
+ publishInventory(request: {
258
+ operationId: string;
259
+ planFingerprint: string;
260
+ inventoryDigest: string;
261
+ verificationDigest: string;
262
+ signal?: AbortSignal;
263
+ }): Promise<void>;
264
+ resume(request: {
265
+ operationId: string;
266
+ writerHandle: string;
267
+ configurationDigest: string;
268
+ signal?: AbortSignal;
269
+ }): Promise<void>;
270
+ }
271
+ export type StateCheckpointKind = 'started' | 'writers-pause-intent' | 'writers-paused' | 'backups-verified' | 'prepared' | 'write-intent' | 'destination-written' | 'destinations-verified' | 'source-retirement-intent' | 'source-retired' | 'configuration-intent' | 'configuration-committed' | 'cutover-verified' | 'inventory-intent' | 'inventory-published' | 'writers-resumed' | 'compensation-intent' | 'compensated' | 'verified' | 'blocked';
272
+ export interface StateCheckpoint {
273
+ sequence: number;
274
+ kind: StateCheckpointKind;
275
+ at: number;
276
+ backendId?: string;
277
+ snapshot?: StateSnapshot;
278
+ code?: StateFailureCode;
279
+ }
280
+ export interface StateMigrationJournal {
281
+ schemaVersion: 1;
282
+ operationId: string;
283
+ planRef: StateArtifactRef;
284
+ plan: StateMigrationPlan;
285
+ writerHandle: string | null;
286
+ backups: readonly StateArtifactDescriptor[];
287
+ prepared: PreparedStateMigration | null;
288
+ checkpoints: readonly StateCheckpoint[];
289
+ completedAt: number | null;
290
+ compensated: boolean;
291
+ }
292
+ export interface StateMigrationResult {
293
+ schemaVersion: 1;
294
+ operationKind: 'stateful-migration' | 'state-recovery';
295
+ status: 'rejected' | 'incomplete' | 'verified' | 'compensated';
296
+ exitCode: 0 | 1 | 2;
297
+ operationRef: string | null;
298
+ journalRef: StateArtifactRef | null;
299
+ planFingerprint: string;
300
+ workspaceRef: string;
301
+ repairScopeComplete: boolean;
302
+ atomicAcrossBackends: false;
303
+ checkpoints: readonly {
304
+ sequence: number;
305
+ kind: StateCheckpointKind;
306
+ backendRef?: string;
307
+ }[];
308
+ blockers: readonly StateBlocker[];
309
+ lifecycle: {
310
+ status: 'not-started' | 'retained';
311
+ notBefore: number | null;
312
+ artifactCount: number;
313
+ };
314
+ }
315
+ export interface StateRecoveryPlan {
316
+ schemaVersion: 1;
317
+ journalRef: StateArtifactRef;
318
+ journalDigest: string;
319
+ inspection: StateInspectionRecord;
320
+ mode: 'forward' | 'remove-new-destinations';
321
+ context: StateExecutionContext;
322
+ fingerprint: string;
323
+ expiresAt: number;
324
+ }
325
+ export interface StateRecoveryResult {
326
+ schemaVersion: 1;
327
+ operationKind: 'state-recovery-plan';
328
+ executable: boolean;
329
+ recoveryRef: StateArtifactRef | null;
330
+ fingerprint: string | null;
331
+ mode: StateRecoveryPlan['mode'];
332
+ blockers: readonly StateBlocker[];
333
+ expiresAt: number;
334
+ }
335
+ export interface StateMigrationDependencies {
336
+ workspace: ProtectedStateWorkspace;
337
+ backend(binding: StateBackendBinding): StateBackendAdapter;
338
+ native: StateNativeDriver;
339
+ writers: StateWriterCoordinator;
340
+ now?: () => number;
341
+ observationTtlMs?: number;
342
+ maxStateBytes?: number;
343
+ operationTimeoutMs?: number;
344
+ }
345
+ export interface RetainedStateKeyBinding {
346
+ keyRef: string;
347
+ version: string;
348
+ ownerProjectId: string;
349
+ operationId: string;
350
+ exclusiveArtifactRefs: readonly StateArtifactRef[];
351
+ }
352
+ export interface RetainedStateKeyProvider {
353
+ inspect(keyRef: string, context: StateExecutionContext, signal?: AbortSignal): Promise<RetainedStateKeyBinding | null>;
354
+ destroy(expected: RetainedStateKeyBinding, context: StateExecutionContext, signal?: AbortSignal): Promise<void>;
355
+ }
356
+ export interface StateDisposalPlan {
357
+ schemaVersion: 1;
358
+ context: StateExecutionContext;
359
+ journalRef: StateArtifactRef;
360
+ journalDigest: string;
361
+ operationId: string;
362
+ artifacts: readonly StateArtifactDescriptor[];
363
+ keys: readonly RetainedStateKeyBinding[];
364
+ notBefore: number;
365
+ expiresAt: number;
366
+ fingerprint: string;
367
+ }
368
+ export interface StateLifecycleResult {
369
+ schemaVersion: 1;
370
+ operationKind: 'state-lifecycle';
371
+ status: 'retained' | 'due' | 'disposed' | 'blocked';
372
+ executable: boolean;
373
+ disposalRef: StateArtifactRef | null;
374
+ progressRef: StateArtifactRef | null;
375
+ fingerprint: string | null;
376
+ artifactCount: number;
377
+ keyCount: number;
378
+ notBefore: number | null;
379
+ expiresAt: number | null;
380
+ blockers: readonly StateBlocker[];
381
+ }
382
+ export interface ObserveStateMetadataRequest {
383
+ context: StateExecutionContext;
384
+ bindings: readonly StateBackendBinding[];
385
+ live: boolean;
386
+ signal?: AbortSignal;
387
+ }
388
+ export interface InspectApprovedStateRequest extends ObserveStateMetadataRequest {
389
+ discovery: StateMetadataResult;
390
+ approval: StateAuthority;
391
+ }
392
+ export interface BuildStateMigrationPlanRequest {
393
+ context: StateExecutionContext;
394
+ inspectionRef: StateArtifactRef;
395
+ intent: StateMigrationIntent;
396
+ signal?: AbortSignal;
397
+ }
398
+ export interface ValidateStateMigrationPlanRequest {
399
+ context: StateExecutionContext;
400
+ planRef: StateArtifactRef;
401
+ approval: StateAuthority;
402
+ }
403
+ export interface ExecuteStateMigrationRequest extends ValidateStateMigrationPlanRequest {
404
+ signal?: AbortSignal;
405
+ }
406
+ export interface BuildStateRecoveryPlanRequest {
407
+ context: StateExecutionContext;
408
+ journalRef: StateArtifactRef;
409
+ inspectionRef: StateArtifactRef;
410
+ mode: StateRecoveryPlan['mode'];
411
+ signal?: AbortSignal;
412
+ }
413
+ export interface ExecuteStateRecoveryRequest {
414
+ context: StateExecutionContext;
415
+ recoveryRef: StateArtifactRef;
416
+ approval: StateAuthority;
417
+ signal?: AbortSignal;
418
+ }
419
+ export interface InspectStateMigrationRequest {
420
+ context: StateExecutionContext;
421
+ journalRef: StateArtifactRef;
422
+ }
423
+ export interface BuildStateDisposalPlanRequest extends InspectStateMigrationRequest {
424
+ keyRefs?: readonly string[];
425
+ signal?: AbortSignal;
426
+ }
427
+ export interface DisposeRetainedStateRequest {
428
+ context: StateExecutionContext;
429
+ disposalRef: StateArtifactRef;
430
+ approval: StateAuthority;
431
+ signal?: AbortSignal;
432
+ }
433
+ export interface StateMigrationService {
434
+ readonly workspaceRef: string;
435
+ observeMetadata(request: ObserveStateMetadataRequest): Promise<StateMetadataResult>;
436
+ inspect(request: InspectApprovedStateRequest): Promise<StateInspectionResult>;
437
+ plan(request: BuildStateMigrationPlanRequest): Promise<StatePlanResult>;
438
+ validate(request: ValidateStateMigrationPlanRequest): Promise<readonly StateBlocker[]>;
439
+ execute(request: ExecuteStateMigrationRequest): Promise<StateMigrationResult>;
440
+ inspectOperation(request: InspectStateMigrationRequest): Promise<StateMigrationResult>;
441
+ planRecovery(request: BuildStateRecoveryPlanRequest): Promise<StateRecoveryResult>;
442
+ recover(request: ExecuteStateRecoveryRequest): Promise<StateMigrationResult>;
443
+ planDisposal(request: BuildStateDisposalPlanRequest): Promise<StateLifecycleResult>;
444
+ dispose(request: DisposeRetainedStateRequest): Promise<StateLifecycleResult>;
445
+ }
446
+ export interface StateEncryptionKeyProvider {
447
+ describe(keyRef: string, context: StateExecutionContext): Promise<{
448
+ keyRef: string;
449
+ ownerId: string;
450
+ hostId: string;
451
+ storage: 'external-key-provider';
452
+ algorithm: 'aes-256-gcm';
453
+ }>;
454
+ withKey<T>(keyRef: string, action: (key: Uint8Array) => Promise<T>): Promise<T>;
455
+ }
456
+ export interface ProtectedArtifactStorage {
457
+ assertAvailable(context: StateExecutionContext): Promise<void>;
458
+ create(id: string, bytes: Uint8Array): Promise<void>;
459
+ read(id: string): Promise<Uint8Array>;
460
+ compareExchange(id: string, previousDigest: string, bytes: Uint8Array): Promise<void>;
461
+ remove(id: string, expectedDigest: string): Promise<void>;
462
+ withScratch<T>(context: StateExecutionContext, action: (directory: string) => Promise<T>): Promise<T>;
463
+ }
464
+ export interface ProtectedVolumeAttestor {
465
+ verify(directory: string, context: StateExecutionContext): Promise<{
466
+ canonicalDirectory: string;
467
+ hostId: string;
468
+ encryptedVolume: true;
469
+ privateAccess: true;
470
+ storageClass: 'protected-state-workspace';
471
+ expiresAt: number;
472
+ }>;
473
+ }
474
+ /**
475
+ * Must use OpenTofu-compatible OS file locking, not just a sibling lock file.
476
+ * Replacement/removal must retain that boundary, including an absent destination.
477
+ */
478
+ export interface NativeLocalStateLockProvider {
479
+ readonly capabilities?: {
480
+ protocol: 'opentofu-1.12.6-posix-fcntl';
481
+ existingInPlace: true;
482
+ createAbsent: false;
483
+ remove: false;
484
+ };
485
+ acquire(request: {
486
+ path: string;
487
+ operationId: string;
488
+ expectedVersion: string | null;
489
+ signal?: AbortSignal;
490
+ }): Promise<{
491
+ assertHeld(): Promise<void>;
492
+ replace(bytes: Uint8Array, expectedVersion: string | null): Promise<void>;
493
+ remove(expectedVersion: string): Promise<void>;
494
+ release(): Promise<void>;
495
+ }>;
496
+ }
497
+ export interface AzureStateTokenProvider {
498
+ getToken(request: {
499
+ tenantId: string;
500
+ principalId: string;
501
+ scope: 'https://storage.azure.com/.default';
502
+ signal: AbortSignal;
503
+ }): Promise<{
504
+ token: string;
505
+ tenantId: string;
506
+ principalId: string;
507
+ expiresAt: number;
508
+ }>;
509
+ }
510
+ export interface AzureBlobAccessProvider {
511
+ observe(binding: AzureBlobStateBinding, context: StateExecutionContext, write: boolean, signal?: AbortSignal): Promise<{
512
+ bindingDigest: string;
513
+ ownerId: string;
514
+ hostId: string;
515
+ principalId: string;
516
+ network: 'private' | 'public';
517
+ reachable: boolean;
518
+ canRead: boolean;
519
+ canWrite: boolean;
520
+ serverSideEncryption: boolean;
521
+ versioning: boolean;
522
+ softDelete: boolean;
523
+ expiresAt: number;
524
+ }>;
525
+ }
526
+ export interface AzureStateRequest {
527
+ binding: AzureBlobStateBinding;
528
+ context: StateExecutionContext;
529
+ method: 'HEAD' | 'GET' | 'PUT' | 'DELETE';
530
+ target: 'blob' | 'container' | 'lease';
531
+ headers?: Readonly<Record<string, string>>;
532
+ body?: Uint8Array;
533
+ operationId?: string;
534
+ signal?: AbortSignal;
535
+ }
536
+ export interface AzureStateResponse {
537
+ status: number;
538
+ headers: Readonly<Record<string, string>>;
539
+ body: Uint8Array;
540
+ }
541
+ export interface AzureStateTransport {
542
+ request(request: AzureStateRequest): Promise<AzureStateResponse>;
543
+ }
544
+ export interface PrivateStateCommand {
545
+ args: readonly string[];
546
+ cwd: string;
547
+ operation: 'inspect' | 'transform';
548
+ stdin?: Uint8Array;
549
+ signal?: AbortSignal;
550
+ }
551
+ export interface PrivateStateCommandResult {
552
+ exitCode: number;
553
+ stdout: Uint8Array;
554
+ }
555
+ export interface PrivateStateCommandRunner {
556
+ readonly identityDigest: string;
557
+ run(command: PrivateStateCommand): Promise<PrivateStateCommandResult>;
558
+ quiesce?(): Promise<void>;
559
+ }
560
+ export interface NativeStateHost {
561
+ verify(directory: string, operation: PrivateStateCommand['operation']): Promise<{
562
+ directory: string;
563
+ encryptedVolume: true;
564
+ isolated: true;
565
+ providerIdentityReadOnly: true;
566
+ providerRegistrationDisabled: true;
567
+ }>;
568
+ privateEnvironment(directory: string): Promise<Readonly<Record<string, string>>>;
569
+ quiesce?(): Promise<void>;
570
+ /** Legacy host hook; private runners use their own owned-process supervisor. */
571
+ terminateProcessTree?(pid: number): Promise<void>;
572
+ }
573
+ export interface StateConfigurationAttestation {
574
+ configurationRef: string;
575
+ configurationDigest: string;
576
+ artifactDigest: string;
577
+ backendNeutral: true;
578
+ stateFormat: 'opentofu-v4-json';
579
+ providerRegistration: 'disabled';
580
+ provisioners: readonly never[];
581
+ externalPrograms: readonly never[];
582
+ uninspectedDataSources: readonly never[];
583
+ unresolvedModules: readonly never[];
584
+ providers: readonly {
585
+ source: string;
586
+ version: string;
587
+ binaryDigest: string;
588
+ }[];
589
+ providerMirrorDirectory: string;
590
+ moduleDigests: readonly string[];
591
+ }
592
+ export interface StateConfigurationProvider {
593
+ materialize(reference: string, directory: string, context: StateExecutionContext, signal?: AbortSignal): Promise<StateConfigurationAttestation>;
594
+ verifyMaterialized(reference: string, directory: string, expected: StateConfigurationAttestation, signal?: AbortSignal): Promise<void>;
595
+ }
596
+ export interface StateRecipeQualification {
597
+ assertQualified(request: {
598
+ recipeVersion: typeof statefulRecipeVersion;
599
+ recipe: StateRecipe;
600
+ source: StateBackendKind;
601
+ destinations: readonly StateBackendKind[];
602
+ executableDigest: string;
603
+ hostId: string;
604
+ }): Promise<void>;
605
+ }
606
+ export interface StateRegisteredExecutable {
607
+ path: string;
608
+ sha256: string;
609
+ }
610
+ export interface NativeLocalStateTools {
611
+ python: StateRegisteredExecutable;
612
+ tofu: StateRegisteredExecutable;
613
+ pythonVersion: string;
614
+ tofuVersion: '1.12.6';
615
+ hostId: string;
616
+ }
617
+ export interface NativeLocalQualificationResult {
618
+ schemaVersion: 1;
619
+ kind: 'native-local-state-qualification';
620
+ status: 'verified';
621
+ platform: 'darwin';
622
+ hostRef: string;
623
+ tofuVersion: '1.12.6';
624
+ tofuBinaryDigest: string;
625
+ pythonBinaryDigest: string;
626
+ protocolDigest: string;
627
+ sourceCommit: string;
628
+ observedAt: number;
629
+ checks: readonly string[];
630
+ stateScope: 'synthetic-disposable-only';
631
+ azureLiveQualification: 'not-performed';
632
+ atomicStateReplacement: false;
633
+ }
634
+ export interface DarwinStateVolumeObservation {
635
+ canonicalDirectory: string;
636
+ deviceNode: string;
637
+ volumeId: string;
638
+ filesystem: string;
639
+ fileVault: boolean;
640
+ encrypted: boolean;
641
+ locked: boolean;
642
+ ownerUid: number;
643
+ mode: number;
644
+ aclEntries: number;
645
+ hostId: string;
646
+ }
647
+ export interface DarwinStateKeychainReference {
648
+ keychainPath: string;
649
+ service: string;
650
+ account: string;
651
+ }
652
+ export interface DarwinStateSystemBridge {
653
+ request(operation: 'volume' | 'keychain-metadata' | 'keychain-secret', input: object, signal?: AbortSignal): Promise<Record<string, unknown>>;
654
+ }
655
+ export interface DarwinStateStorageProfileOptions {
656
+ tools: NativeLocalStateTools;
657
+ workspaceRoot: string;
658
+ workspaceId?: string;
659
+ keyReference: DarwinStateKeychainReference;
660
+ projectId: string;
661
+ }
662
+ export interface DarwinStateStorageProfile {
663
+ workspace: ProtectedStateWorkspace;
664
+ volume: ProtectedVolumeAttestor;
665
+ keys: StateEncryptionKeyProvider;
666
+ keyRef: string;
667
+ locks: NativeLocalStateLockProvider;
668
+ hostId: string;
669
+ }
670
+ export interface DarwinAzureReaderReference extends DarwinStateKeychainReference {
671
+ tenantId: string;
672
+ subscriptionId: string;
673
+ clientId: string;
674
+ principalId: string;
675
+ }
676
+ export interface DarwinLocalStateExecutionProfileOptions extends DarwinStateStorageProfileOptions {
677
+ context: StateExecutionContext;
678
+ readerReference: DarwinAzureReaderReference;
679
+ nativeQualification: NativeLocalQualificationResult;
680
+ liveQualification?: StateRecipeQualification;
681
+ configurations: StateConfigurationProvider;
682
+ writers: StateWriterCoordinator;
683
+ }
684
+ export interface DarwinLocalStateExecutionProfile extends DarwinStateStorageProfile {
685
+ service: StateMigrationService;
686
+ qualification: StateRecipeQualification;
687
+ nativeQualification: NativeLocalQualificationResult;
688
+ liveQualification: 'supplied' | 'required';
689
+ }
690
+ export {};