@msn-control/liftoff 0.9.9 → 0.10.0

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 (106) hide show
  1. package/DEVELOPER.md +142 -0
  2. package/README.md +26 -18
  3. package/assets/governance/single-maintainer-gitflow/policy.md +13 -11
  4. package/dist/args.js +21 -0
  5. package/dist/args.js.map +1 -1
  6. package/dist/artifact-lifecycle.d.ts +1 -1
  7. package/dist/artifact-lifecycle.js +5 -0
  8. package/dist/artifact-lifecycle.js.map +1 -1
  9. package/dist/commands.js +355 -13
  10. package/dist/commands.js.map +1 -1
  11. package/dist/file-system.js +100 -13
  12. package/dist/file-system.js.map +1 -1
  13. package/dist/governance-activation/activation-state.d.ts +32 -0
  14. package/dist/governance-activation/activation-state.js +165 -0
  15. package/dist/governance-activation/activation-state.js.map +1 -0
  16. package/dist/governance-activation/approvals.d.ts +188 -0
  17. package/dist/governance-activation/approvals.js +508 -0
  18. package/dist/governance-activation/approvals.js.map +1 -0
  19. package/dist/governance-activation/canonical-json.d.ts +3 -0
  20. package/dist/governance-activation/canonical-json.js +36 -0
  21. package/dist/governance-activation/canonical-json.js.map +1 -0
  22. package/dist/governance-activation/commands.d.ts +10 -0
  23. package/dist/governance-activation/commands.js +1023 -0
  24. package/dist/governance-activation/commands.js.map +1 -0
  25. package/dist/governance-activation/compatibility.d.ts +68 -0
  26. package/dist/governance-activation/compatibility.js +447 -0
  27. package/dist/governance-activation/compatibility.js.map +1 -0
  28. package/dist/governance-activation/credentials.d.ts +160 -0
  29. package/dist/governance-activation/credentials.js +403 -0
  30. package/dist/governance-activation/credentials.js.map +1 -0
  31. package/dist/governance-activation/doctor.d.ts +10 -0
  32. package/dist/governance-activation/doctor.js +379 -0
  33. package/dist/governance-activation/doctor.js.map +1 -0
  34. package/dist/governance-activation/evidence.d.ts +49 -0
  35. package/dist/governance-activation/evidence.js +246 -0
  36. package/dist/governance-activation/evidence.js.map +1 -0
  37. package/dist/governance-activation/graph.d.ts +397 -0
  38. package/dist/governance-activation/graph.js +441 -0
  39. package/dist/governance-activation/graph.js.map +1 -0
  40. package/dist/governance-activation/identity.d.ts +35 -0
  41. package/dist/governance-activation/identity.js +89 -0
  42. package/dist/governance-activation/identity.js.map +1 -0
  43. package/dist/governance-activation/index.d.ts +18 -0
  44. package/dist/governance-activation/index.js +19 -0
  45. package/dist/governance-activation/index.js.map +1 -0
  46. package/dist/governance-activation/migration.d.ts +44 -0
  47. package/dist/governance-activation/migration.js +268 -0
  48. package/dist/governance-activation/migration.js.map +1 -0
  49. package/dist/governance-activation/readiness.d.ts +23 -0
  50. package/dist/governance-activation/readiness.js +158 -0
  51. package/dist/governance-activation/readiness.js.map +1 -0
  52. package/dist/governance-activation/reconciliation.d.ts +11 -0
  53. package/dist/governance-activation/reconciliation.js +58 -0
  54. package/dist/governance-activation/reconciliation.js.map +1 -0
  55. package/dist/governance-activation/release-integrity.d.ts +11 -0
  56. package/dist/governance-activation/release-integrity.js +49 -0
  57. package/dist/governance-activation/release-integrity.js.map +1 -0
  58. package/dist/governance-activation/seed-lifecycle.d.ts +116 -0
  59. package/dist/governance-activation/seed-lifecycle.js +609 -0
  60. package/dist/governance-activation/seed-lifecycle.js.map +1 -0
  61. package/dist/governance-activation/source-of-truth.d.ts +164 -0
  62. package/dist/governance-activation/source-of-truth.js +986 -0
  63. package/dist/governance-activation/source-of-truth.js.map +1 -0
  64. package/dist/governance-activation/task-projection.d.ts +21 -0
  65. package/dist/governance-activation/task-projection.js +75 -0
  66. package/dist/governance-activation/task-projection.js.map +1 -0
  67. package/dist/governance-activation/transitions.d.ts +163 -0
  68. package/dist/governance-activation/transitions.js +2128 -0
  69. package/dist/governance-activation/transitions.js.map +1 -0
  70. package/dist/governance-activation/type-contract.d.ts +1 -0
  71. package/dist/governance-activation/type-contract.js +27 -0
  72. package/dist/governance-activation/type-contract.js.map +1 -0
  73. package/dist/governance-activation/types.d.ts +390 -0
  74. package/dist/governance-activation/types.js +108 -0
  75. package/dist/governance-activation/types.js.map +1 -0
  76. package/dist/governance-activation/validators.d.ts +17 -0
  77. package/dist/governance-activation/validators.js +1305 -0
  78. package/dist/governance-activation/validators.js.map +1 -0
  79. package/dist/init-filesystem.js +5 -1
  80. package/dist/init-filesystem.js.map +1 -1
  81. package/dist/planner.js +3 -3
  82. package/dist/planner.js.map +1 -1
  83. package/dist/power-apps-templates.js +14 -1
  84. package/dist/power-apps-templates.js.map +1 -1
  85. package/dist/process-runner.d.ts +3 -0
  86. package/dist/process-runner.js +68 -10
  87. package/dist/process-runner.js.map +1 -1
  88. package/dist/repository-governance.d.ts +13 -3
  89. package/dist/repository-governance.js +357 -51
  90. package/dist/repository-governance.js.map +1 -1
  91. package/dist/telemetry/contract.d.ts +1 -1
  92. package/dist/telemetry/contract.js +6 -0
  93. package/dist/telemetry/contract.js.map +1 -1
  94. package/dist/templates.js +320 -25
  95. package/dist/templates.js.map +1 -1
  96. package/dist/types.d.ts +14 -6
  97. package/docs/cli-reference.md +60 -12
  98. package/docs/configuration-and-manifests.md +40 -16
  99. package/docs/existing-repositories.md +22 -11
  100. package/docs/getting-started.md +46 -10
  101. package/docs/project-structure.md +34 -5
  102. package/docs/repository-governance.md +200 -245
  103. package/docs/safety-and-consent.md +24 -2
  104. package/docs/troubleshooting.md +55 -4
  105. package/docs/workloads.md +1 -1
  106. package/package.json +2 -1
@@ -14,6 +14,7 @@ dependencies. No one permission implies another.
14
14
  | `--configure-openspec-profile` | The displayed global OpenSpec workflow, delivery, and profile changes | Tools, project files, dependencies, or Copilot cloud opt-in |
15
15
  | `--copilot-cloud` / `--no-copilot-cloud` | Enable or disable OpenSpec's project-local hosted Copilot agent files | Global profile changes, tools, dependencies, or unrelated project writes |
16
16
  | `--install-dependencies` | Locked project-local dependency commands after a successful merge | Machine tools, global profile changes, project decisions, or overwrites |
17
+ | `liftoff governance apply-next --execute` | Execute at most one reviewed, graph-ready, evidence-ready governance transition | Earlier or later phases, broader resources, credentials outside the envelope, live plan/apply during baseline, force-push, reset, rebase, or unknown-file deletion |
17
18
 
18
19
  Interactive sessions ask separately at the point each permission is needed.
19
20
 
@@ -21,8 +22,9 @@ Selecting repository governance or passing `--yes` authorizes only deterministic
21
22
  local handoff files. It never authorizes agent execution, Git mutation, GitHub
22
23
  APIs, Azure or other cloud resources, rulesets, security configuration,
23
24
  deployment, monitoring, file replacement, machine tools, or project
24
- dependencies. Live activation begins only after commit, push, read-only Phase 0,
25
- and explicit plan approval.
25
+ dependencies. `/liftoff-setup` first completes and archives the local bootstrap
26
+ seed, then stops at authority gates. Live activation begins only after explicit
27
+ commit/push approval, read-only Phase 0, and activation-plan approval.
26
28
 
27
29
  An approved downstream local-state bootstrap remains encrypted, gitignored, and
28
30
  single-writer. It is never transferred through GitHub artifacts or secrets,
@@ -94,6 +96,14 @@ create-only provisioning path and applies those writes, managed-core moves or
94
96
  deletes, and the manifest as one rollback-capable transaction. Schema upgrades
95
97
  are committed only after the other mutations succeed.
96
98
 
99
+ Managed update may install manifest v7, policy v6, activation-contract v1,
100
+ phase graph, compatibility metadata, credential-policy schema, setup
101
+ integrations, and compatibility aliases. It preserves user-owned activation
102
+ state, approvals, immutable evidence, credential policies, active OpenSpec
103
+ changes, and bootstrap retention/disposal records. If the current activation
104
+ identity is future, unsupported, or graph-incompatible, update and setup block
105
+ with a remedy instead of downgrading or rewriting state.
106
+
97
107
  If automatic rollback itself cannot safely restore a path because another
98
108
  process changed it, Liftoff reports the incomplete rollback rather than
99
109
  overwriting unknown bytes.
@@ -181,3 +191,15 @@ Liftoff does not:
181
191
  - Run Microsoft's broad Code Apps marketplace installer.
182
192
 
183
193
  Those actions require their own review, authentication, and consent.
194
+
195
+ Governance runner-preflight credentials have a stricter contract. Setup first
196
+ uses an existing verified selected-repository GitHub App installation when it
197
+ has the required read permissions. Otherwise it guides one fine-grained PAT:
198
+ display name `<repo>-runner-preflight-read`, repository secret
199
+ `RUNNER_CONFIGURATION_READ_TOKEN`, 30-day lifetime, current repository only,
200
+ repository metadata read, organization hosted-runner read and
201
+ network-configuration read, no writes, and only the recorded workflow/job
202
+ allowlist. The value must be entered through masked input only. Never paste or
203
+ show it in chat, argv, command arguments, logs, evidence, generated files, or
204
+ screenshots. If it appears there, treat it as compromised and manually revoke and
205
+ rotate it before continuing.
@@ -158,7 +158,7 @@ failed update, but Liftoff keeps no backup after success.
158
158
 
159
159
  For a new governance policy or launcher conflict, review that exact local file
160
160
  before considering `liftoff update --force`; do not delete it or activate remote
161
- governance merely to make update pass. The schema-v6 manifest records
161
+ governance merely to make update pass. The manifest-v7 record stores
162
162
  `handoff-partial` and no ownership entry for each preserved unrecorded conflict.
163
163
  Run `liftoff update --check` to inspect the remaining paths. Once each path is
164
164
  absent or matches the current artifact, plain update promotes the handoff to
@@ -184,9 +184,13 @@ the existing project files and infrastructure are project-owned.
184
184
  ## Governance handoff exists but nothing is enforced
185
185
 
186
186
  That is the expected initial state. The manifest records `handoff-generated`,
187
- not active enforcement. Commit and push the repository, run the selected-agent
188
- launcher, review its read-only Phase 0 report, and explicitly approve the plan
189
- before the agent creates a governance change.
187
+ not active enforcement. Run `/liftoff-setup` from a selected agent. It first
188
+ completes, syncs, and archives the generated bootstrap seed with local baseline
189
+ checks, then stops at explicit authority gates for commit/push, credentials,
190
+ billed infrastructure or exceptions, final enforcement, destructive cleanup, or
191
+ external blockers. Rerun `/liftoff-setup` to resume; verified phases are not
192
+ repeated. `/liftoff-repository-governance` is only a compatibility alias for the
193
+ same engine and state.
190
194
 
191
195
  Missing licenses, runner-provisioning authority, a private Staging assignment or
192
196
  reachable network path, alert routes, parallel deployment, or sufficient canary
@@ -224,6 +228,52 @@ Do not use `AzurePlatformDNS` in an Allow NSG rule. The special tag is deny-only
224
228
  for disabling default platform DNS. Omit the rule when platform DNS is enabled,
225
229
  or allow TCP and UDP 53 to exact custom resolver addresses.
226
230
 
231
+ ## Governance doctor reports a blocked state
232
+
233
+ `liftoff doctor` and `liftoff governance status --json` use precise states:
234
+
235
+ | State | Remedy |
236
+ | --- | --- |
237
+ | `seed-incomplete` | Run `/liftoff-setup`; fix failing local baseline checks and rerun until the seed is archived. |
238
+ | `phase-blocked` | Read the blocking phase, evidence requirement, and approval gate; satisfy the named prerequisite rather than skipping it. |
239
+ | `evidence-stale` | Regenerate evidence from the current baseline, activation identity, graph hash, and phase input digest. |
240
+ | `credential-expiring` | Rotate before the recorded lead time using the same App or PAT policy. |
241
+ | `reconciliation-required` | Review the policy/contract/schema/graph change and acknowledge the current compatible identity before applying another phase. |
242
+ | `identity-incompatible` | Upgrade to the reported minimum Liftoff version or provide an explicit supported migration/import mapping. |
243
+ | `enforcement-incomplete` | Prove exact required contexts green and deliberately red, then approve final enforcement before ruleset mutation. |
244
+ | `disposal-pending` | After day 30, approve destructive disposal of retained bootstrap state and rerun setup. |
245
+
246
+ Do not hand-edit task checkboxes to clear these states. Tasks are projections of
247
+ validated phase evidence.
248
+
249
+ ## Runner-preflight credential setup is blocked
250
+
251
+ Setup first prefers an existing verified selected-repository GitHub App with the
252
+ required read permissions. If none is available, create one fine-grained PAT with
253
+ exactly these fields: display name `<repo>-runner-preflight-read`, secret
254
+ `RUNNER_CONFIGURATION_READ_TOKEN`, 30-day lifetime, current repository only,
255
+ repository metadata read, organization hosted-runner read and
256
+ network-configuration read, no writes, and the recorded workflow/job allowlist
257
+ (`.github/workflows/bootstrap-import-preflight.yml` job
258
+ `bootstrap-import-preflight`; `.github/workflows/private-dast-preflight.yml` job
259
+ `private-dast-preflight` unless the generated policy records a narrower
260
+ applicable set).
261
+
262
+ Enter the value only through the masked input. Never paste or show the value in
263
+ chat, argv, command arguments, logs, evidence, files, or screenshots. A leaked value is
264
+ compromised; manually revoke it, create a replacement, update the repository
265
+ secret through setup, and rerun `liftoff governance verify --json`.
266
+
267
+ ## Governance identity or manifest migration is blocked
268
+
269
+ Current Liftoff reads manifest v2-v7 and writes v7. It resumes only explicit
270
+ compatible tuples: policy version 6, activation contract 1, schema-v1 activation
271
+ artifacts, and a recognized phase-graph hash. Future versions, individually
272
+ known but unsupported combinations, unknown graph hashes, or unversioned ad hoc
273
+ state block without rewriting files. Use the exact upgrade, import-mapping, or
274
+ reconciliation remedy printed by status or update; do not downgrade the
275
+ manifest or copy evidence between identities.
276
+
227
277
  Do not run an older Liftoff release to reverse a completed baseline migration.
228
278
  Restore the affected generated files and `liftoff.manifest.json` through version
229
279
  control, then reinstall from the restored locks.
@@ -295,6 +345,7 @@ The old command has no compatibility alias.
295
345
  ```bash
296
346
  liftoff help
297
347
  liftoff init --help
348
+ liftoff governance --help
298
349
  liftoff update --help
299
350
  ```
300
351
 
package/docs/workloads.md CHANGED
@@ -104,7 +104,7 @@ environment, API frontend, Docker, or OpenTofu selection.
104
104
  - React, Vite, TypeScript, Tailwind, and the Power Apps SDK and Vite plugin.
105
105
  - Locked root `package.json` and `package-lock.json`.
106
106
  - Project-local `power-apps` CLI supplied by the generated dependency graph.
107
- - `liftoff.config.json`, schema-v6 `liftoff.manifest.json`, starter provenance,
107
+ - `liftoff.config.json`, manifest-v7 `liftoff.manifest.json`, starter provenance,
108
108
  and third-party attribution.
109
109
  - Official OpenSpec or Spec Kit output and every selected agent marker.
110
110
  - The common local governance policy and selected-agent launcher, with backend,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@msn-control/liftoff",
3
- "version": "0.9.9",
3
+ "version": "0.10.0",
4
4
  "description": "Interactive CLI for governed GenAI, API, and Power Apps code app projects.",
5
5
  "type": "module",
6
6
  "license": "GPL-3.0-only",
@@ -37,6 +37,7 @@
37
37
  "assets/supported-stack.json",
38
38
  "docs",
39
39
  "README.md",
40
+ "DEVELOPER.md",
40
41
  "LICENSE"
41
42
  ],
42
43
  "publishConfig": {