@msn-control/liftoff 0.7.0 → 0.8.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/README.md +10 -1
- package/assets/governance/single-maintainer-gitflow/policy.md +705 -0
- package/assets/locks/frontend/package-lock.json +1012 -1694
- package/assets/locks/frontend/package.json +5 -6
- package/assets/locks/go-backend/go.mod +17 -0
- package/assets/locks/go-backend/go.sum +159 -0
- package/assets/locks/node-backend/package-lock.json +1473 -2320
- package/assets/locks/node-backend/package.json +8 -7
- package/assets/locks/opentofu-azure/.terraform.lock.hcl +39 -0
- package/assets/locks/opentofu-azure/versions.tf +10 -0
- package/assets/locks/python-genai/function-requirements.txt +1734 -0
- package/assets/locks/python-genai/liftoff_template_python_genai.egg-info/PKG-INFO +25 -0
- package/assets/locks/python-genai/liftoff_template_python_genai.egg-info/SOURCES.txt +6 -0
- package/assets/locks/python-genai/liftoff_template_python_genai.egg-info/dependency_links.txt +1 -0
- package/assets/locks/python-genai/liftoff_template_python_genai.egg-info/requires.txt +23 -0
- package/assets/locks/python-genai/liftoff_template_python_genai.egg-info/top_level.txt +1 -0
- package/assets/locks/python-genai/pyproject.toml +42 -0
- package/assets/locks/python-genai/uv.lock +2536 -0
- package/assets/locks/python-standard/pyproject.toml +36 -0
- package/assets/locks/python-standard/uv.lock +1780 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/catalog.json +4 -4
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package-lock.json +667 -1108
- package/assets/supported-stack.json +711 -0
- package/dist/args.js +12 -0
- package/dist/args.js.map +1 -1
- package/dist/catalogs.d.ts +3 -1
- package/dist/catalogs.js +29 -7
- package/dist/catalogs.js.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +6 -0
- package/dist/commands.js +243 -40
- package/dist/commands.js.map +1 -1
- package/dist/container-validation.d.ts +2 -0
- package/dist/container-validation.js +26 -0
- package/dist/container-validation.js.map +1 -0
- package/dist/file-system.js +130 -5
- package/dist/file-system.js.map +1 -1
- package/dist/framework-adapters.js +1 -0
- package/dist/framework-adapters.js.map +1 -1
- package/dist/go-template-assets.d.ts +2 -0
- package/dist/go-template-assets.js +14 -0
- package/dist/go-template-assets.js.map +1 -0
- package/dist/init-filesystem.js +5 -4
- package/dist/init-filesystem.js.map +1 -1
- package/dist/interactive.js +11 -7
- package/dist/interactive.js.map +1 -1
- package/dist/opentofu-template-assets.d.ts +2 -0
- package/dist/opentofu-template-assets.js +10 -0
- package/dist/opentofu-template-assets.js.map +1 -0
- package/dist/package-identity.d.ts +8 -0
- package/dist/package-identity.js +16 -0
- package/dist/package-identity.js.map +1 -0
- package/dist/planner.js +42 -3
- package/dist/planner.js.map +1 -1
- package/dist/power-apps-templates.js +6 -0
- package/dist/power-apps-templates.js.map +1 -1
- package/dist/project-dependencies.d.ts +1 -1
- package/dist/project-dependencies.js +15 -34
- package/dist/project-dependencies.js.map +1 -1
- package/dist/published-verifier.js +11 -1
- package/dist/published-verifier.js.map +1 -1
- package/dist/python-template-assets.d.ts +4 -0
- package/dist/python-template-assets.js +34 -0
- package/dist/python-template-assets.js.map +1 -0
- package/dist/repository-governance.d.ts +17 -0
- package/dist/repository-governance.js +507 -0
- package/dist/repository-governance.js.map +1 -0
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.js +3 -1
- package/dist/runtime.js.map +1 -1
- package/dist/self-upgrade.d.ts +77 -0
- package/dist/self-upgrade.js +499 -0
- package/dist/self-upgrade.js.map +1 -0
- package/dist/stable-release.d.ts +18 -0
- package/dist/stable-release.js +66 -0
- package/dist/stable-release.js.map +1 -0
- package/dist/standard-templates.js +28 -97
- package/dist/standard-templates.js.map +1 -1
- package/dist/supported-stack.d.ts +115 -0
- package/dist/supported-stack.js +439 -0
- package/dist/supported-stack.js.map +1 -0
- package/dist/telemetry/contract.d.ts +1 -1
- package/dist/telemetry/contract.js +1 -0
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/templates.js +214 -123
- package/dist/templates.js.map +1 -1
- package/dist/types.d.ts +18 -1
- package/dist/workstation-catalog.js +15 -12
- package/dist/workstation-catalog.js.map +1 -1
- package/dist/workstation.js +16 -6
- package/dist/workstation.js.map +1 -1
- package/docs/cli-reference.md +59 -2
- package/docs/configuration-and-manifests.md +13 -5
- package/docs/existing-repositories.md +21 -0
- package/docs/getting-started.md +23 -7
- package/docs/prerequisites.md +30 -4
- package/docs/project-structure.md +20 -1
- package/docs/repository-governance.md +91 -0
- package/docs/safety-and-consent.md +25 -0
- package/docs/spec-workflows-and-agents.md +19 -6
- package/docs/supported-stack.md +89 -0
- package/docs/telemetry.md +6 -0
- package/docs/troubleshooting.md +78 -0
- package/docs/workloads.md +14 -5
- package/package.json +14 -6
package/docs/troubleshooting.md
CHANGED
|
@@ -7,6 +7,8 @@ Check the canonical release:
|
|
|
7
7
|
```bash
|
|
8
8
|
npm view @msn-control/liftoff@latest version --registry=https://registry.npmjs.org
|
|
9
9
|
liftoff --version
|
|
10
|
+
liftoff upgrade --check
|
|
11
|
+
liftoff upgrade
|
|
10
12
|
```
|
|
11
13
|
|
|
12
14
|
Versions before 0.3.0 are unsupported.
|
|
@@ -16,6 +18,40 @@ mirror owner to synchronize or approve the release. Liftoff does not modify
|
|
|
16
18
|
`.npmrc`. A successful installation of an older mirrored package does not make
|
|
17
19
|
that version supported.
|
|
18
20
|
|
|
21
|
+
Versions that predate `liftoff upgrade` require one manual global installation:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install -g @msn-control/liftoff@latest --registry=https://registry.npmjs.org
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## CLI upgrade is blocked by installation origin
|
|
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
|
|
31
|
+
another package-manager installation is intentionally refused. Use the manual
|
|
32
|
+
global npm command shown by Liftoff; do not try to make upgrade replace a
|
|
33
|
+
different installation.
|
|
34
|
+
|
|
35
|
+
## CLI upgrade is blocked by a stale managed registry
|
|
36
|
+
|
|
37
|
+
Canonical npm defines the exact stable target, but Liftoff installs through the
|
|
38
|
+
configured registry. Ask the mirror owner to synchronize or approve that exact
|
|
39
|
+
version, then rerun `liftoff upgrade --check`. Liftoff does not edit `.npmrc` or
|
|
40
|
+
bypass the managed registry.
|
|
41
|
+
|
|
42
|
+
## npm cannot write the global prefix
|
|
43
|
+
|
|
44
|
+
Liftoff does not run `sudo`, request administrator credentials, or retry with
|
|
45
|
+
elevation. Resolve Node/npm global-prefix ownership through the approved
|
|
46
|
+
workstation process, then rerun the command.
|
|
47
|
+
|
|
48
|
+
## CLI replacement verification fails
|
|
49
|
+
|
|
50
|
+
Liftoff reports `failed` even when npm exited zero unless installed metadata and
|
|
51
|
+
`liftoff --version` both match the exact target. Run the exact-version global npm
|
|
52
|
+
repair command printed in the result. Liftoff does not claim an automatic
|
|
53
|
+
rollback after npm may have partially changed global state.
|
|
54
|
+
|
|
19
55
|
## An installed tool is still reported missing
|
|
20
56
|
|
|
21
57
|
Installers that change `PATH` may require a new terminal. Open one, rerun:
|
|
@@ -81,6 +117,48 @@ hand-edited unsafe path.
|
|
|
81
117
|
Commit or copy local work before overwriting. Transaction rollback protects a
|
|
82
118
|
failed update, but Liftoff keeps no backup after success.
|
|
83
119
|
|
|
120
|
+
For a new governance policy or launcher conflict, review that exact local file
|
|
121
|
+
before considering `liftoff update --force`; do not delete it or activate remote
|
|
122
|
+
governance merely to make update pass. The schema-v5 manifest records
|
|
123
|
+
`handoff-partial` and no ownership entry for each preserved unrecorded conflict.
|
|
124
|
+
Run `liftoff update --check` to inspect the remaining paths. Once each path is
|
|
125
|
+
absent or matches the current artifact, plain update promotes the handoff to
|
|
126
|
+
`handoff-generated`. Setting `governanceProfile` to `none` turns previously
|
|
127
|
+
managed handoff files into preserved orphans rather than deleting them; an
|
|
128
|
+
unrecorded conflicting file remains user-owned and is not reported as an
|
|
129
|
+
orphan.
|
|
130
|
+
|
|
131
|
+
## Governance handoff exists but nothing is enforced
|
|
132
|
+
|
|
133
|
+
That is the expected initial state. The manifest records `handoff-generated`,
|
|
134
|
+
not active enforcement. Commit and push the repository, run the selected-agent
|
|
135
|
+
launcher, review its read-only Phase 0 report, and explicitly approve the plan
|
|
136
|
+
before the agent creates a governance change.
|
|
137
|
+
|
|
138
|
+
Missing licenses, a private Staging runner, alert routes, parallel deployment,
|
|
139
|
+
or sufficient canary traffic must be reported as blockers or inapplicable
|
|
140
|
+
controls. Do not replace them with duplicate scanners or placeholder success.
|
|
141
|
+
|
|
142
|
+
Do not run an older Liftoff release to reverse a completed baseline migration.
|
|
143
|
+
Restore the affected generated files and `liftoff.manifest.json` through version
|
|
144
|
+
control, then reinstall from the restored locks.
|
|
145
|
+
|
|
146
|
+
## A frozen Python install cannot reach the package index
|
|
147
|
+
|
|
148
|
+
Keep the committed `pyproject.toml` and `uv.lock` unchanged and retry the
|
|
149
|
+
generated `uv sync --frozen` command when registry connectivity is restored.
|
|
150
|
+
Do not regenerate the lock as a connectivity workaround.
|
|
151
|
+
|
|
152
|
+
Python Dockerfiles also accept a credential-free PEP 503 mirror while retaining
|
|
153
|
+
the lock's exact versions and hashes:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
docker build --build-arg UV_DEFAULT_INDEX=https://packages.example.test/simple/ .
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Do not place credentials in build arguments. Configure authenticated registries
|
|
160
|
+
through an approved secret-aware build mechanism.
|
|
161
|
+
|
|
84
162
|
## Power Apps dependencies or CLI are missing
|
|
85
163
|
|
|
86
164
|
From the project root:
|
package/docs/workloads.md
CHANGED
|
@@ -7,12 +7,12 @@ prerequisites, generated artifacts, and maintenance checks that apply to it.
|
|
|
7
7
|
|
|
8
8
|
| Workload | Primary choices | Required runtime | Liftoff-generated platform areas |
|
|
9
9
|
| --- | --- | --- | --- |
|
|
10
|
-
| GenAI application | Pattern, Azure region, environments, optional frontend | Python 3.12 and Node.js 20
|
|
11
|
-
| API application | Python, Node.js, or Go API stack; Azure region; environments; optional frontend | Selected API runtime and Node.js 20
|
|
12
|
-
| Power Apps code app | Spec workflow, agents, optional Code Apps plugin | Node.js
|
|
10
|
+
| GenAI application | Pattern, Azure region, environments, optional frontend | Python 3.14, `uv` 0.12.7+, and Node.js 24.20+ | API, orchestration, data, messaging, Docker, Azure OpenTofu |
|
|
11
|
+
| API application | Python 3.14, Node.js 24, or Go 1.27 API stack; Azure region; environments; optional frontend | Selected API runtime and Node.js 24.20+ | API, data, Docker, Azure OpenTofu |
|
|
12
|
+
| Power Apps code app | Spec workflow, agents, optional Code Apps plugin | Node.js 24.20+ | Official React/Vite starter and project-local Power Apps tooling |
|
|
13
13
|
|
|
14
14
|
All three workloads continue into the common OpenSpec or Spec Kit and coding
|
|
15
|
-
agent flow.
|
|
15
|
+
agent flow and the default local repository-governance handoff.
|
|
16
16
|
|
|
17
17
|
## GenAI application
|
|
18
18
|
|
|
@@ -29,11 +29,14 @@ The selected pattern fixes the API stack to Python, FastAPI, and PydanticAI.
|
|
|
29
29
|
### Generated output
|
|
30
30
|
|
|
31
31
|
- FastAPI backend and Scalar/OpenAPI integration.
|
|
32
|
+
- A committed `uv.lock` consumed through `uv sync --frozen`.
|
|
32
33
|
- PydanticAI orchestration, prompts, and model configuration boundaries.
|
|
33
34
|
- PostgreSQL and pattern-specific Redis or Azure Service Bus boundaries.
|
|
34
35
|
- Offline-testable tracing and integration adapters.
|
|
35
36
|
- Docker Compose and Azure OpenTofu.
|
|
36
37
|
- Optional Vue frontend and pattern-specific Azure Functions workers.
|
|
38
|
+
- Versioned repository-governance policy, workload context, guide, and
|
|
39
|
+
selected-agent launcher unless `none` is selected.
|
|
37
40
|
|
|
38
41
|
### Deferred actions
|
|
39
42
|
|
|
@@ -55,9 +58,12 @@ infrastructure before applying it.
|
|
|
55
58
|
### Generated output
|
|
56
59
|
|
|
57
60
|
- Stack-native API, OpenAPI, tests, and database migrations.
|
|
61
|
+
- Ecosystem-native locked metadata: `uv.lock`, `package-lock.json`, or
|
|
62
|
+
`go.mod` plus `go.sum`.
|
|
58
63
|
- PostgreSQL, Redis, Azurite, and Mailpit local services where applicable.
|
|
59
64
|
- Docker Compose and Azure OpenTofu.
|
|
60
65
|
- Optional Vue frontend.
|
|
66
|
+
- Versioned local repository-governance handoff unless explicitly disabled.
|
|
61
67
|
|
|
62
68
|
### Deferred actions
|
|
63
69
|
|
|
@@ -87,9 +93,12 @@ environment, API frontend, Docker, or OpenTofu selection.
|
|
|
87
93
|
- React, Vite, TypeScript, Tailwind, and the Power Apps SDK and Vite plugin.
|
|
88
94
|
- Locked root `package.json` and `package-lock.json`.
|
|
89
95
|
- Project-local `power-apps` CLI supplied by the generated dependency graph.
|
|
90
|
-
- `liftoff.config.json`, schema-
|
|
96
|
+
- `liftoff.config.json`, schema-v5 `liftoff.manifest.json`, starter provenance,
|
|
91
97
|
and third-party attribution.
|
|
92
98
|
- Official OpenSpec or Spec Kit output and every selected agent marker.
|
|
99
|
+
- The common local governance policy and selected-agent launcher, with backend,
|
|
100
|
+
container, OpenTofu, custom deployment, and API DAST controls marked
|
|
101
|
+
inapplicable.
|
|
93
102
|
|
|
94
103
|
Liftoff does not create an API backend, `docker-compose.yml`,
|
|
95
104
|
`infrastructure/`, API environments, or an environment-bound
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@msn-control/liftoff",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.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",
|
|
@@ -32,7 +32,9 @@
|
|
|
32
32
|
"files": [
|
|
33
33
|
"dist",
|
|
34
34
|
"assets/locks",
|
|
35
|
+
"assets/governance",
|
|
35
36
|
"assets/power-apps-code-app",
|
|
37
|
+
"assets/supported-stack.json",
|
|
36
38
|
"docs",
|
|
37
39
|
"README.md",
|
|
38
40
|
"LICENSE"
|
|
@@ -45,25 +47,31 @@
|
|
|
45
47
|
"build": "tsc -p tsconfig.json",
|
|
46
48
|
"test": "vitest run",
|
|
47
49
|
"audit:template-dependencies": "node scripts/audit-template-dependencies.mjs",
|
|
50
|
+
"refresh:supported-stack": "node scripts/refresh-supported-stack-baseline.mjs --write",
|
|
51
|
+
"check:supported-stack": "node scripts/refresh-supported-stack-baseline.mjs",
|
|
52
|
+
"check:supported-stack-freshness": "node scripts/check-supported-stack-freshness.mjs",
|
|
53
|
+
"canonicalize:python-locks": "node scripts/canonicalize-uv-lock.mjs assets/locks/python-standard/uv.lock assets/locks/python-genai/uv.lock",
|
|
48
54
|
"refresh:power-apps-starter": "node scripts/refresh-power-apps-starter.mjs",
|
|
49
55
|
"smoke:package": "npm run build && node scripts/package-smoke-test.mjs",
|
|
50
56
|
"verify:standard-node-templates": "npm run build && node scripts/verify-standard-node-templates.mjs",
|
|
57
|
+
"verify:generated-containers": "npm run build && node scripts/verify-generated-containers.mjs",
|
|
51
58
|
"verify:power-apps-starter": "npm run build && node scripts/verify-power-apps-starter.mjs",
|
|
52
59
|
"verify:release-identity": "npm run build && node scripts/verify-release-identity.mjs",
|
|
53
60
|
"verify:published": "npm run build && node scripts/verify-published-package.mjs",
|
|
54
|
-
"check": "npm run build && npm test"
|
|
61
|
+
"check": "npm run check:supported-stack && npm run build && npm test"
|
|
55
62
|
},
|
|
56
63
|
"engines": {
|
|
57
|
-
"node": ">=20
|
|
64
|
+
"node": ">=24.20"
|
|
58
65
|
},
|
|
59
66
|
"devDependencies": {
|
|
60
67
|
"@types/cross-spawn": "^6.0.6",
|
|
61
|
-
"@types/node": "^
|
|
68
|
+
"@types/node": "^24.6.0",
|
|
62
69
|
"typescript": "^7.0.2",
|
|
63
|
-
"
|
|
70
|
+
"vite": "8.2.2",
|
|
71
|
+
"vitest": "4.1.11"
|
|
64
72
|
},
|
|
65
73
|
"dependencies": {
|
|
66
|
-
"@inquirer/prompts": "^
|
|
74
|
+
"@inquirer/prompts": "^8.6.0",
|
|
67
75
|
"cross-spawn": "^7.0.6",
|
|
68
76
|
"picocolors": "^1.1.1"
|
|
69
77
|
}
|