@msn-control/liftoff 0.10.3 → 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 (656) hide show
  1. package/DEVELOPER.md +364 -20
  2. package/README.md +29 -29
  3. package/assets/governance/single-maintainer-gitflow/assessment-controls.json +39 -0
  4. package/assets/supported-stack.json +7 -138
  5. package/dist/adapters/azure/governance-assessment.d.ts +2 -0
  6. package/dist/adapters/azure/governance-assessment.js +21 -0
  7. package/dist/adapters/azure/governance-assessment.js.map +1 -0
  8. package/dist/adapters/filesystem/atomic-write.d.ts +2 -0
  9. package/dist/adapters/filesystem/atomic-write.js +74 -0
  10. package/dist/adapters/filesystem/atomic-write.js.map +1 -0
  11. package/dist/adapters/filesystem/errors.d.ts +2 -0
  12. package/dist/adapters/filesystem/errors.js +8 -0
  13. package/dist/adapters/filesystem/errors.js.map +1 -0
  14. package/dist/adapters/filesystem/manifest-file.d.ts +1 -0
  15. package/dist/adapters/filesystem/manifest-file.js +21 -0
  16. package/dist/adapters/filesystem/manifest-file.js.map +1 -0
  17. package/dist/adapters/filesystem/project-config.d.ts +4 -0
  18. package/dist/adapters/filesystem/project-config.js +157 -0
  19. package/dist/adapters/filesystem/project-config.js.map +1 -0
  20. package/dist/adapters/filesystem/project-discovery.d.ts +2 -0
  21. package/dist/adapters/filesystem/project-discovery.js +30 -0
  22. package/dist/adapters/filesystem/project-discovery.js.map +1 -0
  23. package/dist/adapters/filesystem/project-files.d.ts +6 -0
  24. package/dist/adapters/filesystem/project-files.js +68 -0
  25. package/dist/adapters/filesystem/project-files.js.map +1 -0
  26. package/dist/adapters/filesystem/project-lock.d.ts +8 -0
  27. package/dist/adapters/filesystem/project-lock.js +164 -0
  28. package/dist/adapters/filesystem/project-lock.js.map +1 -0
  29. package/dist/adapters/filesystem/project-paths.d.ts +2 -0
  30. package/dist/adapters/filesystem/project-paths.js +60 -0
  31. package/dist/adapters/filesystem/project-paths.js.map +1 -0
  32. package/dist/adapters/filesystem/project-transaction.d.ts +23 -0
  33. package/dist/adapters/filesystem/project-transaction.js +158 -0
  34. package/dist/adapters/filesystem/project-transaction.js.map +1 -0
  35. package/dist/adapters/git/governance-assessment.d.ts +22 -0
  36. package/dist/adapters/git/governance-assessment.js +161 -0
  37. package/dist/adapters/git/governance-assessment.js.map +1 -0
  38. package/dist/adapters/github/governance-assessment.d.ts +2 -0
  39. package/dist/adapters/github/governance-assessment.js +18 -0
  40. package/dist/adapters/github/governance-assessment.js.map +1 -0
  41. package/dist/adapters/packaged-assets/package-root.d.ts +3 -0
  42. package/dist/adapters/packaged-assets/package-root.js +21 -0
  43. package/dist/adapters/packaged-assets/package-root.js.map +1 -0
  44. package/dist/adapters/packaged-assets/supported-stack.d.ts +4 -0
  45. package/dist/adapters/packaged-assets/supported-stack.js +18 -0
  46. package/dist/adapters/packaged-assets/supported-stack.js.map +1 -0
  47. package/dist/adapters/packaged-assets/template-assets.d.ts +23 -0
  48. package/dist/adapters/packaged-assets/template-assets.js +36 -0
  49. package/dist/adapters/packaged-assets/template-assets.js.map +1 -0
  50. package/dist/adapters/process/shell-command.d.ts +5 -0
  51. package/dist/adapters/process/shell-command.js +21 -0
  52. package/dist/adapters/process/shell-command.js.map +1 -0
  53. package/dist/application/context.d.ts +20 -0
  54. package/dist/application/context.js +2 -0
  55. package/dist/application/context.js.map +1 -0
  56. package/dist/application/diagnose/doctor.d.ts +21 -0
  57. package/dist/application/diagnose/doctor.js +586 -0
  58. package/dist/application/diagnose/doctor.js.map +1 -0
  59. package/dist/application/diagnose/generated-project.d.ts +1 -0
  60. package/dist/application/diagnose/generated-project.js +105 -0
  61. package/dist/application/diagnose/generated-project.js.map +1 -0
  62. package/dist/application/diagnose/validate.d.ts +6 -0
  63. package/dist/application/diagnose/validate.js +27 -0
  64. package/dist/application/diagnose/validate.js.map +1 -0
  65. package/dist/application/initialize/fixture.d.ts +2 -0
  66. package/dist/application/initialize/fixture.js +39 -0
  67. package/dist/application/initialize/fixture.js.map +1 -0
  68. package/dist/application/initialize/inputs.d.ts +3 -0
  69. package/dist/application/initialize/inputs.js +35 -0
  70. package/dist/application/initialize/inputs.js.map +1 -0
  71. package/dist/application/initialize/use-case.d.ts +23 -0
  72. package/dist/application/initialize/use-case.js +360 -0
  73. package/dist/application/initialize/use-case.js.map +1 -0
  74. package/dist/application/migrate/use-case.d.ts +7 -0
  75. package/dist/application/migrate/use-case.js +378 -0
  76. package/dist/application/migrate/use-case.js.map +1 -0
  77. package/dist/application/project/catalog.d.ts +46 -0
  78. package/dist/application/project/catalog.js +12 -0
  79. package/dist/application/project/catalog.js.map +1 -0
  80. package/dist/application/project/manifest.d.ts +2 -0
  81. package/dist/application/project/manifest.js +29 -0
  82. package/dist/application/project/manifest.js.map +1 -0
  83. package/dist/application/project/planning.d.ts +6 -0
  84. package/dist/application/project/planning.js +12 -0
  85. package/dist/application/project/planning.js.map +1 -0
  86. package/dist/application/update/planning.d.ts +40 -0
  87. package/dist/application/update/planning.js +293 -0
  88. package/dist/application/update/planning.js.map +1 -0
  89. package/dist/application/update/reporting.d.ts +42 -0
  90. package/dist/application/update/reporting.js +325 -0
  91. package/dist/application/update/reporting.js.map +1 -0
  92. package/dist/application/update/use-case.d.ts +8 -0
  93. package/dist/application/update/use-case.js +600 -0
  94. package/dist/application/update/use-case.js.map +1 -0
  95. package/dist/application/upgrade/use-case.d.ts +6 -0
  96. package/dist/application/upgrade/use-case.js +82 -0
  97. package/dist/application/upgrade/use-case.js.map +1 -0
  98. package/dist/args.d.ts +5 -65
  99. package/dist/args.js +4 -441
  100. package/dist/args.js.map +1 -1
  101. package/dist/artifact-lifecycle.d.ts +1 -21
  102. package/dist/artifact-lifecycle.js +1 -73
  103. package/dist/artifact-lifecycle.js.map +1 -1
  104. package/dist/catalogs.d.ts +1 -50
  105. package/dist/catalogs.js +1 -472
  106. package/dist/catalogs.js.map +1 -1
  107. package/dist/cli/args/contracts.d.ts +51 -0
  108. package/dist/cli/args/contracts.js +2 -0
  109. package/dist/cli/args/contracts.js.map +1 -0
  110. package/dist/cli/args/definitions.d.ts +6 -0
  111. package/dist/cli/args/definitions.js +187 -0
  112. package/dist/cli/args/definitions.js.map +1 -0
  113. package/dist/cli/args/help.d.ts +5 -0
  114. package/dist/cli/args/help.js +130 -0
  115. package/dist/cli/args/help.js.map +1 -0
  116. package/dist/cli/args/parser.d.ts +5 -0
  117. package/dist/cli/args/parser.js +145 -0
  118. package/dist/cli/args/parser.js.map +1 -0
  119. package/dist/cli/args/readers.d.ts +4 -0
  120. package/dist/cli/args/readers.js +19 -0
  121. package/dist/cli/args/readers.js.map +1 -0
  122. package/dist/cli/commands/diagnose.d.ts +4 -0
  123. package/dist/cli/commands/diagnose.js +12 -0
  124. package/dist/cli/commands/diagnose.js.map +1 -0
  125. package/dist/cli/commands/dispatch.d.ts +3 -0
  126. package/dist/cli/commands/dispatch.js +94 -0
  127. package/dist/cli/commands/dispatch.js.map +1 -0
  128. package/dist/cli/commands/help.d.ts +3 -0
  129. package/dist/cli/commands/help.js +32 -0
  130. package/dist/cli/commands/help.js.map +1 -0
  131. package/dist/cli/commands/helpers.d.ts +8 -0
  132. package/dist/cli/commands/helpers.js +97 -0
  133. package/dist/cli/commands/helpers.js.map +1 -0
  134. package/dist/cli/commands/initialize.d.ts +3 -0
  135. package/dist/cli/commands/initialize.js +7 -0
  136. package/dist/cli/commands/initialize.js.map +1 -0
  137. package/dist/cli/commands/migrate.d.ts +3 -0
  138. package/dist/cli/commands/migrate.js +8 -0
  139. package/dist/cli/commands/migrate.js.map +1 -0
  140. package/dist/cli/commands/plan.d.ts +3 -0
  141. package/dist/cli/commands/plan.js +34 -0
  142. package/dist/cli/commands/plan.js.map +1 -0
  143. package/dist/cli/commands/reference.d.ts +5 -0
  144. package/dist/cli/commands/reference.js +43 -0
  145. package/dist/cli/commands/reference.js.map +1 -0
  146. package/dist/cli/commands/update.d.ts +3 -0
  147. package/dist/cli/commands/update.js +9 -0
  148. package/dist/cli/commands/update.js.map +1 -0
  149. package/dist/cli/commands/upgrade.d.ts +3 -0
  150. package/dist/cli/commands/upgrade.js +7 -0
  151. package/dist/cli/commands/upgrade.js.map +1 -0
  152. package/dist/cli/context.d.ts +1 -0
  153. package/dist/cli/context.js +2 -0
  154. package/dist/cli/context.js.map +1 -0
  155. package/dist/cli/project-options.d.ts +3 -0
  156. package/dist/cli/project-options.js +41 -0
  157. package/dist/cli/project-options.js.map +1 -0
  158. package/dist/cli.d.ts +3 -3
  159. package/dist/cli.js +4 -3
  160. package/dist/cli.js.map +1 -1
  161. package/dist/commands.d.ts +4 -35
  162. package/dist/commands.js +3 -2812
  163. package/dist/commands.js.map +1 -1
  164. package/dist/container-validation.d.ts +1 -1
  165. package/dist/domain/governance/activation/approvals.d.ts +351 -0
  166. package/dist/domain/governance/activation/approvals.js +528 -0
  167. package/dist/domain/governance/activation/approvals.js.map +1 -0
  168. package/dist/domain/governance/activation/canonical-json.d.ts +4 -0
  169. package/dist/domain/governance/activation/canonical-json.js +39 -0
  170. package/dist/domain/governance/activation/canonical-json.js.map +1 -0
  171. package/dist/domain/governance/activation/capabilities.d.ts +7 -0
  172. package/dist/domain/governance/activation/capabilities.js +33 -0
  173. package/dist/domain/governance/activation/capabilities.js.map +1 -0
  174. package/dist/domain/governance/activation/evidence.d.ts +63 -0
  175. package/dist/domain/governance/activation/evidence.js +444 -0
  176. package/dist/domain/governance/activation/evidence.js.map +1 -0
  177. package/dist/domain/governance/activation/graph.d.ts +397 -0
  178. package/dist/domain/governance/activation/graph.js +441 -0
  179. package/dist/domain/governance/activation/graph.js.map +1 -0
  180. package/dist/domain/governance/activation/inputs.d.ts +25 -0
  181. package/dist/domain/governance/activation/inputs.js +63 -0
  182. package/dist/domain/governance/activation/inputs.js.map +1 -0
  183. package/dist/domain/governance/activation/operations.d.ts +19 -0
  184. package/dist/domain/governance/activation/operations.js +181 -0
  185. package/dist/domain/governance/activation/operations.js.map +1 -0
  186. package/dist/domain/governance/activation/readiness.d.ts +27 -0
  187. package/dist/domain/governance/activation/readiness.js +269 -0
  188. package/dist/domain/governance/activation/readiness.js.map +1 -0
  189. package/dist/domain/governance/activation/types.d.ts +399 -0
  190. package/dist/domain/governance/activation/types.js +109 -0
  191. package/dist/domain/governance/activation/types.js.map +1 -0
  192. package/dist/domain/governance/activation/validators.d.ts +22 -0
  193. package/dist/domain/governance/activation/validators.js +1347 -0
  194. package/dist/domain/governance/activation/validators.js.map +1 -0
  195. package/dist/domain/governance/assessment/catalog.d.ts +14 -0
  196. package/dist/domain/governance/assessment/catalog.js +105 -0
  197. package/dist/domain/governance/assessment/catalog.js.map +1 -0
  198. package/dist/domain/governance/assessment/errors.d.ts +10 -0
  199. package/dist/domain/governance/assessment/errors.js +22 -0
  200. package/dist/domain/governance/assessment/errors.js.map +1 -0
  201. package/dist/domain/governance/assessment/index.d.ts +8 -0
  202. package/dist/domain/governance/assessment/index.js +9 -0
  203. package/dist/domain/governance/assessment/index.js.map +1 -0
  204. package/dist/domain/governance/assessment/live-normalize.d.ts +19 -0
  205. package/dist/domain/governance/assessment/live-normalize.js +403 -0
  206. package/dist/domain/governance/assessment/live-normalize.js.map +1 -0
  207. package/dist/domain/governance/assessment/predicates.d.ts +36 -0
  208. package/dist/domain/governance/assessment/predicates.js +545 -0
  209. package/dist/domain/governance/assessment/predicates.js.map +1 -0
  210. package/dist/domain/governance/assessment/report.d.ts +23 -0
  211. package/dist/domain/governance/assessment/report.js +266 -0
  212. package/dist/domain/governance/assessment/report.js.map +1 -0
  213. package/dist/domain/governance/assessment/sanitize.d.ts +8 -0
  214. package/dist/domain/governance/assessment/sanitize.js +60 -0
  215. package/dist/domain/governance/assessment/sanitize.js.map +1 -0
  216. package/dist/domain/governance/assessment/types.d.ts +174 -0
  217. package/dist/domain/governance/assessment/types.js +13 -0
  218. package/dist/domain/governance/assessment/types.js.map +1 -0
  219. package/dist/domain/governance/assessment/yaml.d.ts +6 -0
  220. package/dist/domain/governance/assessment/yaml.js +30 -0
  221. package/dist/domain/governance/assessment/yaml.js.map +1 -0
  222. package/dist/domain/governance/policy/identity.d.ts +64 -0
  223. package/dist/domain/governance/policy/identity.js +112 -0
  224. package/dist/domain/governance/policy/identity.js.map +1 -0
  225. package/dist/domain/migration/dependencies.d.ts +7 -0
  226. package/dist/domain/migration/dependencies.js +221 -0
  227. package/dist/domain/migration/dependencies.js.map +1 -0
  228. package/dist/domain/migration/inventory.d.ts +3 -0
  229. package/dist/domain/migration/inventory.js +15 -0
  230. package/dist/domain/migration/inventory.js.map +1 -0
  231. package/dist/domain/project/artifact-lifecycle.d.ts +69 -0
  232. package/dist/domain/project/artifact-lifecycle.js +137 -0
  233. package/dist/domain/project/artifact-lifecycle.js.map +1 -0
  234. package/dist/domain/project/catalog.d.ts +48 -0
  235. package/dist/domain/project/catalog.js +507 -0
  236. package/dist/domain/project/catalog.js.map +1 -0
  237. package/dist/domain/project/contracts.d.ts +247 -0
  238. package/dist/domain/project/contracts.js +2 -0
  239. package/dist/domain/project/contracts.js.map +1 -0
  240. package/dist/domain/project/errors.d.ts +3 -0
  241. package/dist/domain/project/errors.js +7 -0
  242. package/dist/domain/project/errors.js.map +1 -0
  243. package/dist/domain/project/infrastructure-layout.d.ts +26 -0
  244. package/dist/domain/project/infrastructure-layout.js +124 -0
  245. package/dist/domain/project/infrastructure-layout.js.map +1 -0
  246. package/dist/domain/project/inputs.d.ts +21 -0
  247. package/dist/domain/project/inputs.js +41 -0
  248. package/dist/domain/project/inputs.js.map +1 -0
  249. package/dist/domain/project/manifest/artifacts.d.ts +8 -0
  250. package/dist/domain/project/manifest/artifacts.js +150 -0
  251. package/dist/domain/project/manifest/artifacts.js.map +1 -0
  252. package/dist/domain/project/manifest/context.d.ts +13 -0
  253. package/dist/domain/project/manifest/context.js +2 -0
  254. package/dist/domain/project/manifest/context.js.map +1 -0
  255. package/dist/domain/project/manifest/fields.d.ts +6 -0
  256. package/dist/domain/project/manifest/fields.js +36 -0
  257. package/dist/domain/project/manifest/fields.js.map +1 -0
  258. package/dist/domain/project/manifest/governance.d.ts +8 -0
  259. package/dist/domain/project/manifest/governance.js +161 -0
  260. package/dist/domain/project/manifest/governance.js.map +1 -0
  261. package/dist/domain/project/manifest/project-identity.d.ts +6 -0
  262. package/dist/domain/project/manifest/project-identity.js +273 -0
  263. package/dist/domain/project/manifest/project-identity.js.map +1 -0
  264. package/dist/domain/project/manifest/reader.d.ts +9 -0
  265. package/dist/domain/project/manifest/reader.js +141 -0
  266. package/dist/domain/project/manifest/reader.js.map +1 -0
  267. package/dist/domain/project/paths.d.ts +2 -0
  268. package/dist/domain/project/paths.js +29 -0
  269. package/dist/domain/project/paths.js.map +1 -0
  270. package/dist/domain/project/planning.d.ts +19 -0
  271. package/dist/domain/project/planning.js +329 -0
  272. package/dist/domain/project/planning.js.map +1 -0
  273. package/dist/domain/project/retired-workload.d.ts +4 -0
  274. package/dist/domain/project/retired-workload.js +18 -0
  275. package/dist/domain/project/retired-workload.js.map +1 -0
  276. package/dist/domain/project/supported-stack.d.ts +113 -0
  277. package/dist/domain/project/supported-stack.js +426 -0
  278. package/dist/domain/project/supported-stack.js.map +1 -0
  279. package/dist/domain/workstation/constraints.d.ts +6 -0
  280. package/dist/domain/workstation/constraints.js +8 -0
  281. package/dist/domain/workstation/constraints.js.map +1 -0
  282. package/dist/file-system.d.ts +10 -41
  283. package/dist/file-system.js +9 -1204
  284. package/dist/file-system.js.map +1 -1
  285. package/dist/framework-adapters.d.ts +1 -1
  286. package/dist/framework-validation.d.ts +1 -1
  287. package/dist/framework-validation.js +1 -1
  288. package/dist/framework-validation.js.map +1 -1
  289. package/dist/genai-templates.d.ts +2 -9
  290. package/dist/genai-templates.js +4 -5
  291. package/dist/genai-templates.js.map +1 -1
  292. package/dist/generators/common/artifacts.d.ts +6 -0
  293. package/dist/generators/common/artifacts.js +30 -0
  294. package/dist/generators/common/artifacts.js.map +1 -0
  295. package/dist/generators/common/base.d.ts +17 -0
  296. package/dist/generators/common/base.js +421 -0
  297. package/dist/generators/common/base.js.map +1 -0
  298. package/dist/generators/common/dotenv-validation.d.ts +2 -0
  299. package/dist/generators/common/dotenv-validation.js +80 -0
  300. package/dist/generators/common/dotenv-validation.js.map +1 -0
  301. package/dist/generators/common/environments.d.ts +3 -0
  302. package/dist/generators/common/environments.js +15 -0
  303. package/dist/generators/common/environments.js.map +1 -0
  304. package/dist/generators/common/frontend.d.ts +15 -0
  305. package/dist/generators/common/frontend.js +166 -0
  306. package/dist/generators/common/frontend.js.map +1 -0
  307. package/dist/generators/common/python-settings.d.ts +2 -0
  308. package/dist/generators/common/python-settings.js +70 -0
  309. package/dist/generators/common/python-settings.js.map +1 -0
  310. package/dist/generators/common/spec-workflow.d.ts +28 -0
  311. package/dist/generators/common/spec-workflow.js +567 -0
  312. package/dist/generators/common/spec-workflow.js.map +1 -0
  313. package/dist/generators/common/values.d.ts +13 -0
  314. package/dist/generators/common/values.js +16 -0
  315. package/dist/generators/common/values.js.map +1 -0
  316. package/dist/generators/containers/compose.d.ts +7 -0
  317. package/dist/generators/containers/compose.js +196 -0
  318. package/dist/generators/containers/compose.js.map +1 -0
  319. package/dist/generators/containers/context.d.ts +1 -0
  320. package/dist/generators/containers/context.js +43 -0
  321. package/dist/generators/containers/context.js.map +1 -0
  322. package/dist/generators/containers/images.d.ts +7 -0
  323. package/dist/generators/containers/images.js +119 -0
  324. package/dist/generators/containers/images.js.map +1 -0
  325. package/dist/generators/context.d.ts +42 -0
  326. package/dist/generators/context.js +38 -0
  327. package/dist/generators/context.js.map +1 -0
  328. package/dist/generators/genai/backend.d.ts +20 -0
  329. package/dist/generators/genai/backend.js +667 -0
  330. package/dist/generators/genai/backend.js.map +1 -0
  331. package/dist/generators/genai/configuration.d.ts +3 -0
  332. package/dist/generators/genai/configuration.js +43 -0
  333. package/dist/generators/genai/configuration.js.map +1 -0
  334. package/dist/generators/genai/database.d.ts +7 -0
  335. package/dist/generators/genai/database.js +71 -0
  336. package/dist/generators/genai/database.js.map +1 -0
  337. package/dist/generators/genai/functions.d.ts +15 -0
  338. package/dist/generators/genai/functions.js +156 -0
  339. package/dist/generators/genai/functions.js.map +1 -0
  340. package/dist/generators/genai/index.d.ts +8 -0
  341. package/dist/generators/genai/index.js +11 -0
  342. package/dist/generators/genai/index.js.map +1 -0
  343. package/dist/generators/genai/patterns.d.ts +9 -0
  344. package/dist/generators/genai/patterns.js +309 -0
  345. package/dist/generators/genai/patterns.js.map +1 -0
  346. package/dist/generators/infrastructure/azure.d.ts +18 -0
  347. package/dist/generators/infrastructure/azure.js +655 -0
  348. package/dist/generators/infrastructure/azure.js.map +1 -0
  349. package/dist/generators/infrastructure/names.d.ts +23 -0
  350. package/dist/generators/infrastructure/names.js +51 -0
  351. package/dist/generators/infrastructure/names.js.map +1 -0
  352. package/dist/generators/standard/configuration.d.ts +3 -0
  353. package/dist/generators/standard/configuration.js +26 -0
  354. package/dist/generators/standard/configuration.js.map +1 -0
  355. package/dist/generators/standard/go.d.ts +17 -0
  356. package/dist/generators/standard/go.js +338 -0
  357. package/dist/generators/standard/go.js.map +1 -0
  358. package/dist/generators/standard/index.d.ts +12 -0
  359. package/dist/generators/standard/index.js +12 -0
  360. package/dist/generators/standard/index.js.map +1 -0
  361. package/dist/generators/standard/node.d.ts +20 -0
  362. package/dist/generators/standard/node.js +314 -0
  363. package/dist/generators/standard/node.js.map +1 -0
  364. package/dist/generators/standard/python.d.ts +18 -0
  365. package/dist/generators/standard/python.js +191 -0
  366. package/dist/generators/standard/python.js.map +1 -0
  367. package/dist/go-template-assets.js +3 -3
  368. package/dist/go-template-assets.js.map +1 -1
  369. package/dist/governance-activation/activation-state.d.ts +1 -1
  370. package/dist/governance-activation/activation-state.js +46 -9
  371. package/dist/governance-activation/activation-state.js.map +1 -1
  372. package/dist/governance-activation/approvals.d.ts +1 -188
  373. package/dist/governance-activation/approvals.js +1 -507
  374. package/dist/governance-activation/approvals.js.map +1 -1
  375. package/dist/governance-activation/canonical-json.d.ts +1 -3
  376. package/dist/governance-activation/canonical-json.js +1 -35
  377. package/dist/governance-activation/canonical-json.js.map +1 -1
  378. package/dist/governance-activation/commands.d.ts +1 -1
  379. package/dist/governance-activation/commands.js +107 -103
  380. package/dist/governance-activation/commands.js.map +1 -1
  381. package/dist/governance-activation/compatibility.d.ts +11 -3
  382. package/dist/governance-activation/compatibility.js +31 -4
  383. package/dist/governance-activation/compatibility.js.map +1 -1
  384. package/dist/governance-activation/credentials.d.ts +3 -3
  385. package/dist/governance-activation/credentials.js +5 -5
  386. package/dist/governance-activation/credentials.js.map +1 -1
  387. package/dist/governance-activation/doctor.d.ts +1 -1
  388. package/dist/governance-activation/doctor.js +28 -96
  389. package/dist/governance-activation/doctor.js.map +1 -1
  390. package/dist/governance-activation/evidence.d.ts +1 -49
  391. package/dist/governance-activation/evidence.js +1 -245
  392. package/dist/governance-activation/evidence.js.map +1 -1
  393. package/dist/governance-activation/git-ignore.d.ts +9 -0
  394. package/dist/governance-activation/git-ignore.js +76 -0
  395. package/dist/governance-activation/git-ignore.js.map +1 -0
  396. package/dist/governance-activation/graph.d.ts +1 -397
  397. package/dist/governance-activation/graph.js +1 -440
  398. package/dist/governance-activation/graph.js.map +1 -1
  399. package/dist/governance-activation/identity.d.ts +1 -35
  400. package/dist/governance-activation/identity.js +1 -88
  401. package/dist/governance-activation/identity.js.map +1 -1
  402. package/dist/governance-activation/index.d.ts +3 -0
  403. package/dist/governance-activation/index.js +3 -0
  404. package/dist/governance-activation/index.js.map +1 -1
  405. package/dist/governance-activation/inputs.d.ts +8 -0
  406. package/dist/governance-activation/inputs.js +146 -0
  407. package/dist/governance-activation/inputs.js.map +1 -0
  408. package/dist/governance-activation/migration.d.ts +4 -3
  409. package/dist/governance-activation/migration.js +14 -6
  410. package/dist/governance-activation/migration.js.map +1 -1
  411. package/dist/governance-activation/phase-bootstrap-state.d.ts +3 -0
  412. package/dist/governance-activation/phase-bootstrap-state.js +128 -0
  413. package/dist/governance-activation/phase-bootstrap-state.js.map +1 -0
  414. package/dist/governance-activation/phase-discovery.d.ts +2 -0
  415. package/dist/governance-activation/phase-discovery.js +88 -0
  416. package/dist/governance-activation/phase-discovery.js.map +1 -0
  417. package/dist/governance-activation/phase-governance.d.ts +4 -0
  418. package/dist/governance-activation/phase-governance.js +141 -0
  419. package/dist/governance-activation/phase-governance.js.map +1 -0
  420. package/dist/governance-activation/phase-publication.d.ts +8 -0
  421. package/dist/governance-activation/phase-publication.js +318 -0
  422. package/dist/governance-activation/phase-publication.js.map +1 -0
  423. package/dist/governance-activation/read-only.d.ts +30 -0
  424. package/dist/governance-activation/read-only.js +93 -0
  425. package/dist/governance-activation/read-only.js.map +1 -0
  426. package/dist/governance-activation/readiness.d.ts +1 -24
  427. package/dist/governance-activation/readiness.js +1 -220
  428. package/dist/governance-activation/readiness.js.map +1 -1
  429. package/dist/governance-activation/reconciliation.d.ts +1 -1
  430. package/dist/governance-activation/reconciliation.js +3 -3
  431. package/dist/governance-activation/reconciliation.js.map +1 -1
  432. package/dist/governance-activation/release-integrity.d.ts +1 -1
  433. package/dist/governance-activation/release-integrity.js +2 -2
  434. package/dist/governance-activation/release-integrity.js.map +1 -1
  435. package/dist/governance-activation/seed-lifecycle.d.ts +10 -2
  436. package/dist/governance-activation/seed-lifecycle.js +244 -66
  437. package/dist/governance-activation/seed-lifecycle.js.map +1 -1
  438. package/dist/governance-activation/source-of-truth.d.ts +5 -3
  439. package/dist/governance-activation/source-of-truth.js +32 -52
  440. package/dist/governance-activation/source-of-truth.js.map +1 -1
  441. package/dist/governance-activation/spec-kit-seed.d.ts +9 -0
  442. package/dist/governance-activation/spec-kit-seed.js +43 -0
  443. package/dist/governance-activation/spec-kit-seed.js.map +1 -0
  444. package/dist/governance-activation/task-projection.d.ts +1 -1
  445. package/dist/governance-activation/transition-planning.d.ts +15 -0
  446. package/dist/governance-activation/transition-planning.js +250 -0
  447. package/dist/governance-activation/transition-planning.js.map +1 -0
  448. package/dist/governance-activation/transition-ports.d.ts +150 -0
  449. package/dist/governance-activation/transition-ports.js +2 -0
  450. package/dist/governance-activation/transition-ports.js.map +1 -0
  451. package/dist/governance-activation/transition-process.d.ts +7 -0
  452. package/dist/governance-activation/transition-process.js +21 -0
  453. package/dist/governance-activation/transition-process.js.map +1 -0
  454. package/dist/governance-activation/transition-records.d.ts +56 -0
  455. package/dist/governance-activation/transition-records.js +208 -0
  456. package/dist/governance-activation/transition-records.js.map +1 -0
  457. package/dist/governance-activation/transitions.d.ts +6 -157
  458. package/dist/governance-activation/transitions.js +143 -2045
  459. package/dist/governance-activation/transitions.js.map +1 -1
  460. package/dist/governance-activation/types.d.ts +1 -390
  461. package/dist/governance-activation/types.js +1 -107
  462. package/dist/governance-activation/types.js.map +1 -1
  463. package/dist/governance-activation/validators.d.ts +1 -17
  464. package/dist/governance-activation/validators.js +1 -1304
  465. package/dist/governance-activation/validators.js.map +1 -1
  466. package/dist/governance-assessment/catalog.d.ts +7 -0
  467. package/dist/governance-assessment/catalog.js +31 -0
  468. package/dist/governance-assessment/catalog.js.map +1 -0
  469. package/dist/governance-assessment/command.d.ts +10 -0
  470. package/dist/governance-assessment/command.js +77 -0
  471. package/dist/governance-assessment/command.js.map +1 -0
  472. package/dist/governance-assessment/engine.d.ts +14 -0
  473. package/dist/governance-assessment/engine.js +935 -0
  474. package/dist/governance-assessment/engine.js.map +1 -0
  475. package/dist/governance-assessment/index.d.ts +5 -0
  476. package/dist/governance-assessment/index.js +6 -0
  477. package/dist/governance-assessment/index.js.map +1 -0
  478. package/dist/governance-assessment/live-normalize.d.ts +1 -0
  479. package/dist/governance-assessment/live-normalize.js +2 -0
  480. package/dist/governance-assessment/live-normalize.js.map +1 -0
  481. package/dist/governance-assessment/live-transport.d.ts +34 -0
  482. package/dist/governance-assessment/live-transport.js +455 -0
  483. package/dist/governance-assessment/live-transport.js.map +1 -0
  484. package/dist/governance-assessment/live.d.ts +2 -0
  485. package/dist/governance-assessment/live.js +689 -0
  486. package/dist/governance-assessment/live.js.map +1 -0
  487. package/dist/governance-assessment/predicates.d.ts +1 -0
  488. package/dist/governance-assessment/predicates.js +2 -0
  489. package/dist/governance-assessment/predicates.js.map +1 -0
  490. package/dist/governance-assessment/project.d.ts +33 -0
  491. package/dist/governance-assessment/project.js +178 -0
  492. package/dist/governance-assessment/project.js.map +1 -0
  493. package/dist/governance-assessment/readers.d.ts +14 -0
  494. package/dist/governance-assessment/readers.js +122 -0
  495. package/dist/governance-assessment/readers.js.map +1 -0
  496. package/dist/governance-assessment/report.d.ts +1 -0
  497. package/dist/governance-assessment/report.js +2 -0
  498. package/dist/governance-assessment/report.js.map +1 -0
  499. package/dist/governance-assessment/sanitize.d.ts +1 -0
  500. package/dist/governance-assessment/sanitize.js +2 -0
  501. package/dist/governance-assessment/sanitize.js.map +1 -0
  502. package/dist/governance-assessment/types.d.ts +6 -0
  503. package/dist/governance-assessment/types.js +2 -0
  504. package/dist/governance-assessment/types.js.map +1 -0
  505. package/dist/governance-assessment/yaml.d.ts +1 -0
  506. package/dist/governance-assessment/yaml.js +2 -0
  507. package/dist/governance-assessment/yaml.js.map +1 -0
  508. package/dist/init-filesystem.d.ts +1 -1
  509. package/dist/init-filesystem.js +126 -174
  510. package/dist/init-filesystem.js.map +1 -1
  511. package/dist/interactive.d.ts +2 -2
  512. package/dist/interactive.js +42 -41
  513. package/dist/interactive.js.map +1 -1
  514. package/dist/migrate-plan.d.ts +5 -1
  515. package/dist/migrate-plan.js +87 -10
  516. package/dist/migrate-plan.js.map +1 -1
  517. package/dist/npm-template-assets.js +5 -4
  518. package/dist/npm-template-assets.js.map +1 -1
  519. package/dist/openspec-profile.d.ts +1 -1
  520. package/dist/opentofu-template-assets.js +3 -3
  521. package/dist/opentofu-template-assets.js.map +1 -1
  522. package/dist/package-identity.d.ts +3 -0
  523. package/dist/package-identity.js +13 -2
  524. package/dist/package-identity.js.map +1 -1
  525. package/dist/planner.d.ts +1 -19
  526. package/dist/planner.js +1 -565
  527. package/dist/planner.js.map +1 -1
  528. package/dist/process-runner.d.ts +5 -1
  529. package/dist/process-runner.js +164 -8
  530. package/dist/process-runner.js.map +1 -1
  531. package/dist/project-dependencies.d.ts +5 -3
  532. package/dist/project-dependencies.js +74 -63
  533. package/dist/project-dependencies.js.map +1 -1
  534. package/dist/published-verifier.js +67 -30
  535. package/dist/published-verifier.js.map +1 -1
  536. package/dist/python-template-assets.js +6 -9
  537. package/dist/python-template-assets.js.map +1 -1
  538. package/dist/reconcile.d.ts +1 -1
  539. package/dist/reconcile.js +2 -2
  540. package/dist/reconcile.js.map +1 -1
  541. package/dist/release-identity.js +19 -0
  542. package/dist/release-identity.js.map +1 -1
  543. package/dist/repository-governance.d.ts +10 -2
  544. package/dist/repository-governance.js +240 -99
  545. package/dist/repository-governance.js.map +1 -1
  546. package/dist/runtime.js +1 -1
  547. package/dist/runtime.js.map +1 -1
  548. package/dist/scan.d.ts +6 -2
  549. package/dist/scan.js +78 -30
  550. package/dist/scan.js.map +1 -1
  551. package/dist/self-upgrade.d.ts +1 -1
  552. package/dist/self-upgrade.js +20 -7
  553. package/dist/self-upgrade.js.map +1 -1
  554. package/dist/stable-release.js +7 -1
  555. package/dist/stable-release.js.map +1 -1
  556. package/dist/standard-templates.d.ts +2 -2
  557. package/dist/standard-templates.js +6 -841
  558. package/dist/standard-templates.js.map +1 -1
  559. package/dist/supported-stack.d.ts +3 -115
  560. package/dist/supported-stack.js +4 -438
  561. package/dist/supported-stack.js.map +1 -1
  562. package/dist/telemetry/contract.d.ts +2 -0
  563. package/dist/telemetry/contract.js +7 -0
  564. package/dist/telemetry/contract.js.map +1 -1
  565. package/dist/telemetry/index.d.ts +1 -1
  566. package/dist/templates.d.ts +10 -20
  567. package/dist/templates.js +52 -3238
  568. package/dist/templates.js.map +1 -1
  569. package/dist/types.d.ts +1 -263
  570. package/dist/types.js +1 -1
  571. package/dist/types.js.map +1 -1
  572. package/dist/version.js +2 -6
  573. package/dist/version.js.map +1 -1
  574. package/dist/workstation-catalog.d.ts +5 -2
  575. package/dist/workstation-catalog.js +33 -2
  576. package/dist/workstation-catalog.js.map +1 -1
  577. package/dist/workstation.d.ts +4 -3
  578. package/dist/workstation.js +86 -32
  579. package/dist/workstation.js.map +1 -1
  580. package/docs/assets/liftoff-terminal.svg +3 -3
  581. package/docs/azure-deployment.md +107 -10
  582. package/docs/cli-reference.md +127 -11
  583. package/docs/configuration-and-manifests.md +150 -35
  584. package/docs/existing-repositories.md +33 -6
  585. package/docs/getting-started.md +44 -31
  586. package/docs/prerequisites.md +34 -35
  587. package/docs/project-structure.md +45 -47
  588. package/docs/repository-governance.md +207 -24
  589. package/docs/safety-and-consent.md +65 -12
  590. package/docs/spec-workflows-and-agents.md +31 -28
  591. package/docs/supported-stack.md +11 -9
  592. package/docs/telemetry.md +9 -3
  593. package/docs/troubleshooting.md +107 -49
  594. package/docs/workloads.md +53 -62
  595. package/package.json +6 -8
  596. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/UPSTREAM_LICENSE.txt +0 -21
  597. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/catalog.json +0 -520
  598. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/packaged/gitignore +0 -27
  599. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/README.md +0 -25
  600. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/components.json +0 -22
  601. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/eslint.config.js +0 -23
  602. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/index.html +0 -13
  603. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package-lock.json +0 -6156
  604. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package.json +0 -60
  605. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/public/power-apps.svg +0 -55
  606. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/App.tsx +0 -17
  607. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/assets/react.svg +0 -1
  608. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/mode-toggle.tsx +0 -37
  609. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/badge.tsx +0 -46
  610. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/button.tsx +0 -60
  611. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/calendar.tsx +0 -211
  612. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/card.tsx +0 -92
  613. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/chart.tsx +0 -355
  614. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/checkbox.tsx +0 -32
  615. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/command.tsx +0 -184
  616. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dialog.tsx +0 -141
  617. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dropdown-menu.tsx +0 -257
  618. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/input.tsx +0 -21
  619. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/label.tsx +0 -22
  620. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/popover.tsx +0 -46
  621. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/progress.tsx +0 -29
  622. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/select.tsx +0 -185
  623. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/separator.tsx +0 -26
  624. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/skeleton.tsx +0 -13
  625. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/table.tsx +0 -114
  626. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tabs.tsx +0 -66
  627. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/textarea.tsx +0 -18
  628. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tooltip.tsx +0 -61
  629. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/hooks/use-theme.ts +0 -11
  630. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/index.css +0 -131
  631. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/lib/utils.ts +0 -6
  632. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/main.tsx +0 -10
  633. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/_layout.tsx +0 -31
  634. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/home.tsx +0 -59
  635. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/not-found.tsx +0 -14
  636. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/query-provider.tsx +0 -26
  637. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/sonner-provider.tsx +0 -23
  638. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/theme-provider.tsx +0 -64
  639. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/router.tsx +0 -24
  640. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.app.json +0 -34
  641. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.json +0 -13
  642. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.node.json +0 -26
  643. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/vite.config.ts +0 -19
  644. package/assets/power-apps-code-app/README.md +0 -27
  645. package/dist/code-apps-plugin.d.ts +0 -13
  646. package/dist/code-apps-plugin.js +0 -69
  647. package/dist/code-apps-plugin.js.map +0 -1
  648. package/dist/power-apps-assets.d.ts +0 -30
  649. package/dist/power-apps-assets.js +0 -131
  650. package/dist/power-apps-assets.js.map +0 -1
  651. package/dist/power-apps-templates.d.ts +0 -3
  652. package/dist/power-apps-templates.js +0 -173
  653. package/dist/power-apps-templates.js.map +0 -1
  654. package/dist/power-apps-validation.d.ts +0 -1
  655. package/dist/power-apps-validation.js +0 -79
  656. package/dist/power-apps-validation.js.map +0 -1
package/DEVELOPER.md CHANGED
@@ -3,21 +3,67 @@
3
3
  This guide covers release-owned compatibility, deterministic setup, and package
4
4
  publishing. General contribution setup remains in [CONTRIBUTING.md](CONTRIBUTING.md).
5
5
 
6
+ ## Stabilization acceptance matrix
7
+
8
+ The `stabilize-and-modularize-liftoff` change separates retirement, mechanical
9
+ extraction, and behavior corrections. This matrix identifies acceptance targets,
10
+ not a claim of production readiness. Its OpenSpec task checklist is the progress
11
+ authority; the locations below identify the extracted implementation, not its
12
+ temporary compatibility facades.
13
+
14
+ | Capability | Canonical implementation area under `src/` | Acceptance evidence | Change kind |
15
+ | --- | --- | --- | --- |
16
+ | `liftoff-cli-workflow` | `cli/args/`, `cli/commands/`, `domain/project/inputs.ts`, `interactive.ts` | Command, interactive, help and lifecycle cases | Retirement, correction, extraction |
17
+ | `liftoff-power-apps-code-apps` | `domain/project/retired-workload.ts` and manifest/input guards | Retired-manifest rejection and explicit retirement inventory | Retirement |
18
+ | `liftoff-project-scaffold` | `generators/{common,genai,containers}/`, `templates.ts` assembler | Template, generated-stack and seed-lifecycle cases | Retirement, correction, extraction |
19
+ | `liftoff-standard-projects` | `generators/standard/`, `adapters/packaged-assets/` | Three-stack startup/configuration and container cases | Correction |
20
+ | `liftoff-supported-stack-baselines` | `domain/project/supported-stack.ts`, `adapters/packaged-assets/supported-stack.ts` | Baseline identity, integrity and freshness cases | Retirement, correction |
21
+ | `liftoff-template-dependency-security` | Audit/freshness scripts and explicit package inventories | Template dependency/security and inventory cases | Retirement |
22
+ | `liftoff-infrastructure-governance` | `generators/infrastructure/`, `domain/project/infrastructure-layout.ts`, `cli/commands/helpers.ts` | Per-environment roots, state, naming and sender/receiver cases | Correction, extraction |
23
+ | `liftoff-workstation-bootstrap` | `application/initialize/`, `domain/workstation/`, workstation/framework registries | Runtime/package-manager constraints and independent consent | Retirement, correction |
24
+ | `liftoff-project-migration` | `domain/migration/`, `scan.ts`, `migrate-plan.ts`, `application/migrate/` | Complete inventory, target overrides, source preservation, cleanup-last | Correction, extraction |
25
+ | `liftoff-template-ownership` | `domain/project/artifact-lifecycle.ts`, `reconcile.ts` | Exact ownership, create-only provisioning and force refusal | Retirement, preservation |
26
+ | `liftoff-manifest-contract` | `domain/project/manifest/`, `application/project/manifest.ts` | API/GenAI v2-v7 readers, retirement and historical identity boundaries | Retirement, correction, extraction |
27
+ | `liftoff-project-update` | `application/update/`, `adapters/filesystem/` | Collisions, recovery, concurrent edits, modes and layout gates | Correction, extraction |
28
+ | `liftoff-project-doctor` | `application/diagnose/` and shared probes | Honest readiness, invalid boundaries and no-write diagnostics | Retirement, correction, extraction |
29
+ | `liftoff-cli-self-upgrade` | `application/upgrade/`, `self-upgrade.ts`, `stable-release.ts` | Scoped registry precedence, isolation and failure classification | Correction, extraction |
30
+ | `liftoff-npm-distribution` | Package metadata and packaging/release scripts | Packed CLI entry point, asset resolution and historical surfaces | Retirement, preservation |
31
+ | `liftoff-repository-governance-profile` | `repository-governance.ts`, `domain/governance/policy/identity.ts` | Fixed policy, real workload boundaries and exact managed inventory | Retirement, preservation |
32
+ | `liftoff-governance-activation-engine` | `domain/governance/activation/`, `governance-activation/` | Current-input/body binding, retries, selected paths, Spec Kit seed | Correction, extraction |
33
+ | `liftoff-governance-assessment` | `domain/governance/assessment/`, `governance-assessment/`, read-only Git/GitHub/Azure adapters | Any-Git coverage, effective enforcement, partial reads and no writes | Correction, extraction |
34
+ | `liftoff-user-documentation` | README, developer guide and packaged docs | Links, accurate capabilities, ownership and compatibility guidance | Retirement, correction |
35
+
36
+ Mechanical extraction must preserve the existing supported help, JSON and
37
+ generation fixtures except for separately reviewed intentional changes. The
38
+ pre-change capture includes all nine GenAI patterns, three standard API stacks,
39
+ Spec Kit, and a frontend-enabled production-only case. A new directory or
40
+ forwarding callback does not establish a new implementation boundary.
41
+
42
+ The explicit non-generative retirement inventory is
43
+ `tests/fixtures/power-apps-retirement.json`. It separates whole-file removal,
44
+ source/reference edits, shared cases to port, and the historical manifest kept
45
+ only as negative input. Do not expand that inventory into blanket deletion of
46
+ unknown files or user projects.
47
+
48
+ Production executors, public approval/credential enrollment, and missing GenAI
49
+ specializations remain deferred. Local baseline evidence, read-only assessment,
50
+ and successful generated-file checks must not be described as those capabilities.
51
+
6
52
  ## Activation version vector
7
53
 
8
- Example for the Liftoff 0.10.0 deterministic setup contract:
54
+ Current deterministic setup contract, retained by the 0.11.1 CLI patch:
9
55
 
10
56
  ```json
11
57
  {
12
- "liftoffVersion": "0.10.0",
58
+ "liftoffVersion": "0.11.0",
13
59
  "manifestArtifactVersion": 7,
14
60
  "policyVersion": "6",
15
- "activationContractVersion": 1,
61
+ "activationContractVersion": 2,
16
62
  "phaseGraphSchemaVersion": 1,
17
- "phaseGraphHash": "b84bcde6cd614637f2486b0f3a202860e6e9a6142ac60c773daa11786dbeb7f7",
18
- "activationStateSchemaVersion": 1,
19
- "evidenceHeaderSchemaVersion": 1,
20
- "approvalEnvelopeSchemaVersion": 1,
63
+ "phaseGraphHash": "ac160e3fc86f3e438141d985658e09f419508b3adbe176ddd13100d5dfdee47c",
64
+ "activationStateSchemaVersion": 2,
65
+ "evidenceHeaderSchemaVersion": 2,
66
+ "approvalEnvelopeSchemaVersion": 2,
21
67
  "supersessionSchemaVersion": 1,
22
68
  "credentialPolicySchemaVersion": 1
23
69
  }
@@ -29,7 +75,15 @@ known, use a clear placeholder such as `<sha256-of-canonical-phase-graph-json>`;
29
75
  do not fabricate a historical value.
30
76
 
31
77
  The generated `liftoff.manifest.json` records this as manifest `artifactVersion`
32
- 7 plus the activation identity fields shown above.
78
+ 7 plus the activation identity fields shown above. Compatibility metadata uses
79
+ schema version 2 in its own document, not a new required manifest field.
80
+ Assessment report/catalog, graph, supersession, and credential-policy schemas
81
+ remain at version 1; normative policy remains 6.
82
+
83
+ `src/domain/governance/policy/identity.ts` is the version authority;
84
+ `src/domain/governance/activation/graph.ts` computes the canonical graph hash and
85
+ phase digests. Documentation tests compare this example with the source identity,
86
+ rather than blessing an obsolete hardcoded tuple.
33
87
 
34
88
  | Axis | Tracks |
35
89
  | --- | --- |
@@ -43,6 +97,10 @@ There is no separate `/liftoff-setup` skill version. The setup integration is a
43
97
  thin managed artifact; its managed content hash plus the activation contract and
44
98
  graph hash are sufficient identity.
45
99
 
100
+ The same rule applies to `/liftoff-governance-assess`: it has no independent
101
+ assessment-skill version. Report schema v1 and the packaged assessment catalog
102
+ schema identify read-only data contracts, not a new policy or activation identity.
103
+
46
104
  ## Bump rules
47
105
 
48
106
  | Change | Required bump |
@@ -65,12 +123,91 @@ changes in another.
65
123
  - Future manifest, policy, contract, schema, or graph identities must block
66
124
  without rewriting state and must report the exact field, found value, supported
67
125
  identity, and minimum Liftoff remedy.
68
- - Historical state migration requires schema-valid input, an explicit old-to-new
69
- mapping, transactional writes, immutable evidence preservation, and rollback
70
- on any failed preflight.
126
+ - Manifest composition injects `validateReadableActivationIdentity` only at the
127
+ manifest boundary. Exact known v1 identities remain readable without retagging;
128
+ state, evidence, approval, readiness, and scope use strict current validation.
129
+ - Known v1 activation is diagnostic-only. `diagnosticOnly` maintenance may update
130
+ safe managed core while retaining historical identity/state/evidence. No public
131
+ history reconciliation or automatic old-to-new state migration is implemented.
132
+ - The eight flat-root OpenTofu identities are an explicit new-output-only
133
+ exception to append-only naming in 0.11.0. Preserve historical records and
134
+ files; use the exact [retirement inventory](docs/azure-deployment.md#explicit-flat-root-identity-retirement),
135
+ never aliases, prefix ownership, or force conversion.
136
+ - A CLI-only patch does not retag activation history. When unchanged renderer
137
+ semantics support a new CLI generation, add that exact version to the
138
+ infrastructure generation compatibility inventory and cover mixed old/new
139
+ component provenance; do not infer compatibility from a SemVer range.
71
140
  - Never fabricate history: prose, filenames, timestamps, or checked tasks are
72
141
  not evidence.
73
142
 
143
+ ## Read-only assessment maintenance
144
+
145
+ The pinned target is the installed CLI's packaged policy, activation identity,
146
+ phase graph, and control catalog, never registry latest. The local-only
147
+ `liftoff governance assess --json` path must make no network requests or require
148
+ cloud credentials. Only an explicit `--live` request authorizes bounded
149
+ read-only GitHub/Azure metadata using existing permissions and validated scope.
150
+ No mode may enroll credentials, run project scripts, mutate configuration,
151
+ update or upgrade anything, or write state, approvals, or evidence.
152
+ Every assessment invocation, including `--live` and `--help`, must skip telemetry
153
+ and disclosure entirely. Local Git reads use only repository root, HEAD, and
154
+ origin metadata; never call `git status`, whose clean filters can execute code.
155
+ Azure scope and evidence-backed applicability require a current active-baseline
156
+ and referenced, validated saved-plan/evidence receipts. Reject placeholder
157
+ digests, future-dated approvals, and inferred bindings. Missing bindings remain
158
+ `not-observed`; remediation must never suggest manually fabricating activation
159
+ state, baselines, receipts, or evidence.
160
+ Use `inspectCurrentActivationEvidence` from
161
+ `src/governance-activation/read-only.ts`: its contexts include actual input
162
+ snapshots, reviewed immutable plans, and state evidence references. Consume
163
+ validated selected payloads, never reselect an unvalidated raw duplicate.
164
+ `bodyDigest` commits payload and normalized readbacks; `planDigest` binds semantic
165
+ inputs and `savedPlanDigest` binds the complete saved plan, including clocks.
166
+ Writing receipts does not invalidate their own source-input snapshot.
167
+
168
+ Reports distinguish target, recorded baseline, declared configuration, and
169
+ observed enforcement with expected/observed values, provenance, impact, and
170
+ ownership-aware advisory remediation. Preserve all seven classifications:
171
+ `aligned`, `outdated`, `missing`, `conflicting`, `approved-exception`,
172
+ `inapplicable`, and `not-observed`. Coverage must expose unknown applicability,
173
+ unobserved live proof, stale evidence, and unsupported evaluators.
174
+ Exit 0 means fully observed aligned or explicitly disabled not-applicable
175
+ governance, not interchangeable claims; exit 2 means partial coverage or
176
+ differences including approved exceptions; exit 1 means error. An assessment
177
+ cannot advance a phase or supply approval for a future governance upgrade.
178
+ Show the project policy version when available and expected/observed values.
179
+ Optional normalized observation `facts` retain sanitized details alongside
180
+ evaluator predicate values without retaining raw provider payloads.
181
+
182
+ When adding a control or evaluator:
183
+
184
+ - Use unique stable control IDs, normative policy references, explicit expected
185
+ values, applicability/proof layers, valid phase IDs, and narrow exception scope.
186
+ - Bind the catalog digest to the canonical policy digest; test policy/catalog
187
+ coherence and non-empty enabled coverage. Keep every normative policy family
188
+ in the reviewed inventory, including explicit unsupported coverage.
189
+ - Add deterministic fixtures for equivalent reordered facts, known differences,
190
+ stale/denied/unknown/incomplete observations, and scope-bound exceptions.
191
+ Unknown proof must not become missing, inapplicable, or aligned.
192
+ - Prove read-only behavior with filesystem fingerprints and injected operation
193
+ logs, including failure paths and unsupported identities. Test redaction
194
+ before retention/truncation and fixed live read allowlists and limits.
195
+ - Cover Windows/macOS/Linux paths, CRLF, spaces, case handling, and
196
+ symlink/junction rejection; never execute project YAML, hooks, or scripts.
197
+ - Keep both agent wrappers equivalent and limited to
198
+ `liftoff governance assess --json` or, after explicit live consent,
199
+ `liftoff governance assess --live --json`. Keep `/liftoff-setup` primary.
200
+ - Append exact `liftoff-governance-assess-copilot` and
201
+ `liftoff-governance-assess-claude` ownership identities and portable paths.
202
+ Older supported inventories must load and expose safe new drift. Test
203
+ unowned collision protection under force, managed conflict handling,
204
+ transactional rollback, and unchanged state/evidence bytes.
205
+
206
+ Assessment diagnoses unsupported activation mappings without weakening mutation
207
+ loaders or claiming a migration exists. A future governance upgrade must collect
208
+ fresh observations, produce its own authoritative plan, and obtain approvals.
209
+ See [assessment guidance](docs/repository-governance.md#read-only-governance-assessment).
210
+
74
211
  ## Release integrity requirements
75
212
 
76
213
  - Validate the canonical graph, graph hash, per-phase contract digests, and
@@ -80,17 +217,25 @@ changes in another.
80
217
  bump and affected descendant invalidation.
81
218
  - Generated OpenSpec seeds must include metadata, proposal, design, tasks, and
82
219
  declared capability specs, and must pass strict validation immediately.
220
+ Test external archival before activation as well: the baseline must retain
221
+ every applicable local check and validate synchronized specs rather than an
222
+ inactive change name. A persisted archived-baseline blocker is retryable only
223
+ through a new explicit execution, never by fabricating evidence on resume.
83
224
  - Copilot and Claude `/liftoff-setup` integrations must be behaviorally
84
225
  equivalent, command-only, model-agnostic, and free of skill-version fields.
85
226
  They must distinguish the read-only `apply-next --json` preview from
86
227
  `apply-next --json --execute`, and execute only when approval status is
87
228
  `not-required` or `reused`.
229
+ Use `selectedPhase` and `executedPhase` for the apply-next attempt; read the
230
+ subsequent status or verify result for post-transition `nextReadyPhase`.
88
231
  - Governance verification must report state consistency separately from setup
89
232
  progress. A consistent `not-started` or `in-progress` result is not complete;
90
233
  completion requires every phase to have a successful terminal state.
91
234
  - Credential tests must prove PAT/App policy equivalence, exact workflow/job
92
235
  allowlists, masked input, no command-argument/file/log/evidence leaks, and
93
236
  compromised revoke/rotate guidance.
237
+ OpenSpec failure diagnostics must be bounded, stripped of terminal controls,
238
+ and screened for credential-shaped content before truncation or persistence.
94
239
  - Path tests must cover Windows, macOS, and Linux path-part arrays, symlink
95
240
  rejection, atomic state writes, and rollback.
96
241
 
@@ -103,8 +248,10 @@ npx vitest run tests/documentation.test.ts
103
248
  npx vitest run tests/templates.test.ts tests/repository-governance.test.ts
104
249
  npx vitest run tests/governance-activation.test.ts tests/governance-commands.test.ts tests/governance-credentials.test.ts
105
250
  npx vitest run tests/seed-lifecycle.test.ts
251
+ npx vitest run tests/governance-assessment.test.ts tests/governance-assessment-engine.test.ts
252
+ npx vitest run tests/commands.test.ts tests/file-system.test.ts tests/contract.test.ts tests/update.test.ts
106
253
  npm run build
107
- openspec validate add-deterministic-liftoff-setup --strict
254
+ openspec validate stabilize-and-modularize-liftoff --strict
108
255
  ```
109
256
 
110
257
  Before release, run:
@@ -114,22 +261,27 @@ npm run check
114
261
  npm run smoke:package
115
262
  npm run verify:standard-node-templates
116
263
  npm run verify:generated-containers
117
- npm run verify:power-apps-starter
118
264
  npm run verify:release-identity
119
265
  ```
120
266
 
121
- ## 0.10.0 release checklist
267
+ ## 0.11.1 release checklist
122
268
 
123
269
  - Package metadata, lockfile metadata, `liftoff --version`, and tag agree on
124
- `0.10.0`.
270
+ `0.11.1`. Preparing these files is not publication or permission to create a tag.
271
+ - Activation package identity remains `0.11.0`; no phase semantics or graph
272
+ identity change is introduced by patch-release preparation.
125
273
  - Manifest writes use artifactVersion 7; readers accept v2-v7.
126
- - Policy version is `"6"`; activation contract, graph/state/evidence/approval/
127
- supersession/credential schemas are v1.
274
+ - Policy version is `"6"`; activation contract/state/evidence-header/approval
275
+ and compatibility metadata are v2. Graph, supersession, credential-policy,
276
+ assessment report, and assessment catalog schemas remain v1.
128
277
  - The graph hash in code, docs, generated artifacts, compatibility metadata, and
129
278
  release-integrity tests is
130
- `b84bcde6cd614637f2486b0f3a202860e6e9a6142ac60c773daa11786dbeb7f7`.
131
- - `/liftoff-setup` is the primary post-init path and archives the bootstrap seed
132
- before any commit/push or Phase 0 authority.
279
+ `ac160e3fc86f3e438141d985658e09f419508b3adbe176ddd13100d5dfdee47c`.
280
+ - `/liftoff-setup` archives the OpenSpec bootstrap or finalizes the real Spec Kit
281
+ B001–B006 bundle locally before separate publication and Phase 0 gates.
282
+ - Power Apps and the eight explicitly retired flat-root infrastructure IDs have
283
+ no positive new-generation lane. Old API/GenAI project provenance and v1
284
+ activation history remain preserved, not converted by update or force.
133
285
  - No setup-skill version exists in manifests, JSON status, docs, or generated
134
286
  integrations.
135
287
  - Doctor states and remedies cover seed-incomplete, phase-blocked,
@@ -147,3 +299,195 @@ signing material in repository files, workflow logs, chat, screenshots, or
147
299
  evidence. Failed post-publish verification requires a dist-tag correction when
148
300
  the immutable package is correct, or a corrected patch release; do not unpublish
149
301
  as routine recovery.
302
+
303
+ ## Functional engines and implementation boundaries
304
+
305
+ Liftoff remains one npm package and a modular monolith. It has eight functional
306
+ responsibility groups, not eight separately deployed services or classes named
307
+ `Engine`. Workloads, patterns, activation phases, and assessment controls are
308
+ different dimensions; adding a template does not create another engine.
309
+
310
+ | Subsystem | Current implementation |
311
+ | --- | --- |
312
+ | Project planning and generation | `domain/project/`, `application/project/`, `generators/`, resolved packaged template assets |
313
+ | Workstation/framework bootstrap | `application/initialize/`, workstation registry, framework adapters, `init-filesystem.ts`, dependency setup |
314
+ | Source migration | `domain/migration/`, `scan.ts`, `migrate-plan.ts`, `application/migrate/` |
315
+ | Managed project maintenance | `application/update/{planning,reporting,use-case}.ts`, `reconcile.ts`, filesystem transactions |
316
+ | CLI self-upgrade | `application/upgrade/use-case.ts`, `self-upgrade.ts`, stable release lookup and installed-package verification |
317
+ | Diagnostics | `application/diagnose/`, pure manifest contracts, shared runtime/framework/governance checks |
318
+ | Governance activation | `domain/governance/{policy,activation}/` rules and `governance-activation/` execution composition |
319
+ | Governance assessment | `domain/governance/assessment/` comparison/report contracts and `governance-assessment/` read-only collection |
320
+
321
+ Telemetry, terminal presentation, process execution, catalogs, and filesystem
322
+ access support those subsystems rather than constituting additional business
323
+ engines.
324
+
325
+ ### Canonical entry points and ports
326
+
327
+ | Responsibility | Entry point or data contract |
328
+ | --- | --- |
329
+ | CLI parsing/dispatch | `src/cli/args/parser.ts`, `src/cli/commands/dispatch.ts` |
330
+ | Typed use-case requests | `src/application/context.ts`, `src/application/initialize/use-case.ts`, `src/application/update/use-case.ts`, `src/application/migrate/use-case.ts`, `src/application/upgrade/use-case.ts` |
331
+ | Pure plans/catalog/manifest rules | `src/domain/project/contracts.ts`, `src/domain/project/catalog.ts`, `src/domain/project/planning.ts`, `src/domain/project/manifest/reader.ts` |
332
+ | Release composition | `src/application/project/catalog.ts`, `src/application/project/manifest.ts` |
333
+ | Generator assembly and resolved subsets | `src/templates.ts`, `src/generators/context.ts` and its renderer families |
334
+ | Installed-package assets | `src/adapters/packaged-assets/package-root.ts`, `src/adapters/packaged-assets/template-assets.ts` |
335
+ | Guarded mutations | `src/adapters/filesystem/project-lock.ts`, `src/adapters/filesystem/atomic-write.ts`, `src/adapters/filesystem/project-transaction.ts` |
336
+ | Exact infrastructure inventory/layout | `src/domain/project/infrastructure-layout.ts` |
337
+ | Current activation observations | `src/governance-activation/inputs.ts`, `src/governance-activation/read-only.ts` |
338
+ | Activation planning/execution ports | `src/governance-activation/transition-planning.ts`, `src/governance-activation/transition-ports.ts`, locked coordinator `src/governance-activation/transitions.ts` |
339
+ | Concrete phase handlers and persistence | `src/governance-activation/seed-lifecycle.ts`, `src/governance-activation/phase-publication.ts`, `src/governance-activation/phase-discovery.ts`, `src/governance-activation/phase-governance.ts`, `src/governance-activation/phase-bootstrap-state.ts`, `src/governance-activation/transition-records.ts` |
340
+ | Pure evidence/availability contracts | `src/domain/governance/activation/evidence.ts`, `src/domain/governance/activation/capabilities.ts` |
341
+ | Read-only assessment | `src/governance-assessment/project.ts`, `src/domain/governance/assessment/`, `src/adapters/git/governance-assessment.ts`, `src/adapters/github/governance-assessment.ts`, `src/adapters/azure/governance-assessment.ts` |
342
+
343
+ The source boundaries are:
344
+
345
+ ```text
346
+ src/
347
+ cli/ # parsing/help and per-command transport
348
+ application/ # typed requests, execution ports and workflow orchestration
349
+ domain/
350
+ project/ # injected catalogs/planning, manifest contracts and ownership
351
+ migration/ # declaration parsing, inventory and placement decisions
352
+ governance/
353
+ policy/ # shared version identities
354
+ activation/ # graph, approval, applicability, evidence and readiness rules
355
+ assessment/ # observations, comparison, coverage and report rules
356
+ generators/
357
+ common/ # shared files, frontend, configuration and workflow seeds
358
+ standard/ # Python, Node.js and Go implementations
359
+ genai/ # configuration, backend, patterns, database and functions
360
+ containers/ # Compose, images and build-context exclusions
361
+ infrastructure/ # independent Azure roots and resource naming
362
+ adapters/
363
+ filesystem/ # guarded discovery/read/write, transactions and locks
364
+ packaged-assets/ # one installed-package root and resolved release assets
365
+ process/ # shell-specific literal command formatting
366
+ assets/governance/ # immutable policy bundles, catalogs and compatibility data
367
+ ```
368
+
369
+ Activation planning, process transport, outcome persistence, and phase handlers
370
+ are real modules, not callbacks into a monolithic dispatcher.
371
+ `phase-bootstrap-state.ts` handles retention/disposal boundaries, not the missing
372
+ `bootstrap-local` cloud-provisioning executor. `transition-process.ts` centralizes
373
+ command outcomes; `transition-records.ts` commits the reviewed plan/evidence/state
374
+ contracts through guarded filesystem operations.
375
+
376
+ `commands.ts`, `args.ts`, `file-system.ts`, and the project/catalog entry modules
377
+ are compatibility facades. `templates.ts` assembles actual renderer modules;
378
+ it must not regain backend, container, infrastructure, or workflow implementation.
379
+ Internal callers use canonical modules rather than routing back through facades.
380
+
381
+ CLI handlers parse syntax and pass typed `ProjectOptions`, `MigrationRequest`,
382
+ `UpdateRequest`, and `UpgradeRequest` to application use cases with
383
+ `ExecutionContext` ports from `application/context.ts`.
384
+ Application code does not call back into CLI parsing. Pure rules receive data or
385
+ narrow context explicitly: `createProjectCatalog`, `buildProjectPlanWithCatalog`,
386
+ and `createManifestReader` do not discover files, run processes, or contact
387
+ providers. `application/project/catalog.ts` composes the release catalog;
388
+ `domain/project/catalog.ts` remains the pure factory.
389
+ Root generator composition accepts `PackagedTemplateAssetContext` and calls
390
+ `createGeneratorContext` in `generators/context.ts`. Pure renderers receive narrow
391
+ resolved subsets and do not import adapters. Only composition loads
392
+ `packagedTemplateAssets` through the canonical `resolvePackageFile` /
393
+ `resolvePackageFileUrl` resolver.
394
+
395
+ Manifest grammar, workload normalization, artifact authority, and governance
396
+ compatibility have separate project-domain modules. Filesystem discovery,
397
+ path safety, file access, and transactions live in distinct adapters.
398
+ `withProjectMutationLock` coordinates writers, while snapshots and path/content
399
+ preconditions still protect reviewed mutations and conflict-preserving rollback.
400
+ Its operation receives a lease with `assertHeld()`; nested same-root mutations
401
+ reuse it, while read-only paths do not acquire a lock.
402
+ Read-only assessment receives read capabilities, never activation executors or
403
+ mutation adapters.
404
+
405
+ When changing a feature, update its narrow rule/renderer first, wire the
406
+ application and CLI boundary, then extend the existing focused cases. Add exact
407
+ artifact lifecycle/provenance identities; do not infer ownership from folders.
408
+ The import-boundary suite checks cycles, domain I/O, application-to-CLI coupling,
409
+ and facade use. Packed smoke covers runtime asset lookup outside this checkout.
410
+
411
+ ## Activation completeness and separate follow-up plan
412
+
413
+ The activation engine is not yet an end-to-end production provisioning engine.
414
+ Of its 26 declared phases, 10 have built-in handler paths, 2 require an injected
415
+ GitHub ruleset adapter that the public CLI does not currently supply, and 14
416
+ fall back to an explicit missing-production-adapter blocker.
417
+
418
+ The missing production phase handlers are `provider-ready`,
419
+ `state-path-selected`, `existing-private-path`, `bootstrap-local`,
420
+ `runner-ready`, `private-backend-proof`, `remote-import-verified`,
421
+ `application-foundation`, `workflow-source-ready`, `dev-proof`,
422
+ `staging-qualified`, `production-rehearsed`, `green-red-proof`, and
423
+ `enforcement-approved`. `rulesets-applied` and `live-readback` have adapter
424
+ contracts but need production wiring.
425
+
426
+ Built-in handler presence does not establish a complete user journey:
427
+ approval envelopes are read from disk but no public approval-persistence
428
+ command is exposed; secure credential enrollment helpers are not wired into
429
+ the command-only setup flow. Current activation inspection now binds real
430
+ baseline/input snapshots, reviewed plans, state references, and evidence bodies.
431
+ Historical placeholder-bound records remain diagnostic-only, never current
432
+ proof. Do not fabricate state, approvals, or evidence to get past capability gaps.
433
+
434
+ Complete this work separately from the read-only assessment feature:
435
+
436
+ 1. Add explicit approval-persistence and secure credential-enrollment entry
437
+ points with narrow consent and selected-agent command contracts.
438
+ 2. Define a separately reviewed reconciliation workflow for historical activation
439
+ identities and placeholder-bound history
440
+ without rewriting immutable evidence or inventing completion.
441
+ 3. Supply production implementations for the missing phase adapters and the
442
+ GitHub ruleset adapter, enforcing resource, permission, cost, and destructive
443
+ bounds at execution.
444
+ 4. Design phase-specific production retry/rollback behavior without blanket
445
+ remote or destructive retries. Explicit local seed/baseline/finalization
446
+ recovery and cooperating-writer locking are already implemented.
447
+ 5. Prove the entire activation and upgrade/reconciliation path with
448
+ end-to-end positive and negative cases, then gated live readback where
449
+ explicitly authorized.
450
+
451
+ This stabilization can ship independently while these fail-closed
452
+ limitations remain documented; it must not advertise them as completed
453
+ production capabilities.
454
+
455
+ ## Broader audit follow-ups
456
+
457
+ The following work remains outside this stabilization, despite the repaired
458
+ runtime configuration, infrastructure generation, and local safety boundaries.
459
+ Rendering, unit tests, package smoke, and OpenTofu syntax validation alone do not
460
+ establish these production capabilities:
461
+
462
+ - **GenAI capability completeness:** all nine catalog entries now say
463
+ `foundation` and describe actual behavior. Retrieval/citations, conversation
464
+ history, tools, prompt-file loading, worker processing, coordination,
465
+ fine-tuning, workflow stages, and incremental streaming remain project work.
466
+ Generic has no pgvector package/extension or application-worker requirement.
467
+ - **Azure deployment completeness:** RAG publisher configuration and queue-scoped
468
+ sender/receiver separation are implemented. Function code packaging/deployment,
469
+ dependency readiness,
470
+ authenticated ingress, private connectivity, environment-specific safeguards,
471
+ and regional service settings still need reviewed implementation and verification
472
+ before treating generated applications as production-ready.
473
+ - **Baseline prerequisites:** keep dependency installation separately
474
+ consented. Python test settings and npm dependency preparation need explicit
475
+ validated recipes; an unprepared baseline must block with a remedy, not pass
476
+ vacuously.
477
+ - **Persistent validation coverage:** preserve framework delivery validation,
478
+ retired-workload rejection, and shared safety coverage, and strengthen deep
479
+ readiness rather than equating liveness with dependency health.
480
+ - **Supply-chain delivery:** configured-registry version parity is not proof
481
+ that its bytes equal the canonical release. Plan canonical artifact integrity
482
+ verification before self-upgrade installation, with an explicit trust model
483
+ for dependencies and approved mirrors. Pin or package mutable runtime/CDN
484
+ assets as part of that work.
485
+ - **Filesystem concurrency:** cooperating-writer locks, guarded transactions,
486
+ mode preservation, and conflict-preserving recovery are implemented. Stronger
487
+ no-follow/fd-relative isolation against noncooperating processes replacing
488
+ ancestors between validation and mutation remains future hardening. Existing preflight/rollback
489
+ safeguards are not a complete adversarial-filesystem isolation mechanism.
490
+
491
+ Treat these as separate reviewed changes with workload/runtime acceptance
492
+ criteria. Do not enlarge a patch into a production platform rewrite or claim
493
+ that unavailable behavior has been implemented.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Liftoff
2
2
 
3
- **Initialize governed GenAI applications, APIs, and Power Apps code apps from one
4
- interactive CLI.** Liftoff combines production-oriented scaffolds with OpenSpec or
3
+ **Initialize governed GenAI applications and APIs from one
4
+ interactive CLI.** Liftoff combines reviewable starter projects with OpenSpec or
5
5
  Spec Kit and integrates GitHub Copilot, Claude Code, or both from the first commit.
6
6
 
7
7
  [![npm version](https://img.shields.io/npm/v/%40msn-control%2Fliftoff?logo=npm)](https://www.npmjs.com/package/@msn-control/liftoff)
@@ -27,12 +27,13 @@ cd my-project
27
27
 
28
28
  `liftoff init` asks for workload, spec workflow, agents, readiness, and plan
29
29
  confirmation before writing local files. Repository governance is enabled by
30
- default as a local deterministic handoff. `/liftoff-setup` then completes,
31
- syncs, and archives the generated bootstrap seed through local baseline checks,
32
- then stops at explicit authority gates for repository publication, credentials,
33
- billed infrastructure or exceptions, final enforcement, destructive cleanup, and
34
- external blockers. No model selection is required for setup; the CLI phase graph,
35
- evidence, and approvals are authoritative.
30
+ default as a local deterministic handoff. For OpenSpec, `/liftoff-setup` completes,
31
+ syncs, and archives the generated bootstrap seed. Spec Kit finalizes its one-time
32
+ bootstrap bundle locally, without an OpenSpec archive or new Git branch.
33
+ No model selection is required for setup; the CLI phase graph, evidence, and
34
+ approvals are authoritative. Missing production executors, credential enrollment,
35
+ and approval-persistence capabilities remain explicit blockers, not completed
36
+ automation.
36
37
 
37
38
  After the first self-upgrade-capable release is installed globally through npm,
38
39
  later CLI releases use `liftoff upgrade --check` followed by `liftoff upgrade`.
@@ -52,35 +53,30 @@ environments, documentation, and infrastructure are project-owned after
52
53
  generation and remain outside every update mode, including `--force`. Use
53
54
  `liftoff update --check --json` for a read-only core-maintenance gate.
54
55
 
55
- Projects generated before `0.10.2` may still display the retired
56
- `/liftoff-repository-governance` command. Review `liftoff update --check`, then
57
- remove that generated alias with:
58
-
59
- ```bash
60
- liftoff upgrade
61
- liftoff update --force
62
- ```
63
-
64
- Reload the coding-agent session afterward so its command index refreshes.
56
+ Older projects may display the retired `/liftoff-repository-governance` alias.
57
+ After upgrading the CLI, review `liftoff update --check`; `liftoff update --force`
58
+ can remove only its exact recorded aliases. Reload the coding-agent session.
65
59
 
66
60
  ![Liftoff terminal showing interactive workload, workflow, multi-agent, readiness, and safe completion steps](docs/assets/liftoff-terminal.svg)
67
61
 
68
- ## One flow, three workloads
62
+ ## One flow, two workloads
69
63
 
70
64
  | Workload | Generated foundation | Deferred until you choose |
71
65
  | --- | --- | --- |
72
- | **GenAI application** | Python, FastAPI, PydanticAI, data and messaging boundaries, optional frontend, Docker, and Azure OpenTofu | Model credentials, cloud sign-in, deployment |
66
+ | **GenAI application** | Python, FastAPI, PydanticAI, data and messaging boundaries, optional frontend, Docker, and Azure OpenTofu | Model credentials, specialized behavior, cloud sign-in, deployment |
73
67
  | **API application** | Python/FastAPI, Node.js/Fastify, or Go/Huma API, database assets, optional frontend, Docker, and Azure OpenTofu | Service configuration, cloud sign-in, deployment |
74
- | **Power Apps code app** | Microsoft's pinned React, Vite, TypeScript, Power Apps SDK starter and project-local CLI | Environment binding, connectors, `power-apps push` |
75
68
 
76
69
  If the GenAI specialization is not yet known, choose **I'm not sure yet -
77
70
  Generic GenAI starter** or use `--pattern generic`. It creates a neutral
78
71
  PydanticAI invocation foundation without assuming RAG, chat, agents, streaming,
79
72
  fine-tuning, or workflows.
80
73
 
81
- Every workload can use **OpenSpec** or **Spec Kit** with **GitHub Copilot**,
82
- **Claude Code**, or both. The optional Microsoft Code Apps agent plugin remains an
83
- explicit, Preview-only choice.
74
+ Both workloads can use **OpenSpec** or **Spec Kit** with **GitHub Copilot**,
75
+ **Claude Code**, or both.
76
+
77
+ Power Apps and its Code Apps plugin integration are retired. Existing Power Apps
78
+ projects receive an unsupported-workload error without changing their files;
79
+ `--force` does not provide a compatibility or conversion path.
84
80
 
85
81
  [Compare workload questions and outputs](docs/workloads.md) |
86
82
  [Choose a spec workflow and agents](docs/spec-workflows-and-agents.md)
@@ -96,6 +92,10 @@ regular-file replacements, asks before overwrite, rejects structural and symlink
96
92
  conflicts, keeps tool/dependency permissions independent, and rolls back handled
97
93
  write failures.
98
94
 
95
+ To assess any Git repository without initializing it, run
96
+ `liftoff governance assess --json`. The default is local-only and read-only.
97
+ Missing or unsupported proof is reported as partial coverage, not success.
98
+
99
99
  [Initialize an existing repository](docs/existing-repositories.md) |
100
100
  [Understand target and consent safety](docs/safety-and-consent.md)
101
101
 
@@ -104,9 +104,9 @@ write failures.
104
104
  | Guide | Use it to |
105
105
  | --- | --- |
106
106
  | [Getting started](docs/getting-started.md) | Install safely and complete the first interactive project |
107
- | [Workloads](docs/workloads.md) | Compare GenAI, API, and Power Apps choices and outputs |
108
- | [Spec workflows and agents](docs/spec-workflows-and-agents.md) | Configure OpenSpec, Spec Kit, Copilot, Claude, and the optional Code Apps plugin |
109
- | [Repository governance](docs/repository-governance.md) | Review `/liftoff-setup`, phase order, authority gates, evidence, credentials, and compatibility |
107
+ | [Workloads](docs/workloads.md) | Compare GenAI/API choices and understand retired-workload handling |
108
+ | [Spec workflows and agents](docs/spec-workflows-and-agents.md) | Configure OpenSpec, Spec Kit, Copilot, and Claude |
109
+ | [Repository governance](docs/repository-governance.md) | Review `/liftoff-setup`, read-only `/liftoff-governance-assess`, authority gates, evidence, and compatibility |
110
110
  | [Existing repositories](docs/existing-repositories.md) | Understand in-place, child-directory, and migration behavior |
111
111
  | [Prerequisites](docs/prerequisites.md) | Review plan-derived runtimes, tools, authentication, and dependency setup |
112
112
  | [Supported stack baseline](docs/supported-stack.md) | Review pinned runtimes, frameworks, dependency locks, images, and refresh policy |
@@ -116,13 +116,13 @@ write failures.
116
116
  | [Generated project structure](docs/project-structure.md) | Locate workload-specific and conditional generated areas |
117
117
  | [Configuration and manifests](docs/configuration-and-manifests.md) | Edit desired state, manifest v7, activation identity, and managed artifacts |
118
118
  | [Azure deployment](docs/azure-deployment.md) | Review generated Azure and OpenTofu contracts for API workloads |
119
- | [Troubleshooting](docs/troubleshooting.md) | Recover from registry, readiness, validation, update, and plugin issues |
119
+ | [Troubleshooting](docs/troubleshooting.md) | Recover from registry, readiness, validation, update, and retired-workload issues |
120
120
  | [Developer guide](DEVELOPER.md) | Maintain version vectors, compatibility maps, release checks, and publishing |
121
121
 
122
122
  ## Contributing and security
123
123
 
124
124
  See [CONTRIBUTING.md](CONTRIBUTING.md) and [DEVELOPER.md](DEVELOPER.md) for build,
125
- test, packaging, starter-refresh, compatibility, and release procedures. Report
125
+ test, packaging, baseline-refresh, compatibility, and release procedures. Report
126
126
  vulnerabilities through the private process in [SECURITY.md](SECURITY.md).
127
127
 
128
128
  Liftoff is licensed under [GPL-3.0-only](LICENSE).