@msn-control/liftoff 0.9.0 → 0.9.2
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 +8 -5
- package/assets/locks/frontend/package-lock.json +51 -51
- package/assets/locks/frontend/package.json +1 -1
- package/assets/locks/node-backend/package-lock.json +353 -12
- package/assets/locks/node-backend/package.json +3 -3
- package/assets/supported-stack.json +9 -9
- package/dist/args.js +5 -5
- package/dist/args.js.map +1 -1
- package/dist/artifact-lifecycle.d.ts +4 -0
- package/dist/artifact-lifecycle.js +38 -0
- package/dist/artifact-lifecycle.js.map +1 -0
- package/dist/commands.js +327 -76
- package/dist/commands.js.map +1 -1
- package/dist/file-system.d.ts +1 -1
- package/dist/file-system.js +171 -29
- package/dist/file-system.js.map +1 -1
- package/dist/init-filesystem.js +2 -2
- package/dist/init-filesystem.js.map +1 -1
- package/dist/power-apps-templates.js +3 -1
- package/dist/power-apps-templates.js.map +1 -1
- package/dist/reconcile.js +4 -10
- package/dist/reconcile.js.map +1 -1
- package/dist/repository-governance.js +4 -0
- package/dist/repository-governance.js.map +1 -1
- package/dist/stable-release.js +1 -1
- package/dist/stable-release.js.map +1 -1
- package/dist/templates.d.ts +5 -1
- package/dist/templates.js +102 -56
- package/dist/templates.js.map +1 -1
- package/dist/types.d.ts +24 -4
- package/docs/cli-reference.md +39 -25
- package/docs/configuration-and-manifests.md +39 -24
- package/docs/existing-repositories.md +15 -15
- package/docs/getting-started.md +3 -2
- package/docs/project-structure.md +6 -1
- package/docs/repository-governance.md +2 -2
- package/docs/safety-and-consent.md +22 -17
- package/docs/spec-workflows-and-agents.md +5 -4
- package/docs/supported-stack.md +14 -17
- package/docs/troubleshooting.md +16 -8
- package/docs/workloads.md +9 -8
- package/package.json +1 -1
package/docs/cli-reference.md
CHANGED
|
@@ -23,13 +23,13 @@ install -> upgrade CLI -> plan -> init or migrate -> validate and doctor -> upda
|
|
|
23
23
|
| `liftoff plan` | Resolves decisions and previews artifacts and requirements without side effects |
|
|
24
24
|
| `liftoff init [project-name]` | Initializes a named child or the exact current Git root through staged readiness and framework setup |
|
|
25
25
|
| `liftoff migrate <source>` | Creates a new sibling scaffold and filtered source copy without changing the source |
|
|
26
|
-
| `liftoff validate [project]` | Validates manifest identity,
|
|
26
|
+
| `liftoff validate [project]` | Validates manifest identity, managed-core hashes, project provenance, workload metadata, and framework markers |
|
|
27
27
|
| `liftoff doctor [project]` | Runs read-only workload-derived project and workstation diagnostics |
|
|
28
28
|
| `liftoff upgrade` | Replaces a verified global npm installation with the exact canonical stable release exposed by the configured registry |
|
|
29
29
|
| `liftoff upgrade --check` | Checks installation origin and registry parity without installing; exits 2 when an installable update exists |
|
|
30
|
-
| `liftoff update [project]` | Applies safe managed
|
|
31
|
-
| `liftoff update --check` | Reports
|
|
32
|
-
| `liftoff update --force` |
|
|
30
|
+
| `liftoff update [project]` | Applies safe managed-core maintenance and authorized create-only component provisioning |
|
|
31
|
+
| `liftoff update --check` | Reports core maintenance and provisioning without mutation; exits 0 when clean and 2 when actionable |
|
|
32
|
+
| `liftoff update --force` | Overwrites only exact guarded managed-core conflicts; project-owned files remain unreachable |
|
|
33
33
|
| `liftoff dev` | Prints workload-appropriate local development commands; it does not execute them |
|
|
34
34
|
| `liftoff infra` | Prints OpenTofu guidance for API workloads and reports infrastructure as not applicable for Power Apps |
|
|
35
35
|
| `liftoff patterns` | Lists GenAI patterns |
|
|
@@ -132,32 +132,44 @@ liftoff update --check --json
|
|
|
132
132
|
```
|
|
133
133
|
|
|
134
134
|
Plain `liftoff update` is imperative and prompt-free. It applies safe new,
|
|
135
|
-
missing, untouched-upgrade, clean-move, and recorded-state changes
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
135
|
+
missing, untouched-upgrade, clean-move, and recorded-state changes only for
|
|
136
|
+
explicit `managed-core` artifacts. Core conflicts are skipped and core orphans
|
|
137
|
+
are reported without deletion. During legacy governance adoption, preserved
|
|
138
|
+
unrecorded conflicts remain outside managed ownership and set local state to
|
|
139
|
+
`handoff-partial`.
|
|
140
|
+
|
|
141
|
+
Application source, tests, dependencies and locks, database assets, Docker and
|
|
142
|
+
Compose files, environment files, documentation, Power Apps starter files, and
|
|
143
|
+
OpenTofu topology are `project` artifacts after generation. Update does not
|
|
144
|
+
compare them with newer templates, restore deleted paths, or overwrite them
|
|
145
|
+
under `--force`.
|
|
146
|
+
|
|
147
|
+
Changing desired state from no frontend to frontend, or adding an environment,
|
|
148
|
+
can authorize one create-only provisioning group. All destinations are
|
|
149
|
+
preflighted together. Absent files are created and byte-identical files are
|
|
150
|
+
adopted as provenance; any differing destination blocks the group even with
|
|
151
|
+
`--force`. Disabling or re-enabling a previously provisioned group never
|
|
152
|
+
recreates or deletes project files.
|
|
153
|
+
|
|
154
|
+
Use `--check` whenever no project bytes may change. Human check mode prints
|
|
155
|
+
managed-core drift, ownership-only manifest migration, and authorized
|
|
156
|
+
provisioning. It recommends `--force` only for core conflicts. `--check
|
|
157
|
+
--force` is invalid because check mode never authorizes writes.
|
|
146
158
|
|
|
147
159
|
`--json` selects output format, not safety. `liftoff update --json` applies safe
|
|
148
160
|
changes and emits the versioned apply result. `liftoff update --check --json`
|
|
149
161
|
is the read-only automation gate.
|
|
150
162
|
|
|
151
163
|
Update never installs dependencies. Transaction snapshots restore a failed
|
|
152
|
-
update, but Liftoff retains no backup after a successful overwrite
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
starter identity changes, and it cannot bypass project-boundary, symlink,
|
|
156
|
-
structural-collision, or manifest guards.
|
|
164
|
+
core update, but Liftoff retains no backup after a successful core overwrite.
|
|
165
|
+
Force cannot bypass the ownership, project-boundary, symlink, structural,
|
|
166
|
+
identity, or manifest guards.
|
|
157
167
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
168
|
+
New dependency, runtime, container, database, application, Power Apps starter,
|
|
169
|
+
and infrastructure templates apply to newly generated projects. Existing
|
|
170
|
+
production projects adopt them through a separately reviewed project change.
|
|
171
|
+
The existing `liftoff migrate` command only adopts a non-Liftoff source into a
|
|
172
|
+
fresh target; it is not an in-place template upgrade.
|
|
161
173
|
|
|
162
174
|
### Migration from 0.6.x
|
|
163
175
|
|
|
@@ -186,7 +198,9 @@ liftoff update --json
|
|
|
186
198
|
liftoff update --check --json
|
|
187
199
|
```
|
|
188
200
|
|
|
189
|
-
Each JSON object has a top-level numeric `schemaVersion`.
|
|
201
|
+
Each JSON object has a top-level numeric `schemaVersion`. Update JSON uses
|
|
202
|
+
schema version 2 and includes `scope: "managed-core"`, ownership-migration
|
|
203
|
+
state, and a separate provisioning collection.
|
|
190
204
|
Operational warnings, such as a dirty-worktree warning before JSON apply, are
|
|
191
205
|
written to stderr so stdout remains one parseable JSON object.
|
|
192
206
|
|
|
@@ -194,7 +208,7 @@ Exit codes:
|
|
|
194
208
|
|
|
195
209
|
- `0`: success or a clean check.
|
|
196
210
|
- `1`: invalid input, unsafe state, or command failure.
|
|
197
|
-
- `2`: an explicit update check found
|
|
211
|
+
- `2`: an explicit update check found core maintenance or provisioning, or upgrade check found an
|
|
198
212
|
installable CLI release.
|
|
199
213
|
|
|
200
214
|
Raw installer, framework, and dependency child stdout and stderr are forwarded
|
|
@@ -9,9 +9,14 @@ machine-rewrite it afterward.
|
|
|
9
9
|
|
|
10
10
|
Supported edits are reconciled by `liftoff update`:
|
|
11
11
|
|
|
12
|
-
- API workloads can
|
|
13
|
-
|
|
14
|
-
-
|
|
12
|
+
- API workloads can select a previously absent environment or frontend. Update
|
|
13
|
+
provisions that component once only when its destinations are absent or
|
|
14
|
+
byte-identical; a differing destination blocks the complete component and
|
|
15
|
+
cannot be forced.
|
|
16
|
+
- Removing or re-enabling a previously provisioned component never deletes,
|
|
17
|
+
restores, or overwrites its project-owned files.
|
|
18
|
+
- Power Apps can change the optional Code Apps plugin preference; only manifest
|
|
19
|
+
intent and applicable managed-core context change.
|
|
15
20
|
|
|
16
21
|
Workload kind, API stack, GenAI pattern, spec workflow, selected agents, and a
|
|
17
22
|
user-supplied Power Apps starter source change are not ordinary updates.
|
|
@@ -34,7 +39,7 @@ workload rather than silently ignored.
|
|
|
34
39
|
|
|
35
40
|
## `liftoff.manifest.json`: CLI-owned compatibility record
|
|
36
41
|
|
|
37
|
-
New projects use manifest schema
|
|
42
|
+
New projects use manifest schema v6. Its common project identity includes the
|
|
38
43
|
name, spec workflow, selected agents, and applicable Spec Kit default. A
|
|
39
44
|
discriminated `project.workload` object contains only fields valid for one
|
|
40
45
|
workload:
|
|
@@ -46,11 +51,14 @@ workload:
|
|
|
46
51
|
|
|
47
52
|
The manifest also records:
|
|
48
53
|
|
|
49
|
-
-
|
|
54
|
+
- Last manifest-writing Liftoff version.
|
|
50
55
|
- Official framework adapter, state, and tested contract version when known.
|
|
51
|
-
-
|
|
56
|
+
- `managedArtifacts`: exact Liftoff core logical names, paths, and
|
|
57
|
+
reconciliation `contentHash` values.
|
|
58
|
+
- `projectArtifacts`: starter provenance with the original path, generating
|
|
59
|
+
Liftoff version, `generationHash`, and provisioning group. These hashes never
|
|
60
|
+
authorize update writes.
|
|
52
61
|
- OS-neutral path-part arrays.
|
|
53
|
-
- `sha256:` content hashes.
|
|
54
62
|
- Repository governance profile, policy version, and local
|
|
55
63
|
`handoff-generated`, `handoff-partial`, or disabled state.
|
|
56
64
|
|
|
@@ -63,7 +71,7 @@ paths, or hashes.
|
|
|
63
71
|
|
|
64
72
|
## Compatibility
|
|
65
73
|
|
|
66
|
-
Readers support schemas v2, v3, v4, and
|
|
74
|
+
Readers support schemas v2, v3, v4, v5, and v6:
|
|
67
75
|
|
|
68
76
|
- V2 normalizes the legacy flat API identity and records framework state as
|
|
69
77
|
uncertain without inventing agents.
|
|
@@ -71,32 +79,39 @@ Readers support schemas v2, v3, v4, and v5:
|
|
|
71
79
|
- V4 represents the discriminated workload model, including Power Apps.
|
|
72
80
|
- V5 adds repository-governance handoff identity without claiming live
|
|
73
81
|
enforcement.
|
|
82
|
+
- V6 separates managed-core update authority from project generation
|
|
83
|
+
provenance.
|
|
74
84
|
|
|
75
85
|
`liftoff update --check`, including `--check --json`, leaves an old manifest
|
|
76
|
-
byte-for-byte unchanged. A successful plain update writes
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
86
|
+
byte-for-byte unchanged. A successful plain update writes v6 only after the
|
|
87
|
+
transaction succeeds. V2-v5 backend, frontend, database, dependency, container,
|
|
88
|
+
environment, documentation, Power Apps, and infrastructure entries become
|
|
89
|
+
project provenance without reading or changing current production bytes.
|
|
90
|
+
Intentionally deleted files remain absent. Only exact current core logical
|
|
91
|
+
names retain write authority.
|
|
81
92
|
|
|
82
93
|
## Artifact ownership
|
|
83
94
|
|
|
84
|
-
|
|
85
|
-
|
|
95
|
+
Every generated artifact has an explicit lifecycle independent from its
|
|
96
|
+
category or filename:
|
|
86
97
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
-
|
|
90
|
-
|
|
91
|
-
-
|
|
98
|
+
| Lifecycle | Owner after initialization | Update behavior |
|
|
99
|
+
| --- | --- | --- |
|
|
100
|
+
| `managed-core` | Liftoff | Safe reconciliation; reviewed core conflicts may use `--force` |
|
|
101
|
+
| `project` | Developer/project | Provenance only; never compared, restored, moved, or overwritten |
|
|
102
|
+
| `desired-state` | Developer | Read as input and never machine-rewritten |
|
|
103
|
+
| `framework` | Official framework | Validated through framework markers and maintained by that framework |
|
|
104
|
+
| `seed` | Developer/project | Written once and never reconciled |
|
|
92
105
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
106
|
+
The manifest is a CLI-owned transaction record rather than an ordinary
|
|
107
|
+
template artifact. Current managed core is limited to the exact repository
|
|
108
|
+
governance policy, context, guide, and selected-agent launchers. A name such as
|
|
109
|
+
`config.go`, a `configuration` category, or a path under `.github` does not
|
|
110
|
+
grant update authority.
|
|
96
111
|
|
|
97
112
|
## Contract conventions
|
|
98
113
|
|
|
99
|
-
- Writers use `artifactVersion`
|
|
114
|
+
- Writers use `artifactVersion` 6; readers support v2, v3, v4, v5, and v6.
|
|
100
115
|
- Artifact logical names and catalog identifiers are append-only.
|
|
101
116
|
- Rendering is deterministic and does not depend on timestamps, host versions,
|
|
102
117
|
or network state.
|
|
@@ -70,10 +70,10 @@ liftoff update
|
|
|
70
70
|
```
|
|
71
71
|
|
|
72
72
|
Use `--check` first when the invocation must be read-only. Plain update applies
|
|
73
|
-
safe managed changes immediately and
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
safe managed-core changes immediately and preserves core conflicts and orphans.
|
|
74
|
+
`--force` can replace only listed core conflicts. Project-owned production
|
|
75
|
+
files are not compared and remain unreachable from every update mode. For CI
|
|
76
|
+
core-maintenance gates, use `liftoff update --check --json`.
|
|
77
77
|
|
|
78
78
|
OpenSpec skills and commands remain framework-owned. To give an existing
|
|
79
79
|
project all 12 workflows as both skills and commands, run:
|
|
@@ -88,26 +88,26 @@ Select both delivery modes and every workflow in the profile picker. Plain
|
|
|
88
88
|
hosted Copilot agent later, update `githubCopilot.cloudAgent` through OpenSpec
|
|
89
89
|
and run `openspec update`.
|
|
90
90
|
|
|
91
|
-
Projects created before manifest schema
|
|
91
|
+
Projects created before manifest schema v6 automatically preview the default
|
|
92
92
|
repository-governance handoff as new named drift. Plain update safely adopts
|
|
93
93
|
collision-free policy, context, guide, and selected-agent launchers without
|
|
94
94
|
rewriting a configuration that omitted `governanceProfile`. Existing different
|
|
95
|
-
files remain unowned conflicts and the
|
|
95
|
+
files remain unowned conflicts and the v6 manifest records `handoff-partial`.
|
|
96
96
|
Resolving every conflict promotes a later update to `handoff-generated`.
|
|
97
97
|
Selecting `none` leaves previously managed handoff files as undeleted orphans
|
|
98
98
|
while unrecorded conflicts remain user-owned. No update mode runs an agent or
|
|
99
99
|
activates GitHub settings.
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
bytes and never requires `--force` as the default migration path.
|
|
101
|
+
The schema-v6 transition releases every legacy non-core artifact into project
|
|
102
|
+
provenance without writing, restoring, moving, or deleting its path.
|
|
103
|
+
Intentionally removed infrastructure stays absent and production source stays
|
|
104
|
+
byte-for-byte unchanged.
|
|
106
105
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
106
|
+
Major supported-stack releases apply to new scaffolds. Existing projects adopt
|
|
107
|
+
runtime, lock, Docker, provider, framework, and application changes through a
|
|
108
|
+
normal reviewed project change. Ordinary update and force cannot perform that
|
|
109
|
+
migration, and the existing `liftoff migrate` command remains a fresh-target
|
|
110
|
+
workflow for non-Liftoff sources.
|
|
111
111
|
|
|
112
112
|
## Existing non-Liftoff application
|
|
113
113
|
|
package/docs/getting-started.md
CHANGED
|
@@ -32,8 +32,9 @@ liftoff upgrade
|
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
`upgrade` replaces only the supported global CLI installation. It does not read
|
|
35
|
-
or update a generated project
|
|
36
|
-
`liftoff update --check
|
|
35
|
+
or update a generated project. Inspect Liftoff-managed core maintenance
|
|
36
|
+
separately with `liftoff update --check`; production template modernization is
|
|
37
|
+
a reviewed project change.
|
|
37
38
|
|
|
38
39
|
See [prerequisites](prerequisites.md) for the complete plan-derived tool model.
|
|
39
40
|
|
|
@@ -4,6 +4,11 @@ Generated paths are logical examples. Liftoff uses platform-correct filesystem
|
|
|
4
4
|
handling on Windows, macOS, and Linux, and manifests store path-part arrays
|
|
5
5
|
instead of joined strings.
|
|
6
6
|
|
|
7
|
+
After initialization, workload paths shown below are project-owned production
|
|
8
|
+
assets. Their manifest entries preserve generation provenance but
|
|
9
|
+
`liftoff update`, including `--force`, cannot compare, restore, move, or replace
|
|
10
|
+
them. Only exact files labeled as managed core retain Liftoff write authority.
|
|
11
|
+
|
|
7
12
|
## GenAI and API projects
|
|
8
13
|
|
|
9
14
|
```text
|
|
@@ -15,7 +20,7 @@ project/
|
|
|
15
20
|
|-- Dockerfile
|
|
16
21
|
|-- docker-compose.yml
|
|
17
22
|
|-- .liftoff/
|
|
18
|
-
| `-- governance/ #
|
|
23
|
+
| `-- governance/ # managed-core local handoff when enabled
|
|
19
24
|
| |-- policy.md
|
|
20
25
|
| |-- context.json
|
|
21
26
|
| `-- README.md
|
|
@@ -72,9 +72,9 @@ liftoff update --check
|
|
|
72
72
|
liftoff update
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
Check mode previews the schema-
|
|
75
|
+
Check mode previews the schema-v6 manifest and new named core artifacts without
|
|
76
76
|
writing. Plain update applies collision-free files; differing existing files
|
|
77
|
-
remain conflicts unless individually reviewed with `--force`. An unrecorded
|
|
77
|
+
remain managed-core conflicts unless individually reviewed with `--force`. An unrecorded
|
|
78
78
|
conflict remains outside Liftoff ownership and produces `handoff-partial`.
|
|
79
79
|
After every conflict is removed or matches the current artifact, the next
|
|
80
80
|
update records the full artifact set as `handoff-generated`.
|
|
@@ -78,10 +78,10 @@ Individual project files use temporary-file replacement. Initialization keeps
|
|
|
78
78
|
backups for replaced files and records created files and directories. A handled
|
|
79
79
|
merge failure restores or removes those entries in reverse order.
|
|
80
80
|
|
|
81
|
-
Plain `liftoff update` preflights
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
81
|
+
Plain `liftoff update` preflights every eligible managed-core or authorized
|
|
82
|
+
create-only provisioning path and applies those writes, managed-core moves or
|
|
83
|
+
deletes, and the manifest as one rollback-capable transaction. Schema upgrades
|
|
84
|
+
are committed only after the other mutations succeed.
|
|
85
85
|
|
|
86
86
|
If automatic rollback itself cannot safely restore a path because another
|
|
87
87
|
process changed it, Liftoff reports the incomplete rollback rather than
|
|
@@ -94,30 +94,35 @@ does not retain them as backups after success.
|
|
|
94
94
|
|
|
95
95
|
Update mode is selected explicitly rather than from terminal interactivity:
|
|
96
96
|
|
|
97
|
-
-
|
|
97
|
+
- Existing project artifacts are never compared with current template bytes.
|
|
98
98
|
- Plain `liftoff update` immediately applies safe new, missing,
|
|
99
|
-
untouched-upgrade, clean-move, and recorded-state changes
|
|
100
|
-
|
|
99
|
+
untouched-upgrade, clean-move, and recorded-state changes only for exact
|
|
100
|
+
managed-core artifacts.
|
|
101
101
|
- `liftoff update --check` is read-only and performs no preflight or mutation.
|
|
102
102
|
- `liftoff update --json` applies safe changes and returns an apply result;
|
|
103
103
|
`liftoff update --check --json` is the read-only machine drift gate.
|
|
104
|
-
-
|
|
105
|
-
- Default update skips conflicts and lists them by portable relative path.
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
- Managed-core developer edits are conflicts. Project edits are outside update.
|
|
105
|
+
- Default update skips core conflicts and lists them by portable relative path.
|
|
106
|
+
`liftoff update --force` extends authority only to those guarded core
|
|
107
|
+
conflicts.
|
|
108
|
+
- Project source, dependencies, schemas, containers, environments,
|
|
109
|
+
documentation, and infrastructure cannot be restored or overwritten by any
|
|
110
|
+
update mode.
|
|
111
|
+
- A newly selected frontend or environment is provisioned once only at absent
|
|
112
|
+
or byte-identical destinations. A collision blocks the complete group and
|
|
113
|
+
cannot be forced.
|
|
108
114
|
- Unrecorded governance conflicts remain outside manifest ownership and produce
|
|
109
115
|
`handoff-partial` until a later update safely writes or adopts every artifact.
|
|
110
116
|
- Orphans are reported and left on disk for manual review.
|
|
111
|
-
- Dependency definitions
|
|
112
|
-
|
|
117
|
+
- Dependency definitions and locks are project-owned; update neither changes
|
|
118
|
+
nor installs them.
|
|
113
119
|
|
|
114
120
|
`--force` cannot be combined with `--check` and cannot weaken project-boundary,
|
|
115
121
|
symlink, collision, manifest, or transaction guards.
|
|
116
122
|
|
|
117
|
-
Power Apps
|
|
118
|
-
not fetch
|
|
119
|
-
|
|
120
|
-
access.
|
|
123
|
+
Power Apps starter source and metadata are project-owned after generation.
|
|
124
|
+
Update does not fetch upstream source or transition an existing project to a
|
|
125
|
+
newer packaged starter.
|
|
121
126
|
|
|
122
127
|
## Framework and seed ownership
|
|
123
128
|
|
|
@@ -89,7 +89,7 @@ Select **Both (skills + commands)** and every workflow in the profile picker.
|
|
|
89
89
|
Plain `liftoff update` intentionally does not regenerate these framework-owned
|
|
90
90
|
files.
|
|
91
91
|
|
|
92
|
-
Repository-governance launchers are separate
|
|
92
|
+
Repository-governance launchers are separate managed-core Liftoff files at the exact
|
|
93
93
|
Copilot prompt and Claude command paths documented in
|
|
94
94
|
[repository governance](repository-governance.md). They reference one canonical
|
|
95
95
|
policy and context rather than duplicating framework-owned content. After
|
|
@@ -140,6 +140,7 @@ invoke `/create-code-app`. The plugin's connector and deployment skills remain
|
|
|
140
140
|
available for post-creation work.
|
|
141
141
|
|
|
142
142
|
Changing the valid plugin preference in `liftoff.config.json` is reconciled by
|
|
143
|
-
plain `liftoff update`; it
|
|
144
|
-
|
|
145
|
-
`liftoff update --check` to inspect that
|
|
143
|
+
plain `liftoff update`; it updates manifest intent and applicable managed-core
|
|
144
|
+
governance context without rewriting the project-owned Power Apps README or
|
|
145
|
+
starter. Use `liftoff update --check` to inspect that maintenance without
|
|
146
|
+
writing.
|
package/docs/supported-stack.md
CHANGED
|
@@ -60,8 +60,8 @@ commit workflow. Do not edit Microsoft-owned starter files independently.
|
|
|
60
60
|
|
|
61
61
|
## Existing generated projects
|
|
62
62
|
|
|
63
|
-
Upgrade the globally installed Liftoff CLI, then inspect
|
|
64
|
-
as a separate operation:
|
|
63
|
+
Upgrade the globally installed Liftoff CLI, then inspect Liftoff core
|
|
64
|
+
maintenance as a separate operation:
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
67
|
liftoff upgrade --check
|
|
@@ -72,18 +72,15 @@ liftoff validate
|
|
|
72
72
|
liftoff doctor
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
dependencies during
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
and
|
|
84
|
-
|
|
85
|
-
`liftoff update
|
|
86
|
-
|
|
87
|
-
After a successful update, recover unwanted changes through version control and
|
|
88
|
-
then reinstall from the restored locks; Liftoff does not retain a post-success
|
|
89
|
-
backup.
|
|
75
|
+
Only explicit Liftoff core files are updated automatically. Package manifests,
|
|
76
|
+
locks, runtime files, containers, and providers are project-owned after
|
|
77
|
+
generation; ordinary update and force do not replace them. Liftoff also never
|
|
78
|
+
installs project dependencies during update. CLI upgrade does not discover or
|
|
79
|
+
modify the project.
|
|
80
|
+
|
|
81
|
+
This baseline is a breaking generation boundary: it raises the Node.js, Python,
|
|
82
|
+
Go, and OpenTofu floors and includes major framework, provider, frontend,
|
|
83
|
+
container, and dependency migrations for new scaffolds. Existing production
|
|
84
|
+
projects adopt those changes through separately reviewed project work, not
|
|
85
|
+
`liftoff update` or `--force`. Do not use an older Liftoff release as an
|
|
86
|
+
automatic downgrade tool.
|
package/docs/troubleshooting.md
CHANGED
|
@@ -138,25 +138,27 @@ Restore `liftoff.manifest.json` from version control or regenerate the project
|
|
|
138
138
|
with the matching Liftoff version. Do not weaken path validation or retain a
|
|
139
139
|
hand-edited unsafe path.
|
|
140
140
|
|
|
141
|
-
## Update reports conflicts or orphans
|
|
141
|
+
## Update reports managed-core conflicts or orphans
|
|
142
142
|
|
|
143
|
-
`liftoff update` applies safe managed changes immediately and skips
|
|
143
|
+
`liftoff update` applies safe managed-core changes immediately and skips core
|
|
144
|
+
conflicts.
|
|
144
145
|
|
|
145
146
|
- Use `liftoff update --check` for a read-only human report or
|
|
146
147
|
`liftoff update --check --json` for an automation drift gate.
|
|
147
|
-
-
|
|
148
|
+
- Project-owned application files never enter the report or mutation set.
|
|
149
|
+
- Managed-core conflicts remain untouched by default.
|
|
148
150
|
- Use `liftoff update --force` only after reviewing every listed path and
|
|
149
|
-
deciding that each overwrite is intended.
|
|
150
|
-
|
|
151
|
-
-
|
|
152
|
-
|
|
151
|
+
deciding that each core overwrite is intended. Force cannot cross into
|
|
152
|
+
project files or component-provisioning collisions.
|
|
153
|
+
- Managed-core orphans are never deleted automatically.
|
|
154
|
+
- Update neither changes nor installs project dependencies.
|
|
153
155
|
|
|
154
156
|
Commit or copy local work before overwriting. Transaction rollback protects a
|
|
155
157
|
failed update, but Liftoff keeps no backup after success.
|
|
156
158
|
|
|
157
159
|
For a new governance policy or launcher conflict, review that exact local file
|
|
158
160
|
before considering `liftoff update --force`; do not delete it or activate remote
|
|
159
|
-
governance merely to make update pass. The schema-
|
|
161
|
+
governance merely to make update pass. The schema-v6 manifest records
|
|
160
162
|
`handoff-partial` and no ownership entry for each preserved unrecorded conflict.
|
|
161
163
|
Run `liftoff update --check` to inspect the remaining paths. Once each path is
|
|
162
164
|
absent or matches the current artifact, plain update promotes the handoff to
|
|
@@ -165,6 +167,12 @@ managed handoff files into preserved orphans rather than deleting them; an
|
|
|
165
167
|
unrecorded conflicting file remains user-owned and is not reported as an
|
|
166
168
|
orphan.
|
|
167
169
|
|
|
170
|
+
If a newer Liftoff release contains different source, dependencies, schemas,
|
|
171
|
+
containers, environment files, Power Apps starter files, or infrastructure,
|
|
172
|
+
ordinary update intentionally reports nothing for those project-owned
|
|
173
|
+
differences. Review and migrate them as production changes. The existing
|
|
174
|
+
`liftoff migrate` command does not perform an in-place Liftoff project upgrade.
|
|
175
|
+
|
|
168
176
|
## Governance handoff exists but nothing is enforced
|
|
169
177
|
|
|
170
178
|
That is the expected initial state. The manifest records `handoff-generated`,
|
package/docs/workloads.md
CHANGED
|
@@ -93,7 +93,7 @@ environment, API frontend, Docker, or OpenTofu selection.
|
|
|
93
93
|
- React, Vite, TypeScript, Tailwind, and the Power Apps SDK and Vite plugin.
|
|
94
94
|
- Locked root `package.json` and `package-lock.json`.
|
|
95
95
|
- Project-local `power-apps` CLI supplied by the generated dependency graph.
|
|
96
|
-
- `liftoff.config.json`, schema-
|
|
96
|
+
- `liftoff.config.json`, schema-v6 `liftoff.manifest.json`, starter provenance,
|
|
97
97
|
and third-party attribution.
|
|
98
98
|
- Official OpenSpec or Spec Kit output and every selected agent marker.
|
|
99
99
|
- The common local governance policy and selected-agent launcher, with backend,
|
|
@@ -131,11 +131,12 @@ created the application.
|
|
|
131
131
|
|
|
132
132
|
## Change workload later
|
|
133
133
|
|
|
134
|
-
`liftoff update`
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
134
|
+
`liftoff update` maintains explicit Liftoff core files and can provision a
|
|
135
|
+
previously absent frontend or environment once after a corresponding desired
|
|
136
|
+
state edit. It does not convert workloads, change API stacks or GenAI patterns,
|
|
137
|
+
transition a Power Apps starter, or modernize production project templates.
|
|
138
138
|
|
|
139
|
-
Plain update applies safe changes immediately
|
|
140
|
-
|
|
141
|
-
conflicts
|
|
139
|
+
Plain update applies safe core changes immediately. Use `liftoff update
|
|
140
|
+
--check` for read-only inspection. `--force` applies only to listed
|
|
141
|
+
managed-core conflicts; project-owned source, dependencies, schemas,
|
|
142
|
+
containers, environments, documentation, and infrastructure remain untouched.
|