@msn-control/liftoff 0.10.4 → 0.11.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 (643) hide show
  1. package/DEVELOPER.md +220 -77
  2. package/README.md +28 -28
  3. package/assets/supported-stack.json +3 -136
  4. package/dist/adapters/azure/governance-assessment.d.ts +2 -0
  5. package/dist/adapters/azure/governance-assessment.js +21 -0
  6. package/dist/adapters/azure/governance-assessment.js.map +1 -0
  7. package/dist/adapters/filesystem/atomic-write.d.ts +2 -0
  8. package/dist/adapters/filesystem/atomic-write.js +74 -0
  9. package/dist/adapters/filesystem/atomic-write.js.map +1 -0
  10. package/dist/adapters/filesystem/errors.d.ts +2 -0
  11. package/dist/adapters/filesystem/errors.js +8 -0
  12. package/dist/adapters/filesystem/errors.js.map +1 -0
  13. package/dist/adapters/filesystem/manifest-file.d.ts +1 -0
  14. package/dist/adapters/filesystem/manifest-file.js +21 -0
  15. package/dist/adapters/filesystem/manifest-file.js.map +1 -0
  16. package/dist/adapters/filesystem/project-config.d.ts +4 -0
  17. package/dist/adapters/filesystem/project-config.js +157 -0
  18. package/dist/adapters/filesystem/project-config.js.map +1 -0
  19. package/dist/adapters/filesystem/project-discovery.d.ts +2 -0
  20. package/dist/adapters/filesystem/project-discovery.js +30 -0
  21. package/dist/adapters/filesystem/project-discovery.js.map +1 -0
  22. package/dist/adapters/filesystem/project-files.d.ts +6 -0
  23. package/dist/adapters/filesystem/project-files.js +68 -0
  24. package/dist/adapters/filesystem/project-files.js.map +1 -0
  25. package/dist/adapters/filesystem/project-lock.d.ts +8 -0
  26. package/dist/adapters/filesystem/project-lock.js +164 -0
  27. package/dist/adapters/filesystem/project-lock.js.map +1 -0
  28. package/dist/adapters/filesystem/project-paths.d.ts +2 -0
  29. package/dist/adapters/filesystem/project-paths.js +60 -0
  30. package/dist/adapters/filesystem/project-paths.js.map +1 -0
  31. package/dist/adapters/filesystem/project-transaction.d.ts +23 -0
  32. package/dist/adapters/filesystem/project-transaction.js +158 -0
  33. package/dist/adapters/filesystem/project-transaction.js.map +1 -0
  34. package/dist/adapters/git/governance-assessment.d.ts +22 -0
  35. package/dist/adapters/git/governance-assessment.js +161 -0
  36. package/dist/adapters/git/governance-assessment.js.map +1 -0
  37. package/dist/adapters/github/governance-assessment.d.ts +2 -0
  38. package/dist/adapters/github/governance-assessment.js +18 -0
  39. package/dist/adapters/github/governance-assessment.js.map +1 -0
  40. package/dist/adapters/packaged-assets/package-root.d.ts +3 -0
  41. package/dist/adapters/packaged-assets/package-root.js +21 -0
  42. package/dist/adapters/packaged-assets/package-root.js.map +1 -0
  43. package/dist/adapters/packaged-assets/supported-stack.d.ts +4 -0
  44. package/dist/adapters/packaged-assets/supported-stack.js +18 -0
  45. package/dist/adapters/packaged-assets/supported-stack.js.map +1 -0
  46. package/dist/adapters/packaged-assets/template-assets.d.ts +23 -0
  47. package/dist/adapters/packaged-assets/template-assets.js +36 -0
  48. package/dist/adapters/packaged-assets/template-assets.js.map +1 -0
  49. package/dist/adapters/process/shell-command.d.ts +5 -0
  50. package/dist/adapters/process/shell-command.js +21 -0
  51. package/dist/adapters/process/shell-command.js.map +1 -0
  52. package/dist/application/context.d.ts +20 -0
  53. package/dist/application/context.js +2 -0
  54. package/dist/application/context.js.map +1 -0
  55. package/dist/application/diagnose/doctor.d.ts +21 -0
  56. package/dist/application/diagnose/doctor.js +586 -0
  57. package/dist/application/diagnose/doctor.js.map +1 -0
  58. package/dist/application/diagnose/generated-project.d.ts +1 -0
  59. package/dist/application/diagnose/generated-project.js +105 -0
  60. package/dist/application/diagnose/generated-project.js.map +1 -0
  61. package/dist/application/diagnose/validate.d.ts +6 -0
  62. package/dist/application/diagnose/validate.js +27 -0
  63. package/dist/application/diagnose/validate.js.map +1 -0
  64. package/dist/application/initialize/fixture.d.ts +2 -0
  65. package/dist/application/initialize/fixture.js +39 -0
  66. package/dist/application/initialize/fixture.js.map +1 -0
  67. package/dist/application/initialize/inputs.d.ts +3 -0
  68. package/dist/application/initialize/inputs.js +35 -0
  69. package/dist/application/initialize/inputs.js.map +1 -0
  70. package/dist/application/initialize/use-case.d.ts +23 -0
  71. package/dist/application/initialize/use-case.js +360 -0
  72. package/dist/application/initialize/use-case.js.map +1 -0
  73. package/dist/application/migrate/use-case.d.ts +7 -0
  74. package/dist/application/migrate/use-case.js +378 -0
  75. package/dist/application/migrate/use-case.js.map +1 -0
  76. package/dist/application/project/catalog.d.ts +46 -0
  77. package/dist/application/project/catalog.js +12 -0
  78. package/dist/application/project/catalog.js.map +1 -0
  79. package/dist/application/project/manifest.d.ts +2 -0
  80. package/dist/application/project/manifest.js +29 -0
  81. package/dist/application/project/manifest.js.map +1 -0
  82. package/dist/application/project/planning.d.ts +6 -0
  83. package/dist/application/project/planning.js +12 -0
  84. package/dist/application/project/planning.js.map +1 -0
  85. package/dist/application/update/planning.d.ts +40 -0
  86. package/dist/application/update/planning.js +293 -0
  87. package/dist/application/update/planning.js.map +1 -0
  88. package/dist/application/update/reporting.d.ts +42 -0
  89. package/dist/application/update/reporting.js +325 -0
  90. package/dist/application/update/reporting.js.map +1 -0
  91. package/dist/application/update/use-case.d.ts +8 -0
  92. package/dist/application/update/use-case.js +600 -0
  93. package/dist/application/update/use-case.js.map +1 -0
  94. package/dist/application/upgrade/use-case.d.ts +6 -0
  95. package/dist/application/upgrade/use-case.js +82 -0
  96. package/dist/application/upgrade/use-case.js.map +1 -0
  97. package/dist/args.d.ts +5 -65
  98. package/dist/args.js +4 -472
  99. package/dist/args.js.map +1 -1
  100. package/dist/artifact-lifecycle.d.ts +1 -21
  101. package/dist/artifact-lifecycle.js +1 -75
  102. package/dist/artifact-lifecycle.js.map +1 -1
  103. package/dist/catalogs.d.ts +1 -50
  104. package/dist/catalogs.js +1 -472
  105. package/dist/catalogs.js.map +1 -1
  106. package/dist/cli/args/contracts.d.ts +51 -0
  107. package/dist/cli/args/contracts.js +2 -0
  108. package/dist/cli/args/contracts.js.map +1 -0
  109. package/dist/cli/args/definitions.d.ts +6 -0
  110. package/dist/cli/args/definitions.js +187 -0
  111. package/dist/cli/args/definitions.js.map +1 -0
  112. package/dist/cli/args/help.d.ts +5 -0
  113. package/dist/cli/args/help.js +130 -0
  114. package/dist/cli/args/help.js.map +1 -0
  115. package/dist/cli/args/parser.d.ts +5 -0
  116. package/dist/cli/args/parser.js +145 -0
  117. package/dist/cli/args/parser.js.map +1 -0
  118. package/dist/cli/args/readers.d.ts +4 -0
  119. package/dist/cli/args/readers.js +19 -0
  120. package/dist/cli/args/readers.js.map +1 -0
  121. package/dist/cli/commands/diagnose.d.ts +4 -0
  122. package/dist/cli/commands/diagnose.js +12 -0
  123. package/dist/cli/commands/diagnose.js.map +1 -0
  124. package/dist/cli/commands/dispatch.d.ts +3 -0
  125. package/dist/cli/commands/dispatch.js +94 -0
  126. package/dist/cli/commands/dispatch.js.map +1 -0
  127. package/dist/cli/commands/help.d.ts +3 -0
  128. package/dist/cli/commands/help.js +32 -0
  129. package/dist/cli/commands/help.js.map +1 -0
  130. package/dist/cli/commands/helpers.d.ts +8 -0
  131. package/dist/cli/commands/helpers.js +97 -0
  132. package/dist/cli/commands/helpers.js.map +1 -0
  133. package/dist/cli/commands/initialize.d.ts +3 -0
  134. package/dist/cli/commands/initialize.js +7 -0
  135. package/dist/cli/commands/initialize.js.map +1 -0
  136. package/dist/cli/commands/migrate.d.ts +3 -0
  137. package/dist/cli/commands/migrate.js +8 -0
  138. package/dist/cli/commands/migrate.js.map +1 -0
  139. package/dist/cli/commands/plan.d.ts +3 -0
  140. package/dist/cli/commands/plan.js +34 -0
  141. package/dist/cli/commands/plan.js.map +1 -0
  142. package/dist/cli/commands/reference.d.ts +5 -0
  143. package/dist/cli/commands/reference.js +43 -0
  144. package/dist/cli/commands/reference.js.map +1 -0
  145. package/dist/cli/commands/update.d.ts +3 -0
  146. package/dist/cli/commands/update.js +9 -0
  147. package/dist/cli/commands/update.js.map +1 -0
  148. package/dist/cli/commands/upgrade.d.ts +3 -0
  149. package/dist/cli/commands/upgrade.js +7 -0
  150. package/dist/cli/commands/upgrade.js.map +1 -0
  151. package/dist/cli/context.d.ts +1 -0
  152. package/dist/cli/context.js +2 -0
  153. package/dist/cli/context.js.map +1 -0
  154. package/dist/cli/project-options.d.ts +3 -0
  155. package/dist/cli/project-options.js +41 -0
  156. package/dist/cli/project-options.js.map +1 -0
  157. package/dist/cli.d.ts +3 -3
  158. package/dist/cli.js +2 -2
  159. package/dist/cli.js.map +1 -1
  160. package/dist/commands.d.ts +4 -35
  161. package/dist/commands.js +3 -2969
  162. package/dist/commands.js.map +1 -1
  163. package/dist/container-validation.d.ts +1 -1
  164. package/dist/domain/governance/activation/approvals.d.ts +351 -0
  165. package/dist/domain/governance/activation/approvals.js +528 -0
  166. package/dist/domain/governance/activation/approvals.js.map +1 -0
  167. package/dist/domain/governance/activation/canonical-json.d.ts +4 -0
  168. package/dist/domain/governance/activation/canonical-json.js +39 -0
  169. package/dist/domain/governance/activation/canonical-json.js.map +1 -0
  170. package/dist/domain/governance/activation/capabilities.d.ts +7 -0
  171. package/dist/domain/governance/activation/capabilities.js +33 -0
  172. package/dist/domain/governance/activation/capabilities.js.map +1 -0
  173. package/dist/domain/governance/activation/evidence.d.ts +63 -0
  174. package/dist/domain/governance/activation/evidence.js +444 -0
  175. package/dist/domain/governance/activation/evidence.js.map +1 -0
  176. package/dist/domain/governance/activation/graph.d.ts +397 -0
  177. package/dist/domain/governance/activation/graph.js +441 -0
  178. package/dist/domain/governance/activation/graph.js.map +1 -0
  179. package/dist/domain/governance/activation/inputs.d.ts +25 -0
  180. package/dist/domain/governance/activation/inputs.js +63 -0
  181. package/dist/domain/governance/activation/inputs.js.map +1 -0
  182. package/dist/domain/governance/activation/operations.d.ts +19 -0
  183. package/dist/domain/governance/activation/operations.js +181 -0
  184. package/dist/domain/governance/activation/operations.js.map +1 -0
  185. package/dist/domain/governance/activation/readiness.d.ts +27 -0
  186. package/dist/domain/governance/activation/readiness.js +269 -0
  187. package/dist/domain/governance/activation/readiness.js.map +1 -0
  188. package/dist/domain/governance/activation/types.d.ts +399 -0
  189. package/dist/domain/governance/activation/types.js +109 -0
  190. package/dist/domain/governance/activation/types.js.map +1 -0
  191. package/dist/domain/governance/activation/validators.d.ts +22 -0
  192. package/dist/domain/governance/activation/validators.js +1347 -0
  193. package/dist/domain/governance/activation/validators.js.map +1 -0
  194. package/dist/domain/governance/assessment/catalog.d.ts +14 -0
  195. package/dist/domain/governance/assessment/catalog.js +105 -0
  196. package/dist/domain/governance/assessment/catalog.js.map +1 -0
  197. package/dist/domain/governance/assessment/errors.d.ts +10 -0
  198. package/dist/domain/governance/assessment/errors.js +22 -0
  199. package/dist/domain/governance/assessment/errors.js.map +1 -0
  200. package/dist/domain/governance/assessment/index.d.ts +8 -0
  201. package/dist/domain/governance/assessment/index.js +9 -0
  202. package/dist/domain/governance/assessment/index.js.map +1 -0
  203. package/dist/domain/governance/assessment/live-normalize.d.ts +19 -0
  204. package/dist/domain/governance/assessment/live-normalize.js +403 -0
  205. package/dist/domain/governance/assessment/live-normalize.js.map +1 -0
  206. package/dist/domain/governance/assessment/predicates.d.ts +36 -0
  207. package/dist/domain/governance/assessment/predicates.js +545 -0
  208. package/dist/domain/governance/assessment/predicates.js.map +1 -0
  209. package/dist/domain/governance/assessment/report.d.ts +23 -0
  210. package/dist/domain/governance/assessment/report.js +266 -0
  211. package/dist/domain/governance/assessment/report.js.map +1 -0
  212. package/dist/domain/governance/assessment/sanitize.d.ts +8 -0
  213. package/dist/domain/governance/assessment/sanitize.js +60 -0
  214. package/dist/domain/governance/assessment/sanitize.js.map +1 -0
  215. package/dist/domain/governance/assessment/types.d.ts +174 -0
  216. package/dist/domain/governance/assessment/types.js +13 -0
  217. package/dist/domain/governance/assessment/types.js.map +1 -0
  218. package/dist/domain/governance/assessment/yaml.d.ts +6 -0
  219. package/dist/domain/governance/assessment/yaml.js +30 -0
  220. package/dist/domain/governance/assessment/yaml.js.map +1 -0
  221. package/dist/domain/governance/policy/identity.d.ts +64 -0
  222. package/dist/domain/governance/policy/identity.js +112 -0
  223. package/dist/domain/governance/policy/identity.js.map +1 -0
  224. package/dist/domain/migration/dependencies.d.ts +7 -0
  225. package/dist/domain/migration/dependencies.js +221 -0
  226. package/dist/domain/migration/dependencies.js.map +1 -0
  227. package/dist/domain/migration/inventory.d.ts +3 -0
  228. package/dist/domain/migration/inventory.js +15 -0
  229. package/dist/domain/migration/inventory.js.map +1 -0
  230. package/dist/domain/project/artifact-lifecycle.d.ts +69 -0
  231. package/dist/domain/project/artifact-lifecycle.js +137 -0
  232. package/dist/domain/project/artifact-lifecycle.js.map +1 -0
  233. package/dist/domain/project/catalog.d.ts +48 -0
  234. package/dist/domain/project/catalog.js +507 -0
  235. package/dist/domain/project/catalog.js.map +1 -0
  236. package/dist/domain/project/contracts.d.ts +247 -0
  237. package/dist/domain/project/contracts.js +2 -0
  238. package/dist/domain/project/contracts.js.map +1 -0
  239. package/dist/domain/project/errors.d.ts +3 -0
  240. package/dist/domain/project/errors.js +7 -0
  241. package/dist/domain/project/errors.js.map +1 -0
  242. package/dist/domain/project/infrastructure-layout.d.ts +26 -0
  243. package/dist/domain/project/infrastructure-layout.js +124 -0
  244. package/dist/domain/project/infrastructure-layout.js.map +1 -0
  245. package/dist/domain/project/inputs.d.ts +21 -0
  246. package/dist/domain/project/inputs.js +41 -0
  247. package/dist/domain/project/inputs.js.map +1 -0
  248. package/dist/domain/project/manifest/artifacts.d.ts +8 -0
  249. package/dist/domain/project/manifest/artifacts.js +150 -0
  250. package/dist/domain/project/manifest/artifacts.js.map +1 -0
  251. package/dist/domain/project/manifest/context.d.ts +13 -0
  252. package/dist/domain/project/manifest/context.js +2 -0
  253. package/dist/domain/project/manifest/context.js.map +1 -0
  254. package/dist/domain/project/manifest/fields.d.ts +6 -0
  255. package/dist/domain/project/manifest/fields.js +36 -0
  256. package/dist/domain/project/manifest/fields.js.map +1 -0
  257. package/dist/domain/project/manifest/governance.d.ts +8 -0
  258. package/dist/domain/project/manifest/governance.js +161 -0
  259. package/dist/domain/project/manifest/governance.js.map +1 -0
  260. package/dist/domain/project/manifest/project-identity.d.ts +6 -0
  261. package/dist/domain/project/manifest/project-identity.js +273 -0
  262. package/dist/domain/project/manifest/project-identity.js.map +1 -0
  263. package/dist/domain/project/manifest/reader.d.ts +9 -0
  264. package/dist/domain/project/manifest/reader.js +141 -0
  265. package/dist/domain/project/manifest/reader.js.map +1 -0
  266. package/dist/domain/project/paths.d.ts +2 -0
  267. package/dist/domain/project/paths.js +29 -0
  268. package/dist/domain/project/paths.js.map +1 -0
  269. package/dist/domain/project/planning.d.ts +19 -0
  270. package/dist/domain/project/planning.js +329 -0
  271. package/dist/domain/project/planning.js.map +1 -0
  272. package/dist/domain/project/retired-workload.d.ts +4 -0
  273. package/dist/domain/project/retired-workload.js +18 -0
  274. package/dist/domain/project/retired-workload.js.map +1 -0
  275. package/dist/domain/project/supported-stack.d.ts +113 -0
  276. package/dist/domain/project/supported-stack.js +426 -0
  277. package/dist/domain/project/supported-stack.js.map +1 -0
  278. package/dist/domain/workstation/constraints.d.ts +6 -0
  279. package/dist/domain/workstation/constraints.js +8 -0
  280. package/dist/domain/workstation/constraints.js.map +1 -0
  281. package/dist/file-system.d.ts +10 -44
  282. package/dist/file-system.js +9 -1245
  283. package/dist/file-system.js.map +1 -1
  284. package/dist/framework-adapters.d.ts +1 -1
  285. package/dist/framework-validation.d.ts +1 -1
  286. package/dist/framework-validation.js +1 -1
  287. package/dist/framework-validation.js.map +1 -1
  288. package/dist/genai-templates.d.ts +2 -9
  289. package/dist/genai-templates.js +4 -5
  290. package/dist/genai-templates.js.map +1 -1
  291. package/dist/generators/common/artifacts.d.ts +6 -0
  292. package/dist/generators/common/artifacts.js +30 -0
  293. package/dist/generators/common/artifacts.js.map +1 -0
  294. package/dist/generators/common/base.d.ts +17 -0
  295. package/dist/generators/common/base.js +421 -0
  296. package/dist/generators/common/base.js.map +1 -0
  297. package/dist/generators/common/dotenv-validation.d.ts +2 -0
  298. package/dist/generators/common/dotenv-validation.js +80 -0
  299. package/dist/generators/common/dotenv-validation.js.map +1 -0
  300. package/dist/generators/common/environments.d.ts +3 -0
  301. package/dist/generators/common/environments.js +15 -0
  302. package/dist/generators/common/environments.js.map +1 -0
  303. package/dist/generators/common/frontend.d.ts +15 -0
  304. package/dist/generators/common/frontend.js +166 -0
  305. package/dist/generators/common/frontend.js.map +1 -0
  306. package/dist/generators/common/python-settings.d.ts +2 -0
  307. package/dist/generators/common/python-settings.js +70 -0
  308. package/dist/generators/common/python-settings.js.map +1 -0
  309. package/dist/generators/common/spec-workflow.d.ts +28 -0
  310. package/dist/generators/common/spec-workflow.js +567 -0
  311. package/dist/generators/common/spec-workflow.js.map +1 -0
  312. package/dist/generators/common/values.d.ts +13 -0
  313. package/dist/generators/common/values.js +16 -0
  314. package/dist/generators/common/values.js.map +1 -0
  315. package/dist/generators/containers/compose.d.ts +7 -0
  316. package/dist/generators/containers/compose.js +196 -0
  317. package/dist/generators/containers/compose.js.map +1 -0
  318. package/dist/generators/containers/context.d.ts +1 -0
  319. package/dist/generators/containers/context.js +43 -0
  320. package/dist/generators/containers/context.js.map +1 -0
  321. package/dist/generators/containers/images.d.ts +7 -0
  322. package/dist/generators/containers/images.js +119 -0
  323. package/dist/generators/containers/images.js.map +1 -0
  324. package/dist/generators/context.d.ts +42 -0
  325. package/dist/generators/context.js +38 -0
  326. package/dist/generators/context.js.map +1 -0
  327. package/dist/generators/genai/backend.d.ts +20 -0
  328. package/dist/generators/genai/backend.js +667 -0
  329. package/dist/generators/genai/backend.js.map +1 -0
  330. package/dist/generators/genai/configuration.d.ts +3 -0
  331. package/dist/generators/genai/configuration.js +43 -0
  332. package/dist/generators/genai/configuration.js.map +1 -0
  333. package/dist/generators/genai/database.d.ts +7 -0
  334. package/dist/generators/genai/database.js +71 -0
  335. package/dist/generators/genai/database.js.map +1 -0
  336. package/dist/generators/genai/functions.d.ts +15 -0
  337. package/dist/generators/genai/functions.js +156 -0
  338. package/dist/generators/genai/functions.js.map +1 -0
  339. package/dist/generators/genai/index.d.ts +8 -0
  340. package/dist/generators/genai/index.js +11 -0
  341. package/dist/generators/genai/index.js.map +1 -0
  342. package/dist/generators/genai/patterns.d.ts +9 -0
  343. package/dist/generators/genai/patterns.js +309 -0
  344. package/dist/generators/genai/patterns.js.map +1 -0
  345. package/dist/generators/infrastructure/azure.d.ts +18 -0
  346. package/dist/generators/infrastructure/azure.js +655 -0
  347. package/dist/generators/infrastructure/azure.js.map +1 -0
  348. package/dist/generators/infrastructure/names.d.ts +23 -0
  349. package/dist/generators/infrastructure/names.js +51 -0
  350. package/dist/generators/infrastructure/names.js.map +1 -0
  351. package/dist/generators/standard/configuration.d.ts +3 -0
  352. package/dist/generators/standard/configuration.js +26 -0
  353. package/dist/generators/standard/configuration.js.map +1 -0
  354. package/dist/generators/standard/go.d.ts +17 -0
  355. package/dist/generators/standard/go.js +338 -0
  356. package/dist/generators/standard/go.js.map +1 -0
  357. package/dist/generators/standard/index.d.ts +12 -0
  358. package/dist/generators/standard/index.js +12 -0
  359. package/dist/generators/standard/index.js.map +1 -0
  360. package/dist/generators/standard/node.d.ts +20 -0
  361. package/dist/generators/standard/node.js +314 -0
  362. package/dist/generators/standard/node.js.map +1 -0
  363. package/dist/generators/standard/python.d.ts +18 -0
  364. package/dist/generators/standard/python.js +191 -0
  365. package/dist/generators/standard/python.js.map +1 -0
  366. package/dist/go-template-assets.js +3 -3
  367. package/dist/go-template-assets.js.map +1 -1
  368. package/dist/governance-activation/activation-state.d.ts +1 -1
  369. package/dist/governance-activation/activation-state.js +46 -9
  370. package/dist/governance-activation/activation-state.js.map +1 -1
  371. package/dist/governance-activation/approvals.d.ts +1 -188
  372. package/dist/governance-activation/approvals.js +1 -507
  373. package/dist/governance-activation/approvals.js.map +1 -1
  374. package/dist/governance-activation/canonical-json.d.ts +1 -3
  375. package/dist/governance-activation/canonical-json.js +1 -35
  376. package/dist/governance-activation/canonical-json.js.map +1 -1
  377. package/dist/governance-activation/commands.d.ts +1 -1
  378. package/dist/governance-activation/commands.js +72 -106
  379. package/dist/governance-activation/commands.js.map +1 -1
  380. package/dist/governance-activation/compatibility.d.ts +11 -3
  381. package/dist/governance-activation/compatibility.js +31 -4
  382. package/dist/governance-activation/compatibility.js.map +1 -1
  383. package/dist/governance-activation/credentials.d.ts +3 -3
  384. package/dist/governance-activation/credentials.js +5 -5
  385. package/dist/governance-activation/credentials.js.map +1 -1
  386. package/dist/governance-activation/doctor.d.ts +1 -1
  387. package/dist/governance-activation/doctor.js +28 -96
  388. package/dist/governance-activation/doctor.js.map +1 -1
  389. package/dist/governance-activation/evidence.d.ts +1 -49
  390. package/dist/governance-activation/evidence.js +1 -245
  391. package/dist/governance-activation/evidence.js.map +1 -1
  392. package/dist/governance-activation/git-ignore.d.ts +9 -0
  393. package/dist/governance-activation/git-ignore.js +76 -0
  394. package/dist/governance-activation/git-ignore.js.map +1 -0
  395. package/dist/governance-activation/graph.d.ts +1 -397
  396. package/dist/governance-activation/graph.js +1 -440
  397. package/dist/governance-activation/graph.js.map +1 -1
  398. package/dist/governance-activation/identity.d.ts +1 -35
  399. package/dist/governance-activation/identity.js +1 -88
  400. package/dist/governance-activation/identity.js.map +1 -1
  401. package/dist/governance-activation/index.d.ts +3 -0
  402. package/dist/governance-activation/index.js +3 -0
  403. package/dist/governance-activation/index.js.map +1 -1
  404. package/dist/governance-activation/inputs.d.ts +8 -0
  405. package/dist/governance-activation/inputs.js +146 -0
  406. package/dist/governance-activation/inputs.js.map +1 -0
  407. package/dist/governance-activation/migration.d.ts +4 -3
  408. package/dist/governance-activation/migration.js +14 -6
  409. package/dist/governance-activation/migration.js.map +1 -1
  410. package/dist/governance-activation/phase-bootstrap-state.d.ts +3 -0
  411. package/dist/governance-activation/phase-bootstrap-state.js +128 -0
  412. package/dist/governance-activation/phase-bootstrap-state.js.map +1 -0
  413. package/dist/governance-activation/phase-discovery.d.ts +2 -0
  414. package/dist/governance-activation/phase-discovery.js +88 -0
  415. package/dist/governance-activation/phase-discovery.js.map +1 -0
  416. package/dist/governance-activation/phase-governance.d.ts +4 -0
  417. package/dist/governance-activation/phase-governance.js +141 -0
  418. package/dist/governance-activation/phase-governance.js.map +1 -0
  419. package/dist/governance-activation/phase-publication.d.ts +8 -0
  420. package/dist/governance-activation/phase-publication.js +318 -0
  421. package/dist/governance-activation/phase-publication.js.map +1 -0
  422. package/dist/governance-activation/read-only.d.ts +30 -0
  423. package/dist/governance-activation/read-only.js +93 -0
  424. package/dist/governance-activation/read-only.js.map +1 -0
  425. package/dist/governance-activation/readiness.d.ts +1 -25
  426. package/dist/governance-activation/readiness.js +1 -222
  427. package/dist/governance-activation/readiness.js.map +1 -1
  428. package/dist/governance-activation/reconciliation.d.ts +1 -1
  429. package/dist/governance-activation/reconciliation.js +3 -3
  430. package/dist/governance-activation/reconciliation.js.map +1 -1
  431. package/dist/governance-activation/release-integrity.d.ts +1 -1
  432. package/dist/governance-activation/release-integrity.js +2 -2
  433. package/dist/governance-activation/release-integrity.js.map +1 -1
  434. package/dist/governance-activation/seed-lifecycle.d.ts +9 -1
  435. package/dist/governance-activation/seed-lifecycle.js +197 -63
  436. package/dist/governance-activation/seed-lifecycle.js.map +1 -1
  437. package/dist/governance-activation/source-of-truth.d.ts +5 -3
  438. package/dist/governance-activation/source-of-truth.js +32 -52
  439. package/dist/governance-activation/source-of-truth.js.map +1 -1
  440. package/dist/governance-activation/spec-kit-seed.d.ts +9 -0
  441. package/dist/governance-activation/spec-kit-seed.js +43 -0
  442. package/dist/governance-activation/spec-kit-seed.js.map +1 -0
  443. package/dist/governance-activation/task-projection.d.ts +1 -1
  444. package/dist/governance-activation/transition-planning.d.ts +15 -0
  445. package/dist/governance-activation/transition-planning.js +250 -0
  446. package/dist/governance-activation/transition-planning.js.map +1 -0
  447. package/dist/governance-activation/transition-ports.d.ts +150 -0
  448. package/dist/governance-activation/transition-ports.js +2 -0
  449. package/dist/governance-activation/transition-ports.js.map +1 -0
  450. package/dist/governance-activation/transition-process.d.ts +7 -0
  451. package/dist/governance-activation/transition-process.js +21 -0
  452. package/dist/governance-activation/transition-process.js.map +1 -0
  453. package/dist/governance-activation/transition-records.d.ts +56 -0
  454. package/dist/governance-activation/transition-records.js +208 -0
  455. package/dist/governance-activation/transition-records.js.map +1 -0
  456. package/dist/governance-activation/transitions.d.ts +6 -165
  457. package/dist/governance-activation/transitions.js +142 -2055
  458. package/dist/governance-activation/transitions.js.map +1 -1
  459. package/dist/governance-activation/types.d.ts +1 -390
  460. package/dist/governance-activation/types.js +1 -107
  461. package/dist/governance-activation/types.js.map +1 -1
  462. package/dist/governance-activation/validators.d.ts +1 -17
  463. package/dist/governance-activation/validators.js +1 -1304
  464. package/dist/governance-activation/validators.js.map +1 -1
  465. package/dist/governance-assessment/catalog.d.ts +1 -2
  466. package/dist/governance-assessment/catalog.js +18 -85
  467. package/dist/governance-assessment/catalog.js.map +1 -1
  468. package/dist/governance-assessment/command.d.ts +1 -1
  469. package/dist/governance-assessment/command.js +8 -12
  470. package/dist/governance-assessment/command.js.map +1 -1
  471. package/dist/governance-assessment/engine.d.ts +6 -11
  472. package/dist/governance-assessment/engine.js +463 -114
  473. package/dist/governance-assessment/engine.js.map +1 -1
  474. package/dist/governance-assessment/live-normalize.d.ts +1 -19
  475. package/dist/governance-assessment/live-normalize.js +1 -402
  476. package/dist/governance-assessment/live-normalize.js.map +1 -1
  477. package/dist/governance-assessment/live-transport.d.ts +2 -6
  478. package/dist/governance-assessment/live-transport.js +10 -22
  479. package/dist/governance-assessment/live-transport.js.map +1 -1
  480. package/dist/governance-assessment/live.js +55 -5
  481. package/dist/governance-assessment/live.js.map +1 -1
  482. package/dist/governance-assessment/predicates.d.ts +1 -27
  483. package/dist/governance-assessment/predicates.js +1 -329
  484. package/dist/governance-assessment/predicates.js.map +1 -1
  485. package/dist/governance-assessment/project.d.ts +13 -17
  486. package/dist/governance-assessment/project.js +59 -149
  487. package/dist/governance-assessment/project.js.map +1 -1
  488. package/dist/governance-assessment/readers.d.ts +1 -5
  489. package/dist/governance-assessment/readers.js +5 -13
  490. package/dist/governance-assessment/readers.js.map +1 -1
  491. package/dist/governance-assessment/report.d.ts +1 -23
  492. package/dist/governance-assessment/report.js +1 -265
  493. package/dist/governance-assessment/report.js.map +1 -1
  494. package/dist/governance-assessment/sanitize.d.ts +1 -8
  495. package/dist/governance-assessment/sanitize.js +1 -56
  496. package/dist/governance-assessment/sanitize.js.map +1 -1
  497. package/dist/governance-assessment/types.d.ts +1 -173
  498. package/dist/governance-assessment/types.js +1 -12
  499. package/dist/governance-assessment/types.js.map +1 -1
  500. package/dist/governance-assessment/yaml.d.ts +1 -6
  501. package/dist/governance-assessment/yaml.js +1 -29
  502. package/dist/governance-assessment/yaml.js.map +1 -1
  503. package/dist/init-filesystem.d.ts +1 -1
  504. package/dist/init-filesystem.js +126 -174
  505. package/dist/init-filesystem.js.map +1 -1
  506. package/dist/interactive.d.ts +2 -2
  507. package/dist/interactive.js +42 -41
  508. package/dist/interactive.js.map +1 -1
  509. package/dist/migrate-plan.d.ts +1 -1
  510. package/dist/migrate-plan.js +14 -8
  511. package/dist/migrate-plan.js.map +1 -1
  512. package/dist/npm-template-assets.js +5 -4
  513. package/dist/npm-template-assets.js.map +1 -1
  514. package/dist/openspec-profile.d.ts +1 -1
  515. package/dist/opentofu-template-assets.js +3 -3
  516. package/dist/opentofu-template-assets.js.map +1 -1
  517. package/dist/package-identity.d.ts +3 -0
  518. package/dist/package-identity.js +13 -2
  519. package/dist/package-identity.js.map +1 -1
  520. package/dist/planner.d.ts +1 -19
  521. package/dist/planner.js +1 -565
  522. package/dist/planner.js.map +1 -1
  523. package/dist/process-runner.d.ts +1 -1
  524. package/dist/project-dependencies.d.ts +5 -3
  525. package/dist/project-dependencies.js +74 -63
  526. package/dist/project-dependencies.js.map +1 -1
  527. package/dist/published-verifier.js +61 -30
  528. package/dist/published-verifier.js.map +1 -1
  529. package/dist/python-template-assets.js +6 -9
  530. package/dist/python-template-assets.js.map +1 -1
  531. package/dist/reconcile.d.ts +1 -1
  532. package/dist/reconcile.js +2 -2
  533. package/dist/reconcile.js.map +1 -1
  534. package/dist/repository-governance.d.ts +5 -2
  535. package/dist/repository-governance.js +126 -112
  536. package/dist/repository-governance.js.map +1 -1
  537. package/dist/runtime.js +1 -1
  538. package/dist/runtime.js.map +1 -1
  539. package/dist/scan.d.ts +6 -2
  540. package/dist/scan.js +78 -30
  541. package/dist/scan.js.map +1 -1
  542. package/dist/self-upgrade.d.ts +1 -1
  543. package/dist/self-upgrade.js +20 -7
  544. package/dist/self-upgrade.js.map +1 -1
  545. package/dist/stable-release.js +7 -1
  546. package/dist/stable-release.js.map +1 -1
  547. package/dist/standard-templates.d.ts +2 -2
  548. package/dist/standard-templates.js +6 -841
  549. package/dist/standard-templates.js.map +1 -1
  550. package/dist/supported-stack.d.ts +3 -115
  551. package/dist/supported-stack.js +4 -438
  552. package/dist/supported-stack.js.map +1 -1
  553. package/dist/telemetry/index.d.ts +1 -1
  554. package/dist/templates.d.ts +10 -20
  555. package/dist/templates.js +52 -3261
  556. package/dist/templates.js.map +1 -1
  557. package/dist/types.d.ts +1 -263
  558. package/dist/types.js +1 -1
  559. package/dist/types.js.map +1 -1
  560. package/dist/version.js +2 -6
  561. package/dist/version.js.map +1 -1
  562. package/dist/workstation-catalog.d.ts +5 -2
  563. package/dist/workstation-catalog.js +33 -2
  564. package/dist/workstation-catalog.js.map +1 -1
  565. package/dist/workstation.d.ts +4 -3
  566. package/dist/workstation.js +86 -32
  567. package/dist/workstation.js.map +1 -1
  568. package/docs/assets/liftoff-terminal.svg +3 -3
  569. package/docs/azure-deployment.md +107 -10
  570. package/docs/cli-reference.md +49 -13
  571. package/docs/configuration-and-manifests.md +139 -34
  572. package/docs/existing-repositories.md +33 -6
  573. package/docs/getting-started.md +44 -31
  574. package/docs/prerequisites.md +34 -35
  575. package/docs/project-structure.md +39 -46
  576. package/docs/repository-governance.md +90 -24
  577. package/docs/safety-and-consent.md +65 -12
  578. package/docs/spec-workflows-and-agents.md +31 -28
  579. package/docs/supported-stack.md +11 -9
  580. package/docs/troubleshooting.md +107 -49
  581. package/docs/workloads.md +46 -62
  582. package/package.json +4 -7
  583. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/UPSTREAM_LICENSE.txt +0 -21
  584. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/catalog.json +0 -520
  585. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/packaged/gitignore +0 -27
  586. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/README.md +0 -25
  587. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/components.json +0 -22
  588. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/eslint.config.js +0 -23
  589. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/index.html +0 -13
  590. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package-lock.json +0 -6156
  591. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package.json +0 -60
  592. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/public/power-apps.svg +0 -55
  593. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/App.tsx +0 -17
  594. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/assets/react.svg +0 -1
  595. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/mode-toggle.tsx +0 -37
  596. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/badge.tsx +0 -46
  597. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/button.tsx +0 -60
  598. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/calendar.tsx +0 -211
  599. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/card.tsx +0 -92
  600. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/chart.tsx +0 -355
  601. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/checkbox.tsx +0 -32
  602. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/command.tsx +0 -184
  603. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dialog.tsx +0 -141
  604. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dropdown-menu.tsx +0 -257
  605. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/input.tsx +0 -21
  606. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/label.tsx +0 -22
  607. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/popover.tsx +0 -46
  608. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/progress.tsx +0 -29
  609. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/select.tsx +0 -185
  610. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/separator.tsx +0 -26
  611. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/skeleton.tsx +0 -13
  612. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/table.tsx +0 -114
  613. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tabs.tsx +0 -66
  614. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/textarea.tsx +0 -18
  615. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tooltip.tsx +0 -61
  616. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/hooks/use-theme.ts +0 -11
  617. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/index.css +0 -131
  618. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/lib/utils.ts +0 -6
  619. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/main.tsx +0 -10
  620. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/_layout.tsx +0 -31
  621. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/home.tsx +0 -59
  622. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/not-found.tsx +0 -14
  623. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/query-provider.tsx +0 -26
  624. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/sonner-provider.tsx +0 -23
  625. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/theme-provider.tsx +0 -64
  626. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/router.tsx +0 -24
  627. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.app.json +0 -34
  628. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.json +0 -13
  629. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.node.json +0 -26
  630. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/vite.config.ts +0 -19
  631. package/assets/power-apps-code-app/README.md +0 -27
  632. package/dist/code-apps-plugin.d.ts +0 -13
  633. package/dist/code-apps-plugin.js +0 -69
  634. package/dist/code-apps-plugin.js.map +0 -1
  635. package/dist/power-apps-assets.d.ts +0 -30
  636. package/dist/power-apps-assets.js +0 -131
  637. package/dist/power-apps-assets.js.map +0 -1
  638. package/dist/power-apps-templates.d.ts +0 -3
  639. package/dist/power-apps-templates.js +0 -177
  640. package/dist/power-apps-templates.js.map +0 -1
  641. package/dist/power-apps-validation.d.ts +0 -1
  642. package/dist/power-apps-validation.js +0 -79
  643. package/dist/power-apps-validation.js.map +0 -1
@@ -18,11 +18,9 @@ Supported edits are reconciled by `liftoff update`:
18
18
  manifests; replace it with `staging` before validation or update.
19
19
  - Removing or re-enabling a previously provisioned component never deletes,
20
20
  restores, or overwrites its project-owned files.
21
- - Power Apps can change the optional Code Apps plugin preference; only manifest
22
- intent and applicable managed-core context change.
23
21
 
24
- Workload kind, API stack, GenAI pattern, spec workflow, selected agents, and a
25
- user-supplied Power Apps starter source change are not ordinary updates.
22
+ Workload kind, API stack, GenAI pattern, spec workflow, and selected agents are
23
+ not ordinary updates.
26
24
 
27
25
  An undecided GenAI project records an explicit generic identity rather than
28
26
  omitting the pattern:
@@ -46,21 +44,98 @@ omitting the pattern:
46
44
  Changing `generic` to a specialized pattern later is a reviewed project
47
45
  migration because application files are project-owned; it is not an update.
48
46
 
49
- A Power Apps configuration contains only applicable fields:
47
+ The `power-apps-code-app` workload and `codeAppsPlugin` configuration field are
48
+ retired. They are rejected rather than ignored or converted to another workload.
50
49
 
51
- ```json
52
- {
53
- "projectName": "sales-hub",
54
- "projectType": "power-apps-code-app",
55
- "specWorkflow": "openspec",
56
- "agents": ["github-copilot"],
57
- "governanceProfile": "single-maintainer-gitflow",
58
- "codeAppsPlugin": false
59
- }
50
+ ## Application runtime configuration
51
+
52
+ These settings are separate from Liftoff desired state. Each backend resolves
53
+ **process environment > selected local configuration file > nonsecret defaults**
54
+ once per process. Restart after changing configuration; do not shell-source a
55
+ file to make it work.
56
+
57
+ | Backend | Default native file | Selected-file override |
58
+ | --- | --- | --- |
59
+ | Python/FastAPI, including GenAI | Project-root `.env`, resolved from `backend/config/settings.py`, not the working directory | `LIFTOFF_ENV_FILE` names a dotenv file |
60
+ | Node.js/Fastify | Project-root `.env`, resolved from source or compiled configuration location | `LIFTOFF_ENV_FILE` names a dotenv file |
61
+ | Go/Huma | `../runtime.config.json` when launched from `backend/` | `LIFTOFF_ENV_FILE` names a JSON object of string values |
62
+
63
+ Override paths are relative to the startup working directory unless absolute.
64
+ An explicitly selected missing, unreadable, or malformed file fails even when
65
+ process values could otherwise satisfy startup. An absent default file is allowed
66
+ when process values provide the required settings. All stacks need
67
+ `DATABASE_URL` and `REDIS_URL`; model credentials are not required for operational
68
+ endpoints.
69
+
70
+ Python and Node validate dotenv assignments, balanced quotes, UTF-8, and NUL
71
+ input before accepting a file. Use `KEY=value`, optional `export`, comments,
72
+ and single- or double-quoted values. Node uses the runtime dotenv parser and
73
+ rejects escaped quote delimiters that it would otherwise truncate; use the other
74
+ quote style, for example `APP_NAME="Bob's API"`. Go uses `encoding/json`, not a
75
+ dotenv dependency: numbers such as `PORT` must be quoted strings, and null or
76
+ other non-string values are rejected.
77
+
78
+ ### Native development
79
+
80
+ From the project root in a POSIX shell, prepare the documented local settings:
81
+
82
+ ```bash
83
+ cp .env.example .env
84
+ docker compose up -d postgres redis azurite mailpit
60
85
  ```
61
86
 
62
- API, cloud, region, frontend, and environment fields are rejected for this
63
- workload rather than silently ignored.
87
+ Then run **only the selected backend** after its locked dependency preparation:
88
+
89
+ | Backend | Native command |
90
+ | --- | --- |
91
+ | Python | `uv sync --frozen --project backend --extra test`, then `uv run --project backend uvicorn backend.apis.main:app --host 127.0.0.1 --port 8000` |
92
+ | Node.js | `(cd backend && npm ci && npm run build && npm start)` |
93
+ | Go | Copy `runtime.config.example.json` to `runtime.config.json`, then `(cd backend && go mod download && go run ./cmd/api)` |
94
+
95
+ Worker-enabled Python projects add `--extra functions` to frozen synchronization.
96
+ For a Python launch from `backend/`, use
97
+ `uv run uvicorn --app-dir .. backend.apis.main:app --port 8000`; it still reads
98
+ root `.env` without exporting the file's values. PowerShell users can use
99
+ `Copy-Item` and `Set-Location` rather than the POSIX parenthesized commands.
100
+ An explicit selector from `backend/` is `$env:LIFTOFF_ENV_FILE = '..\.env'`
101
+ for Python/Node, or `'..\runtime.config.json'` for Go.
102
+
103
+ Migration tools use the same resolved settings: Python Alembic, Node Drizzle,
104
+ and Go's `make migrate` wrapper around the existing pinned Goose tool. Running
105
+ migrations is a separate database mutation, not part of the startup probes.
106
+
107
+ ### Compose and integration boundaries
108
+
109
+ Compose reads root `.env` for interpolation. Select a different dotenv file with
110
+ `docker compose --env-file environments/<env>/backend.env up --build`, using an
111
+ actually selected environment. Process values take precedence. Compose deliberately
112
+ keeps PostgreSQL, Redis, and blob addresses container-reachable while forwarding
113
+ the applicable model, messaging, CORS, and tracing settings.
114
+
115
+ `/health` and `/ready` are local process/configuration endpoints, not dependency
116
+ connectivity or production-readiness proofs. They make no model/provider request.
117
+ Backend containers listen on 8000; the frontend container serves static files on
118
+ 80, mapped to 5173 by Compose.
119
+
120
+ For GenAI:
121
+
122
+ - `PYDANTIC_AI_MODEL` supports the locked `openai:`, `openai-chat:`, and
123
+ `openai-responses:` providers with `OPENAI_API_KEY` and optional
124
+ `OPENAI_BASE_URL`. Other providers need reviewed dependency/configuration work.
125
+ - Redis Streams publishes to `REDIS_STREAM_NAME` using `REDIS_URL`.
126
+ - `SERVICE_BUS_AUTH_MODE=managed-identity` requires
127
+ `SERVICE_BUS_FULLY_QUALIFIED_NAMESPACE`, `SERVICE_BUS_QUEUE_NAME`, and
128
+ `AZURE_CLIENT_ID`. `connection-string` requires the queue and
129
+ `SERVICE_BUS_CONNECTION_STRING`. Missing sender settings cannot report queued
130
+ ingestion.
131
+ - Both Langfuse keys blank means tracing is disabled; configuring exactly one
132
+ of `LANGFUSE_PUBLIC_KEY` and `LANGFUSE_SECRET_KEY` is an error.
133
+ `LANGFUSE_HOST` is optional.
134
+
135
+ Keep local secrets out of source control and build contexts. Root/frontend
136
+ `.dockerignore` files exclude host dependencies, caches, outputs, VCS metadata,
137
+ state, and secrets; the Function publish context also has `.funcignore`.
138
+ These runtime files remain project-owned, not managed update targets.
64
139
 
65
140
  ## `liftoff.manifest.json`: CLI-owned compatibility record
66
141
 
@@ -71,8 +146,6 @@ workload:
71
146
 
72
147
  - `genai`: API stack, pattern, cloud, region, frontend, and environments.
73
148
  - `standard`: API stack, cloud, region, frontend, and environments.
74
- - `power-apps-code-app`: immutable starter repository, template path, commit,
75
- and Code Apps plugin preference.
76
149
 
77
150
  The manifest also records:
78
151
 
@@ -85,12 +158,14 @@ The manifest also records:
85
158
  authorize update writes.
86
159
  - OS-neutral path-part arrays.
87
160
  - Repository governance profile, policy version 6, activation-contract version
88
- 1, graph/state/evidence/approval/supersession/credential schema versions, the
161
+ 2, state/evidence-header/approval schema versions 2,
162
+ graph/supersession/credential schema versions 1, the
89
163
  exact phase-graph hash, and local `handoff-generated`, `handoff-partial`, or
90
164
  disabled state.
91
165
 
92
- Power Apps source identity uses explicit repository, path, and 40-character
93
- commit fields. It is not inferred from mutable URLs or generated file paths.
166
+ An existing Power Apps manifest is rejected at its retired workload boundary
167
+ before starter metadata or artifact paths are interpreted. Its original files
168
+ remain unchanged.
94
169
 
95
170
  Treat the manifest as CLI-owned. Restore it from version control or regenerate
96
171
  with the matching Liftoff version when validation reports malformed identity,
@@ -98,19 +173,20 @@ paths, or hashes.
98
173
 
99
174
  ## Compatibility
100
175
 
101
- Readers support artifact versions v2, v3, v4, v5, v6, and v7:
176
+ Readers support artifact versions v2, v3, v4, v5, v6, and v7 for API/GenAI projects:
102
177
 
103
178
  - V2 normalizes the legacy flat API identity and records framework state as
104
179
  uncertain without inventing agents.
105
180
  - V3 normalizes flat GenAI or API identity plus framework and agent metadata.
106
- - V4 represents the discriminated workload model, including Power Apps.
181
+ - V4 introduces the discriminated workload model. Its formerly supported Power
182
+ Apps variant is now retired.
107
183
  - V5 adds repository-governance handoff identity without claiming live
108
184
  enforcement.
109
185
  - V6 separates managed-core update authority from project generation
110
186
  provenance.
111
- - V7 adds deterministic setup identity: manifest artifact version 7, policy
112
- version 6, activation-contract version 1, schema-v1 activation artifacts, and
113
- the canonical phase-graph hash. Governance-disabled v7 manifests use the
187
+ - V7 adds deterministic setup identity. Current output uses
188
+ manifest artifact version 7, policy version 6, activation-contract version 2, and the canonical
189
+ phase-graph hash. Governance-disabled v7 manifests use the
114
190
  disabled variant and do not fabricate activation identity.
115
191
 
116
192
  Enabled governance manifests retain their recorded positive-integer policy
@@ -123,18 +199,37 @@ rewrite.
123
199
  `liftoff update --check`, including `--check --json`, leaves an old manifest
124
200
  byte-for-byte unchanged. A successful plain update writes v7 only after the
125
201
  transaction succeeds. V2-v6 backend, frontend, database, dependency, container,
126
- environment, documentation, Power Apps, and infrastructure entries become
202
+ environment, documentation, and infrastructure entries become
127
203
  project provenance without reading or changing current production bytes.
128
204
  Intentionally deleted files remain absent. Only exact current core logical names
129
205
  retain write authority.
130
206
 
131
207
  The compatibility map is explicit; Liftoff does not use numeric less-than
132
- comparisons to infer safety. Supported v7 identity resumes when policy 6,
133
- activation contract 1, schema versions 1, and a recognized graph hash match.
134
- Future identities, individually known versions in unsupported combinations,
135
- unversioned ad hoc governance state, and unknown graph hashes block with an
136
- upgrade, import-mapping, or reconciliation remedy. No reader converts prose,
137
- filenames, or checked tasks into evidence.
208
+ comparisons to infer execution safety.
209
+
210
+ | Contract | Current version |
211
+ | --- | --- |
212
+ | CLI package version | 0.11.1 |
213
+ | Activation package identity | 0.11.0 |
214
+ | Manifest write / supported reads | 7 / 2-7 for API and GenAI |
215
+ | Normative policy | 6 |
216
+ | Activation contract, state, evidence header, approval envelope, compatibility metadata | 2 |
217
+ | Phase graph, supersession, credential policy | 1 |
218
+ | Assessment report and control catalog | 1 |
219
+
220
+ The 0.11.1 CLI patch retains the 0.11.0 activation identity because its phase
221
+ semantics and graph are unchanged. Independent infrastructure provenance
222
+ explicitly recognizes both generation versions; unknown releases are not
223
+ automatically trusted or treated as compatible.
224
+
225
+ Known activation-v1 history remains readable but **diagnostic-only**, not
226
+ executable proof. Managed-core maintenance can continue without rewriting user-owned
227
+ historical identity, state, or receipts. A readable historical manifest cannot
228
+ bootstrap current activation or authorize provider scope, even when no state
229
+ file exists or a separate current state is supplied. No automatic conversion, reset, or public
230
+ historical reconciliation workflow is provided. Future/mixed tuples, ad hoc
231
+ state, and unknown graph hashes remain blocked. No reader converts prose,
232
+ filenames, checked tasks, or old placeholder digests into current evidence.
138
233
 
139
234
  ## Artifact ownership
140
235
 
@@ -149,6 +244,11 @@ category or filename:
149
244
  | `framework` | Official framework | Validated through framework markers and maintained by that framework |
150
245
  | `seed` | Developer/project | Written once and never reconciled |
151
246
 
247
+ New Spec Kit projects explicitly seed
248
+ `specs/000-liftoff-bootstrap/{spec.md,plan.md,tasks.md}`. These are not framework
249
+ templates or managed-core files. Missing older bundles are an adoption blocker,
250
+ not permission for update or force to create them.
251
+
152
252
  The manifest is a CLI-owned transaction record rather than an ordinary
153
253
  template artifact. Current managed core is limited to the exact repository
154
254
  governance policy, context, guide, phase graph, compatibility metadata,
@@ -174,7 +274,12 @@ those files, but it does not advance, reset, or delete a phase.
174
274
  ## Contract conventions
175
275
 
176
276
  - Writers use `artifactVersion` 7; readers support v2, v3, v4, v5, v6, and v7.
177
- - Artifact logical names and catalog identifiers are append-only.
277
+ - Artifact logical names and catalog identifiers are append-only except for
278
+ explicitly reviewed retirements. In 0.11.0, the eight
279
+ [flat-root OpenTofu identities](azure-deployment.md#explicit-flat-root-identity-retirement)
280
+ are retired from **new scaffold output only**. Their historical paths,
281
+ identities, and generation hashes remain provenance, not aliases or deletion
282
+ authority. Retained tfvars IDs alone do not establish the independent layout.
178
283
  - Rendering is deterministic and does not depend on timestamps, host versions,
179
284
  or network state.
180
285
  - `.liftoff/governance/` contains managed setup definitions; `governance/`
@@ -102,12 +102,15 @@ while unrecorded conflicts remain user-owned. No update mode runs an agent or
102
102
  activates GitHub settings.
103
103
 
104
104
  Projects carrying governance policy versions 2 through 5 preview policy version
105
- 6, manifest v7, and activation-contract v1 as managed-core drift. Review the
105
+ 6, manifest v7, and activation-contract v2 as managed-core drift. Review the
106
106
  canonical phase graph, private-runner credential contract, bootstrap-state
107
107
  retention/disposal contract, and active-change reconciliation before
108
108
  replacement. Updating the handoff never provisions Azure or GitHub resources;
109
- any active downstream governance change must acknowledge the supported
110
- activation identity and exact graph hash before applying infrastructure.
109
+ active downstream work must have supported identity and current evidence before
110
+ it can execute. The CLI provides no public identity-acknowledgment or historical
111
+ reconciliation workflow.
112
+ Historical activation-v1 state and receipts are diagnostic-only, not
113
+ automatically migrated or made executable by updating core files.
111
114
 
112
115
  The manifest-v7 transition releases every legacy non-core artifact into project
113
116
  provenance without writing, restoring, moving, or deleting its path.
@@ -118,7 +121,16 @@ Supported readers normalize manifest v2-v6 and write only v7 after all
118
121
  preflights pass. Future versions, unsupported policy/contract/schema tuples,
119
122
  unknown graph hashes, unversioned activation state, or prose-only task history
120
123
  block with explicit upgrade, import-mapping, or reconciliation remedies. Liftoff
121
- never fabricates evidence from old checkboxes.
124
+ never fabricates evidence from old checkboxes. A diagnostic is not a command to
125
+ hand-write mappings, retag receipts, or manufacture missing history.
126
+
127
+ The new infrastructure layout uses shared application modules and independent
128
+ environment roots. Its eight [retired flat-root identities](azure-deployment.md#explicit-flat-root-identity-retirement)
129
+ remain readable as historical provenance, not aliases for new paths. Existing
130
+ files, state, and generation hashes remain untouched. Adding an environment
131
+ requires recorded independent-root provenance and safe existing module files;
132
+ legacy or unknown layouts need separately reviewed migration. Core context
133
+ updates cannot claim that this migration happened.
122
134
 
123
135
  Major supported-stack releases apply to new scaffolds. Existing projects adopt
124
136
  runtime, lock, Docker, provider, framework, and application changes through a
@@ -146,5 +158,20 @@ framework pipeline, including separate global OpenSpec profile authorization,
146
158
  and leaves the source byte-for-byte unchanged. `--force` does not permit a
147
159
  non-empty migration target.
148
160
 
149
- Arbitrary existing Power Apps application migration is not currently
150
- supported.
161
+ The scan reads dependency declarations rather than comments or example text.
162
+ Python setup/test configuration and non-workflow `.github` files remain
163
+ explicit inventory items; dynamic or malformed declarations produce review
164
+ diagnostics rather than invented stack defaults. Source configuration code is
165
+ never executed to discover dependencies.
166
+
167
+ Explicit workload, API-stack, and frontend choices control the target mapping.
168
+ For example, Go source selected for a Node target receives porting instructions,
169
+ not Go-only destination paths; a declined frontend remains a placement decision.
170
+
171
+ Complete the mapped work and run the backend tests, `liftoff validate`, and
172
+ `liftoff doctor` before deleting `migration/legacy/`. OpenSpec archival follows
173
+ the completed change; a Spec Kit migration checklist is finalized locally
174
+ without an invented archive command.
175
+
176
+ Power Apps creation, maintenance, and migration are retired. Existing Power Apps
177
+ manifests are rejected without modifying or converting their application files.
@@ -1,18 +1,19 @@
1
1
  # Getting started
2
2
 
3
- Liftoff is an interactive project initializer for governed GenAI applications,
4
- standard APIs, and Power Apps code apps.
3
+ Liftoff is an interactive project initializer for governed GenAI applications
4
+ and standard APIs.
5
5
 
6
6
  ## 1. Install the CLI
7
7
 
8
- Liftoff and generated Node.js workloads require Node.js 24.20 or newer.
9
- Python workloads use Python 3.14 with frozen `uv` dependency locks.
8
+ Workstation readiness requires stable Node.js 24 LTS at 24.20.0 or newer within
9
+ that line, plus npm 12.x at 12.0.2 or newer when selected tools need it.
10
+ Python workloads use Python 3.14.x with frozen `uv` dependency locks.
10
11
 
11
12
  The canonical release registry is `https://registry.npmjs.org`:
12
13
 
13
14
  ```bash
14
- npm view @msn-control/liftoff@latest version --registry=https://registry.npmjs.org
15
- npm install -g @msn-control/liftoff@latest --registry=https://registry.npmjs.org
15
+ npm view @msn-control/liftoff@latest version --registry=https://registry.npmjs.org --@msn-control:registry=https://registry.npmjs.org
16
+ npm install -g @msn-control/liftoff@latest
16
17
  liftoff --version
17
18
  ```
18
19
 
@@ -22,6 +23,10 @@ If your organization requires a managed npm registry, query
22
23
  canonical npm. Stop if the mirror is older or rejects the explicit current
23
24
  version; ask the mirror owner to synchronize or approve the release. Liftoff
24
25
  does not modify `.npmrc` or bypass registry policy.
26
+ The read-only canonical query isolates both default and scoped registry
27
+ overrides. Installation intentionally honors the configured
28
+ `@msn-control:registry` before the default registry; do not force a canonical
29
+ download around an organization's delivery policy.
25
30
 
26
31
  Versions predating the self-upgrade command require that manual global install
27
32
  once. After a capable version is installed globally with npm, use:
@@ -50,7 +55,7 @@ cd my-project
50
55
 
51
56
  The guided flow asks for:
52
57
 
53
- 1. Project identity and workload: GenAI, API, or Power Apps code app.
58
+ 1. Project identity and workload: GenAI or API.
54
59
  2. Only the architecture choices applicable to that workload.
55
60
  For GenAI, **I'm not sure yet - Generic GenAI starter** is the safe default
56
61
  when no specialization has been selected.
@@ -62,8 +67,7 @@ The guided flow asks for:
62
67
  6. Whether to configure the default-off GitHub-hosted Copilot coding agent when
63
68
  OpenSpec and GitHub Copilot are selected.
64
69
  7. A Spec Kit default agent when both agents are selected.
65
- 8. The optional Preview Code Apps plugin preference for Power Apps projects.
66
- 9. Plan confirmation, workstation readiness, and any separate install or
70
+ 8. Plan confirmation, workstation readiness, and any separate install or
67
71
  overwrite permissions that are needed.
68
72
 
69
73
  Liftoff renders into temporary staging, runs the official framework initializer
@@ -74,12 +78,12 @@ and asks separately before staging.
74
78
 
75
79
  When governance is enabled, `/liftoff-setup` is the next selected-agent action.
76
80
  It has no model-selection requirement: safety comes from the Liftoff CLI phase
77
- graph, local evidence, approval envelopes, and readback. Setup first completes,
78
- syncs, and archives the generated `bootstrap-<project>` seed. Only then does it
79
- reach explicit authority gates for repository commit/push, credentials, billed
80
- infrastructure or policy exceptions, final enforcement, destructive cleanup, and
81
- external blockers. Commit and push are never implicit in `liftoff init`, `--yes`,
82
- or read-only checks.
81
+ graph, local evidence, approval envelopes, and readback. OpenSpec setup completes,
82
+ syncs, and archives `bootstrap-<project>`; Spec Kit validates and finalizes
83
+ `specs/000-liftoff-bootstrap/` locally. Neither workflow invents completed product
84
+ work. Missing approval-persistence, credential-enrollment, and production phase
85
+ executors remain specific blockers. Commit and push are never implicit in
86
+ `liftoff init`, `--yes`, or read-only checks.
83
87
 
84
88
  For deterministic generic generation, use `--type genai --pattern generic`.
85
89
 
@@ -97,26 +101,35 @@ non-empty target.
97
101
 
98
102
  ## 4. Local baseline setup verifies
99
103
 
100
- `/liftoff-setup` runs only local, project-applicable baseline checks before it
101
- archives the seed:
104
+ `/liftoff-setup` runs only local, project-applicable baseline checks before
105
+ archiving the OpenSpec seed or finalizing the Spec Kit bundle. Commands run in
106
+ their declared component directories, not all from an arbitrary working directory:
102
107
 
103
108
  ```bash
104
109
  liftoff validate
105
110
  # backend tests from the generated README when a backend exists
106
111
  # frontend build from the generated README when a frontend exists
107
112
  docker compose config -q
113
+ # From infrastructure/opentofu/azure/:
108
114
  tofu fmt -check -recursive
115
+ # Within each selected environments/<environment>/ infrastructure root:
109
116
  tofu init -backend=false
110
117
  tofu validate
111
- openspec validate --strict
118
+ # OpenSpec only, from the project root (replace the generated change name):
119
+ openspec validate bootstrap-my-project --strict
112
120
  ```
113
121
 
114
- Absent components are inapplicable: a Power Apps project does not fabricate
115
- backend, Docker, or OpenTofu success, and an API project without a frontend skips
116
- frontend build evidence. The baseline does not run `tofu plan`, `tofu apply`,
122
+ Absent optional components are inapplicable: an API project without a frontend
123
+ skips frontend build evidence. The baseline does not run `tofu plan`, `tofu apply`,
117
124
  start containers, deploy, mutate GitHub, or require cloud credentials. If a check
118
- fails, the seed remains active and `/liftoff-setup` resumes idempotently after
119
- you fix the blocker; verified phases are not repeated.
125
+ fails, the seed remains unfinished. After repair, explicit execution can retry
126
+ the local baseline; read-only `resume` does not run it. Current unchanged proof
127
+ can be reused, while changed inputs require new evidence.
128
+ Dependencies must already be usable, or separately installed with explicit
129
+ consent; passing a baseline does not prove that installation or consent happened.
130
+ Spec Kit's B001–B006 projection is finalized only after its checks pass.
131
+ Legacy/shared or unknown infrastructure layouts block baseline execution with a
132
+ migration-required result rather than omitting those checks.
120
133
 
121
134
  You can run read-only maintenance at any time:
122
135
 
@@ -132,14 +145,14 @@ liftoff governance verify --json
132
145
  adds read-only workstation, runtime, authentication, dependency,
133
146
  workload-specific, and governance-state diagnostics.
134
147
 
135
- After setup archives the seed and you explicitly approve repository publication,
136
- normal development follows your selected workflow:
148
+ After the local bootstrap handoff, normal development follows your selected
149
+ workflow. Repository publication and production activation remain separate:
137
150
 
138
151
  - GenAI and API projects: copy `.env.example` to `.env`, install the generated
139
152
  stack dependencies, then use `liftoff dev` and `liftoff infra` to print local
140
- development and infrastructure commands.
141
- - Power Apps projects: run `npm ci`, then `npm run dev`. Environment binding,
142
- connector addition, and `power-apps push` are deliberately deferred.
153
+ development and infrastructure commands. Native Go also copies
154
+ `runtime.config.example.json` to `runtime.config.json`; see the
155
+ [stack-specific configuration recipes](configuration-and-manifests.md#application-runtime-configuration).
143
156
  - OpenSpec or Spec Kit changes drive normal feature work; release and hotfix
144
157
  flows follow the governed GitFlow plan after activation evidence is green.
145
158
 
@@ -151,7 +164,7 @@ Use `liftoff plan` to resolve choices and preview requirements without writing
151
164
  files or running installers:
152
165
 
153
166
  ```bash
154
- liftoff plan --type power-apps-code-app --spec openspec --agents copilot
167
+ liftoff plan --type standard --api node --spec openspec --agents copilot
155
168
  ```
156
169
 
157
170
  Automation can pass the same options to `liftoff init`. Use `--yes` for project
@@ -176,5 +189,5 @@ source remains byte-for-byte unchanged.
176
189
  liftoff migrate ../legacy-app --region eastus --agents copilot,claude --yes
177
190
  ```
178
191
 
179
- Power Apps migration from an arbitrary existing application is not part of the
180
- current workload contract.
192
+ Power Apps support is retired, including existing-project maintenance. Retired
193
+ inputs are rejected without converting or deleting the original application.
@@ -1,18 +1,26 @@
1
1
  # Prerequisites
2
2
 
3
3
  Liftoff derives workstation and project requirements from the complete resolved
4
- plan. A Power Apps project is not asked to install API or infrastructure tools,
5
- and a Go API is not asked to install Python.
4
+ plan. A Go API does not inherit Python backend dependencies, although a selected
5
+ framework such as Spec Kit can require Python for its own tooling.
6
6
 
7
7
  ## Baseline
8
8
 
9
- - Liftoff CLI and generated Node.js workloads: Node.js 24.20 or newer.
10
- - Python projects: Python 3.14 and `uv` 0.12.7 or newer.
11
- - Go projects: Go 1.27 or newer.
12
- - Generated Azure infrastructure: OpenTofu 1.12.6 or newer.
9
+ - Workstation Node.js: stable Node.js 24 LTS, version 24.20.0 or newer within 24.x.
10
+ - npm-dependent stacks or OpenSpec: stable npm 12.x, version 12.0.2 or newer.
11
+ - Python projects: stable Python 3.14.x and `uv` 0.12.x at version 0.12.7 or newer.
12
+ - Go projects: stable Go 1.27.x.
13
+ - Generated Azure infrastructure: stable OpenTofu 1.12.x at version 1.12.6 or newer.
13
14
  - Selected framework: OpenSpec 1.11.0 or Spec Kit 1.0.1 exactly.
14
15
  - Selected agents: GitHub Copilot, Claude Code, or both.
15
16
 
17
+ Minimum versions do not authorize a different, untested release line. Release
18
+ candidates and other prereleases do not satisfy stable floors or exact framework
19
+ pins. A working Node.js executable does not establish npm readiness: when npm is
20
+ required, it is probed separately before destination writes. A missing npm
21
+ executable requires a separately reviewed machine-level repair; Liftoff does not
22
+ try to run the missing executable or reinstall Node.js on its behalf.
23
+
16
24
  Automatic `liftoff upgrade` additionally requires that the running canonical
17
25
  `@msn-control/liftoff` package is a normal global npm installation beneath
18
26
  `npm root --global`. Local dependencies, `npx` cache copies, linked checkouts,
@@ -27,6 +35,8 @@ runtime. GenAI uses Python 3.14 and the Python/FastAPI/PydanticAI stack.
27
35
  Blocking checks must be ready before initialization can safely complete:
28
36
 
29
37
  - Required runtime and minimum version.
38
+ - Required package managers, including npm for Node.js dependencies, a frontend,
39
+ or OpenSpec.
30
40
  - Selected spec framework CLI.
31
41
  - Every selected coding agent.
32
42
  - For OpenSpec, global profile `custom`, delivery `both`, and all 12 workflows.
@@ -36,7 +46,6 @@ Advisory checks describe useful but deferrable capabilities:
36
46
  - Docker CLI and daemon health for API workloads.
37
47
  - OpenTofu for generated Azure infrastructure.
38
48
  - Azure CLI and observable authentication health.
39
- - Optional Code Apps plugin state for Power Apps.
40
49
 
41
50
  Authentication checks are read-only. Liftoff never stores credentials or signs
42
51
  in to a cloud or agent on your behalf.
@@ -63,7 +72,7 @@ can register each missing namespace explicitly before dependent resources.
63
72
  without writing files or running installers:
64
73
 
65
74
  ```bash
66
- liftoff plan --type power-apps-code-app --spec openspec --agents copilot,claude
75
+ liftoff plan --type standard --api node --spec openspec --agents copilot,claude
67
76
  ```
68
77
 
69
78
  ## Tool installation consent
@@ -103,19 +112,22 @@ Project-local dependency setup is separate from workstation tools and requires
103
112
  `--install-dependencies` or interactive approval after a successful project
104
113
  merge.
105
114
 
106
- For Power Apps, Liftoff runs only the root locked install:
107
-
108
- ```bash
109
- npm ci
110
- ```
111
-
112
- The generated `package.json` and `package-lock.json` are validated before
113
- installation and protected from installer mutation. If dependency setup is
114
- skipped or fails, Liftoff prints the exact resume command rather than claiming
115
- the project is ready.
116
-
117
115
  GenAI and API projects use their generated stack-native locked dependency
118
- commands.
116
+ commands. If dependency setup is skipped or fails, Liftoff prints the exact
117
+ resume command rather than claiming the project is ready.
118
+
119
+ Recovery output identifies its shell: POSIX shell on macOS/Linux and PowerShell
120
+ on Windows. Copy the command into that shell; directory names and arguments are
121
+ quoted literally rather than expanded as environment variables.
122
+
123
+ If protected metadata changes during dependency setup, Liftoff stops and lists
124
+ the changed paths. It preserves those edits instead of assuming the installer
125
+ caused them and restoring older bytes over concurrent work. Review and repair
126
+ the metadata before retrying. Dependency scripts can also change other project
127
+ files; this check is not a script sandbox.
128
+ Dependencies that are already installed and usable do not need a new install
129
+ merely to satisfy a bootstrap checkbox. Local checks prove usability, not that
130
+ an installation or its consent occurred.
119
131
 
120
132
  Python projects use the generated lock without resolving new versions:
121
133
 
@@ -130,24 +142,11 @@ Liftoff's npm locks are generated with npm 12.0.2 and verified in the supported
130
142
  compatibility lanes. Do not replace a committed lock with an install from
131
143
  open-ended manifest ranges.
132
144
 
133
- ## Power Apps local CLI
134
-
135
- The Power Apps CLI is supplied by the generated project dependency graph.
136
- Liftoff checks it without downloading another package:
137
-
138
- ```bash
139
- npx --no-install power-apps --version
140
- ```
141
-
142
- If `node_modules` is absent, run `npm ci` first. Environment binding and cloud
143
- authentication remain separate later actions.
144
-
145
145
  ## Agent detection
146
146
 
147
147
  Copilot can be detected through its CLI or supported VS Code extensions.
148
148
  Claude Code is checked with its version and doctor commands. When both are
149
149
  selected, both must be ready.
150
150
 
151
- The optional Code Apps plugin uses independent, read-only probes for each
152
- selected agent. A missing executable, timeout, or unsupported plugin-list
153
- result is reported as not observable rather than silently treated as missing.
151
+ Power Apps and Code Apps plugin preparation are retired. Their inputs are
152
+ rejected before selecting or installing a former workload-specific tool set.