@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.
- package/DEVELOPER.md +142 -0
- package/README.md +26 -18
- package/assets/governance/single-maintainer-gitflow/policy.md +13 -11
- package/dist/args.js +21 -0
- package/dist/args.js.map +1 -1
- package/dist/artifact-lifecycle.d.ts +1 -1
- package/dist/artifact-lifecycle.js +5 -0
- package/dist/artifact-lifecycle.js.map +1 -1
- package/dist/commands.js +355 -13
- package/dist/commands.js.map +1 -1
- package/dist/file-system.js +100 -13
- package/dist/file-system.js.map +1 -1
- package/dist/governance-activation/activation-state.d.ts +32 -0
- package/dist/governance-activation/activation-state.js +165 -0
- package/dist/governance-activation/activation-state.js.map +1 -0
- package/dist/governance-activation/approvals.d.ts +188 -0
- package/dist/governance-activation/approvals.js +508 -0
- package/dist/governance-activation/approvals.js.map +1 -0
- package/dist/governance-activation/canonical-json.d.ts +3 -0
- package/dist/governance-activation/canonical-json.js +36 -0
- package/dist/governance-activation/canonical-json.js.map +1 -0
- package/dist/governance-activation/commands.d.ts +10 -0
- package/dist/governance-activation/commands.js +1023 -0
- package/dist/governance-activation/commands.js.map +1 -0
- package/dist/governance-activation/compatibility.d.ts +68 -0
- package/dist/governance-activation/compatibility.js +447 -0
- package/dist/governance-activation/compatibility.js.map +1 -0
- package/dist/governance-activation/credentials.d.ts +160 -0
- package/dist/governance-activation/credentials.js +403 -0
- package/dist/governance-activation/credentials.js.map +1 -0
- package/dist/governance-activation/doctor.d.ts +10 -0
- package/dist/governance-activation/doctor.js +379 -0
- package/dist/governance-activation/doctor.js.map +1 -0
- package/dist/governance-activation/evidence.d.ts +49 -0
- package/dist/governance-activation/evidence.js +246 -0
- package/dist/governance-activation/evidence.js.map +1 -0
- package/dist/governance-activation/graph.d.ts +397 -0
- package/dist/governance-activation/graph.js +441 -0
- package/dist/governance-activation/graph.js.map +1 -0
- package/dist/governance-activation/identity.d.ts +35 -0
- package/dist/governance-activation/identity.js +89 -0
- package/dist/governance-activation/identity.js.map +1 -0
- package/dist/governance-activation/index.d.ts +18 -0
- package/dist/governance-activation/index.js +19 -0
- package/dist/governance-activation/index.js.map +1 -0
- package/dist/governance-activation/migration.d.ts +44 -0
- package/dist/governance-activation/migration.js +268 -0
- package/dist/governance-activation/migration.js.map +1 -0
- package/dist/governance-activation/readiness.d.ts +23 -0
- package/dist/governance-activation/readiness.js +158 -0
- package/dist/governance-activation/readiness.js.map +1 -0
- package/dist/governance-activation/reconciliation.d.ts +11 -0
- package/dist/governance-activation/reconciliation.js +58 -0
- package/dist/governance-activation/reconciliation.js.map +1 -0
- package/dist/governance-activation/release-integrity.d.ts +11 -0
- package/dist/governance-activation/release-integrity.js +49 -0
- package/dist/governance-activation/release-integrity.js.map +1 -0
- package/dist/governance-activation/seed-lifecycle.d.ts +116 -0
- package/dist/governance-activation/seed-lifecycle.js +609 -0
- package/dist/governance-activation/seed-lifecycle.js.map +1 -0
- package/dist/governance-activation/source-of-truth.d.ts +164 -0
- package/dist/governance-activation/source-of-truth.js +986 -0
- package/dist/governance-activation/source-of-truth.js.map +1 -0
- package/dist/governance-activation/task-projection.d.ts +21 -0
- package/dist/governance-activation/task-projection.js +75 -0
- package/dist/governance-activation/task-projection.js.map +1 -0
- package/dist/governance-activation/transitions.d.ts +163 -0
- package/dist/governance-activation/transitions.js +2128 -0
- package/dist/governance-activation/transitions.js.map +1 -0
- package/dist/governance-activation/type-contract.d.ts +1 -0
- package/dist/governance-activation/type-contract.js +27 -0
- package/dist/governance-activation/type-contract.js.map +1 -0
- package/dist/governance-activation/types.d.ts +390 -0
- package/dist/governance-activation/types.js +108 -0
- package/dist/governance-activation/types.js.map +1 -0
- package/dist/governance-activation/validators.d.ts +17 -0
- package/dist/governance-activation/validators.js +1305 -0
- package/dist/governance-activation/validators.js.map +1 -0
- package/dist/init-filesystem.js +5 -1
- package/dist/init-filesystem.js.map +1 -1
- package/dist/planner.js +3 -3
- package/dist/planner.js.map +1 -1
- package/dist/power-apps-templates.js +14 -1
- package/dist/power-apps-templates.js.map +1 -1
- package/dist/process-runner.d.ts +3 -0
- package/dist/process-runner.js +68 -10
- package/dist/process-runner.js.map +1 -1
- package/dist/repository-governance.d.ts +13 -3
- package/dist/repository-governance.js +357 -51
- package/dist/repository-governance.js.map +1 -1
- package/dist/telemetry/contract.d.ts +1 -1
- package/dist/telemetry/contract.js +6 -0
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/templates.js +320 -25
- package/dist/templates.js.map +1 -1
- package/dist/types.d.ts +14 -6
- package/docs/cli-reference.md +60 -12
- package/docs/configuration-and-manifests.md +40 -16
- package/docs/existing-repositories.md +22 -11
- package/docs/getting-started.md +46 -10
- package/docs/project-structure.md +34 -5
- package/docs/repository-governance.md +200 -245
- package/docs/safety-and-consent.md +24 -2
- package/docs/troubleshooting.md +55 -4
- package/docs/workloads.md +1 -1
- 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.
|
|
25
|
-
|
|
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.
|
package/docs/troubleshooting.md
CHANGED
|
@@ -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
|
|
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.
|
|
188
|
-
|
|
189
|
-
|
|
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`,
|
|
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.
|
|
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": {
|