@msn-control/liftoff 0.8.0 → 0.9.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.
- package/README.md +11 -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 +7 -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 +415 -77
- 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/framework-adapters.d.ts +1 -1
- package/dist/framework-adapters.js +9 -3
- package/dist/framework-adapters.js.map +1 -1
- package/dist/framework-validation.d.ts +1 -0
- package/dist/framework-validation.js +26 -0
- package/dist/framework-validation.js.map +1 -1
- package/dist/init-filesystem.js +2 -2
- package/dist/init-filesystem.js.map +1 -1
- package/dist/interactive.d.ts +13 -0
- package/dist/interactive.js +14 -0
- package/dist/interactive.js.map +1 -1
- package/dist/openspec-profile.d.ts +28 -0
- package/dist/openspec-profile.js +172 -0
- package/dist/openspec-profile.js.map +1 -0
- package/dist/planner.js +19 -1
- package/dist/planner.js.map +1 -1
- package/dist/power-apps-templates.js +15 -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/templates.d.ts +5 -1
- package/dist/templates.js +126 -60
- package/dist/templates.js.map +1 -1
- package/dist/types.d.ts +27 -4
- package/docs/cli-reference.md +52 -25
- package/docs/configuration-and-manifests.md +39 -24
- package/docs/existing-repositories.md +38 -23
- package/docs/getting-started.md +17 -7
- package/docs/prerequisites.md +17 -0
- package/docs/project-structure.md +13 -1
- package/docs/repository-governance.md +2 -2
- package/docs/safety-and-consent.md +47 -30
- package/docs/spec-workflows-and-agents.md +47 -7
- package/docs/supported-stack.md +14 -17
- package/docs/troubleshooting.md +53 -8
- package/docs/workloads.md +9 -8
- package/package.json +1 -1
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
# Safety and consent
|
|
2
2
|
|
|
3
|
-
Liftoff separates project decisions, file replacement, workstation tools,
|
|
4
|
-
|
|
3
|
+
Liftoff separates project decisions, file replacement, workstation tools,
|
|
4
|
+
global OpenSpec profile configuration, Copilot cloud setup, and project
|
|
5
|
+
dependencies. No one permission implies another.
|
|
5
6
|
|
|
6
7
|
## Consent flags
|
|
7
8
|
|
|
8
9
|
| Flag | Authorizes | Does not authorize |
|
|
9
10
|
| --- | --- | --- |
|
|
10
|
-
| `--yes` | Project defaults and plan confirmation | File replacement, machine installs, or project dependencies |
|
|
11
|
-
| `--force` | During init, listed regular-file replacements; during update, exact reported conflicts | Manifest guards, symlinks, structural collisions, tools, dependencies, or non-empty migration targets |
|
|
12
|
-
| `--install-tools` | Allowlisted workstation installation commands | Project decisions, overwrites, or project dependencies |
|
|
13
|
-
| `--
|
|
11
|
+
| `--yes` | Project defaults and plan confirmation | File replacement, machine installs, global OpenSpec changes, Copilot cloud opt-in, or project dependencies |
|
|
12
|
+
| `--force` | During init, listed regular-file replacements; during update, exact reported conflicts | Manifest guards, symlinks, structural collisions, tools, global profile changes, dependencies, or non-empty migration targets |
|
|
13
|
+
| `--install-tools` | Allowlisted workstation installation commands | Project decisions, overwrites, global profile changes, or project dependencies |
|
|
14
|
+
| `--configure-openspec-profile` | The displayed global OpenSpec workflow, delivery, and profile changes | Tools, project files, dependencies, or Copilot cloud opt-in |
|
|
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
|
+
| `--install-dependencies` | Locked project-local dependency commands after a successful merge | Machine tools, global profile changes, project decisions, or overwrites |
|
|
14
17
|
|
|
15
18
|
Interactive sessions ask separately at the point each permission is needed.
|
|
16
19
|
|
|
@@ -43,14 +46,16 @@ Initialization does not write generated files directly into the destination.
|
|
|
43
46
|
Liftoff:
|
|
44
47
|
|
|
45
48
|
1. Resolves and validates a project plan.
|
|
46
|
-
2.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
2. Verifies the OpenSpec global profile when OpenSpec is selected and separately
|
|
50
|
+
authorizes any required machine-wide change.
|
|
51
|
+
3. Renders Liftoff-owned artifacts into a temporary staging directory.
|
|
52
|
+
4. Runs the official OpenSpec or Spec Kit initializer in staging.
|
|
53
|
+
5. Rejects nested Git metadata, unexpected framework roots, symlinks, and
|
|
49
54
|
malformed output.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
6. Validates the full staged project.
|
|
56
|
+
7. Computes one immutable destination preflight.
|
|
57
|
+
8. Shows every different regular file that would be replaced.
|
|
58
|
+
9. Applies only an authorized preflight.
|
|
54
59
|
|
|
55
60
|
Unrelated destination files are preserved.
|
|
56
61
|
|
|
@@ -73,10 +78,10 @@ Individual project files use temporary-file replacement. Initialization keeps
|
|
|
73
78
|
backups for replaced files and records created files and directories. A handled
|
|
74
79
|
merge failure restores or removes those entries in reverse order.
|
|
75
80
|
|
|
76
|
-
Plain `liftoff update` preflights
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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.
|
|
80
85
|
|
|
81
86
|
If automatic rollback itself cannot safely restore a path because another
|
|
82
87
|
process changed it, Liftoff reports the incomplete rollback rather than
|
|
@@ -89,30 +94,35 @@ does not retain them as backups after success.
|
|
|
89
94
|
|
|
90
95
|
Update mode is selected explicitly rather than from terminal interactivity:
|
|
91
96
|
|
|
92
|
-
-
|
|
97
|
+
- Existing project artifacts are never compared with current template bytes.
|
|
93
98
|
- Plain `liftoff update` immediately applies safe new, missing,
|
|
94
|
-
untouched-upgrade, clean-move, and recorded-state changes
|
|
95
|
-
|
|
99
|
+
untouched-upgrade, clean-move, and recorded-state changes only for exact
|
|
100
|
+
managed-core artifacts.
|
|
96
101
|
- `liftoff update --check` is read-only and performs no preflight or mutation.
|
|
97
102
|
- `liftoff update --json` applies safe changes and returns an apply result;
|
|
98
103
|
`liftoff update --check --json` is the read-only machine drift gate.
|
|
99
|
-
-
|
|
100
|
-
- Default update skips conflicts and lists them by portable relative path.
|
|
101
|
-
|
|
102
|
-
|
|
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.
|
|
103
114
|
- Unrecorded governance conflicts remain outside manifest ownership and produce
|
|
104
115
|
`handoff-partial` until a later update safely writes or adopts every artifact.
|
|
105
116
|
- Orphans are reported and left on disk for manual review.
|
|
106
|
-
- Dependency definitions
|
|
107
|
-
|
|
117
|
+
- Dependency definitions and locks are project-owned; update neither changes
|
|
118
|
+
nor installs them.
|
|
108
119
|
|
|
109
120
|
`--force` cannot be combined with `--check` and cannot weaken project-boundary,
|
|
110
121
|
symlink, collision, manifest, or transaction guards.
|
|
111
122
|
|
|
112
|
-
Power Apps
|
|
113
|
-
not fetch
|
|
114
|
-
|
|
115
|
-
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.
|
|
116
126
|
|
|
117
127
|
## Framework and seed ownership
|
|
118
128
|
|
|
@@ -123,6 +133,13 @@ does not claim framework-owned files in durable artifact hashes.
|
|
|
123
133
|
One-time seed content is also omitted from durable hashes so it can follow its
|
|
124
134
|
own lifecycle after generation.
|
|
125
135
|
|
|
136
|
+
OpenSpec workflow profile and delivery are global machine preferences. Liftoff
|
|
137
|
+
changes them only after dedicated consent and verifies the result before
|
|
138
|
+
staging. That global choice is not part of the project-file transaction and is
|
|
139
|
+
not automatically rolled back after a later failure. The Copilot cloud choice
|
|
140
|
+
is separate, defaults off, and is persisted by OpenSpec in the generated
|
|
141
|
+
project config.
|
|
142
|
+
|
|
126
143
|
## Telemetry boundary
|
|
127
144
|
|
|
128
145
|
Liftoff sends only a recognized command name, CLI version, and zero/nonzero
|
|
@@ -9,10 +9,23 @@ 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
|
|
12
|
+
temporary staging, passes every selected coding agent in stable order, and
|
|
13
|
+
requires the complete custom profile with both skills and commands:
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
```text
|
|
16
|
+
propose, explore, new, continue, apply, update,
|
|
17
|
+
ff, sync, archive, bulk-archive, verify, onboard
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
OpenSpec stores profile and delivery preferences globally. Before creating an
|
|
21
|
+
OpenSpec project, Liftoff reads that configuration through the pinned CLI. A
|
|
22
|
+
matching custom/both profile proceeds without a prompt. A different profile is
|
|
23
|
+
blocking until you separately approve the displayed global changes or pass
|
|
24
|
+
`--configure-openspec-profile`. `--yes` and other consent flags do not authorize
|
|
25
|
+
the machine-wide change.
|
|
26
|
+
|
|
27
|
+
Generated projects contain `openspec/` plus all 12 official workflow skills and
|
|
28
|
+
commands for each selected agent surface that supports them.
|
|
16
29
|
|
|
17
30
|
### Spec Kit
|
|
18
31
|
|
|
@@ -65,7 +78,18 @@ Framework files remain owned by the official initializer. Liftoff validates
|
|
|
65
78
|
them but excludes framework-owned output from durable artifact hashes so a
|
|
66
79
|
framework can manage its own lifecycle.
|
|
67
80
|
|
|
68
|
-
|
|
81
|
+
To align an existing OpenSpec project, configure both delivery and all workflows:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
openspec config profile
|
|
85
|
+
openspec update
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Select **Both (skills + commands)** and every workflow in the profile picker.
|
|
89
|
+
Plain `liftoff update` intentionally does not regenerate these framework-owned
|
|
90
|
+
files.
|
|
91
|
+
|
|
92
|
+
Repository-governance launchers are separate managed-core Liftoff files at the exact
|
|
69
93
|
Copilot prompt and Claude command paths documented in
|
|
70
94
|
[repository governance](repository-governance.md). They reference one canonical
|
|
71
95
|
policy and context rather than duplicating framework-owned content. After
|
|
@@ -79,6 +103,21 @@ npm install -g @fission-ai/openspec@1.11.0
|
|
|
79
103
|
uv tool install specify-cli==1.0.1
|
|
80
104
|
```
|
|
81
105
|
|
|
106
|
+
## Optional GitHub Copilot cloud coding agent
|
|
107
|
+
|
|
108
|
+
When OpenSpec and GitHub Copilot are selected, Liftoff asks whether to configure
|
|
109
|
+
GitHub's hosted coding agent. This is separate from Copilot in an editor or
|
|
110
|
+
terminal and defaults to No.
|
|
111
|
+
|
|
112
|
+
Opting in writes official OpenSpec-owned files:
|
|
113
|
+
|
|
114
|
+
- `.github/workflows/copilot-setup-steps.yml`
|
|
115
|
+
- `.github/agents/openspec.agent.md`
|
|
116
|
+
|
|
117
|
+
Use `--copilot-cloud` or `--no-copilot-cloud` in automation. The choice is
|
|
118
|
+
recorded as `githubCopilot.cloudAgent` in `openspec/config.yaml`; it is not stored
|
|
119
|
+
as Liftoff overwrite or machine-configuration consent.
|
|
120
|
+
|
|
82
121
|
## Optional Code Apps plugin
|
|
83
122
|
|
|
84
123
|
Power Apps projects can request Microsoft's
|
|
@@ -101,6 +140,7 @@ invoke `/create-code-app`. The plugin's connector and deployment skills remain
|
|
|
101
140
|
available for post-creation work.
|
|
102
141
|
|
|
103
142
|
Changing the valid plugin preference in `liftoff.config.json` is reconciled by
|
|
104
|
-
plain `liftoff update`; it
|
|
105
|
-
|
|
106
|
-
`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
|
@@ -85,6 +85,43 @@ Review the complete replacement list. Approve interactively or rerun with
|
|
|
85
85
|
manifest, or a non-empty migration target. Move or rename the structural
|
|
86
86
|
conflict and retry.
|
|
87
87
|
|
|
88
|
+
## OpenSpec global profile is incompatible
|
|
89
|
+
|
|
90
|
+
Liftoff OpenSpec projects require profile `custom`, delivery `both`, and all 12
|
|
91
|
+
OpenSpec 1.11 workflows. Review the observed and required values printed by
|
|
92
|
+
Liftoff. Approve the separate interactive prompt or rerun the same command with
|
|
93
|
+
`--configure-openspec-profile` only when the machine-wide change is intended.
|
|
94
|
+
|
|
95
|
+
`--yes`, `--force`, `--install-tools`, and `--install-dependencies` do not
|
|
96
|
+
authorize this change. If configuration or verification fails, run
|
|
97
|
+
`openspec config list --json`, correct the reported OpenSpec issue, and retry
|
|
98
|
+
before any project files are written.
|
|
99
|
+
|
|
100
|
+
## OpenSpec wants to replace workflow files immediately
|
|
101
|
+
|
|
102
|
+
A fresh Liftoff project should already contain all 12 workflows as skills and
|
|
103
|
+
commands. Confirm that the same OpenSpec 1.11.0 binary, selected tools, global
|
|
104
|
+
profile, delivery, and `githubCopilot.cloudAgent` choice are still in effect.
|
|
105
|
+
|
|
106
|
+
For an older project, use:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
openspec config profile
|
|
110
|
+
openspec update
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Select both delivery modes and every workflow. Do not use `liftoff update
|
|
114
|
+
--force` to manage OpenSpec-owned skills or commands.
|
|
115
|
+
|
|
116
|
+
## Copilot cloud-agent files are missing
|
|
117
|
+
|
|
118
|
+
The GitHub-hosted coding agent is default-off and separate from Copilot in an
|
|
119
|
+
editor or terminal. Opt in during new initialization with `--copilot-cloud`.
|
|
120
|
+
For an existing project, set `githubCopilot.cloudAgent: true` in
|
|
121
|
+
`openspec/config.yaml` and run `openspec update`. The expected files are
|
|
122
|
+
`.github/workflows/copilot-setup-steps.yml` and
|
|
123
|
+
`.github/agents/openspec.agent.md`.
|
|
124
|
+
|
|
88
125
|
## A handled write failed
|
|
89
126
|
|
|
90
127
|
Liftoff reports whether rollback completed. Correct the filesystem problem and
|
|
@@ -101,25 +138,27 @@ Restore `liftoff.manifest.json` from version control or regenerate the project
|
|
|
101
138
|
with the matching Liftoff version. Do not weaken path validation or retain a
|
|
102
139
|
hand-edited unsafe path.
|
|
103
140
|
|
|
104
|
-
## Update reports conflicts or orphans
|
|
141
|
+
## Update reports managed-core conflicts or orphans
|
|
105
142
|
|
|
106
|
-
`liftoff update` applies safe managed changes immediately and skips
|
|
143
|
+
`liftoff update` applies safe managed-core changes immediately and skips core
|
|
144
|
+
conflicts.
|
|
107
145
|
|
|
108
146
|
- Use `liftoff update --check` for a read-only human report or
|
|
109
147
|
`liftoff update --check --json` for an automation drift gate.
|
|
110
|
-
-
|
|
148
|
+
- Project-owned application files never enter the report or mutation set.
|
|
149
|
+
- Managed-core conflicts remain untouched by default.
|
|
111
150
|
- Use `liftoff update --force` only after reviewing every listed path and
|
|
112
|
-
deciding that each overwrite is intended.
|
|
113
|
-
|
|
114
|
-
-
|
|
115
|
-
|
|
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.
|
|
116
155
|
|
|
117
156
|
Commit or copy local work before overwriting. Transaction rollback protects a
|
|
118
157
|
failed update, but Liftoff keeps no backup after success.
|
|
119
158
|
|
|
120
159
|
For a new governance policy or launcher conflict, review that exact local file
|
|
121
160
|
before considering `liftoff update --force`; do not delete it or activate remote
|
|
122
|
-
governance merely to make update pass. The schema-
|
|
161
|
+
governance merely to make update pass. The schema-v6 manifest records
|
|
123
162
|
`handoff-partial` and no ownership entry for each preserved unrecorded conflict.
|
|
124
163
|
Run `liftoff update --check` to inspect the remaining paths. Once each path is
|
|
125
164
|
absent or matches the current artifact, plain update promotes the handoff to
|
|
@@ -128,6 +167,12 @@ managed handoff files into preserved orphans rather than deleting them; an
|
|
|
128
167
|
unrecorded conflicting file remains user-owned and is not reported as an
|
|
129
168
|
orphan.
|
|
130
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
|
+
|
|
131
176
|
## Governance handoff exists but nothing is enforced
|
|
132
177
|
|
|
133
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.
|