@msn-control/liftoff 0.11.3 → 0.12.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 (332) hide show
  1. package/DEVELOPER.md +26 -35
  2. package/README.md +18 -18
  3. package/assets/governance/single-maintainer-gitflow/activation-v2-graph.json +1583 -0
  4. package/dist/adapters/credentials/github-enrollment.d.ts +51 -0
  5. package/dist/adapters/credentials/github-enrollment.js +226 -0
  6. package/dist/adapters/credentials/github-enrollment.js.map +1 -0
  7. package/dist/adapters/credentials/protected-input.d.ts +7 -0
  8. package/dist/adapters/credentials/protected-input.js +68 -0
  9. package/dist/adapters/credentials/protected-input.js.map +1 -0
  10. package/dist/adapters/filesystem/executables.d.ts +2 -0
  11. package/dist/adapters/filesystem/executables.js +70 -0
  12. package/dist/adapters/filesystem/executables.js.map +1 -0
  13. package/dist/adapters/filesystem/update-previews.d.ts +9 -0
  14. package/dist/adapters/filesystem/update-previews.js +44 -0
  15. package/dist/adapters/filesystem/update-previews.js.map +1 -1
  16. package/dist/adapters/filesystem/workstation-attempts.d.ts +13 -0
  17. package/dist/adapters/filesystem/workstation-attempts.js +78 -0
  18. package/dist/adapters/filesystem/workstation-attempts.js.map +1 -0
  19. package/dist/adapters/github/activation-rest.d.ts +40 -0
  20. package/dist/adapters/github/activation-rest.js +272 -0
  21. package/dist/adapters/github/activation-rest.js.map +1 -0
  22. package/dist/adapters/state/azure-blob.d.ts +43 -0
  23. package/dist/adapters/state/azure-blob.js +335 -0
  24. package/dist/adapters/state/azure-blob.js.map +1 -0
  25. package/dist/adapters/state/darwin-capabilities.d.ts +33 -0
  26. package/dist/adapters/state/darwin-capabilities.js +146 -0
  27. package/dist/adapters/state/darwin-capabilities.js.map +1 -0
  28. package/dist/adapters/state/darwin-native-host.d.ts +32 -0
  29. package/dist/adapters/state/darwin-native-host.js +294 -0
  30. package/dist/adapters/state/darwin-native-host.js.map +1 -0
  31. package/dist/adapters/state/darwin-profile.d.ts +6 -0
  32. package/dist/adapters/state/darwin-profile.js +56 -0
  33. package/dist/adapters/state/darwin-profile.js.map +1 -0
  34. package/dist/adapters/state/darwin-system-program.d.ts +1 -0
  35. package/dist/adapters/state/darwin-system-program.js +94 -0
  36. package/dist/adapters/state/darwin-system-program.js.map +1 -0
  37. package/dist/adapters/state/local-qualification.d.ts +16 -0
  38. package/dist/adapters/state/local-qualification.js +299 -0
  39. package/dist/adapters/state/local-qualification.js.map +1 -0
  40. package/dist/adapters/state/local.d.ts +25 -0
  41. package/dist/adapters/state/local.js +145 -0
  42. package/dist/adapters/state/local.js.map +1 -0
  43. package/dist/adapters/state/native-command.d.ts +21 -0
  44. package/dist/adapters/state/native-command.js +82 -0
  45. package/dist/adapters/state/native-command.js.map +1 -0
  46. package/dist/adapters/state/native-files.d.ts +2 -0
  47. package/dist/adapters/state/native-files.js +47 -0
  48. package/dist/adapters/state/native-files.js.map +1 -0
  49. package/dist/adapters/state/native-system.d.ts +38 -0
  50. package/dist/adapters/state/native-system.js +86 -0
  51. package/dist/adapters/state/native-system.js.map +1 -0
  52. package/dist/adapters/state/opentofu.d.ts +35 -0
  53. package/dist/adapters/state/opentofu.js +350 -0
  54. package/dist/adapters/state/opentofu.js.map +1 -0
  55. package/dist/adapters/state/owned-process.d.ts +43 -0
  56. package/dist/adapters/state/owned-process.js +252 -0
  57. package/dist/adapters/state/owned-process.js.map +1 -0
  58. package/dist/adapters/state/posix-lock-program.d.ts +1 -0
  59. package/dist/adapters/state/posix-lock-program.js +185 -0
  60. package/dist/adapters/state/posix-lock-program.js.map +1 -0
  61. package/dist/adapters/state/posix-native-lock.d.ts +15 -0
  62. package/dist/adapters/state/posix-native-lock.js +145 -0
  63. package/dist/adapters/state/posix-native-lock.js.map +1 -0
  64. package/dist/adapters/state/protected-workspace.d.ts +57 -0
  65. package/dist/adapters/state/protected-workspace.js +412 -0
  66. package/dist/adapters/state/protected-workspace.js.map +1 -0
  67. package/dist/application/context.d.ts +3 -0
  68. package/dist/application/diagnose/doctor.d.ts +5 -0
  69. package/dist/application/diagnose/doctor.js +21 -5
  70. package/dist/application/diagnose/doctor.js.map +1 -1
  71. package/dist/application/diagnose/generated-project.js +2 -7
  72. package/dist/application/diagnose/generated-project.js.map +1 -1
  73. package/dist/application/initialize/fixture.js +8 -1
  74. package/dist/application/initialize/fixture.js.map +1 -1
  75. package/dist/application/initialize/use-case.js +70 -36
  76. package/dist/application/initialize/use-case.js.map +1 -1
  77. package/dist/application/project/manifest.js +5 -4
  78. package/dist/application/project/manifest.js.map +1 -1
  79. package/dist/application/state-migration/execution.d.ts +32 -0
  80. package/dist/application/state-migration/execution.js +440 -0
  81. package/dist/application/state-migration/execution.js.map +1 -0
  82. package/dist/application/state-migration/index.d.ts +22 -0
  83. package/dist/application/state-migration/index.js +17 -0
  84. package/dist/application/state-migration/index.js.map +1 -0
  85. package/dist/application/state-migration/lifecycle.d.ts +3 -0
  86. package/dist/application/state-migration/lifecycle.js +149 -0
  87. package/dist/application/state-migration/lifecycle.js.map +1 -0
  88. package/dist/application/state-migration/planning.d.ts +7 -0
  89. package/dist/application/state-migration/planning.js +150 -0
  90. package/dist/application/state-migration/planning.js.map +1 -0
  91. package/dist/application/state-migration/recovery.d.ts +5 -0
  92. package/dist/application/state-migration/recovery.js +145 -0
  93. package/dist/application/state-migration/recovery.js.map +1 -0
  94. package/dist/application/state-migration/runtime.d.ts +32 -0
  95. package/dist/application/state-migration/runtime.js +188 -0
  96. package/dist/application/state-migration/runtime.js.map +1 -0
  97. package/dist/application/state-migration/service.d.ts +2 -0
  98. package/dist/application/state-migration/service.js +20 -0
  99. package/dist/application/state-migration/service.js.map +1 -0
  100. package/dist/application/update/inspection.d.ts +16 -2
  101. package/dist/application/update/inspection.js +76 -23
  102. package/dist/application/update/inspection.js.map +1 -1
  103. package/dist/application/update/migration-runtime.js +24 -11
  104. package/dist/application/update/migration-runtime.js.map +1 -1
  105. package/dist/application/update/output.d.ts +2 -0
  106. package/dist/application/update/output.js +11 -1
  107. package/dist/application/update/output.js.map +1 -1
  108. package/dist/application/update/revalidation-plan.d.ts +1 -0
  109. package/dist/application/update/revalidation-plan.js +25 -12
  110. package/dist/application/update/revalidation-plan.js.map +1 -1
  111. package/dist/application/update/revalidation.d.ts +4 -1
  112. package/dist/application/update/revalidation.js +62 -21
  113. package/dist/application/update/revalidation.js.map +1 -1
  114. package/dist/application/update/use-case.js +25 -17
  115. package/dist/application/update/use-case.js.map +1 -1
  116. package/dist/application/upgrade/use-case.js +3 -0
  117. package/dist/application/upgrade/use-case.js.map +1 -1
  118. package/dist/cli/args/definitions.js +11 -3
  119. package/dist/cli/args/definitions.js.map +1 -1
  120. package/dist/cli/args/parser.js +29 -3
  121. package/dist/cli/args/parser.js.map +1 -1
  122. package/dist/domain/governance/activation/approvals.d.ts +264 -7
  123. package/dist/domain/governance/activation/approvals.js +166 -23
  124. package/dist/domain/governance/activation/approvals.js.map +1 -1
  125. package/dist/domain/governance/activation/capabilities.js +5 -2
  126. package/dist/domain/governance/activation/capabilities.js.map +1 -1
  127. package/dist/domain/governance/activation/evidence.d.ts +2 -1
  128. package/dist/domain/governance/activation/evidence.js +64 -11
  129. package/dist/domain/governance/activation/evidence.js.map +1 -1
  130. package/dist/domain/governance/activation/graph.d.ts +11 -384
  131. package/dist/domain/governance/activation/graph.js +424 -379
  132. package/dist/domain/governance/activation/graph.js.map +1 -1
  133. package/dist/domain/governance/activation/inputs.d.ts +3 -1
  134. package/dist/domain/governance/activation/inputs.js +47 -6
  135. package/dist/domain/governance/activation/inputs.js.map +1 -1
  136. package/dist/domain/governance/activation/operations.d.ts +4 -1
  137. package/dist/domain/governance/activation/operations.js +110 -22
  138. package/dist/domain/governance/activation/operations.js.map +1 -1
  139. package/dist/domain/governance/activation/readiness.d.ts +10 -0
  140. package/dist/domain/governance/activation/readiness.js +77 -38
  141. package/dist/domain/governance/activation/readiness.js.map +1 -1
  142. package/dist/domain/governance/activation/types.d.ts +151 -9
  143. package/dist/domain/governance/activation/types.js +23 -1
  144. package/dist/domain/governance/activation/types.js.map +1 -1
  145. package/dist/domain/governance/activation/validators.d.ts +4 -1
  146. package/dist/domain/governance/activation/validators.js +419 -26
  147. package/dist/domain/governance/activation/validators.js.map +1 -1
  148. package/dist/domain/governance/policy/identity.d.ts +55 -13
  149. package/dist/domain/governance/policy/identity.js +28 -8
  150. package/dist/domain/governance/policy/identity.js.map +1 -1
  151. package/dist/domain/project/artifact-lifecycle.d.ts +2 -1
  152. package/dist/domain/project/artifact-lifecycle.js +7 -1
  153. package/dist/domain/project/artifact-lifecycle.js.map +1 -1
  154. package/dist/domain/project/catalog.d.ts +50 -1
  155. package/dist/domain/project/catalog.js +104 -4
  156. package/dist/domain/project/catalog.js.map +1 -1
  157. package/dist/domain/project/contracts.d.ts +9 -1
  158. package/dist/domain/project/infrastructure-layout.d.ts +1 -1
  159. package/dist/domain/project/infrastructure-layout.js +3 -1
  160. package/dist/domain/project/infrastructure-layout.js.map +1 -1
  161. package/dist/domain/project/manifest/governance.d.ts +1 -1
  162. package/dist/domain/project/manifest/governance.js +9 -10
  163. package/dist/domain/project/manifest/governance.js.map +1 -1
  164. package/dist/domain/project/planning.js +4 -5
  165. package/dist/domain/project/planning.js.map +1 -1
  166. package/dist/domain/repair/stateful-bounded.d.ts +1 -0
  167. package/dist/domain/repair/stateful-bounded.js +37 -0
  168. package/dist/domain/repair/stateful-bounded.js.map +1 -0
  169. package/dist/domain/repair/stateful-invariants.d.ts +28 -0
  170. package/dist/domain/repair/stateful-invariants.js +278 -0
  171. package/dist/domain/repair/stateful-invariants.js.map +1 -0
  172. package/dist/domain/repair/stateful.d.ts +690 -0
  173. package/dist/domain/repair/stateful.js +26 -0
  174. package/dist/domain/repair/stateful.js.map +1 -0
  175. package/dist/domain/workstation/constraints.d.ts +1 -0
  176. package/dist/domain/workstation/constraints.js.map +1 -1
  177. package/dist/domain/workstation/contracts.d.ts +42 -0
  178. package/dist/domain/workstation/contracts.js +2 -0
  179. package/dist/domain/workstation/contracts.js.map +1 -0
  180. package/dist/domain/workstation/executables.d.ts +19 -0
  181. package/dist/domain/workstation/executables.js +68 -0
  182. package/dist/domain/workstation/executables.js.map +1 -0
  183. package/dist/domain/workstation/versions.d.ts +8 -0
  184. package/dist/domain/workstation/versions.js +145 -0
  185. package/dist/domain/workstation/versions.js.map +1 -0
  186. package/dist/framework-adapters.d.ts +2 -0
  187. package/dist/framework-adapters.js +148 -22
  188. package/dist/framework-adapters.js.map +1 -1
  189. package/dist/framework-validation.d.ts +6 -0
  190. package/dist/framework-validation.js +89 -24
  191. package/dist/framework-validation.js.map +1 -1
  192. package/dist/generators/common/base.js +57 -17
  193. package/dist/generators/common/base.js.map +1 -1
  194. package/dist/governance-activation/activation-state.js +39 -7
  195. package/dist/governance-activation/activation-state.js.map +1 -1
  196. package/dist/governance-activation/authority-records.d.ts +4 -0
  197. package/dist/governance-activation/authority-records.js +24 -0
  198. package/dist/governance-activation/authority-records.js.map +1 -0
  199. package/dist/governance-activation/commands.d.ts +9 -1
  200. package/dist/governance-activation/commands.js +392 -97
  201. package/dist/governance-activation/commands.js.map +1 -1
  202. package/dist/governance-activation/compatibility.d.ts +11 -8
  203. package/dist/governance-activation/compatibility.js +37 -23
  204. package/dist/governance-activation/compatibility.js.map +1 -1
  205. package/dist/governance-activation/doctor.js +40 -16
  206. package/dist/governance-activation/doctor.js.map +1 -1
  207. package/dist/governance-activation/github-config.d.ts +17 -0
  208. package/dist/governance-activation/github-config.js +88 -0
  209. package/dist/governance-activation/github-config.js.map +1 -0
  210. package/dist/governance-activation/github-discovery.d.ts +18 -0
  211. package/dist/governance-activation/github-discovery.js +229 -0
  212. package/dist/governance-activation/github-discovery.js.map +1 -0
  213. package/dist/governance-activation/github-ports.d.ts +12 -0
  214. package/dist/governance-activation/github-ports.js +4 -0
  215. package/dist/governance-activation/github-ports.js.map +1 -0
  216. package/dist/governance-activation/github-publication.d.ts +3 -0
  217. package/dist/governance-activation/github-publication.js +190 -0
  218. package/dist/governance-activation/github-publication.js.map +1 -0
  219. package/dist/governance-activation/historical-common.d.ts +98 -0
  220. package/dist/governance-activation/historical-common.js +269 -0
  221. package/dist/governance-activation/historical-common.js.map +1 -0
  222. package/dist/governance-activation/historical-credential-policy.d.ts +3 -0
  223. package/dist/governance-activation/historical-credential-policy.js +91 -0
  224. package/dist/governance-activation/historical-credential-policy.js.map +1 -0
  225. package/dist/governance-activation/historical-inputs.d.ts +6 -0
  226. package/dist/governance-activation/historical-inputs.js +57 -0
  227. package/dist/governance-activation/historical-inputs.js.map +1 -0
  228. package/dist/governance-activation/historical-safety.d.ts +9 -0
  229. package/dist/governance-activation/historical-safety.js +102 -0
  230. package/dist/governance-activation/historical-safety.js.map +1 -0
  231. package/dist/governance-activation/historical-source-metadata.d.ts +31 -0
  232. package/dist/governance-activation/historical-source-metadata.js +55 -0
  233. package/dist/governance-activation/historical-source-metadata.js.map +1 -0
  234. package/dist/governance-activation/historical-state.d.ts +12 -50
  235. package/dist/governance-activation/historical-state.js +195 -308
  236. package/dist/governance-activation/historical-state.js.map +1 -1
  237. package/dist/governance-activation/historical-v1-auxiliary.d.ts +1 -0
  238. package/dist/governance-activation/historical-v1-auxiliary.js +43 -0
  239. package/dist/governance-activation/historical-v1-auxiliary.js.map +1 -0
  240. package/dist/governance-activation/historical-v1-phase-contracts.d.ts +31 -0
  241. package/dist/governance-activation/historical-v1-phase-contracts.js +46 -0
  242. package/dist/governance-activation/historical-v1-phase-contracts.js.map +1 -0
  243. package/dist/governance-activation/historical-v2.d.ts +53 -0
  244. package/dist/governance-activation/historical-v2.js +313 -0
  245. package/dist/governance-activation/historical-v2.js.map +1 -0
  246. package/dist/governance-activation/history-contracts.d.ts +21 -12
  247. package/dist/governance-activation/history-contracts.js +99 -27
  248. package/dist/governance-activation/history-contracts.js.map +1 -1
  249. package/dist/governance-activation/inputs.d.ts +8 -2
  250. package/dist/governance-activation/inputs.js +41 -6
  251. package/dist/governance-activation/inputs.js.map +1 -1
  252. package/dist/governance-activation/migration-history.d.ts +43 -5
  253. package/dist/governance-activation/migration-history.js +231 -50
  254. package/dist/governance-activation/migration-history.js.map +1 -1
  255. package/dist/governance-activation/migration.d.ts +7 -4
  256. package/dist/governance-activation/migration.js +53 -252
  257. package/dist/governance-activation/migration.js.map +1 -1
  258. package/dist/governance-activation/phase-azure.d.ts +3 -0
  259. package/dist/governance-activation/phase-azure.js +205 -0
  260. package/dist/governance-activation/phase-azure.js.map +1 -0
  261. package/dist/governance-activation/phase-bootstrap-state.js +3 -0
  262. package/dist/governance-activation/phase-bootstrap-state.js.map +1 -1
  263. package/dist/governance-activation/phase-github.d.ts +3 -0
  264. package/dist/governance-activation/phase-github.js +192 -0
  265. package/dist/governance-activation/phase-github.js.map +1 -0
  266. package/dist/governance-activation/phase-governance.js +8 -2
  267. package/dist/governance-activation/phase-governance.js.map +1 -1
  268. package/dist/governance-activation/public-plans.d.ts +36 -0
  269. package/dist/governance-activation/public-plans.js +100 -0
  270. package/dist/governance-activation/public-plans.js.map +1 -0
  271. package/dist/governance-activation/read-only.d.ts +3 -1
  272. package/dist/governance-activation/read-only.js +7 -3
  273. package/dist/governance-activation/read-only.js.map +1 -1
  274. package/dist/governance-activation/reconciliation.js +10 -0
  275. package/dist/governance-activation/reconciliation.js.map +1 -1
  276. package/dist/governance-activation/seed-lifecycle.js +14 -25
  277. package/dist/governance-activation/seed-lifecycle.js.map +1 -1
  278. package/dist/governance-activation/source-of-truth.d.ts +21 -5
  279. package/dist/governance-activation/source-of-truth.js +102 -13
  280. package/dist/governance-activation/source-of-truth.js.map +1 -1
  281. package/dist/governance-activation/task-projection.d.ts +4 -1
  282. package/dist/governance-activation/task-projection.js +32 -3
  283. package/dist/governance-activation/task-projection.js.map +1 -1
  284. package/dist/governance-activation/task-writes.d.ts +42 -0
  285. package/dist/governance-activation/task-writes.js +250 -0
  286. package/dist/governance-activation/task-writes.js.map +1 -0
  287. package/dist/governance-activation/transition-files.d.ts +12 -0
  288. package/dist/governance-activation/transition-files.js +109 -0
  289. package/dist/governance-activation/transition-files.js.map +1 -0
  290. package/dist/governance-activation/transition-planning.d.ts +3 -1
  291. package/dist/governance-activation/transition-planning.js +158 -20
  292. package/dist/governance-activation/transition-planning.js.map +1 -1
  293. package/dist/governance-activation/transition-ports.d.ts +31 -3
  294. package/dist/governance-activation/transition-records.d.ts +11 -1
  295. package/dist/governance-activation/transition-records.js +52 -6
  296. package/dist/governance-activation/transition-records.js.map +1 -1
  297. package/dist/governance-activation/transitions.d.ts +5 -0
  298. package/dist/governance-activation/transitions.js +271 -37
  299. package/dist/governance-activation/transitions.js.map +1 -1
  300. package/dist/governance-assessment/engine.js +22 -15
  301. package/dist/governance-assessment/engine.js.map +1 -1
  302. package/dist/governance-assessment/project.d.ts +2 -0
  303. package/dist/governance-assessment/project.js +2 -1
  304. package/dist/governance-assessment/project.js.map +1 -1
  305. package/dist/interactive.d.ts +0 -1
  306. package/dist/interactive.js +3 -22
  307. package/dist/interactive.js.map +1 -1
  308. package/dist/openspec-profile.d.ts +2 -1
  309. package/dist/openspec-profile.js +11 -41
  310. package/dist/openspec-profile.js.map +1 -1
  311. package/dist/repository-governance.d.ts +10 -5
  312. package/dist/repository-governance.js +178 -92
  313. package/dist/repository-governance.js.map +1 -1
  314. package/dist/self-upgrade.d.ts +8 -2
  315. package/dist/self-upgrade.js +180 -47
  316. package/dist/self-upgrade.js.map +1 -1
  317. package/dist/telemetry/contract.d.ts +1 -1
  318. package/dist/telemetry/contract.js +3 -0
  319. package/dist/telemetry/contract.js.map +1 -1
  320. package/dist/workstation-catalog.d.ts +13 -1
  321. package/dist/workstation-catalog.js +122 -0
  322. package/dist/workstation-catalog.js.map +1 -1
  323. package/dist/workstation.d.ts +69 -14
  324. package/dist/workstation.js +600 -215
  325. package/dist/workstation.js.map +1 -1
  326. package/docs/cli-reference.md +69 -22
  327. package/docs/configuration-and-manifests.md +9 -8
  328. package/docs/prerequisites.md +93 -18
  329. package/docs/repository-governance.md +68 -40
  330. package/docs/spec-workflows-and-agents.md +132 -13
  331. package/docs/troubleshooting.md +32 -2
  332. package/package.json +1 -1
@@ -14,17 +14,20 @@ cd my-project
14
14
  /liftoff-setup
15
15
  ```
16
16
 
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
17
+ The native setup integration uses the deterministic Liftoff governance engine to
18
+ complete the workflow-specific local bootstrap and reviewed repairs, then
19
+ coordinates separately authorized publication, cloud deployment, qualification,
20
+ and enforcement. Codex invokes its native setup skill through the skill picker
21
+ or `$skill-name`; it does not receive a fabricated slash-command adapter.
22
+ The user-owned activation state records
20
23
  execution, not an agent's claim of completion.
21
24
 
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.
25
+ **Independent milestones:** local readiness does not imply publication or
26
+ deployment. Explicit local-only use and declining a later approval remain
27
+ supported. Activation requires real source-matching provider evidence;
28
+ unsupported account capabilities, unverified private access, and incomplete
29
+ observations remain explicit blockers. Retained-state disposal is separate
30
+ lifecycle work, not a 30-day delay before initial activation can complete.
28
31
 
29
32
  ## Managed files and user-owned state
30
33
 
@@ -39,8 +42,10 @@ Enabled governance adds managed-core files:
39
42
  .liftoff/governance/credential-policy.schema.json
40
43
  .github/prompts/liftoff-setup.prompt.md # Copilot selected
41
44
  .claude/commands/liftoff-setup.md # Claude selected
45
+ .agents/skills/liftoff-setup/SKILL.md # Codex selected
42
46
  .github/prompts/liftoff-governance-assess.prompt.md # Copilot selected
43
47
  .claude/commands/liftoff-governance-assess.md # Claude selected
48
+ .agents/skills/liftoff-governance-assess/SKILL.md # Codex selected
44
49
  ```
45
50
 
46
51
  Older generated setup aliases are retired. Use `liftoff update --force` after
@@ -167,7 +172,7 @@ normally return partial coverage. Exit 2 is advisory, not proof that governance
167
172
  is broken or permission to remediate.
168
173
 
169
174
  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
175
+ complete read-only Phase 0, satisfy an approval gate, or advance any phase. The wrapper
171
176
  explains the CLI's classifications without inventing findings or executing
172
177
  recommendations. Neither installing the integration nor running it activates,
173
178
  updates, upgrades, or migrates the project.
@@ -196,6 +201,7 @@ seed-valid
196
201
  -> pushed
197
202
  -> phase-0-complete
198
203
  -> activation-approved
204
+ -> bootstrap-workflow-source-ready
199
205
  -> credential-ready
200
206
  -> provider-ready
201
207
  -> state-path-selected
@@ -204,8 +210,10 @@ seed-valid
204
210
  -> private-backend-proof |
205
211
  -> remote-import-verified --|
206
212
  -> remote-ready
207
- -> application-foundation
213
+ -> application-prerequisites-ready
208
214
  -> workflow-source-ready
215
+ -> application-artifact-ready
216
+ -> application-foundation
209
217
  -> dev-proof
210
218
  -> staging-qualified
211
219
  -> production-rehearsed
@@ -213,7 +221,7 @@ seed-valid
213
221
  -> enforcement-approved
214
222
  -> rulesets-applied
215
223
  -> live-readback
216
- -> bootstrap-state-disposed
224
+ ... separate lifecycle: bootstrap-state-disposed when due
217
225
  ```
218
226
 
219
227
  If policy prose, generated tasks, or an agent response orders a transition
@@ -254,8 +262,11 @@ requires cloud credentials. A failed local check remains unfinished; only
254
262
  explicit execution retries it after repair. Read-only status, resume, and
255
263
  verification do not advance tasks or rerun checks. Unchanged current proof can
256
264
  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.
265
+ Recorded legacy-shared or unknown infrastructure layouts require a reviewed
266
+ repair plan even if new-looking directories exist. Layout assessment reports
267
+ migration-required and no commands are executed until approved. Use the setup integration's
268
+ supported repair action; moving folders or editing manifest provenance is not
269
+ a supported repair and does not prove that deployed state is safe to migrate.
259
270
 
260
271
  If the seed was already archived before setup began, it stays archived.
261
272
  Setup still runs the entire applicable local baseline, but strict OpenSpec
@@ -284,8 +295,11 @@ ask again; expanded resources, destinations, permissions, cost, exceptions, or
284
295
  destructive effects require a new approval.
285
296
  Its time window must satisfy `approvedAt <= now < expiresAt` and have a valid
286
297
  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.
298
+ execution. `governance plan` can preview dependency-ready work before approval.
299
+ `governance approve --plan <fingerprint>` persists only the exact reviewed
300
+ authority, with a separate project-bound user-local issue record. Imported
301
+ project JSON is not permission. Final enforcement can bind both its approval
302
+ and subsequent exact ruleset operations without granting other phase authority.
289
303
 
290
304
  ## Credentials for runner preflight
291
305
 
@@ -293,8 +307,7 @@ When `GITHUB_TOKEN` cannot read required hosted-runner metadata, setup first
293
307
  prefers an existing verified selected-repository GitHub App installation with the
294
308
  required read permissions. Liftoff does not install or broaden an App.
295
309
 
296
- If no approved App is available, the normative policy describes this
297
- fine-grained PAT fallback, not an implemented enrollment command:
310
+ If no approved App is available, the narrowly scoped fallback is:
298
311
 
299
312
  | Field | Value |
300
313
  | --- | --- |
@@ -307,9 +320,11 @@ fine-grained PAT fallback, not an implemented enrollment command:
307
320
  | Writes | none |
308
321
  | Workflow/job allowlist | `.github/workflows/bootstrap-import-preflight.yml` job `bootstrap-import-preflight`; `.github/workflows/private-dast-preflight.yml` job `private-dast-preflight` |
309
322
 
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.
323
+ After reviewing and approving the credential-ready plan, use
324
+ `liftoff governance credential-enroll --plan <fingerprint>`. The default input
325
+ channel is a private TTY; `--protected-stdin` explicitly selects a protected
326
+ automation channel. The published allowlisted workflow must prove actual
327
+ credential use; the secret name or a policy file alone cannot establish readiness.
313
328
  Never paste or show the value in chat, argv, command arguments,
314
329
  logs, evidence, files, or screenshots. A disclosed value is
315
330
  compromised and must be revoked and rotated through its owner-controlled system.
@@ -323,7 +338,8 @@ secret value.
323
338
 
324
339
  Task checkboxes are a projection of phase state, not authority. Evidence
325
340
  documents carry repository identity, activation version vector, graph hash, phase
326
- contract digest, real input/baseline digests, body commitment, phase ID, timestamp,
341
+ contract digest, scope, real input/baseline digests, reviewed before/after
342
+ file and Git bindings, body commitment, phase ID, timestamp,
327
343
  producer, and result. The local execution anchor is separate from a verified
328
344
  remote repository binding; Phase 0 does not replace the anchor beneath earlier
329
345
  local receipts. Digests prove consistency, not an independent signature or
@@ -335,7 +351,11 @@ binds the full saved plan, including clocks. `bodyDigest` covers the payload and
335
351
  normalized readbacks. Consumers use the validated selected payload, not another
336
352
  raw record that happens to reuse an ID. Repository publication binds the actual
337
353
  reviewed push destination; Phase 0 cannot invalidate earlier local/publication
338
- receipts by replacing the local anchor.
354
+ receipts by replacing the local anchor. Scoped projections keep later approved
355
+ workflow publication from invalidating unrelated local application checks,
356
+ while unplanned source, destination, and output changes still invalidate the
357
+ affected proof. External operation handles and pre-write checkpoints prevent
358
+ an interrupted workflow from being dispatched twice.
339
359
 
340
360
  There may be only one active governance source of truth. An unfinished bootstrap
341
361
  seed blocks Phase 0. Exactly one compatible active governance change is resumed.
@@ -348,21 +368,21 @@ Forced update can remove
348
368
  exact retired generated setup-alias entries from older manifests. When a policy,
349
369
  activation-contract, schema, or graph-hash change affects active work, status
350
370
  reports `reconciliation-required` and identifies affected descendants. Historical
351
- activation-v1 state and evidence remain byte-preserved and non-executable.
371
+ activation-v1/v2 state and evidence remain byte-preserved and non-executable.
352
372
  `liftoff update --check` can preview an exact supported successor migration;
353
- explicitly approved apply preserves original history and creates linked v2 state.
373
+ explicitly approved apply preserves original history and creates linked v3 state.
354
374
  Fresh local revalidation stops at unsupported or independently authorized work.
355
- Failure after commit leaves v2 blocked/resumable, not reset to v1. Never
375
+ Failure after commit leaves v3 blocked/resumable, not reset to older authority. Never
356
376
  acknowledge an identity by editing JSON or treat old approvals as current consent.
357
377
 
358
378
  ## Private staging and bootstrap retention
359
379
 
360
- These are policy requirements for separately implemented production adapters,
361
- not a claim that this CLI can provision the complete platform.
362
380
  Private Staging DAST uses an ephemeral GitHub-hosted larger runner with Azure
363
381
  VNet injection only when genuinely applicable. Phase 0 discovers repository,
364
382
  subscription, authority, billing, network, DNS, cost, teardown, and capability
365
- facts read-only. If DAST is inapplicable, no runner networking is provisioned.
383
+ facts read-only. DAST inapplicability does not bypass provider registration or
384
+ the private execution path required for state operations. Existing suitable
385
+ private paths are reused rather than replaced with public access.
366
386
 
367
387
  When a private ZRS backend cannot be reached and no existing private management
368
388
  path is approved, the bounded `bootstrap-local` branch may create only the
@@ -382,29 +402,37 @@ teardown.
382
402
  The generated setup integrations call only strict, project-aware CLI commands:
383
403
 
384
404
  ```bash
385
- liftoff governance status --json
386
- liftoff governance plan --json
387
- liftoff governance apply-next --json
388
- liftoff governance apply-next --json --execute
389
- liftoff governance resume --json
390
- liftoff governance verify --json
405
+ liftoff governance status --scope local --json
406
+ liftoff governance plan --scope local --json
407
+ liftoff governance apply-next --scope local --json --execute
408
+ liftoff governance verify --scope local --json
409
+ liftoff governance plan --scope activation --inputs public-inputs.json --json
410
+ liftoff governance approve --scope activation --plan <fingerprint> --json
411
+ liftoff governance apply-next --scope activation --plan <fingerprint> --execute --json
412
+ liftoff governance resume --scope activation --json
413
+ liftoff governance status --scope lifecycle --json
391
414
  ```
392
415
 
393
- `status`, `plan`, and `verify` are read-only. `apply-next` previews mutations
416
+ Direct commands default to activation scope. `status`, `resume`, and `verify`
417
+ are read-only; `plan` saves a disclosed preview outside the repository without
418
+ changing project/provider data. `apply-next` previews mutations
394
419
  unless `--execute` is supplied, and even then executes at most one graph-ready,
395
420
  evidence-ready, approved phase. Here, approved means its approval status is
396
421
  `not-required` or `reused`. Unknown subcommands, flags, or extra positionals
397
422
  fail before project discovery or mutation. Verification reports consistency
398
- separately from setup completion: a valid not-started or in-progress state may
423
+ separately from selected-scope completion: a valid not-started or in-progress state may
399
424
  have `ok: true` and `verificationStatus: "consistent"` while `complete` remains
400
425
  false. An intact bootstrap seed awaiting baseline verification or archive is
401
426
  also incomplete rather than inconsistent. Missing or overlapping seeds, or an
402
427
  active seed contradicting recorded archive completion, still fail verification.
403
428
 
404
429
  Apply-next reports `selectedPhase` for the attempted transition and
405
- `executedPhase` only when execution succeeds (otherwise `null`). Its legacy
406
- `nextReadyPhase` field is not post-transition readiness; use the subsequent
407
- status or verify response for the next phase. OpenSpec failures include bounded
430
+ `executedPhase` separately from recomputed post-transition `nextReadyPhase`.
431
+ Schema-2 results also identify `nextPlannablePhase`, separate milestone progress,
432
+ and structured registered `nextActions`. A pending external operation is not
433
+ completed evidence. For failed or interrupted work, obtain a fresh
434
+ `governance plan --recover-phase <phase>` and explicitly execute its reviewed
435
+ `governance recover --plan <fingerprint> --execute` action. OpenSpec failures include bounded
408
436
  diagnostics with terminal controls removed; credential-shaped output is
409
437
  withheld rather than copied into state or command output.
410
438
 
@@ -9,8 +9,8 @@ Liftoff workload.
9
9
 
10
10
  OpenSpec 1.11.0 organizes proposed behavior changes as reviewable artifacts
11
11
  before implementation. Liftoff runs that pinned official initializer in
12
- temporary staging, passes every selected coding agent in stable order, and
13
- requires the complete custom profile with both skills and commands:
12
+ isolated staging, passes every selected coding agent in stable order, and
13
+ requires the complete custom profile with native-surface-aware `both` delivery:
14
14
 
15
15
  ```text
16
16
  propose, explore, new, continue, apply, update,
@@ -26,6 +26,9 @@ the machine-wide change.
26
26
 
27
27
  Generated projects contain `openspec/` plus all 12 official workflow skills and
28
28
  commands for each selected agent surface that supports them.
29
+ Copilot and Claude receive all 12 skills and all 12 commands. Codex receives
30
+ all 12 skills under `.agents/skills/openspec-<workflow>/SKILL.md`; it has no
31
+ OpenSpec command adapter, so `both` does **not** require deprecated Codex prompts.
29
32
 
30
33
  ### Spec Kit
31
34
 
@@ -35,6 +38,11 @@ integration, and records the default separately from the full agent set.
35
38
 
36
39
  Generated projects contain `.specify/`, `specs/`, and the selected agent
37
40
  integration markers.
41
+ The pinned native skill inventory is `analyze`, `clarify`, `constitution`,
42
+ `implement`, `converge`, `plan`, `checklist`, `specify`, `tasks`, and
43
+ `taskstoissues`. Codex uses `.agents/skills/speckit-<name>/SKILL.md`, with skills
44
+ enabled by default and safe secondary installation. Copilot is installed with
45
+ the official `--integration-options=--skills` option; Claude also uses skills.
38
46
 
39
47
  New projects also receive `specs/000-liftoff-bootstrap/spec.md`, `plan.md`, and
40
48
  `tasks.md`. These are explicit one-time, project-owned `seed` artifacts, separate
@@ -60,8 +68,12 @@ blocker. Adopting it requires separate reviewed project work; ordinary update,
60
68
  force, and assessment do not create seeds or infer earlier completion.
61
69
 
62
70
  Liftoff does not hand-write framework-owned core or integration output. It
63
- executes the tested official initializer, confines its writes to allowed roots,
64
- and validates the declared markers before merging.
71
+ executes the tested official initializer and validates its complete declared
72
+ native inventory before merging. New `.agents` output is accepted only at
73
+ explicitly inventoried paths. Spec Kit's optional project-local
74
+ `.codex/config.toml` event configuration is distinct from Codex's user-global
75
+ account configuration. Custom neighboring skills and unrelated configuration
76
+ remain outside the write inventory; unsafe links and case collisions block it.
65
77
 
66
78
  ## Select coding agents
67
79
 
@@ -69,7 +81,12 @@ Liftoff supports:
69
81
 
70
82
  - GitHub Copilot.
71
83
  - Claude Code.
72
- - Both agents together.
84
+ - OpenAI Codex.
85
+ - Any nonempty combination of the three agents (all seven subsets).
86
+
87
+ The canonical IDs and order are `github-copilot`, `claude`, `codex`. The CLI
88
+ also accepts `copilot` for GitHub Copilot, and normalizes aliases and duplicates
89
+ without adding unselected agents.
73
90
 
74
91
  On a real TTY, use the arrow keys to move, Space to mark or unmark an agent,
75
92
  and Enter to confirm. At least one agent is required.
@@ -78,24 +95,106 @@ When standard input is redirected, the deterministic fallback accepts a
78
95
  comma-separated value such as:
79
96
 
80
97
  ```text
81
- copilot,claude
98
+ copilot,claude,codex
82
99
  ```
83
100
 
84
101
  Noninteractive commands use:
85
102
 
86
103
  ```bash
87
- --agents copilot,claude
104
+ --agents copilot,claude,codex
88
105
  ```
89
106
 
90
- Spec Kit additionally requires `--default-agent copilot` or
91
- `--default-agent claude` when both are selected. OpenSpec does not record a
92
- default agent.
107
+ Spec Kit additionally requires exactly one selected default when multiple agents
108
+ are selected: `--default-agent copilot`, `--default-agent claude`, or
109
+ `--default-agent codex`. Secondary installation never changes that default.
110
+ For example, `--spec spec-kit --agents copilot,codex --default-agent codex`.
111
+ OpenSpec does not record a default agent. `--agents codex` works alone with
112
+ either framework and does not require Copilot or Claude.
113
+
114
+ ## Native setup and assessment
115
+
116
+ For governed projects, initialization is followed by the selected agent's native
117
+ setup entry point:
118
+
119
+ | Agent | Setup | Read-only assessment |
120
+ | --- | --- | --- |
121
+ | GitHub Copilot | `/liftoff-setup` | `/liftoff-governance-assess` |
122
+ | Claude Code | `/liftoff-setup` | `/liftoff-governance-assess` |
123
+ | OpenAI Codex | `$liftoff-setup` | `$liftoff-governance-assess` |
124
+
125
+ In Codex, use `$<skill-name>` or the `/skills` picker. Its managed files are
126
+ `.agents/skills/liftoff-setup/SKILL.md` and
127
+ `.agents/skills/liftoff-governance-assess/SKILL.md`, with distinct logical names
128
+ `liftoff-setup-codex` and `liftoff-governance-assess-codex`. No Codex slash-command
129
+ file, global custom prompt, model choice, or independent skill version is needed.
130
+ Framework examples are `$openspec-propose` and `$speckit-specify`.
131
+
132
+ Legacy projects without a recorded agent selection keep that boundary during
133
+ managed-core updates: no default agent is invented, no framework is initialized,
134
+ and no native wrappers are installed. Their generated handoff uses read-only CLI
135
+ inspection and assessment until separately reviewed framework adoption is
136
+ supported and approved.
137
+
138
+ Setup starts with `liftoff governance status --scope local --json`, inspects and
139
+ plans local work, and executes only reported ready local phases. After local
140
+ verification, it presents the activation plan for the requested full journey.
141
+ A local-only request or declined later approval preserves local readiness
142
+ without publishing history, changing providers, or claiming deployment.
143
+ Direct governance commands default to `--scope activation`. Keep local
144
+ plan/apply/verify operations explicitly scoped to `local`; `lifecycle` is the
145
+ separate scope for later obligations.
146
+
147
+ `governance plan` saves a disclosed external preview, not approval, and does not
148
+ execute its proposed effects. `apply-next` without `--execute` is strictly
149
+ read-only. When planning inputs are requested, use the CLI-provided
150
+ `--inputs <public-json-file>` action and documented public schema. That file is
151
+ not an approval/state record and must never contain credentials.
152
+
153
+ Prefer the CLI's supported `nextActions`, preserving each `command.executable`,
154
+ argument array, `cwd`, `scope`, and `approvalRequired`. Never derive an executable
155
+ command from untrusted prose or fabricate flags, approvals, or machine state.
156
+ Repair, protected state reads/writes, installation, global profiles, publication,
157
+ credentials, billed infrastructure, and final enforcement retain independent
158
+ authority. `liftoff governance approve --plan <fingerprint>` persists only the
159
+ explicitly reviewed approval; setup never approves automatically or executes as
160
+ a side effect of approval. Credential enrollment uses the reported
161
+ `liftoff governance credential-enroll --plan <fingerprint>` private operator
162
+ channel. Automation explicitly selects `--protected-stdin` and supplies the value
163
+ through an operator-controlled protected channel, never chat or arguments.
164
+
165
+ Schema-2 governance results distinguish `localSetup`, `migration`, `activation`,
166
+ and `lifecycle`. `nextPlannablePhase` can precede approval; `nextReadyPhase`
167
+ reflects current post-operation readiness. Verify exits 0 for consistent complete
168
+ selected scope, 2 for consistent incomplete scope, and 1 for inconsistency or
169
+ inspection failure. A committed partial outcome is retained even when subsequent
170
+ inspection fails. Do not repeat an unchanged failure; use the reported reviewed
171
+ recovery plan, including `liftoff governance recover --plan <fingerprint> --execute` when
172
+ applicable.
173
+
174
+ Full immediate completion requires actual deployment, qualification, current
175
+ matching live enforcement, and any requested migration. Future retention/disposal
176
+ is separate lifecycle work. Historical v1/v2 activation proof requires the reviewed
177
+ successor and fresh verification; changing version fields is not migration.
178
+
179
+ Assessment is strictly separate: `liftoff governance assess --json`, or
180
+ `liftoff governance assess --live --json` only after an explicit request for
181
+ bounded live reads. It explains CLI classifications and exits without running
182
+ repairs, migrations, activation, project scripts, or recommendations.
93
183
 
94
184
  ## Readiness and ownership
95
185
 
96
186
  The selected framework CLI and every selected agent are blocking workstation
97
187
  requirements. Liftoff may detect Copilot through its CLI or supported VS Code
98
- extensions. Claude Code is checked through version and health probes.
188
+ extensions. Claude Code is checked through version and health probes; Codex uses
189
+ its registered `codex` executable. Compatible official stable and preview coding
190
+ agents satisfy readiness, with preview notices. A newer available release alone
191
+ does not block setup, and runtime/framework constraints are not relaxed.
192
+
193
+ Framework execution uses isolated `HOME`, `USERPROFILE`, XDG configuration/data/
194
+ cache paths, and `CODEX_HOME`. Only the approved public OpenSpec profile fields
195
+ needed for rendering are seeded. Real global prompts, account settings, and
196
+ unrelated user files are not copied or cleaned. Selecting Codex, approving a
197
+ project plan, or passing `--yes` is not global-profile consent.
99
198
 
100
199
  Framework files remain owned by the official initializer. Liftoff validates
101
200
  them but excludes framework-owned output from durable artifact hashes so a
@@ -113,11 +212,31 @@ Plain `liftoff update` intentionally does not regenerate these framework-owned
113
212
  files.
114
213
 
115
214
  Repository-governance launchers are separate managed-core Liftoff files at the exact
116
- Copilot prompt and Claude command paths documented in
215
+ Copilot prompt, Claude command, and Codex skill paths documented here and in
117
216
  [repository governance](repository-governance.md). They reference one canonical
118
217
  policy and context rather than duplicating framework-owned content. Later
119
218
  governance changes are distinct from the exact bootstrap seed. The setup kernel
120
- does not invent an active change, approval, or missing production executor.
219
+ does not invent an active change, approval, or execution proof.
220
+
221
+ ### Add an agent to an existing project
222
+
223
+ Do not reinitialize the application or edit its manifest to claim an integration:
224
+
225
+ ```bash
226
+ liftoff repair --check --add-agents codex --json
227
+ ```
228
+
229
+ Review the exact project-bound plan, then approve its displayed fingerprint.
230
+ For Spec Kit, add `--default-agent codex` to the preview only when you explicitly
231
+ want that default change. Existing agents/defaults, custom skills, and shared
232
+ templates remain preserved outside the reviewed scope. Adding a recorded agent
233
+ with missing native markers repairs those markers rather than becoming a false
234
+ no-op. Agent removal and workflow switching are not additive repairs.
235
+
236
+ Tool/dependency installation and global OpenSpec profile configuration remain
237
+ separate permissions during repair. A stateful infrastructure blocker is not
238
+ automatically added to an agent-only write plan. Ordinary `liftoff update`
239
+ continues to maintain only its declared managed-core/identity-migration scope.
121
240
 
122
241
  Install the exact selected framework release with its supported package manager:
123
242
 
@@ -26,12 +26,42 @@ npm install -g @msn-control/liftoff@latest
26
26
 
27
27
  ## CLI upgrade is blocked by installation origin
28
28
 
29
- Automatic replacement supports only the canonical package at npm's effective
30
- global package root. A local dependency, `npx` cache copy, linked checkout, or
29
+ Automatic replacement supports the canonical package at npm's effective
30
+ global package root or an independently verified standard Homebrew prefix on
31
+ macOS. A local dependency, `npx` cache copy, linked checkout, or
31
32
  another package-manager installation is intentionally refused. Use the manual
32
33
  global npm command shown by Liftoff; do not try to make upgrade replace a
33
34
  different installation.
34
35
 
36
+ ### Homebrew Node and npm report a different prefix
37
+
38
+ A Homebrew Node installation can report a versioned Cellar global root while
39
+ Liftoff remains installed under `/opt/homebrew/lib/node_modules` (Apple Silicon)
40
+ or `/usr/local/lib/node_modules` (Intel). This is an installation-prefix mismatch,
41
+ not a project-directory or PATH-refresh problem.
42
+
43
+ The patched upgrader verifies the running package, matching Homebrew Node/npm
44
+ layout, and global launcher before targeting the existing prefix. Registry
45
+ checks, installation, and replacement verification retain that target. It
46
+ neither installs another copy in the Cellar nor edits `.npmrc`. If prefix-specific
47
+ registry settings differ, `registry_prefix_mismatch` blocks the operation rather
48
+ than silently bypassing a managed mirror.
49
+
50
+ Older binaries, including 0.11.3 and 0.12.0, still need the one-time workaround.
51
+ Only after confirming that `liftoff` resolves under `/opt/homebrew/lib/node_modules`,
52
+ run:
53
+
54
+ ```bash
55
+ npm_config_prefix=/opt/homebrew liftoff upgrade --check
56
+ npm_config_prefix=/opt/homebrew liftoff upgrade
57
+ liftoff --version
58
+ ```
59
+
60
+ For a verified Intel Homebrew installation use `/usr/local` instead. The
61
+ environment assignment applies only to that invocation. Do not use it to force
62
+ replacement of a local, linked, or unrelated installation. Keep your approved
63
+ registry policy; a blocked mirror still requires its owner's intervention.
64
+
35
65
  ## CLI upgrade is blocked by a stale managed registry
36
66
 
37
67
  Canonical npm defines the exact stable target, but Liftoff installs through the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@msn-control/liftoff",
3
- "version": "0.11.3",
3
+ "version": "0.12.1",
4
4
  "description": "Interactive CLI for governed GenAI applications and APIs.",
5
5
  "type": "module",
6
6
  "license": "GPL-3.0-only",