@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
@@ -14,9 +14,17 @@ 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.
21
+
22
+ **Current activation limits:** local bootstrap is implemented, but the CLI does
23
+ not yet wire every production phase executor or expose approval persistence
24
+ and secure credential enrollment through the command-only setup flow. Missing
25
+ capabilities stop with a blocker; they are not completed by assessment or by
26
+ hand-editing evidence. See the [developer follow-up plan](../DEVELOPER.md#activation-completeness-and-separate-follow-up-plan)
27
+ for the remaining activation work.
20
28
 
21
29
  ## Managed files and user-owned state
22
30
 
@@ -31,6 +39,8 @@ Enabled governance adds managed-core files:
31
39
  .liftoff/governance/credential-policy.schema.json
32
40
  .github/prompts/liftoff-setup.prompt.md # Copilot selected
33
41
  .claude/commands/liftoff-setup.md # Claude selected
42
+ .github/prompts/liftoff-governance-assess.prompt.md # Copilot selected
43
+ .claude/commands/liftoff-governance-assess.md # Claude selected
34
44
  ```
35
45
 
36
46
  Older generated setup aliases are retired. Use `liftoff update --force` after
@@ -52,6 +62,126 @@ The complete policy is packaged at
52
62
  Policy version 6 treats numbered policy sections as capability chapters, not
53
63
  execution order. The managed phase graph is the sole execution-order authority.
54
64
 
65
+ ## Read-only governance assessment
66
+
67
+ `/liftoff-governance-assess` is separate from `/liftoff-setup`, which remains the
68
+ primary post-init path. Both OpenSpec and Spec Kit receive only their selected
69
+ agents' assessment integrations when governance is enabled. Initialization never
70
+ runs assessment. It needs no commit, push, activation, or cloud credentials:
71
+
72
+ ```bash
73
+ liftoff governance assess --json
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
+
88
+ The pinned target is the **installed CLI** and its packaged policy, activation
89
+ identity, phase graph, and assessment control catalog, never registry latest.
90
+ The report compares four distinct layers: target, recorded project baseline,
91
+ declared project configuration, and observed enforcement. Each finding includes
92
+ expected and observed values, scope, provenance and capture metadata, impact,
93
+ and ownership-aware advisory remediation. Matching CLI versions or generated
94
+ hashes alone do not prove alignment.
95
+ The project policy version is shown when available. JSON observations may also
96
+ retain optional normalized `facts` alongside evaluator predicate values so a
97
+ predicate result does not hide observed configuration. Raw provider payloads are
98
+ not retained.
99
+
100
+ The default is **local-only with no network access** or registry lookup.
101
+ All assessment invocations, including `--live` and `--help`, skip telemetry and
102
+ disclosure entirely. Local Git reads inspect only repository root, HEAD, and
103
+ origin metadata, never `git status`, which can execute clean filters.
104
+ Applicable live proof stays unobserved. Only an explicit live-read request
105
+ allows the agent wrapper to substitute:
106
+
107
+ ```bash
108
+ liftoff governance assess --live --json
109
+ ```
110
+
111
+ Live mode performs bounded read-only GitHub/Azure metadata access with existing
112
+ permissions and verified repository/environment/resource bindings. Runner
113
+ organization metadata is limited to already-bound assignment IDs. Azure reads
114
+ do not guess a default subscription or search unrelated resources. Neither mode
115
+ enrolls credentials, expands permissions, registers providers, reads state blobs,
116
+ executes project code, runs scanners or infrastructure tools, or changes local
117
+ or remote configuration.
118
+ Azure scope and evidence-backed applicability require a current active-baseline
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
123
+ bindings remain `not-observed`. Do not fabricate or hand-edit activation state,
124
+ baselines, receipts, or evidence to manufacture alignment; use separately
125
+ approved setup or governance work to obtain trustworthy proof.
126
+
127
+ | Finding | Meaning |
128
+ | --- | --- |
129
+ | `aligned` | All required proof layers are available, fresh, and match the target |
130
+ | `outdated` | A recognized older baseline or recorded managed artifact differs from the target |
131
+ | `missing` | Complete authoritative observation proves an applicable requirement absent |
132
+ | `conflicting` | Known settings contradict the target, or declared and observed layers disagree |
133
+ | `approved-exception` | An exact, catalog-permitted, valid, unexpired approval covers the difference |
134
+ | `inapplicable` | Validated workload facts establish that the control does not apply |
135
+ | `not-observed` | Applicability or required proof is unknown, stale, denied, unsupported, or incomplete |
136
+
137
+ Coverage counts unknown applicability, unobserved live proof, and unsupported
138
+ evaluators explicitly. A local workflow declaration is not proof that its check
139
+ is enforced. Denied access, masked 404s, incomplete pagination, and timeouts are
140
+ not proof of absence. Single-maintainer expectations follow the canonical
141
+ zero-required-reviewer policy rather than generic peer-review advice.
142
+ Approved exceptions remain differences; free-form or expired claims cannot
143
+ waive controls or hide coverage gaps.
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
+
160
+ Human and schema-v1 JSON reports share `readOnly: true`, target and project
161
+ identities, findings, diagnostics, provenance, and coverage. Exit **0** means
162
+ fully observed `aligned` or explicitly disabled `not-applicable` governance
163
+ (not an alignment claim). Exit **2** means `partial` coverage or `differences`,
164
+ including approved exceptions. Exit **1** means `error`: invalid/unsafe input
165
+ or an invalid packaged catalog prevents a trustworthy report. Local-only runs
166
+ normally return partial coverage. Exit 2 is advisory, not proof that governance
167
+ is broken or permission to remediate.
168
+
169
+ Reports go to stdout only, never activation state or evidence. Assessment cannot
170
+ complete Phase 0, satisfy an approval gate, or advance any phase. The wrapper
171
+ explains the CLI's classifications without inventing findings or executing
172
+ recommendations. Neither installing the integration nor running it activates,
173
+ updates, upgrades, or migrates the project.
174
+
175
+ Older supported inventories without assessment entries remain readable. Use
176
+ `liftoff update --check`, then normal guarded `liftoff update` to install the
177
+ selected integrations. Unowned conflicting destinations remain unowned even with
178
+ `--force`; only already-managed modifications follow reviewed force rules.
179
+ Unsupported activation tuples can still receive safe identity and coverage
180
+ diagnostics, but no migration is available without an explicit supported mapping.
181
+ Force cannot bypass compatibility or overwrite project-owned configuration.
182
+ A future governance upgrade must reobserve facts and obtain its own reviewed
183
+ plan and approvals; an assessment report supplies no mutation authority.
184
+
55
185
  ## Canonical phase graph
56
186
 
57
187
  The activation graph is packaged as `.liftoff/governance/phase-graph.json` and
@@ -94,22 +224,46 @@ remote import can satisfy `remote-ready`.
94
224
 
95
225
  ## Bootstrap seed and local baseline
96
226
 
97
- Before commit/push or Phase 0, setup completes, syncs, and archives the generated
98
- `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:
99
241
 
100
242
  - `liftoff validate`
101
243
  - backend tests from the generated README
102
244
  - frontend build when a frontend exists
103
245
  - `docker compose config -q` when Compose exists
104
- - `tofu fmt -check -recursive`
105
- - `tofu init -backend=false`
106
- - `tofu validate`
107
- - 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
108
250
 
109
251
  Absent components are recorded as inapplicable. The baseline never starts
110
252
  containers, runs a live `tofu plan` or `tofu apply`, deploys, mutates GitHub, or
111
- requires cloud credentials. A failed check keeps the seed active; rerun
112
- `/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.
259
+
260
+ If the seed was already archived before setup began, it stays archived.
261
+ Setup still runs the entire applicable local baseline, but strict OpenSpec
262
+ validation targets the synchronized spec set with `openspec validate --all
263
+ --strict`, not the inactive bootstrap change name. The expected main capability
264
+ must exist with a concrete Purpose. A failed archived baseline can be retried
265
+ after repair: `resume` reports readiness without rewriting stored state, and
266
+ `apply-next --json --execute` reruns the checks before saving verified evidence.
113
267
 
114
268
  ## Questions and approval envelopes
115
269
 
@@ -128,6 +282,10 @@ types, destinations, permissions, cost ceiling, destructive scope, policy
128
282
  exceptions, expiry, and baseline SHA. Retries inside the same envelope do not
129
283
  ask again; expanded resources, destinations, permissions, cost, exceptions, or
130
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.
131
289
 
132
290
  ## Credentials for runner preflight
133
291
 
@@ -135,7 +293,8 @@ When `GITHUB_TOKEN` cannot read required hosted-runner metadata, setup first
135
293
  prefers an existing verified selected-repository GitHub App installation with the
136
294
  required read permissions. Liftoff does not install or broaden an App.
137
295
 
138
- 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:
139
298
 
140
299
  | Field | Value |
141
300
  | --- | --- |
@@ -148,10 +307,12 @@ If no approved App is available, setup guides one fine-grained PAT with exactly:
148
307
  | Writes | none |
149
308
  | Workflow/job allowlist | `.github/workflows/bootstrap-import-preflight.yml` job `bootstrap-import-preflight`; `.github/workflows/private-dast-preflight.yml` job `private-dast-preflight` |
150
309
 
151
- Enter the value only through Liftoff's masked input. Never paste or show the
152
- value in chat, argv, command arguments, logs, evidence, files, or screenshots. A value
153
- that appears in any of those places is compromised and must be manually revoked
154
- 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.
155
316
 
156
317
  The recorded credential policy is payload-free: it stores auth kind, display
157
318
  name, secret name, owner, repository, expiry, rotation lead, permissions,
@@ -162,9 +323,19 @@ secret value.
162
323
 
163
324
  Task checkboxes are a projection of phase state, not authority. Evidence
164
325
  documents carry repository identity, activation version vector, graph hash, phase
165
- contract digest, input digest, baseline SHA, phase ID, timestamp, producer, and
166
- result. Setup and `liftoff governance verify` reject missing, stale,
167
- 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.
168
339
 
169
340
  There may be only one active governance source of truth. An unfinished bootstrap
170
341
  seed blocks Phase 0. Exactly one compatible active governance change is resumed.
@@ -172,15 +343,18 @@ Multiple overlapping changes require a schema-valid supersession or archive
172
343
  record before any phase advances.
173
344
 
174
345
  Managed updates install new policy, graph, schema, compatibility metadata, and
175
- setup integrations without touching user-owned state. Forced update can remove
346
+ setup and assessment integrations without touching user-owned state. Forced update can remove
176
347
  exact retired generated setup-alias entries from older manifests. When a policy,
177
348
  activation-contract, schema, or graph-hash change affects active work, status
178
- reports `reconciliation-required`, invalidates only affected descendants, and
179
- waits for explicit acknowledgement of the current compatible identity and exact
180
- 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.
181
353
 
182
354
  ## Private staging and bootstrap retention
183
355
 
356
+ These are policy requirements for separately implemented production adapters,
357
+ not a claim that this CLI can provision the complete platform.
184
358
  Private Staging DAST uses an ephemeral GitHub-hosted larger runner with Azure
185
359
  VNet injection only when genuinely applicable. Phase 0 discovers repository,
186
360
  subscription, authority, billing, network, DNS, cost, teardown, and capability
@@ -219,7 +393,16 @@ evidence-ready, approved phase. Here, approved means its approval status is
219
393
  fail before project discovery or mutation. Verification reports consistency
220
394
  separately from setup completion: a valid not-started or in-progress state may
221
395
  have `ok: true` and `verificationStatus: "consistent"` while `complete` remains
222
- false.
396
+ false. An intact bootstrap seed awaiting baseline verification or archive is
397
+ also incomplete rather than inconsistent. Missing or overlapping seeds, or an
398
+ active seed contradicting recorded archive completion, still fail verification.
399
+
400
+ Apply-next reports `selectedPhase` for the attempted transition and
401
+ `executedPhase` only when execution succeeds (otherwise `null`). Its legacy
402
+ `nextReadyPhase` field is not post-transition readiness; use the subsequent
403
+ status or verify response for the next phase. OpenSpec failures include bounded
404
+ diagnostics with terminal controls removed; credential-shaped output is
405
+ withheld rather than copied into state or command output.
223
406
 
224
407
  ## Existing projects
225
408
 
@@ -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
 
package/docs/telemetry.md CHANGED
@@ -7,7 +7,7 @@ the CLI to work. It creates no persistent installation or session identifier.
7
7
 
8
8
  ## Event contract
9
9
 
10
- Each recognized command can send at most one event after it finishes:
10
+ Each telemetry-eligible command can send at most one event after it finishes:
11
11
 
12
12
  ```json
13
13
  {
@@ -21,8 +21,14 @@ Each recognized command can send at most one event after it finishes:
21
21
 
22
22
  `outcome` is `success` for exit code zero and `failure` for every nonzero exit
23
23
  code. It is an exit-status class, not an error diagnosis. Help requests are
24
- recorded as `help`, and rejected input that never resolves to a recognized
25
- command is not recorded.
24
+ recorded as `help`, except assessment help as described below. Rejected input
25
+ that never resolves to a recognized command is not recorded.
26
+
27
+ `liftoff governance assess` skips telemetry and disclosure entirely, including
28
+ `--live` and `--help`. It sends no telemetry event, displays no disclosure notice,
29
+ and writes no disclosure state, regardless of the default telemetry setting.
30
+ Opting into live assessment authorizes only its scoped read-only observations,
31
+ not telemetry delivery.
26
32
 
27
33
  `upgrade` is recorded only as the aggregate command value. Check/apply mode,
28
34
  target or configured-registry details, installation origin, paths, npm output,