@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
@@ -17,7 +17,9 @@ project/
17
17
  |-- liftoff.config.json
18
18
  |-- liftoff.manifest.json
19
19
  |-- .env.example
20
+ |-- runtime.config.example.json # Go native configuration only
20
21
  |-- Dockerfile
22
+ |-- .dockerignore
21
23
  |-- docker-compose.yml
22
24
  |-- .liftoff/
23
25
  | `-- governance/ # managed-core local handoff when enabled
@@ -45,8 +47,10 @@ project/
45
47
  |-- infrastructure/
46
48
  | `-- opentofu/
47
49
  | `-- azure/
48
- | `-- .terraform.lock.hcl
50
+ | |-- modules/application/
51
+ | `-- environments/<env>/ # independent root, <env>.tfvars and provider lock
49
52
  |-- openspec/ or .specify/
53
+ |-- specs/000-liftoff-bootstrap/ # Spec Kit only: one-time spec.md, plan.md, tasks.md
50
54
  |-- .github/skills/openspec-*/ and .github/prompts/opsx-* # OpenSpec + Copilot
51
55
  |-- .claude/skills/openspec-*/ and .claude/commands/opsx/ # OpenSpec + Claude
52
56
  |-- .github/workflows/copilot-setup-steps.yml # optional hosted agent
@@ -64,7 +68,9 @@ project/
64
68
 
65
69
  - `backend` contains the selected API stack and Scalar/OpenAPI wiring. Python
66
70
  uses `backend/apis`, Node.js uses `backend/src`, and Go uses
67
- `backend/cmd/api` plus `backend/internal`.
71
+ `backend/cmd/api` plus `backend/internal`. Node includes an explicit
72
+ `backend/vitest.config.ts`; Go's `backend/cmd/migrate/main.go` passes resolved
73
+ configuration to the existing pinned Goose migration tool.
68
74
  - `backend/orchestration` appears only in GenAI projects and contains
69
75
  PydanticAI agents, prompts, model configuration, and integration boundaries.
70
76
  The generic pattern creates `generic_agent.py`, `generic.md`, and the neutral
@@ -80,8 +86,12 @@ project/
80
86
  - Python Docker builds export the committed `uv.lock` in frozen mode and install
81
87
  only hash-verified requirements. `UV_DEFAULT_INDEX` can select a
82
88
  credential-free managed mirror without changing the lock.
83
- - `infrastructure/opentofu/azure` contains modules, environment tfvars, local
84
- state configuration, and a remote-state example.
89
+ - `infrastructure/opentofu/azure/modules/application` contains the shared module.
90
+ Each selected `infrastructure/opentofu/azure/environments/<env>` root owns its
91
+ named tfvars, provider lock, and independent local/remote state configuration.
92
+ Existing shared-state projects are not relocated by update or force.
93
+ The eight [retired flat-root identities](azure-deployment.md#explicit-flat-root-identity-retirement)
94
+ remain historical provenance; new root-looking files do not establish eligibility.
85
95
  - `openspec` is created for OpenSpec. `.specify` and `specs` are created for
86
96
  Spec Kit.
87
97
  - OpenSpec projects receive all 12 pinned workflows as both skills and commands
@@ -104,47 +114,30 @@ project/
104
114
  separate from Azure Functions runtime files.
105
115
  - `migration/legacy` contains the filtered source copy created by migration.
106
116
 
107
- ## Power Apps code app
117
+ ### Runtime configuration and image boundaries
108
118
 
109
- ```text
110
- project/
111
- |-- README.md
112
- |-- THIRD_PARTY_NOTICES.md
113
- |-- liftoff.config.json
114
- |-- liftoff.manifest.json
115
- |-- package.json
116
- |-- package-lock.json
117
- |-- index.html
118
- |-- vite.config.ts
119
- |-- eslint.config.js
120
- |-- tsconfig.json
121
- |-- public/
122
- |-- src/
123
- | |-- App.tsx
124
- | |-- main.tsx
125
- | |-- router.tsx
126
- | |-- components/
127
- | |-- hooks/
128
- | |-- pages/
129
- | `-- providers/
130
- |-- .liftoff/governance/ # managed-core setup files when enabled
131
- |-- governance/ # user-owned activation state after setup starts
132
- `-- openspec/ or .specify/
133
- ```
119
+ Python and Node.js native startup read the project-root `.env`; process
120
+ environment values take precedence over file-backed settings and nonsecret
121
+ defaults. Go native startup from `backend/` reads `../runtime.config.json`;
122
+ copy `runtime.config.example.json` to that path or select explicit JSON with
123
+ `LIFTOFF_ENV_FILE`. It does not shell-source `.env`. Configuration is resolved
124
+ once per process; restart after editing the selected file.
125
+ Explicit missing, unreadable, or malformed selected files fail before fallback.
126
+ See [configuration syntax and native commands](configuration-and-manifests.md#application-runtime-configuration)
127
+ for strict dotenv quoting and Go's string-valued JSON contract.
134
128
 
135
- The exact selected-agent setup and assessment launchers are generated only when the
136
- repository-governance profile is enabled. They are Liftoff-owned; neighboring
137
- framework files remain framework-owned. Agent-created governance changes and
138
- `governance/activation-state.json`, approvals, evidence, credentials, and
139
- supersession records remain user-owned and are not listed as managed artifacts.
129
+ Compose passes applicable runtime settings explicitly while keeping PostgreSQL,
130
+ Redis, and other generated service addresses container-reachable. Root and
131
+ frontend `.dockerignore` files exclude host virtual environments, `node_modules`,
132
+ build outputs, VCS metadata, state, and local secrets. Installing dependencies
133
+ locally must not copy a host environment over dependencies installed in an image.
140
134
 
141
- This root follows the pinned official Microsoft starter. It includes the
142
- Power Apps SDK, Vite plugin, and project-local CLI through locked npm
143
- dependencies.
135
+ ## Retired project layouts
144
136
 
145
- Liftoff intentionally does not generate `backend/`, `database/`,
146
- `docker-compose.yml`, `environments/`, `infrastructure/`, or
147
- `power.config.json` for this workload.
137
+ Power Apps code app generation and maintenance are retired. An existing
138
+ Power Apps manifest is rejected without converting its root layout or modifying
139
+ application, framework, dependency, or governance files. The remaining generated
140
+ layouts are the API and GenAI layouts above.
148
141
 
149
142
  ## Managed versus user-owned governance artifacts
150
143
 
@@ -169,12 +162,12 @@ success-shaped placeholders:
169
162
  invocation fails clearly.
170
163
  - Redis Streams uses `REDIS_URL` and `REDIS_STREAM_NAME`.
171
164
  - Azure Service Bus uses `SERVICE_BUS_QUEUE_NAME` and either
172
- `SERVICE_BUS_CONNECTION_STRING` or
173
- `SERVICE_BUS_FULLY_QUALIFIED_NAMESPACE`; `AZURE_CLIENT_ID` selects a
174
- user-assigned managed identity.
165
+ `SERVICE_BUS_AUTH_MODE=connection-string` with `SERVICE_BUS_CONNECTION_STRING`,
166
+ or `managed-identity` with `SERVICE_BUS_FULLY_QUALIFIED_NAMESPACE` and
167
+ `AZURE_CLIENT_ID` for the selected user-assigned identity.
175
168
  - Langfuse requires both `LANGFUSE_PUBLIC_KEY` and
176
- `LANGFUSE_SECRET_KEY`, with optional `LANGFUSE_HOST`. Without both keys,
177
- tracing is explicitly disabled.
169
+ `LANGFUSE_SECRET_KEY`, with optional `LANGFUSE_HOST`. Both blank disables
170
+ tracing; only one configured key is an error.
178
171
  - Frontends read `VITE_API_BASE_URL`, call the route selected by the pattern or
179
172
  API stack, and expose loading, response, and failure states.
180
173
  - Backends allow the local frontend origin by default.
@@ -14,9 +14,10 @@ cd my-project
14
14
  /liftoff-setup
15
15
  ```
16
16
 
17
- `/liftoff-setup` completes the generated bootstrap seed, then enters the
18
- deterministic Liftoff governance engine, user-owned activation state, and
19
- read-only Phase 0 discovery.
17
+ `/liftoff-setup` uses the deterministic Liftoff governance engine to complete
18
+ the workflow-specific local bootstrap, then encounters the separately authorized
19
+ publication and read-only Phase 0 boundaries. The user-owned activation state records
20
+ execution, not an agent's claim of completion.
20
21
 
21
22
  **Current activation limits:** local bootstrap is implemented, but the CLI does
22
23
  not yet wire every production phase executor or expose approval persistence
@@ -72,6 +73,18 @@ runs assessment. It needs no commit, push, activation, or cloud credentials:
72
73
  liftoff governance assess --json
73
74
  ```
74
75
 
76
+ The same CLI command works in an ordinary Git repository without initialization,
77
+ a manifest, or generated slash commands. An explicit path is authoritative;
78
+ otherwise the nearest applicable Git or Liftoff boundary is used, including
79
+ linked worktrees and unborn repositories. A malformed, unreadable, symlinked,
80
+ dangling, or retired inner manifest blocks fallback to an outer project or Git
81
+ repository. Assessment never installs agent wrappers into unrelated repositories.
82
+
83
+ For ordinary Git repositories the installed single-maintainer policy is the
84
+ displayed target, not a policy inferred from existing branches. Recorded Liftoff
85
+ identity stays nullable, and missing baseline, ownership, or evidence stays
86
+ `not-observed`. It is not the same as a valid Liftoff governance opt-out.
87
+
75
88
  The pinned target is the **installed CLI** and its packaged policy, activation
76
89
  identity, phase graph, and assessment control catalog, never registry latest.
77
90
  The report compares four distinct layers: target, recorded project baseline,
@@ -103,8 +116,10 @@ enrolls credentials, expands permissions, registers providers, reads state blobs
103
116
  executes project code, runs scanners or infrastructure tools, or changes local
104
117
  or remote configuration.
105
118
  Azure scope and evidence-backed applicability require a current active-baseline
106
- and referenced, validated saved-plan/evidence receipts. Placeholder digests,
107
- future-dated approvals, and inferred bindings cannot establish proof. Missing
119
+ and referenced, validated saved-plan/evidence receipts. Current receipts bind
120
+ their canonical payload and live readback through `bodyDigest`; a header hash
121
+ alone cannot authorize changed runner IDs or Azure resources. Placeholder digests,
122
+ historical v1 receipts, future-dated approvals, and inferred bindings cannot establish proof. Missing
108
123
  bindings remain `not-observed`. Do not fabricate or hand-edit activation state,
109
124
  baselines, receipts, or evidence to manufacture alignment; use separately
110
125
  approved setup or governance work to obtain trustworthy proof.
@@ -127,6 +142,21 @@ zero-required-reviewer policy rather than generic peer-review advice.
127
142
  Approved exceptions remain differences; free-form or expired claims cannot
128
143
  waive controls or hide coverage gaps.
129
144
 
145
+ Collection failures do not erase independent facts. For example, denied GitHub
146
+ access cannot invalidate an unchanged local workflow, and a denied Azure resource
147
+ cannot hide a proven violation on another resource. Effective/classic/inherited
148
+ branch protection, release/hotfix check bindings, transitive required-job
149
+ dependencies, and complete runner restrictions are evaluated separately.
150
+ Rejected exception claims retain diagnostics instead of disappearing.
151
+ Required checks bind both their names and application identities. A passing
152
+ aggregator cannot hide a required scanner with `continue-on-error`; unresolved
153
+ reusable-workflow, matrix, or dynamic semantics stay unobserved. Runner checks
154
+ include repository/group restrictions, not only matching IDs or labels.
155
+
156
+ The catalog retains 30 controls across 17 families, including 10 unsupported
157
+ evaluators. Available evaluators are not completed proof; always-applicable
158
+ unsupported controls keep enabled assessments partial even with live access.
159
+
130
160
  Human and schema-v1 JSON reports share `readOnly: true`, target and project
131
161
  identities, findings, diagnostics, provenance, and coverage. Exit **0** means
132
162
  fully observed `aligned` or explicitly disabled `not-applicable` governance
@@ -194,22 +224,38 @@ remote import can satisfy `remote-ready`.
194
224
 
195
225
  ## Bootstrap seed and local baseline
196
226
 
197
- Before commit/push or Phase 0, setup completes, syncs, and archives the generated
198
- `bootstrap-<project>` OpenSpec seed. It runs only local, applicable checks:
227
+ Before commit/push or Phase 0, OpenSpec setup completes, syncs, and archives the
228
+ generated `bootstrap-<project>` seed. Spec Kit setup instead validates the real
229
+ `specs/000-liftoff-bootstrap/{spec.md,plan.md,tasks.md}` bundle and official
230
+ framework markers, then finalizes the local bootstrap handoff. It never creates
231
+ an OpenSpec tree, invents an archive, or creates a Git branch. Older Spec Kit
232
+ projects without the bundle need separately reviewed seed adoption.
233
+
234
+ The bundle's exact identity is `000-liftoff-bootstrap`, with B001–B006 each
235
+ appearing once. It is not an active governance change. Dependencies may already
236
+ be installed; installing them requires separate consent, which passing tests
237
+ alone cannot prove. Successful explicit execution commits the checked projection
238
+ with body/full-plan-bound baseline evidence; failed checks leave tasks unchanged.
239
+
240
+ Both adapters run only local, applicable checks in the declared component roots:
199
241
 
200
242
  - `liftoff validate`
201
243
  - backend tests from the generated README
202
244
  - frontend build when a frontend exists
203
245
  - `docker compose config -q` when Compose exists
204
- - `tofu fmt -check -recursive`
205
- - `tofu init -backend=false`
206
- - `tofu validate`
207
- - strict OpenSpec validation
246
+ - `tofu fmt -check -recursive` at `infrastructure/opentofu/azure`, covering modules and roots
247
+ - `tofu init -backend=false` in each selected independent environment root
248
+ - `tofu validate` in each selected independent environment root
249
+ - strict OpenSpec validation, or validation of the real Spec Kit bootstrap bundle
208
250
 
209
251
  Absent components are recorded as inapplicable. The baseline never starts
210
252
  containers, runs a live `tofu plan` or `tofu apply`, deploys, mutates GitHub, or
211
- requires cloud credentials. A failed check keeps the seed active; rerun
212
- `/liftoff-setup` after remediation and verified phases are not repeated.
253
+ requires cloud credentials. A failed local check remains unfinished; only
254
+ explicit execution retries it after repair. Read-only status, resume, and
255
+ verification do not advance tasks or rerun checks. Unchanged current proof can
256
+ be reused; changed relevant inputs require fresh evidence.
257
+ Recorded legacy-shared or unknown infrastructure layouts block this baseline
258
+ with migration-required and no commands, even if new-looking directories exist.
213
259
 
214
260
  If the seed was already archived before setup began, it stays archived.
215
261
  Setup still runs the entire applicable local baseline, but strict OpenSpec
@@ -236,6 +282,10 @@ types, destinations, permissions, cost ceiling, destructive scope, policy
236
282
  exceptions, expiry, and baseline SHA. Retries inside the same envelope do not
237
283
  ask again; expanded resources, destinations, permissions, cost, exceptions, or
238
284
  destructive effects require a new approval.
285
+ Its time window must satisfy `approvedAt <= now < expiresAt` and have a valid
286
+ start/end interval. A future, reversed, or expired envelope cannot authorize
287
+ execution. The contract does not imply a public approval-persistence workflow
288
+ exists; an unavailable entry capability remains a blocker.
239
289
 
240
290
  ## Credentials for runner preflight
241
291
 
@@ -243,7 +293,8 @@ When `GITHUB_TOKEN` cannot read required hosted-runner metadata, setup first
243
293
  prefers an existing verified selected-repository GitHub App installation with the
244
294
  required read permissions. Liftoff does not install or broaden an App.
245
295
 
246
- If no approved App is available, setup guides one fine-grained PAT with exactly:
296
+ If no approved App is available, the normative policy describes this
297
+ fine-grained PAT fallback, not an implemented enrollment command:
247
298
 
248
299
  | Field | Value |
249
300
  | --- | --- |
@@ -256,10 +307,12 @@ If no approved App is available, setup guides one fine-grained PAT with exactly:
256
307
  | Writes | none |
257
308
  | Workflow/job allowlist | `.github/workflows/bootstrap-import-preflight.yml` job `bootstrap-import-preflight`; `.github/workflows/private-dast-preflight.yml` job `private-dast-preflight` |
258
309
 
259
- Enter the value only through Liftoff's masked input. Never paste or show the
260
- value in chat, argv, command arguments, logs, evidence, files, or screenshots. A value
261
- that appears in any of those places is compromised and must be manually revoked
262
- and rotated before setup can continue.
310
+ This release has no public masked credential-enrollment channel. Stop at the
311
+ reported capability blocker rather than creating a credential or hand-writing
312
+ state to make the phase pass.
313
+ Never paste or show the value in chat, argv, command arguments,
314
+ logs, evidence, files, or screenshots. A disclosed value is
315
+ compromised and must be revoked and rotated through its owner-controlled system.
263
316
 
264
317
  The recorded credential policy is payload-free: it stores auth kind, display
265
318
  name, secret name, owner, repository, expiry, rotation lead, permissions,
@@ -270,9 +323,19 @@ secret value.
270
323
 
271
324
  Task checkboxes are a projection of phase state, not authority. Evidence
272
325
  documents carry repository identity, activation version vector, graph hash, phase
273
- contract digest, input digest, baseline SHA, phase ID, timestamp, producer, and
274
- result. Setup and `liftoff governance verify` reject missing, stale,
275
- contradictory, future-version, or graph-incompatible evidence.
326
+ contract digest, real input/baseline digests, body commitment, phase ID, timestamp,
327
+ producer, and result. The local execution anchor is separate from a verified
328
+ remote repository binding; Phase 0 does not replace the anchor beneath earlier
329
+ local receipts. Digests prove consistency, not an independent signature or
330
+ permission grant. Current valid proof may coexist with informational stale
331
+ history, but equally authoritative contradictory records block execution.
332
+ The current context includes reviewed immutable plans and state evidence
333
+ references. Payload `planDigest` binds semantic plan inputs; `savedPlanDigest`
334
+ binds the full saved plan, including clocks. `bodyDigest` covers the payload and
335
+ normalized readbacks. Consumers use the validated selected payload, not another
336
+ raw record that happens to reuse an ID. Repository publication binds the actual
337
+ reviewed push destination; Phase 0 cannot invalidate earlier local/publication
338
+ receipts by replacing the local anchor.
276
339
 
277
340
  There may be only one active governance source of truth. An unfinished bootstrap
278
341
  seed blocks Phase 0. Exactly one compatible active governance change is resumed.
@@ -283,12 +346,15 @@ Managed updates install new policy, graph, schema, compatibility metadata, and
283
346
  setup and assessment integrations without touching user-owned state. Forced update can remove
284
347
  exact retired generated setup-alias entries from older manifests. When a policy,
285
348
  activation-contract, schema, or graph-hash change affects active work, status
286
- reports `reconciliation-required`, invalidates only affected descendants, and
287
- waits for explicit acknowledgement of the current compatible identity and exact
288
- graph hash.
349
+ reports `reconciliation-required` and identifies affected descendants. Historical
350
+ activation-v1 state and evidence stay byte-preserved and diagnostic-only under
351
+ activation v2. This release has no automatic historical-state reconciliation,
352
+ reset, or conversion workflow; do not acknowledge a new identity by editing JSON.
289
353
 
290
354
  ## Private staging and bootstrap retention
291
355
 
356
+ These are policy requirements for separately implemented production adapters,
357
+ not a claim that this CLI can provision the complete platform.
292
358
  Private Staging DAST uses an ephemeral GitHub-hosted larger runner with Azure
293
359
  VNet injection only when genuinely applicable. Phase 0 discovers repository,
294
360
  subscription, authority, billing, network, DNS, cost, teardown, and capability
@@ -22,9 +22,13 @@ Selecting repository governance or passing `--yes` authorizes only deterministic
22
22
  local handoff files. It never authorizes agent execution, Git mutation, GitHub
23
23
  APIs, Azure or other cloud resources, rulesets, security configuration,
24
24
  deployment, monitoring, file replacement, machine tools, or project
25
- dependencies. `/liftoff-setup` first completes and archives the local bootstrap
26
- seed, then stops at authority gates. Live activation begins only after explicit
25
+ dependencies. `/liftoff-setup` first verifies and archives the OpenSpec bootstrap
26
+ or finalizes the real Spec Kit bundle locally, then stops at authority gates.
27
+ Live activation requires explicit
27
28
  commit/push approval, read-only Phase 0, and activation-plan approval.
29
+ Missing public approval persistence, secure credential enrollment, or production
30
+ executors remain blockers; this sequence does not promise a complete production
31
+ activation workflow.
28
32
 
29
33
  An approved downstream local-state bootstrap remains encrypted, gitignored, and
30
34
  single-writer. It is never transferred through GitHub artifacts or secrets,
@@ -48,6 +52,9 @@ cannot redirect machine-level discovery. Canonical npm selects the target while
48
52
  the configured registry must provide that exact release. Liftoff does not expose
49
53
  registry credentials, rewrite npm configuration, bypass a stale mirror, invoke
50
54
  `sudo` or another elevation mechanism, or touch project files.
55
+ Machine-level `@msn-control:registry` takes precedence over default `registry`;
56
+ canonical verification isolates both settings, but installation still honors
57
+ the effective delivery registry.
51
58
 
52
59
  npm replacement is not a Liftoff file transaction. If npm or post-install
53
60
  verification fails, Liftoff reports an exact-version repair command and does not
@@ -87,16 +94,35 @@ Structural collisions are not overridable:
87
94
 
88
95
  ## Atomic writes and rollback
89
96
 
97
+ Project mutations share an exclusive cooperating-writer lock across initialization,
98
+ migration, dependency setup, managed update, and setup execution. The lock is a
99
+ sibling file named `.liftoff-mutation-<project-path-digest>.lock`, created with
100
+ 0600 mode where POSIX permissions apply; the target's
101
+ parent directory must be writable. Reserving a new target does not create that
102
+ target or project state. Nested steps in one operation retain the same lock.
103
+ Reservation identities are NFC-normalized and lowercased on every platform; this
104
+ may serialize case-distinct sibling projects on case-sensitive volumes, but never
105
+ merges their ownership.
106
+ Read-only commands, including assessment and `update --check`, never acquire it.
107
+ An existing or changed lock blocks mutation and is never automatically stolen or
108
+ removed. After an interrupted process, verify its owner has stopped before
109
+ reviewing the exact reported lock. This coordinates Liftoff writers; it does not
110
+ replace path/content preconditions or isolate the project from other programs.
111
+
90
112
  Individual project files use temporary-file replacement. Initialization keeps
91
113
  backups for replaced files and records created files and directories. A handled
92
- merge failure restores or removes those entries in reverse order.
114
+ merge failure restores or removes attributable unchanged entries in reverse
115
+ order; concurrent or uncertain edits are preserved and reported.
116
+ Existing destination modes are preserved where supported, including POSIX 0600
117
+ files. Windows does not provide equivalent POSIX mode-bit guarantees; this is
118
+ not a promise to preserve all Windows ACLs or filesystem metadata.
93
119
 
94
120
  Plain `liftoff update` preflights every eligible managed-core or authorized
95
121
  create-only provisioning path and applies those writes, managed-core moves or
96
122
  deletes, and the manifest as one rollback-capable transaction. Schema upgrades
97
123
  are committed only after the other mutations succeed.
98
124
 
99
- Managed update may install manifest v7, policy v6, activation-contract v1,
125
+ Managed update may install manifest v7, policy v6, activation-contract v2,
100
126
  phase graph, compatibility metadata, credential-policy schema, setup
101
127
  integrations, and forced removal of exact retired generated setup-alias entries
102
128
  from older manifests. It preserves user-owned activation state, approvals,
@@ -104,6 +130,10 @@ immutable evidence, credential policies, active OpenSpec changes, and bootstrap
104
130
  retention/disposal records. If the current activation identity is future,
105
131
  unsupported, or graph-incompatible, update and setup block with a remedy instead
106
132
  of downgrading or rewriting state.
133
+ Exact known historical v1 identity is a separate diagnostic-only case:
134
+ safe managed-core maintenance may continue while preserving the recorded
135
+ historical identity, state, and receipts. That maintenance never makes history
136
+ executable or supplies a missing reconciliation workflow.
107
137
 
108
138
  If automatic rollback itself cannot safely restore a path because another
109
139
  process changed it, Liftoff reports the incomplete rollback rather than
@@ -112,6 +142,13 @@ overwriting unknown bytes.
112
142
  Update snapshots exist only for rollback after a failed transaction. Liftoff
113
143
  does not retain them as backups after success.
114
144
 
145
+ Dependency execution has a different recovery boundary: installer scripts can
146
+ write arbitrary project files, and a concurrent developer edit cannot be
147
+ attributed safely from a content difference alone. Changed or deleted protected
148
+ metadata is therefore preserved and reported, not automatically restored.
149
+ Liftoff stops further dependency commands and identifies the recovery shell and
150
+ literal-path recipe. This does not claim the entire scaffold was unchanged.
151
+
115
152
  ## Update ownership
116
153
 
117
154
  Update mode is selected explicitly rather than from terminal interactivity:
@@ -133,6 +170,9 @@ Update mode is selected explicitly rather than from terminal interactivity:
133
170
  - A newly selected frontend or environment is provisioned once only at absent
134
171
  or byte-identical destinations. A collision blocks the complete group and
135
172
  cannot be forced.
173
+ - A new environment additionally requires recorded independent-root provenance
174
+ and safe existing shared-module files. Legacy or unknown layouts are blocked
175
+ without moving state or rewriting project-owned infrastructure.
136
176
  - Unrecorded governance conflicts remain outside manifest ownership and produce
137
177
  `handoff-partial` until a later update safely writes or adopts every artifact.
138
178
  - Orphans are reported and left on disk for manual review.
@@ -142,9 +182,15 @@ Update mode is selected explicitly rather than from terminal interactivity:
142
182
  `--force` cannot be combined with `--check` and cannot weaken project-boundary,
143
183
  symlink, collision, manifest, or transaction guards.
144
184
 
145
- Power Apps starter source and metadata are project-owned after generation.
146
- Update does not fetch upstream source or transition an existing project to a
147
- newer packaged starter.
185
+ Power Apps support is retired. Its manifests are rejected without fetching
186
+ starter source, changing application files, or treating force as conversion
187
+ authority.
188
+
189
+ The eight flat-root OpenTofu identities are retired from new 0.11.0 output only.
190
+ Their historical records, paths, generation hashes, files, and state remain
191
+ unchanged by update, force, helpers, or assessment. They are not aliases to new
192
+ roots or managed-core deletion targets; see the
193
+ [explicit inventory](azure-deployment.md#explicit-flat-root-identity-retirement).
148
194
 
149
195
  ## Framework and seed ownership
150
196
 
@@ -153,7 +199,11 @@ initializers. Liftoff validates the selected contract and agent markers but
153
199
  does not claim framework-owned files in durable artifact hashes.
154
200
 
155
201
  One-time seed content is also omitted from durable hashes so it can follow its
156
- own lifecycle after generation.
202
+ own lifecycle after generation. Spec Kit's `000-liftoff-bootstrap` bundle is
203
+ project-owned, separate from official markers, and not an active governance
204
+ change. Missing older seeds require reviewed adoption. Failed local checks leave
205
+ B001–B006 unchecked; explicit successful execution commits the projection with
206
+ body/full-plan-bound evidence. Read-only verify, status, and resume never mark it.
157
207
 
158
208
  OpenSpec workflow profile and delivery are global machine preferences. Liftoff
159
209
  changes them only after dedicated consent and verifies the result before
@@ -188,19 +238,22 @@ Liftoff does not:
188
238
  - Store cloud or agent credentials.
189
239
  - Perform cloud sign-in.
190
240
  - Apply OpenTofu.
191
- - Bind or push a Power Apps code app.
192
- - Run Microsoft's broad Code Apps marketplace installer.
241
+ - Restore or manage the retired Power Apps workload or Code Apps integration.
193
242
 
194
243
  Those actions require their own review, authentication, and consent.
195
244
 
196
245
  Governance runner-preflight credentials have a stricter contract. Setup first
197
246
  uses an existing verified selected-repository GitHub App installation when it
198
- has the required read permissions. Otherwise it guides one fine-grained PAT:
247
+ has the required read permissions. The normative fallback specifies one
248
+ fine-grained PAT:
199
249
  display name `<repo>-runner-preflight-read`, repository secret
200
250
  `RUNNER_CONFIGURATION_READ_TOKEN`, 30-day lifetime, current repository only,
201
251
  repository metadata read, organization hosted-runner read and
202
252
  network-configuration read, no writes, and only the recorded workflow/job
203
- allowlist. The value must be entered through masked input only. Never paste or
253
+ allowlist. The CLI currently lacks public secure enrollment, independent
254
+ credential readback, and approval-persistence entry points; stop at the capability
255
+ blocker instead of creating JSON or inventing an input channel. Any future
256
+ supported enrollment must use masked input. Never paste or
204
257
  show it in chat, argv, command arguments, logs, evidence, generated files, or
205
258
  screenshots. If it appears there, treat it as compromised and manually revoke and
206
259
  rotate it before continuing.
@@ -36,6 +36,29 @@ integration, and records the default separately from the full agent set.
36
36
  Generated projects contain `.specify/`, `specs/`, and the selected agent
37
37
  integration markers.
38
38
 
39
+ New projects also receive `specs/000-liftoff-bootstrap/spec.md`, `plan.md`, and
40
+ `tasks.md`. These are explicit one-time, project-owned `seed` artifacts, separate
41
+ from official framework templates. Local setup validates the real bundle and
42
+ official markers, performs the applicable baseline, and then finalizes its task
43
+ projection and receipt. It creates neither a Git branch nor an OpenSpec archive.
44
+
45
+ All three files identify `000-liftoff-bootstrap`. The tasks contain exactly one
46
+ initial unchecked entry each for **B001–B006**: review the real bundle and markers;
47
+ use already-installed locked dependencies or install with explicit consent;
48
+ run Liftoff/backend/applicable-worker checks; build the frontend or record
49
+ inapplicability; validate Compose and all infrastructure roots; then finalize.
50
+ The non-checkbox command reference list is not execution evidence.
51
+ Only after every applicable check passes does explicit setup execution commit
52
+ the checked projection with body/full-plan-bound baseline evidence. Failed checks
53
+ leave tasks untouched; status, verify, and resume do not edit checkboxes.
54
+ `seed-archived` means a local handoff for Spec Kit, not an archive operation.
55
+ This exact bootstrap is not an active governance change and has no
56
+ `liftoff-governance.json`.
57
+
58
+ An existing Spec Kit project without this bundle receives a seed-adoption
59
+ blocker. Adopting it requires separate reviewed project work; ordinary update,
60
+ force, and assessment do not create seeds or infer earlier completion.
61
+
39
62
  Liftoff does not hand-write framework-owned core or integration output. It
40
63
  executes the tested official initializer, confines its writes to allowed roots,
41
64
  and validates the declared markers before merging.
@@ -92,9 +115,9 @@ files.
92
115
  Repository-governance launchers are separate managed-core Liftoff files at the exact
93
116
  Copilot prompt and Claude command paths documented in
94
117
  [repository governance](repository-governance.md). They reference one canonical
95
- policy and context rather than duplicating framework-owned content. After
96
- read-only Phase 0 and explicit approval, the agent creates a new change using
97
- the selected framework; Liftoff never pre-creates or restores that change.
118
+ policy and context rather than duplicating framework-owned content. Later
119
+ governance changes are distinct from the exact bootstrap seed. The setup kernel
120
+ does not invent an active change, approval, or missing production executor.
98
121
 
99
122
  Install the exact selected framework release with its supported package manager:
100
123
 
@@ -118,29 +141,9 @@ Use `--copilot-cloud` or `--no-copilot-cloud` in automation. The choice is
118
141
  recorded as `githubCopilot.cloudAgent` in `openspec/config.yaml`; it is not stored
119
142
  as Liftoff overwrite or machine-configuration consent.
120
143
 
121
- ## Optional Code Apps plugin
122
-
123
- Power Apps projects can request Microsoft's
124
- `code-apps-preview@power-platform-skills` plugin. The integration is optional,
125
- Preview, and independent for each selected agent.
126
-
127
- Liftoff runs only allowlisted read-only plugin-list probes. A missing or
128
- unobservable plugin produces advisory guidance and never makes initialization
129
- or doctor fail by itself.
130
-
131
- Install the targeted plugin manually inside the selected agent:
132
-
133
- ```text
134
- /plugin marketplace add microsoft/power-platform-skills
135
- /plugin install code-apps-preview@power-platform-skills
136
- ```
137
-
138
- Liftoff does not run Microsoft's broad marketplace installer and does not
139
- invoke `/create-code-app`. The plugin's connector and deployment skills remain
140
- available for post-creation work.
144
+ ## Retired Code Apps integration
141
145
 
142
- Changing the valid plugin preference in `liftoff.config.json` is reconciled by
143
- plain `liftoff update`; it updates manifest intent and applicable managed-core
144
- governance context without rewriting the project-owned Power Apps README or
145
- starter. Use `liftoff update --check` to inspect that maintenance without
146
- writing.
146
+ The Power Apps workload and Code Apps plugin options are retired. Liftoff no
147
+ longer installs, probes, or manages that integration. This does not uninstall
148
+ machine-wide tools or plugins; existing installations remain outside Liftoff's
149
+ maintenance authority.
@@ -17,17 +17,20 @@ file; they never resolve mutable `latest` versions.
17
17
  | OpenSpec | 1.11.0 |
18
18
  | Spec Kit | 1.0.1 |
19
19
  | AzureRM provider | 5.3.0 |
20
- | Power Apps SDK | 1.2.7 |
21
20
 
22
- Power Apps SDK 1.2.7 is an explicit compatibility selection. Versions 1.2.12
23
- and newer remove the project-local `power-apps` CLI required by Liftoff's
24
- current workload contract. Moving to Microsoft's global `pa` CLI is a separate
25
- reviewed workload migration; the freshness check recognizes only the recorded
26
- 1.3.0 exclusion and will reopen the decision when a newer candidate appears.
21
+ Python's tested patch is 3.14.7; its supported runtime floor is 3.14.0 within
22
+ 3.14.x. Floors, tested versions, and allowed release lines are separate values
23
+ in the baseline; a newer untested major is not automatically compatible.
24
+
25
+ Power Apps is retired and has no active SDK, starter snapshot, or source-commit
26
+ compatibility lane in the supported baseline.
27
27
 
28
28
  Generated npm projects include `package-lock.json`. Python projects include
29
29
  `uv.lock` and use `uv sync --frozen`. Go projects include `go.mod` and
30
30
  `go.sum`. Generated OpenTofu includes a multi-platform `.terraform.lock.hcl`.
31
+ Each selected independent environment root receives its own provider lock and
32
+ backend configuration; the application module is shared. Generic GenAI's default
33
+ Python project and lock do not require a `pgvector` package.
31
34
 
32
35
  Container references include a readable stable tag and an immutable
33
36
  multi-architecture digest. The optional Langfuse profile uses the v4 web and
@@ -52,11 +55,10 @@ digests and upstream provenance, then run:
52
55
  npm run refresh:supported-stack
53
56
  npm run check
54
57
  npm run verify:standard-node-templates
55
- npm run verify:power-apps-starter
56
58
  ```
57
59
 
58
- Power Apps source is refreshed only through its reviewed immutable upstream
59
- commit workflow. Do not edit Microsoft-owned starter files independently.
60
+ Retired Power Apps fixtures are negative inputs only and do not participate in
61
+ generation, freshness, or dependency promotion.
60
62
 
61
63
  ## Existing generated projects
62
64