@msn-control/liftoff 0.10.4 → 0.11.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/DEVELOPER.md +220 -77
- package/README.md +28 -28
- package/assets/supported-stack.json +3 -136
- package/dist/adapters/azure/governance-assessment.d.ts +2 -0
- package/dist/adapters/azure/governance-assessment.js +21 -0
- package/dist/adapters/azure/governance-assessment.js.map +1 -0
- package/dist/adapters/filesystem/atomic-write.d.ts +2 -0
- package/dist/adapters/filesystem/atomic-write.js +74 -0
- package/dist/adapters/filesystem/atomic-write.js.map +1 -0
- package/dist/adapters/filesystem/errors.d.ts +2 -0
- package/dist/adapters/filesystem/errors.js +8 -0
- package/dist/adapters/filesystem/errors.js.map +1 -0
- package/dist/adapters/filesystem/manifest-file.d.ts +1 -0
- package/dist/adapters/filesystem/manifest-file.js +21 -0
- package/dist/adapters/filesystem/manifest-file.js.map +1 -0
- package/dist/adapters/filesystem/project-config.d.ts +4 -0
- package/dist/adapters/filesystem/project-config.js +157 -0
- package/dist/adapters/filesystem/project-config.js.map +1 -0
- package/dist/adapters/filesystem/project-discovery.d.ts +2 -0
- package/dist/adapters/filesystem/project-discovery.js +30 -0
- package/dist/adapters/filesystem/project-discovery.js.map +1 -0
- package/dist/adapters/filesystem/project-files.d.ts +6 -0
- package/dist/adapters/filesystem/project-files.js +68 -0
- package/dist/adapters/filesystem/project-files.js.map +1 -0
- package/dist/adapters/filesystem/project-lock.d.ts +8 -0
- package/dist/adapters/filesystem/project-lock.js +164 -0
- package/dist/adapters/filesystem/project-lock.js.map +1 -0
- package/dist/adapters/filesystem/project-paths.d.ts +2 -0
- package/dist/adapters/filesystem/project-paths.js +60 -0
- package/dist/adapters/filesystem/project-paths.js.map +1 -0
- package/dist/adapters/filesystem/project-transaction.d.ts +23 -0
- package/dist/adapters/filesystem/project-transaction.js +158 -0
- package/dist/adapters/filesystem/project-transaction.js.map +1 -0
- package/dist/adapters/git/governance-assessment.d.ts +22 -0
- package/dist/adapters/git/governance-assessment.js +161 -0
- package/dist/adapters/git/governance-assessment.js.map +1 -0
- package/dist/adapters/github/governance-assessment.d.ts +2 -0
- package/dist/adapters/github/governance-assessment.js +18 -0
- package/dist/adapters/github/governance-assessment.js.map +1 -0
- package/dist/adapters/packaged-assets/package-root.d.ts +3 -0
- package/dist/adapters/packaged-assets/package-root.js +21 -0
- package/dist/adapters/packaged-assets/package-root.js.map +1 -0
- package/dist/adapters/packaged-assets/supported-stack.d.ts +4 -0
- package/dist/adapters/packaged-assets/supported-stack.js +18 -0
- package/dist/adapters/packaged-assets/supported-stack.js.map +1 -0
- package/dist/adapters/packaged-assets/template-assets.d.ts +23 -0
- package/dist/adapters/packaged-assets/template-assets.js +36 -0
- package/dist/adapters/packaged-assets/template-assets.js.map +1 -0
- package/dist/adapters/process/shell-command.d.ts +5 -0
- package/dist/adapters/process/shell-command.js +21 -0
- package/dist/adapters/process/shell-command.js.map +1 -0
- package/dist/application/context.d.ts +20 -0
- package/dist/application/context.js +2 -0
- package/dist/application/context.js.map +1 -0
- package/dist/application/diagnose/doctor.d.ts +21 -0
- package/dist/application/diagnose/doctor.js +586 -0
- package/dist/application/diagnose/doctor.js.map +1 -0
- package/dist/application/diagnose/generated-project.d.ts +1 -0
- package/dist/application/diagnose/generated-project.js +105 -0
- package/dist/application/diagnose/generated-project.js.map +1 -0
- package/dist/application/diagnose/validate.d.ts +6 -0
- package/dist/application/diagnose/validate.js +27 -0
- package/dist/application/diagnose/validate.js.map +1 -0
- package/dist/application/initialize/fixture.d.ts +2 -0
- package/dist/application/initialize/fixture.js +39 -0
- package/dist/application/initialize/fixture.js.map +1 -0
- package/dist/application/initialize/inputs.d.ts +3 -0
- package/dist/application/initialize/inputs.js +35 -0
- package/dist/application/initialize/inputs.js.map +1 -0
- package/dist/application/initialize/use-case.d.ts +23 -0
- package/dist/application/initialize/use-case.js +360 -0
- package/dist/application/initialize/use-case.js.map +1 -0
- package/dist/application/migrate/use-case.d.ts +7 -0
- package/dist/application/migrate/use-case.js +378 -0
- package/dist/application/migrate/use-case.js.map +1 -0
- package/dist/application/project/catalog.d.ts +46 -0
- package/dist/application/project/catalog.js +12 -0
- package/dist/application/project/catalog.js.map +1 -0
- package/dist/application/project/manifest.d.ts +2 -0
- package/dist/application/project/manifest.js +29 -0
- package/dist/application/project/manifest.js.map +1 -0
- package/dist/application/project/planning.d.ts +6 -0
- package/dist/application/project/planning.js +12 -0
- package/dist/application/project/planning.js.map +1 -0
- package/dist/application/update/planning.d.ts +40 -0
- package/dist/application/update/planning.js +293 -0
- package/dist/application/update/planning.js.map +1 -0
- package/dist/application/update/reporting.d.ts +42 -0
- package/dist/application/update/reporting.js +325 -0
- package/dist/application/update/reporting.js.map +1 -0
- package/dist/application/update/use-case.d.ts +8 -0
- package/dist/application/update/use-case.js +600 -0
- package/dist/application/update/use-case.js.map +1 -0
- package/dist/application/upgrade/use-case.d.ts +6 -0
- package/dist/application/upgrade/use-case.js +82 -0
- package/dist/application/upgrade/use-case.js.map +1 -0
- package/dist/args.d.ts +5 -65
- package/dist/args.js +4 -472
- package/dist/args.js.map +1 -1
- package/dist/artifact-lifecycle.d.ts +1 -21
- package/dist/artifact-lifecycle.js +1 -75
- package/dist/artifact-lifecycle.js.map +1 -1
- package/dist/catalogs.d.ts +1 -50
- package/dist/catalogs.js +1 -472
- package/dist/catalogs.js.map +1 -1
- package/dist/cli/args/contracts.d.ts +51 -0
- package/dist/cli/args/contracts.js +2 -0
- package/dist/cli/args/contracts.js.map +1 -0
- package/dist/cli/args/definitions.d.ts +6 -0
- package/dist/cli/args/definitions.js +187 -0
- package/dist/cli/args/definitions.js.map +1 -0
- package/dist/cli/args/help.d.ts +5 -0
- package/dist/cli/args/help.js +130 -0
- package/dist/cli/args/help.js.map +1 -0
- package/dist/cli/args/parser.d.ts +5 -0
- package/dist/cli/args/parser.js +145 -0
- package/dist/cli/args/parser.js.map +1 -0
- package/dist/cli/args/readers.d.ts +4 -0
- package/dist/cli/args/readers.js +19 -0
- package/dist/cli/args/readers.js.map +1 -0
- package/dist/cli/commands/diagnose.d.ts +4 -0
- package/dist/cli/commands/diagnose.js +12 -0
- package/dist/cli/commands/diagnose.js.map +1 -0
- package/dist/cli/commands/dispatch.d.ts +3 -0
- package/dist/cli/commands/dispatch.js +94 -0
- package/dist/cli/commands/dispatch.js.map +1 -0
- package/dist/cli/commands/help.d.ts +3 -0
- package/dist/cli/commands/help.js +32 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/helpers.d.ts +8 -0
- package/dist/cli/commands/helpers.js +97 -0
- package/dist/cli/commands/helpers.js.map +1 -0
- package/dist/cli/commands/initialize.d.ts +3 -0
- package/dist/cli/commands/initialize.js +7 -0
- package/dist/cli/commands/initialize.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +3 -0
- package/dist/cli/commands/migrate.js +8 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +3 -0
- package/dist/cli/commands/plan.js +34 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/reference.d.ts +5 -0
- package/dist/cli/commands/reference.js +43 -0
- package/dist/cli/commands/reference.js.map +1 -0
- package/dist/cli/commands/update.d.ts +3 -0
- package/dist/cli/commands/update.js +9 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/upgrade.d.ts +3 -0
- package/dist/cli/commands/upgrade.js +7 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/context.d.ts +1 -0
- package/dist/cli/context.js +2 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/project-options.d.ts +3 -0
- package/dist/cli/project-options.js +41 -0
- package/dist/cli/project-options.js.map +1 -0
- package/dist/cli.d.ts +3 -3
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +4 -35
- package/dist/commands.js +3 -2969
- package/dist/commands.js.map +1 -1
- package/dist/container-validation.d.ts +1 -1
- package/dist/domain/governance/activation/approvals.d.ts +351 -0
- package/dist/domain/governance/activation/approvals.js +528 -0
- package/dist/domain/governance/activation/approvals.js.map +1 -0
- package/dist/domain/governance/activation/canonical-json.d.ts +4 -0
- package/dist/domain/governance/activation/canonical-json.js +39 -0
- package/dist/domain/governance/activation/canonical-json.js.map +1 -0
- package/dist/domain/governance/activation/capabilities.d.ts +7 -0
- package/dist/domain/governance/activation/capabilities.js +33 -0
- package/dist/domain/governance/activation/capabilities.js.map +1 -0
- package/dist/domain/governance/activation/evidence.d.ts +63 -0
- package/dist/domain/governance/activation/evidence.js +444 -0
- package/dist/domain/governance/activation/evidence.js.map +1 -0
- package/dist/domain/governance/activation/graph.d.ts +397 -0
- package/dist/domain/governance/activation/graph.js +441 -0
- package/dist/domain/governance/activation/graph.js.map +1 -0
- package/dist/domain/governance/activation/inputs.d.ts +25 -0
- package/dist/domain/governance/activation/inputs.js +63 -0
- package/dist/domain/governance/activation/inputs.js.map +1 -0
- package/dist/domain/governance/activation/operations.d.ts +19 -0
- package/dist/domain/governance/activation/operations.js +181 -0
- package/dist/domain/governance/activation/operations.js.map +1 -0
- package/dist/domain/governance/activation/readiness.d.ts +27 -0
- package/dist/domain/governance/activation/readiness.js +269 -0
- package/dist/domain/governance/activation/readiness.js.map +1 -0
- package/dist/domain/governance/activation/types.d.ts +399 -0
- package/dist/domain/governance/activation/types.js +109 -0
- package/dist/domain/governance/activation/types.js.map +1 -0
- package/dist/domain/governance/activation/validators.d.ts +22 -0
- package/dist/domain/governance/activation/validators.js +1347 -0
- package/dist/domain/governance/activation/validators.js.map +1 -0
- package/dist/domain/governance/assessment/catalog.d.ts +14 -0
- package/dist/domain/governance/assessment/catalog.js +105 -0
- package/dist/domain/governance/assessment/catalog.js.map +1 -0
- package/dist/domain/governance/assessment/errors.d.ts +10 -0
- package/dist/domain/governance/assessment/errors.js +22 -0
- package/dist/domain/governance/assessment/errors.js.map +1 -0
- package/dist/domain/governance/assessment/index.d.ts +8 -0
- package/dist/domain/governance/assessment/index.js +9 -0
- package/dist/domain/governance/assessment/index.js.map +1 -0
- package/dist/domain/governance/assessment/live-normalize.d.ts +19 -0
- package/dist/domain/governance/assessment/live-normalize.js +403 -0
- package/dist/domain/governance/assessment/live-normalize.js.map +1 -0
- package/dist/domain/governance/assessment/predicates.d.ts +36 -0
- package/dist/domain/governance/assessment/predicates.js +545 -0
- package/dist/domain/governance/assessment/predicates.js.map +1 -0
- package/dist/domain/governance/assessment/report.d.ts +23 -0
- package/dist/domain/governance/assessment/report.js +266 -0
- package/dist/domain/governance/assessment/report.js.map +1 -0
- package/dist/domain/governance/assessment/sanitize.d.ts +8 -0
- package/dist/domain/governance/assessment/sanitize.js +60 -0
- package/dist/domain/governance/assessment/sanitize.js.map +1 -0
- package/dist/domain/governance/assessment/types.d.ts +174 -0
- package/dist/domain/governance/assessment/types.js +13 -0
- package/dist/domain/governance/assessment/types.js.map +1 -0
- package/dist/domain/governance/assessment/yaml.d.ts +6 -0
- package/dist/domain/governance/assessment/yaml.js +30 -0
- package/dist/domain/governance/assessment/yaml.js.map +1 -0
- package/dist/domain/governance/policy/identity.d.ts +64 -0
- package/dist/domain/governance/policy/identity.js +112 -0
- package/dist/domain/governance/policy/identity.js.map +1 -0
- package/dist/domain/migration/dependencies.d.ts +7 -0
- package/dist/domain/migration/dependencies.js +221 -0
- package/dist/domain/migration/dependencies.js.map +1 -0
- package/dist/domain/migration/inventory.d.ts +3 -0
- package/dist/domain/migration/inventory.js +15 -0
- package/dist/domain/migration/inventory.js.map +1 -0
- package/dist/domain/project/artifact-lifecycle.d.ts +69 -0
- package/dist/domain/project/artifact-lifecycle.js +137 -0
- package/dist/domain/project/artifact-lifecycle.js.map +1 -0
- package/dist/domain/project/catalog.d.ts +48 -0
- package/dist/domain/project/catalog.js +507 -0
- package/dist/domain/project/catalog.js.map +1 -0
- package/dist/domain/project/contracts.d.ts +247 -0
- package/dist/domain/project/contracts.js +2 -0
- package/dist/domain/project/contracts.js.map +1 -0
- package/dist/domain/project/errors.d.ts +3 -0
- package/dist/domain/project/errors.js +7 -0
- package/dist/domain/project/errors.js.map +1 -0
- package/dist/domain/project/infrastructure-layout.d.ts +26 -0
- package/dist/domain/project/infrastructure-layout.js +124 -0
- package/dist/domain/project/infrastructure-layout.js.map +1 -0
- package/dist/domain/project/inputs.d.ts +21 -0
- package/dist/domain/project/inputs.js +41 -0
- package/dist/domain/project/inputs.js.map +1 -0
- package/dist/domain/project/manifest/artifacts.d.ts +8 -0
- package/dist/domain/project/manifest/artifacts.js +150 -0
- package/dist/domain/project/manifest/artifacts.js.map +1 -0
- package/dist/domain/project/manifest/context.d.ts +13 -0
- package/dist/domain/project/manifest/context.js +2 -0
- package/dist/domain/project/manifest/context.js.map +1 -0
- package/dist/domain/project/manifest/fields.d.ts +6 -0
- package/dist/domain/project/manifest/fields.js +36 -0
- package/dist/domain/project/manifest/fields.js.map +1 -0
- package/dist/domain/project/manifest/governance.d.ts +8 -0
- package/dist/domain/project/manifest/governance.js +161 -0
- package/dist/domain/project/manifest/governance.js.map +1 -0
- package/dist/domain/project/manifest/project-identity.d.ts +6 -0
- package/dist/domain/project/manifest/project-identity.js +273 -0
- package/dist/domain/project/manifest/project-identity.js.map +1 -0
- package/dist/domain/project/manifest/reader.d.ts +9 -0
- package/dist/domain/project/manifest/reader.js +141 -0
- package/dist/domain/project/manifest/reader.js.map +1 -0
- package/dist/domain/project/paths.d.ts +2 -0
- package/dist/domain/project/paths.js +29 -0
- package/dist/domain/project/paths.js.map +1 -0
- package/dist/domain/project/planning.d.ts +19 -0
- package/dist/domain/project/planning.js +329 -0
- package/dist/domain/project/planning.js.map +1 -0
- package/dist/domain/project/retired-workload.d.ts +4 -0
- package/dist/domain/project/retired-workload.js +18 -0
- package/dist/domain/project/retired-workload.js.map +1 -0
- package/dist/domain/project/supported-stack.d.ts +113 -0
- package/dist/domain/project/supported-stack.js +426 -0
- package/dist/domain/project/supported-stack.js.map +1 -0
- package/dist/domain/workstation/constraints.d.ts +6 -0
- package/dist/domain/workstation/constraints.js +8 -0
- package/dist/domain/workstation/constraints.js.map +1 -0
- package/dist/file-system.d.ts +10 -44
- package/dist/file-system.js +9 -1245
- package/dist/file-system.js.map +1 -1
- package/dist/framework-adapters.d.ts +1 -1
- package/dist/framework-validation.d.ts +1 -1
- package/dist/framework-validation.js +1 -1
- package/dist/framework-validation.js.map +1 -1
- package/dist/genai-templates.d.ts +2 -9
- package/dist/genai-templates.js +4 -5
- package/dist/genai-templates.js.map +1 -1
- package/dist/generators/common/artifacts.d.ts +6 -0
- package/dist/generators/common/artifacts.js +30 -0
- package/dist/generators/common/artifacts.js.map +1 -0
- package/dist/generators/common/base.d.ts +17 -0
- package/dist/generators/common/base.js +421 -0
- package/dist/generators/common/base.js.map +1 -0
- package/dist/generators/common/dotenv-validation.d.ts +2 -0
- package/dist/generators/common/dotenv-validation.js +80 -0
- package/dist/generators/common/dotenv-validation.js.map +1 -0
- package/dist/generators/common/environments.d.ts +3 -0
- package/dist/generators/common/environments.js +15 -0
- package/dist/generators/common/environments.js.map +1 -0
- package/dist/generators/common/frontend.d.ts +15 -0
- package/dist/generators/common/frontend.js +166 -0
- package/dist/generators/common/frontend.js.map +1 -0
- package/dist/generators/common/python-settings.d.ts +2 -0
- package/dist/generators/common/python-settings.js +70 -0
- package/dist/generators/common/python-settings.js.map +1 -0
- package/dist/generators/common/spec-workflow.d.ts +28 -0
- package/dist/generators/common/spec-workflow.js +567 -0
- package/dist/generators/common/spec-workflow.js.map +1 -0
- package/dist/generators/common/values.d.ts +13 -0
- package/dist/generators/common/values.js +16 -0
- package/dist/generators/common/values.js.map +1 -0
- package/dist/generators/containers/compose.d.ts +7 -0
- package/dist/generators/containers/compose.js +196 -0
- package/dist/generators/containers/compose.js.map +1 -0
- package/dist/generators/containers/context.d.ts +1 -0
- package/dist/generators/containers/context.js +43 -0
- package/dist/generators/containers/context.js.map +1 -0
- package/dist/generators/containers/images.d.ts +7 -0
- package/dist/generators/containers/images.js +119 -0
- package/dist/generators/containers/images.js.map +1 -0
- package/dist/generators/context.d.ts +42 -0
- package/dist/generators/context.js +38 -0
- package/dist/generators/context.js.map +1 -0
- package/dist/generators/genai/backend.d.ts +20 -0
- package/dist/generators/genai/backend.js +667 -0
- package/dist/generators/genai/backend.js.map +1 -0
- package/dist/generators/genai/configuration.d.ts +3 -0
- package/dist/generators/genai/configuration.js +43 -0
- package/dist/generators/genai/configuration.js.map +1 -0
- package/dist/generators/genai/database.d.ts +7 -0
- package/dist/generators/genai/database.js +71 -0
- package/dist/generators/genai/database.js.map +1 -0
- package/dist/generators/genai/functions.d.ts +15 -0
- package/dist/generators/genai/functions.js +156 -0
- package/dist/generators/genai/functions.js.map +1 -0
- package/dist/generators/genai/index.d.ts +8 -0
- package/dist/generators/genai/index.js +11 -0
- package/dist/generators/genai/index.js.map +1 -0
- package/dist/generators/genai/patterns.d.ts +9 -0
- package/dist/generators/genai/patterns.js +309 -0
- package/dist/generators/genai/patterns.js.map +1 -0
- package/dist/generators/infrastructure/azure.d.ts +18 -0
- package/dist/generators/infrastructure/azure.js +655 -0
- package/dist/generators/infrastructure/azure.js.map +1 -0
- package/dist/generators/infrastructure/names.d.ts +23 -0
- package/dist/generators/infrastructure/names.js +51 -0
- package/dist/generators/infrastructure/names.js.map +1 -0
- package/dist/generators/standard/configuration.d.ts +3 -0
- package/dist/generators/standard/configuration.js +26 -0
- package/dist/generators/standard/configuration.js.map +1 -0
- package/dist/generators/standard/go.d.ts +17 -0
- package/dist/generators/standard/go.js +338 -0
- package/dist/generators/standard/go.js.map +1 -0
- package/dist/generators/standard/index.d.ts +12 -0
- package/dist/generators/standard/index.js +12 -0
- package/dist/generators/standard/index.js.map +1 -0
- package/dist/generators/standard/node.d.ts +20 -0
- package/dist/generators/standard/node.js +314 -0
- package/dist/generators/standard/node.js.map +1 -0
- package/dist/generators/standard/python.d.ts +18 -0
- package/dist/generators/standard/python.js +191 -0
- package/dist/generators/standard/python.js.map +1 -0
- package/dist/go-template-assets.js +3 -3
- package/dist/go-template-assets.js.map +1 -1
- package/dist/governance-activation/activation-state.d.ts +1 -1
- package/dist/governance-activation/activation-state.js +46 -9
- package/dist/governance-activation/activation-state.js.map +1 -1
- package/dist/governance-activation/approvals.d.ts +1 -188
- package/dist/governance-activation/approvals.js +1 -507
- package/dist/governance-activation/approvals.js.map +1 -1
- package/dist/governance-activation/canonical-json.d.ts +1 -3
- package/dist/governance-activation/canonical-json.js +1 -35
- package/dist/governance-activation/canonical-json.js.map +1 -1
- package/dist/governance-activation/commands.d.ts +1 -1
- package/dist/governance-activation/commands.js +72 -106
- package/dist/governance-activation/commands.js.map +1 -1
- package/dist/governance-activation/compatibility.d.ts +11 -3
- package/dist/governance-activation/compatibility.js +31 -4
- package/dist/governance-activation/compatibility.js.map +1 -1
- package/dist/governance-activation/credentials.d.ts +3 -3
- package/dist/governance-activation/credentials.js +5 -5
- package/dist/governance-activation/credentials.js.map +1 -1
- package/dist/governance-activation/doctor.d.ts +1 -1
- package/dist/governance-activation/doctor.js +28 -96
- package/dist/governance-activation/doctor.js.map +1 -1
- package/dist/governance-activation/evidence.d.ts +1 -49
- package/dist/governance-activation/evidence.js +1 -245
- package/dist/governance-activation/evidence.js.map +1 -1
- package/dist/governance-activation/git-ignore.d.ts +9 -0
- package/dist/governance-activation/git-ignore.js +76 -0
- package/dist/governance-activation/git-ignore.js.map +1 -0
- package/dist/governance-activation/graph.d.ts +1 -397
- package/dist/governance-activation/graph.js +1 -440
- package/dist/governance-activation/graph.js.map +1 -1
- package/dist/governance-activation/identity.d.ts +1 -35
- package/dist/governance-activation/identity.js +1 -88
- package/dist/governance-activation/identity.js.map +1 -1
- package/dist/governance-activation/index.d.ts +3 -0
- package/dist/governance-activation/index.js +3 -0
- package/dist/governance-activation/index.js.map +1 -1
- package/dist/governance-activation/inputs.d.ts +8 -0
- package/dist/governance-activation/inputs.js +146 -0
- package/dist/governance-activation/inputs.js.map +1 -0
- package/dist/governance-activation/migration.d.ts +4 -3
- package/dist/governance-activation/migration.js +14 -6
- package/dist/governance-activation/migration.js.map +1 -1
- package/dist/governance-activation/phase-bootstrap-state.d.ts +3 -0
- package/dist/governance-activation/phase-bootstrap-state.js +128 -0
- package/dist/governance-activation/phase-bootstrap-state.js.map +1 -0
- package/dist/governance-activation/phase-discovery.d.ts +2 -0
- package/dist/governance-activation/phase-discovery.js +88 -0
- package/dist/governance-activation/phase-discovery.js.map +1 -0
- package/dist/governance-activation/phase-governance.d.ts +4 -0
- package/dist/governance-activation/phase-governance.js +141 -0
- package/dist/governance-activation/phase-governance.js.map +1 -0
- package/dist/governance-activation/phase-publication.d.ts +8 -0
- package/dist/governance-activation/phase-publication.js +318 -0
- package/dist/governance-activation/phase-publication.js.map +1 -0
- package/dist/governance-activation/read-only.d.ts +30 -0
- package/dist/governance-activation/read-only.js +93 -0
- package/dist/governance-activation/read-only.js.map +1 -0
- package/dist/governance-activation/readiness.d.ts +1 -25
- package/dist/governance-activation/readiness.js +1 -222
- package/dist/governance-activation/readiness.js.map +1 -1
- package/dist/governance-activation/reconciliation.d.ts +1 -1
- package/dist/governance-activation/reconciliation.js +3 -3
- package/dist/governance-activation/reconciliation.js.map +1 -1
- package/dist/governance-activation/release-integrity.d.ts +1 -1
- package/dist/governance-activation/release-integrity.js +2 -2
- package/dist/governance-activation/release-integrity.js.map +1 -1
- package/dist/governance-activation/seed-lifecycle.d.ts +9 -1
- package/dist/governance-activation/seed-lifecycle.js +197 -63
- package/dist/governance-activation/seed-lifecycle.js.map +1 -1
- package/dist/governance-activation/source-of-truth.d.ts +5 -3
- package/dist/governance-activation/source-of-truth.js +32 -52
- package/dist/governance-activation/source-of-truth.js.map +1 -1
- package/dist/governance-activation/spec-kit-seed.d.ts +9 -0
- package/dist/governance-activation/spec-kit-seed.js +43 -0
- package/dist/governance-activation/spec-kit-seed.js.map +1 -0
- package/dist/governance-activation/task-projection.d.ts +1 -1
- package/dist/governance-activation/transition-planning.d.ts +15 -0
- package/dist/governance-activation/transition-planning.js +250 -0
- package/dist/governance-activation/transition-planning.js.map +1 -0
- package/dist/governance-activation/transition-ports.d.ts +150 -0
- package/dist/governance-activation/transition-ports.js +2 -0
- package/dist/governance-activation/transition-ports.js.map +1 -0
- package/dist/governance-activation/transition-process.d.ts +7 -0
- package/dist/governance-activation/transition-process.js +21 -0
- package/dist/governance-activation/transition-process.js.map +1 -0
- package/dist/governance-activation/transition-records.d.ts +56 -0
- package/dist/governance-activation/transition-records.js +208 -0
- package/dist/governance-activation/transition-records.js.map +1 -0
- package/dist/governance-activation/transitions.d.ts +6 -165
- package/dist/governance-activation/transitions.js +142 -2055
- package/dist/governance-activation/transitions.js.map +1 -1
- package/dist/governance-activation/types.d.ts +1 -390
- package/dist/governance-activation/types.js +1 -107
- package/dist/governance-activation/types.js.map +1 -1
- package/dist/governance-activation/validators.d.ts +1 -17
- package/dist/governance-activation/validators.js +1 -1304
- package/dist/governance-activation/validators.js.map +1 -1
- package/dist/governance-assessment/catalog.d.ts +1 -2
- package/dist/governance-assessment/catalog.js +18 -85
- package/dist/governance-assessment/catalog.js.map +1 -1
- package/dist/governance-assessment/command.d.ts +1 -1
- package/dist/governance-assessment/command.js +8 -12
- package/dist/governance-assessment/command.js.map +1 -1
- package/dist/governance-assessment/engine.d.ts +6 -11
- package/dist/governance-assessment/engine.js +463 -114
- package/dist/governance-assessment/engine.js.map +1 -1
- package/dist/governance-assessment/live-normalize.d.ts +1 -19
- package/dist/governance-assessment/live-normalize.js +1 -402
- package/dist/governance-assessment/live-normalize.js.map +1 -1
- package/dist/governance-assessment/live-transport.d.ts +2 -6
- package/dist/governance-assessment/live-transport.js +10 -22
- package/dist/governance-assessment/live-transport.js.map +1 -1
- package/dist/governance-assessment/live.js +55 -5
- package/dist/governance-assessment/live.js.map +1 -1
- package/dist/governance-assessment/predicates.d.ts +1 -27
- package/dist/governance-assessment/predicates.js +1 -329
- package/dist/governance-assessment/predicates.js.map +1 -1
- package/dist/governance-assessment/project.d.ts +13 -17
- package/dist/governance-assessment/project.js +59 -149
- package/dist/governance-assessment/project.js.map +1 -1
- package/dist/governance-assessment/readers.d.ts +1 -5
- package/dist/governance-assessment/readers.js +5 -13
- package/dist/governance-assessment/readers.js.map +1 -1
- package/dist/governance-assessment/report.d.ts +1 -23
- package/dist/governance-assessment/report.js +1 -265
- package/dist/governance-assessment/report.js.map +1 -1
- package/dist/governance-assessment/sanitize.d.ts +1 -8
- package/dist/governance-assessment/sanitize.js +1 -56
- package/dist/governance-assessment/sanitize.js.map +1 -1
- package/dist/governance-assessment/types.d.ts +1 -173
- package/dist/governance-assessment/types.js +1 -12
- package/dist/governance-assessment/types.js.map +1 -1
- package/dist/governance-assessment/yaml.d.ts +1 -6
- package/dist/governance-assessment/yaml.js +1 -29
- package/dist/governance-assessment/yaml.js.map +1 -1
- package/dist/init-filesystem.d.ts +1 -1
- package/dist/init-filesystem.js +126 -174
- package/dist/init-filesystem.js.map +1 -1
- package/dist/interactive.d.ts +2 -2
- package/dist/interactive.js +42 -41
- package/dist/interactive.js.map +1 -1
- package/dist/migrate-plan.d.ts +1 -1
- package/dist/migrate-plan.js +14 -8
- package/dist/migrate-plan.js.map +1 -1
- package/dist/npm-template-assets.js +5 -4
- package/dist/npm-template-assets.js.map +1 -1
- package/dist/openspec-profile.d.ts +1 -1
- package/dist/opentofu-template-assets.js +3 -3
- package/dist/opentofu-template-assets.js.map +1 -1
- package/dist/package-identity.d.ts +3 -0
- package/dist/package-identity.js +13 -2
- package/dist/package-identity.js.map +1 -1
- package/dist/planner.d.ts +1 -19
- package/dist/planner.js +1 -565
- package/dist/planner.js.map +1 -1
- package/dist/process-runner.d.ts +1 -1
- package/dist/project-dependencies.d.ts +5 -3
- package/dist/project-dependencies.js +74 -63
- package/dist/project-dependencies.js.map +1 -1
- package/dist/published-verifier.js +61 -30
- package/dist/published-verifier.js.map +1 -1
- package/dist/python-template-assets.js +6 -9
- package/dist/python-template-assets.js.map +1 -1
- package/dist/reconcile.d.ts +1 -1
- package/dist/reconcile.js +2 -2
- package/dist/reconcile.js.map +1 -1
- package/dist/repository-governance.d.ts +5 -2
- package/dist/repository-governance.js +126 -112
- package/dist/repository-governance.js.map +1 -1
- package/dist/runtime.js +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/scan.d.ts +6 -2
- package/dist/scan.js +78 -30
- package/dist/scan.js.map +1 -1
- package/dist/self-upgrade.d.ts +1 -1
- package/dist/self-upgrade.js +20 -7
- package/dist/self-upgrade.js.map +1 -1
- package/dist/stable-release.js +7 -1
- package/dist/stable-release.js.map +1 -1
- package/dist/standard-templates.d.ts +2 -2
- package/dist/standard-templates.js +6 -841
- package/dist/standard-templates.js.map +1 -1
- package/dist/supported-stack.d.ts +3 -115
- package/dist/supported-stack.js +4 -438
- package/dist/supported-stack.js.map +1 -1
- package/dist/telemetry/index.d.ts +1 -1
- package/dist/templates.d.ts +10 -20
- package/dist/templates.js +52 -3261
- package/dist/templates.js.map +1 -1
- package/dist/types.d.ts +1 -263
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/dist/version.js +2 -6
- package/dist/version.js.map +1 -1
- package/dist/workstation-catalog.d.ts +5 -2
- package/dist/workstation-catalog.js +33 -2
- package/dist/workstation-catalog.js.map +1 -1
- package/dist/workstation.d.ts +4 -3
- package/dist/workstation.js +86 -32
- package/dist/workstation.js.map +1 -1
- package/docs/assets/liftoff-terminal.svg +3 -3
- package/docs/azure-deployment.md +107 -10
- package/docs/cli-reference.md +49 -13
- package/docs/configuration-and-manifests.md +139 -34
- package/docs/existing-repositories.md +33 -6
- package/docs/getting-started.md +44 -31
- package/docs/prerequisites.md +34 -35
- package/docs/project-structure.md +39 -46
- package/docs/repository-governance.md +90 -24
- package/docs/safety-and-consent.md +65 -12
- package/docs/spec-workflows-and-agents.md +31 -28
- package/docs/supported-stack.md +11 -9
- package/docs/troubleshooting.md +107 -49
- package/docs/workloads.md +46 -62
- package/package.json +4 -7
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/UPSTREAM_LICENSE.txt +0 -21
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/catalog.json +0 -520
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/packaged/gitignore +0 -27
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/README.md +0 -25
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/components.json +0 -22
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/eslint.config.js +0 -23
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/index.html +0 -13
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package-lock.json +0 -6156
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package.json +0 -60
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/public/power-apps.svg +0 -55
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/App.tsx +0 -17
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/assets/react.svg +0 -1
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/mode-toggle.tsx +0 -37
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/badge.tsx +0 -46
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/button.tsx +0 -60
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/calendar.tsx +0 -211
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/card.tsx +0 -92
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/chart.tsx +0 -355
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/checkbox.tsx +0 -32
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/command.tsx +0 -184
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dialog.tsx +0 -141
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dropdown-menu.tsx +0 -257
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/input.tsx +0 -21
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/label.tsx +0 -22
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/popover.tsx +0 -46
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/progress.tsx +0 -29
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/select.tsx +0 -185
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/separator.tsx +0 -26
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/skeleton.tsx +0 -13
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/table.tsx +0 -114
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tabs.tsx +0 -66
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/textarea.tsx +0 -18
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tooltip.tsx +0 -61
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/hooks/use-theme.ts +0 -11
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/index.css +0 -131
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/lib/utils.ts +0 -6
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/main.tsx +0 -10
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/_layout.tsx +0 -31
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/home.tsx +0 -59
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/not-found.tsx +0 -14
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/query-provider.tsx +0 -26
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/sonner-provider.tsx +0 -23
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/theme-provider.tsx +0 -64
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/router.tsx +0 -24
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.app.json +0 -34
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.json +0 -13
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.node.json +0 -26
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/vite.config.ts +0 -19
- package/assets/power-apps-code-app/README.md +0 -27
- package/dist/code-apps-plugin.d.ts +0 -13
- package/dist/code-apps-plugin.js +0 -69
- package/dist/code-apps-plugin.js.map +0 -1
- package/dist/power-apps-assets.d.ts +0 -30
- package/dist/power-apps-assets.js +0 -131
- package/dist/power-apps-assets.js.map +0 -1
- package/dist/power-apps-templates.d.ts +0 -3
- package/dist/power-apps-templates.js +0 -177
- package/dist/power-apps-templates.js.map +0 -1
- package/dist/power-apps-validation.d.ts +0 -1
- package/dist/power-apps-validation.js +0 -79
- package/dist/power-apps-validation.js.map +0 -1
|
@@ -18,11 +18,9 @@ Supported edits are reconciled by `liftoff update`:
|
|
|
18
18
|
manifests; replace it with `staging` before validation or update.
|
|
19
19
|
- Removing or re-enabling a previously provisioned component never deletes,
|
|
20
20
|
restores, or overwrites its project-owned files.
|
|
21
|
-
- Power Apps can change the optional Code Apps plugin preference; only manifest
|
|
22
|
-
intent and applicable managed-core context change.
|
|
23
21
|
|
|
24
|
-
Workload kind, API stack, GenAI pattern, spec workflow, selected agents
|
|
25
|
-
|
|
22
|
+
Workload kind, API stack, GenAI pattern, spec workflow, and selected agents are
|
|
23
|
+
not ordinary updates.
|
|
26
24
|
|
|
27
25
|
An undecided GenAI project records an explicit generic identity rather than
|
|
28
26
|
omitting the pattern:
|
|
@@ -46,21 +44,98 @@ omitting the pattern:
|
|
|
46
44
|
Changing `generic` to a specialized pattern later is a reviewed project
|
|
47
45
|
migration because application files are project-owned; it is not an update.
|
|
48
46
|
|
|
49
|
-
|
|
47
|
+
The `power-apps-code-app` workload and `codeAppsPlugin` configuration field are
|
|
48
|
+
retired. They are rejected rather than ignored or converted to another workload.
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
50
|
+
## Application runtime configuration
|
|
51
|
+
|
|
52
|
+
These settings are separate from Liftoff desired state. Each backend resolves
|
|
53
|
+
**process environment > selected local configuration file > nonsecret defaults**
|
|
54
|
+
once per process. Restart after changing configuration; do not shell-source a
|
|
55
|
+
file to make it work.
|
|
56
|
+
|
|
57
|
+
| Backend | Default native file | Selected-file override |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| Python/FastAPI, including GenAI | Project-root `.env`, resolved from `backend/config/settings.py`, not the working directory | `LIFTOFF_ENV_FILE` names a dotenv file |
|
|
60
|
+
| Node.js/Fastify | Project-root `.env`, resolved from source or compiled configuration location | `LIFTOFF_ENV_FILE` names a dotenv file |
|
|
61
|
+
| Go/Huma | `../runtime.config.json` when launched from `backend/` | `LIFTOFF_ENV_FILE` names a JSON object of string values |
|
|
62
|
+
|
|
63
|
+
Override paths are relative to the startup working directory unless absolute.
|
|
64
|
+
An explicitly selected missing, unreadable, or malformed file fails even when
|
|
65
|
+
process values could otherwise satisfy startup. An absent default file is allowed
|
|
66
|
+
when process values provide the required settings. All stacks need
|
|
67
|
+
`DATABASE_URL` and `REDIS_URL`; model credentials are not required for operational
|
|
68
|
+
endpoints.
|
|
69
|
+
|
|
70
|
+
Python and Node validate dotenv assignments, balanced quotes, UTF-8, and NUL
|
|
71
|
+
input before accepting a file. Use `KEY=value`, optional `export`, comments,
|
|
72
|
+
and single- or double-quoted values. Node uses the runtime dotenv parser and
|
|
73
|
+
rejects escaped quote delimiters that it would otherwise truncate; use the other
|
|
74
|
+
quote style, for example `APP_NAME="Bob's API"`. Go uses `encoding/json`, not a
|
|
75
|
+
dotenv dependency: numbers such as `PORT` must be quoted strings, and null or
|
|
76
|
+
other non-string values are rejected.
|
|
77
|
+
|
|
78
|
+
### Native development
|
|
79
|
+
|
|
80
|
+
From the project root in a POSIX shell, prepare the documented local settings:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
cp .env.example .env
|
|
84
|
+
docker compose up -d postgres redis azurite mailpit
|
|
60
85
|
```
|
|
61
86
|
|
|
62
|
-
|
|
63
|
-
|
|
87
|
+
Then run **only the selected backend** after its locked dependency preparation:
|
|
88
|
+
|
|
89
|
+
| Backend | Native command |
|
|
90
|
+
| --- | --- |
|
|
91
|
+
| Python | `uv sync --frozen --project backend --extra test`, then `uv run --project backend uvicorn backend.apis.main:app --host 127.0.0.1 --port 8000` |
|
|
92
|
+
| Node.js | `(cd backend && npm ci && npm run build && npm start)` |
|
|
93
|
+
| Go | Copy `runtime.config.example.json` to `runtime.config.json`, then `(cd backend && go mod download && go run ./cmd/api)` |
|
|
94
|
+
|
|
95
|
+
Worker-enabled Python projects add `--extra functions` to frozen synchronization.
|
|
96
|
+
For a Python launch from `backend/`, use
|
|
97
|
+
`uv run uvicorn --app-dir .. backend.apis.main:app --port 8000`; it still reads
|
|
98
|
+
root `.env` without exporting the file's values. PowerShell users can use
|
|
99
|
+
`Copy-Item` and `Set-Location` rather than the POSIX parenthesized commands.
|
|
100
|
+
An explicit selector from `backend/` is `$env:LIFTOFF_ENV_FILE = '..\.env'`
|
|
101
|
+
for Python/Node, or `'..\runtime.config.json'` for Go.
|
|
102
|
+
|
|
103
|
+
Migration tools use the same resolved settings: Python Alembic, Node Drizzle,
|
|
104
|
+
and Go's `make migrate` wrapper around the existing pinned Goose tool. Running
|
|
105
|
+
migrations is a separate database mutation, not part of the startup probes.
|
|
106
|
+
|
|
107
|
+
### Compose and integration boundaries
|
|
108
|
+
|
|
109
|
+
Compose reads root `.env` for interpolation. Select a different dotenv file with
|
|
110
|
+
`docker compose --env-file environments/<env>/backend.env up --build`, using an
|
|
111
|
+
actually selected environment. Process values take precedence. Compose deliberately
|
|
112
|
+
keeps PostgreSQL, Redis, and blob addresses container-reachable while forwarding
|
|
113
|
+
the applicable model, messaging, CORS, and tracing settings.
|
|
114
|
+
|
|
115
|
+
`/health` and `/ready` are local process/configuration endpoints, not dependency
|
|
116
|
+
connectivity or production-readiness proofs. They make no model/provider request.
|
|
117
|
+
Backend containers listen on 8000; the frontend container serves static files on
|
|
118
|
+
80, mapped to 5173 by Compose.
|
|
119
|
+
|
|
120
|
+
For GenAI:
|
|
121
|
+
|
|
122
|
+
- `PYDANTIC_AI_MODEL` supports the locked `openai:`, `openai-chat:`, and
|
|
123
|
+
`openai-responses:` providers with `OPENAI_API_KEY` and optional
|
|
124
|
+
`OPENAI_BASE_URL`. Other providers need reviewed dependency/configuration work.
|
|
125
|
+
- Redis Streams publishes to `REDIS_STREAM_NAME` using `REDIS_URL`.
|
|
126
|
+
- `SERVICE_BUS_AUTH_MODE=managed-identity` requires
|
|
127
|
+
`SERVICE_BUS_FULLY_QUALIFIED_NAMESPACE`, `SERVICE_BUS_QUEUE_NAME`, and
|
|
128
|
+
`AZURE_CLIENT_ID`. `connection-string` requires the queue and
|
|
129
|
+
`SERVICE_BUS_CONNECTION_STRING`. Missing sender settings cannot report queued
|
|
130
|
+
ingestion.
|
|
131
|
+
- Both Langfuse keys blank means tracing is disabled; configuring exactly one
|
|
132
|
+
of `LANGFUSE_PUBLIC_KEY` and `LANGFUSE_SECRET_KEY` is an error.
|
|
133
|
+
`LANGFUSE_HOST` is optional.
|
|
134
|
+
|
|
135
|
+
Keep local secrets out of source control and build contexts. Root/frontend
|
|
136
|
+
`.dockerignore` files exclude host dependencies, caches, outputs, VCS metadata,
|
|
137
|
+
state, and secrets; the Function publish context also has `.funcignore`.
|
|
138
|
+
These runtime files remain project-owned, not managed update targets.
|
|
64
139
|
|
|
65
140
|
## `liftoff.manifest.json`: CLI-owned compatibility record
|
|
66
141
|
|
|
@@ -71,8 +146,6 @@ workload:
|
|
|
71
146
|
|
|
72
147
|
- `genai`: API stack, pattern, cloud, region, frontend, and environments.
|
|
73
148
|
- `standard`: API stack, cloud, region, frontend, and environments.
|
|
74
|
-
- `power-apps-code-app`: immutable starter repository, template path, commit,
|
|
75
|
-
and Code Apps plugin preference.
|
|
76
149
|
|
|
77
150
|
The manifest also records:
|
|
78
151
|
|
|
@@ -85,12 +158,14 @@ The manifest also records:
|
|
|
85
158
|
authorize update writes.
|
|
86
159
|
- OS-neutral path-part arrays.
|
|
87
160
|
- Repository governance profile, policy version 6, activation-contract version
|
|
88
|
-
|
|
161
|
+
2, state/evidence-header/approval schema versions 2,
|
|
162
|
+
graph/supersession/credential schema versions 1, the
|
|
89
163
|
exact phase-graph hash, and local `handoff-generated`, `handoff-partial`, or
|
|
90
164
|
disabled state.
|
|
91
165
|
|
|
92
|
-
Power Apps
|
|
93
|
-
|
|
166
|
+
An existing Power Apps manifest is rejected at its retired workload boundary
|
|
167
|
+
before starter metadata or artifact paths are interpreted. Its original files
|
|
168
|
+
remain unchanged.
|
|
94
169
|
|
|
95
170
|
Treat the manifest as CLI-owned. Restore it from version control or regenerate
|
|
96
171
|
with the matching Liftoff version when validation reports malformed identity,
|
|
@@ -98,19 +173,20 @@ paths, or hashes.
|
|
|
98
173
|
|
|
99
174
|
## Compatibility
|
|
100
175
|
|
|
101
|
-
Readers support artifact versions v2, v3, v4, v5, v6, and v7:
|
|
176
|
+
Readers support artifact versions v2, v3, v4, v5, v6, and v7 for API/GenAI projects:
|
|
102
177
|
|
|
103
178
|
- V2 normalizes the legacy flat API identity and records framework state as
|
|
104
179
|
uncertain without inventing agents.
|
|
105
180
|
- V3 normalizes flat GenAI or API identity plus framework and agent metadata.
|
|
106
|
-
- V4
|
|
181
|
+
- V4 introduces the discriminated workload model. Its formerly supported Power
|
|
182
|
+
Apps variant is now retired.
|
|
107
183
|
- V5 adds repository-governance handoff identity without claiming live
|
|
108
184
|
enforcement.
|
|
109
185
|
- V6 separates managed-core update authority from project generation
|
|
110
186
|
provenance.
|
|
111
|
-
- V7 adds deterministic setup identity
|
|
112
|
-
version 6, activation-contract version
|
|
113
|
-
|
|
187
|
+
- V7 adds deterministic setup identity. Current output uses
|
|
188
|
+
manifest artifact version 7, policy version 6, activation-contract version 2, and the canonical
|
|
189
|
+
phase-graph hash. Governance-disabled v7 manifests use the
|
|
114
190
|
disabled variant and do not fabricate activation identity.
|
|
115
191
|
|
|
116
192
|
Enabled governance manifests retain their recorded positive-integer policy
|
|
@@ -123,18 +199,37 @@ rewrite.
|
|
|
123
199
|
`liftoff update --check`, including `--check --json`, leaves an old manifest
|
|
124
200
|
byte-for-byte unchanged. A successful plain update writes v7 only after the
|
|
125
201
|
transaction succeeds. V2-v6 backend, frontend, database, dependency, container,
|
|
126
|
-
environment, documentation,
|
|
202
|
+
environment, documentation, and infrastructure entries become
|
|
127
203
|
project provenance without reading or changing current production bytes.
|
|
128
204
|
Intentionally deleted files remain absent. Only exact current core logical names
|
|
129
205
|
retain write authority.
|
|
130
206
|
|
|
131
207
|
The compatibility map is explicit; Liftoff does not use numeric less-than
|
|
132
|
-
comparisons to infer safety.
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
208
|
+
comparisons to infer execution safety.
|
|
209
|
+
|
|
210
|
+
| Contract | Current version |
|
|
211
|
+
| --- | --- |
|
|
212
|
+
| CLI package version | 0.11.1 |
|
|
213
|
+
| Activation package identity | 0.11.0 |
|
|
214
|
+
| Manifest write / supported reads | 7 / 2-7 for API and GenAI |
|
|
215
|
+
| Normative policy | 6 |
|
|
216
|
+
| Activation contract, state, evidence header, approval envelope, compatibility metadata | 2 |
|
|
217
|
+
| Phase graph, supersession, credential policy | 1 |
|
|
218
|
+
| Assessment report and control catalog | 1 |
|
|
219
|
+
|
|
220
|
+
The 0.11.1 CLI patch retains the 0.11.0 activation identity because its phase
|
|
221
|
+
semantics and graph are unchanged. Independent infrastructure provenance
|
|
222
|
+
explicitly recognizes both generation versions; unknown releases are not
|
|
223
|
+
automatically trusted or treated as compatible.
|
|
224
|
+
|
|
225
|
+
Known activation-v1 history remains readable but **diagnostic-only**, not
|
|
226
|
+
executable proof. Managed-core maintenance can continue without rewriting user-owned
|
|
227
|
+
historical identity, state, or receipts. A readable historical manifest cannot
|
|
228
|
+
bootstrap current activation or authorize provider scope, even when no state
|
|
229
|
+
file exists or a separate current state is supplied. No automatic conversion, reset, or public
|
|
230
|
+
historical reconciliation workflow is provided. Future/mixed tuples, ad hoc
|
|
231
|
+
state, and unknown graph hashes remain blocked. No reader converts prose,
|
|
232
|
+
filenames, checked tasks, or old placeholder digests into current evidence.
|
|
138
233
|
|
|
139
234
|
## Artifact ownership
|
|
140
235
|
|
|
@@ -149,6 +244,11 @@ category or filename:
|
|
|
149
244
|
| `framework` | Official framework | Validated through framework markers and maintained by that framework |
|
|
150
245
|
| `seed` | Developer/project | Written once and never reconciled |
|
|
151
246
|
|
|
247
|
+
New Spec Kit projects explicitly seed
|
|
248
|
+
`specs/000-liftoff-bootstrap/{spec.md,plan.md,tasks.md}`. These are not framework
|
|
249
|
+
templates or managed-core files. Missing older bundles are an adoption blocker,
|
|
250
|
+
not permission for update or force to create them.
|
|
251
|
+
|
|
152
252
|
The manifest is a CLI-owned transaction record rather than an ordinary
|
|
153
253
|
template artifact. Current managed core is limited to the exact repository
|
|
154
254
|
governance policy, context, guide, phase graph, compatibility metadata,
|
|
@@ -174,7 +274,12 @@ those files, but it does not advance, reset, or delete a phase.
|
|
|
174
274
|
## Contract conventions
|
|
175
275
|
|
|
176
276
|
- Writers use `artifactVersion` 7; readers support v2, v3, v4, v5, v6, and v7.
|
|
177
|
-
- Artifact logical names and catalog identifiers are append-only
|
|
277
|
+
- Artifact logical names and catalog identifiers are append-only except for
|
|
278
|
+
explicitly reviewed retirements. In 0.11.0, the eight
|
|
279
|
+
[flat-root OpenTofu identities](azure-deployment.md#explicit-flat-root-identity-retirement)
|
|
280
|
+
are retired from **new scaffold output only**. Their historical paths,
|
|
281
|
+
identities, and generation hashes remain provenance, not aliases or deletion
|
|
282
|
+
authority. Retained tfvars IDs alone do not establish the independent layout.
|
|
178
283
|
- Rendering is deterministic and does not depend on timestamps, host versions,
|
|
179
284
|
or network state.
|
|
180
285
|
- `.liftoff/governance/` contains managed setup definitions; `governance/`
|
|
@@ -102,12 +102,15 @@ while unrecorded conflicts remain user-owned. No update mode runs an agent or
|
|
|
102
102
|
activates GitHub settings.
|
|
103
103
|
|
|
104
104
|
Projects carrying governance policy versions 2 through 5 preview policy version
|
|
105
|
-
6, manifest v7, and activation-contract
|
|
105
|
+
6, manifest v7, and activation-contract v2 as managed-core drift. Review the
|
|
106
106
|
canonical phase graph, private-runner credential contract, bootstrap-state
|
|
107
107
|
retention/disposal contract, and active-change reconciliation before
|
|
108
108
|
replacement. Updating the handoff never provisions Azure or GitHub resources;
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
active downstream work must have supported identity and current evidence before
|
|
110
|
+
it can execute. The CLI provides no public identity-acknowledgment or historical
|
|
111
|
+
reconciliation workflow.
|
|
112
|
+
Historical activation-v1 state and receipts are diagnostic-only, not
|
|
113
|
+
automatically migrated or made executable by updating core files.
|
|
111
114
|
|
|
112
115
|
The manifest-v7 transition releases every legacy non-core artifact into project
|
|
113
116
|
provenance without writing, restoring, moving, or deleting its path.
|
|
@@ -118,7 +121,16 @@ Supported readers normalize manifest v2-v6 and write only v7 after all
|
|
|
118
121
|
preflights pass. Future versions, unsupported policy/contract/schema tuples,
|
|
119
122
|
unknown graph hashes, unversioned activation state, or prose-only task history
|
|
120
123
|
block with explicit upgrade, import-mapping, or reconciliation remedies. Liftoff
|
|
121
|
-
never fabricates evidence from old checkboxes.
|
|
124
|
+
never fabricates evidence from old checkboxes. A diagnostic is not a command to
|
|
125
|
+
hand-write mappings, retag receipts, or manufacture missing history.
|
|
126
|
+
|
|
127
|
+
The new infrastructure layout uses shared application modules and independent
|
|
128
|
+
environment roots. Its eight [retired flat-root identities](azure-deployment.md#explicit-flat-root-identity-retirement)
|
|
129
|
+
remain readable as historical provenance, not aliases for new paths. Existing
|
|
130
|
+
files, state, and generation hashes remain untouched. Adding an environment
|
|
131
|
+
requires recorded independent-root provenance and safe existing module files;
|
|
132
|
+
legacy or unknown layouts need separately reviewed migration. Core context
|
|
133
|
+
updates cannot claim that this migration happened.
|
|
122
134
|
|
|
123
135
|
Major supported-stack releases apply to new scaffolds. Existing projects adopt
|
|
124
136
|
runtime, lock, Docker, provider, framework, and application changes through a
|
|
@@ -146,5 +158,20 @@ framework pipeline, including separate global OpenSpec profile authorization,
|
|
|
146
158
|
and leaves the source byte-for-byte unchanged. `--force` does not permit a
|
|
147
159
|
non-empty migration target.
|
|
148
160
|
|
|
149
|
-
|
|
150
|
-
|
|
161
|
+
The scan reads dependency declarations rather than comments or example text.
|
|
162
|
+
Python setup/test configuration and non-workflow `.github` files remain
|
|
163
|
+
explicit inventory items; dynamic or malformed declarations produce review
|
|
164
|
+
diagnostics rather than invented stack defaults. Source configuration code is
|
|
165
|
+
never executed to discover dependencies.
|
|
166
|
+
|
|
167
|
+
Explicit workload, API-stack, and frontend choices control the target mapping.
|
|
168
|
+
For example, Go source selected for a Node target receives porting instructions,
|
|
169
|
+
not Go-only destination paths; a declined frontend remains a placement decision.
|
|
170
|
+
|
|
171
|
+
Complete the mapped work and run the backend tests, `liftoff validate`, and
|
|
172
|
+
`liftoff doctor` before deleting `migration/legacy/`. OpenSpec archival follows
|
|
173
|
+
the completed change; a Spec Kit migration checklist is finalized locally
|
|
174
|
+
without an invented archive command.
|
|
175
|
+
|
|
176
|
+
Power Apps creation, maintenance, and migration are retired. Existing Power Apps
|
|
177
|
+
manifests are rejected without modifying or converting their application files.
|
package/docs/getting-started.md
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
# Getting started
|
|
2
2
|
|
|
3
|
-
Liftoff is an interactive project initializer for governed GenAI applications
|
|
4
|
-
standard APIs
|
|
3
|
+
Liftoff is an interactive project initializer for governed GenAI applications
|
|
4
|
+
and standard APIs.
|
|
5
5
|
|
|
6
6
|
## 1. Install the CLI
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
Workstation readiness requires stable Node.js 24 LTS at 24.20.0 or newer within
|
|
9
|
+
that line, plus npm 12.x at 12.0.2 or newer when selected tools need it.
|
|
10
|
+
Python workloads use Python 3.14.x with frozen `uv` dependency locks.
|
|
10
11
|
|
|
11
12
|
The canonical release registry is `https://registry.npmjs.org`:
|
|
12
13
|
|
|
13
14
|
```bash
|
|
14
|
-
npm view @msn-control/liftoff@latest version --registry=https://registry.npmjs.org
|
|
15
|
-
npm install -g @msn-control/liftoff@latest
|
|
15
|
+
npm view @msn-control/liftoff@latest version --registry=https://registry.npmjs.org --@msn-control:registry=https://registry.npmjs.org
|
|
16
|
+
npm install -g @msn-control/liftoff@latest
|
|
16
17
|
liftoff --version
|
|
17
18
|
```
|
|
18
19
|
|
|
@@ -22,6 +23,10 @@ If your organization requires a managed npm registry, query
|
|
|
22
23
|
canonical npm. Stop if the mirror is older or rejects the explicit current
|
|
23
24
|
version; ask the mirror owner to synchronize or approve the release. Liftoff
|
|
24
25
|
does not modify `.npmrc` or bypass registry policy.
|
|
26
|
+
The read-only canonical query isolates both default and scoped registry
|
|
27
|
+
overrides. Installation intentionally honors the configured
|
|
28
|
+
`@msn-control:registry` before the default registry; do not force a canonical
|
|
29
|
+
download around an organization's delivery policy.
|
|
25
30
|
|
|
26
31
|
Versions predating the self-upgrade command require that manual global install
|
|
27
32
|
once. After a capable version is installed globally with npm, use:
|
|
@@ -50,7 +55,7 @@ cd my-project
|
|
|
50
55
|
|
|
51
56
|
The guided flow asks for:
|
|
52
57
|
|
|
53
|
-
1. Project identity and workload: GenAI
|
|
58
|
+
1. Project identity and workload: GenAI or API.
|
|
54
59
|
2. Only the architecture choices applicable to that workload.
|
|
55
60
|
For GenAI, **I'm not sure yet - Generic GenAI starter** is the safe default
|
|
56
61
|
when no specialization has been selected.
|
|
@@ -62,8 +67,7 @@ The guided flow asks for:
|
|
|
62
67
|
6. Whether to configure the default-off GitHub-hosted Copilot coding agent when
|
|
63
68
|
OpenSpec and GitHub Copilot are selected.
|
|
64
69
|
7. A Spec Kit default agent when both agents are selected.
|
|
65
|
-
8.
|
|
66
|
-
9. Plan confirmation, workstation readiness, and any separate install or
|
|
70
|
+
8. Plan confirmation, workstation readiness, and any separate install or
|
|
67
71
|
overwrite permissions that are needed.
|
|
68
72
|
|
|
69
73
|
Liftoff renders into temporary staging, runs the official framework initializer
|
|
@@ -74,12 +78,12 @@ and asks separately before staging.
|
|
|
74
78
|
|
|
75
79
|
When governance is enabled, `/liftoff-setup` is the next selected-agent action.
|
|
76
80
|
It has no model-selection requirement: safety comes from the Liftoff CLI phase
|
|
77
|
-
graph, local evidence, approval envelopes, and readback.
|
|
78
|
-
syncs, and archives
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
or read-only checks.
|
|
81
|
+
graph, local evidence, approval envelopes, and readback. OpenSpec setup completes,
|
|
82
|
+
syncs, and archives `bootstrap-<project>`; Spec Kit validates and finalizes
|
|
83
|
+
`specs/000-liftoff-bootstrap/` locally. Neither workflow invents completed product
|
|
84
|
+
work. Missing approval-persistence, credential-enrollment, and production phase
|
|
85
|
+
executors remain specific blockers. Commit and push are never implicit in
|
|
86
|
+
`liftoff init`, `--yes`, or read-only checks.
|
|
83
87
|
|
|
84
88
|
For deterministic generic generation, use `--type genai --pattern generic`.
|
|
85
89
|
|
|
@@ -97,26 +101,35 @@ non-empty target.
|
|
|
97
101
|
|
|
98
102
|
## 4. Local baseline setup verifies
|
|
99
103
|
|
|
100
|
-
`/liftoff-setup` runs only local, project-applicable baseline checks before
|
|
101
|
-
|
|
104
|
+
`/liftoff-setup` runs only local, project-applicable baseline checks before
|
|
105
|
+
archiving the OpenSpec seed or finalizing the Spec Kit bundle. Commands run in
|
|
106
|
+
their declared component directories, not all from an arbitrary working directory:
|
|
102
107
|
|
|
103
108
|
```bash
|
|
104
109
|
liftoff validate
|
|
105
110
|
# backend tests from the generated README when a backend exists
|
|
106
111
|
# frontend build from the generated README when a frontend exists
|
|
107
112
|
docker compose config -q
|
|
113
|
+
# From infrastructure/opentofu/azure/:
|
|
108
114
|
tofu fmt -check -recursive
|
|
115
|
+
# Within each selected environments/<environment>/ infrastructure root:
|
|
109
116
|
tofu init -backend=false
|
|
110
117
|
tofu validate
|
|
111
|
-
|
|
118
|
+
# OpenSpec only, from the project root (replace the generated change name):
|
|
119
|
+
openspec validate bootstrap-my-project --strict
|
|
112
120
|
```
|
|
113
121
|
|
|
114
|
-
Absent components are inapplicable:
|
|
115
|
-
|
|
116
|
-
frontend build evidence. The baseline does not run `tofu plan`, `tofu apply`,
|
|
122
|
+
Absent optional components are inapplicable: an API project without a frontend
|
|
123
|
+
skips frontend build evidence. The baseline does not run `tofu plan`, `tofu apply`,
|
|
117
124
|
start containers, deploy, mutate GitHub, or require cloud credentials. If a check
|
|
118
|
-
fails, the seed remains
|
|
119
|
-
|
|
125
|
+
fails, the seed remains unfinished. After repair, explicit execution can retry
|
|
126
|
+
the local baseline; read-only `resume` does not run it. Current unchanged proof
|
|
127
|
+
can be reused, while changed inputs require new evidence.
|
|
128
|
+
Dependencies must already be usable, or separately installed with explicit
|
|
129
|
+
consent; passing a baseline does not prove that installation or consent happened.
|
|
130
|
+
Spec Kit's B001–B006 projection is finalized only after its checks pass.
|
|
131
|
+
Legacy/shared or unknown infrastructure layouts block baseline execution with a
|
|
132
|
+
migration-required result rather than omitting those checks.
|
|
120
133
|
|
|
121
134
|
You can run read-only maintenance at any time:
|
|
122
135
|
|
|
@@ -132,14 +145,14 @@ liftoff governance verify --json
|
|
|
132
145
|
adds read-only workstation, runtime, authentication, dependency,
|
|
133
146
|
workload-specific, and governance-state diagnostics.
|
|
134
147
|
|
|
135
|
-
After
|
|
136
|
-
|
|
148
|
+
After the local bootstrap handoff, normal development follows your selected
|
|
149
|
+
workflow. Repository publication and production activation remain separate:
|
|
137
150
|
|
|
138
151
|
- GenAI and API projects: copy `.env.example` to `.env`, install the generated
|
|
139
152
|
stack dependencies, then use `liftoff dev` and `liftoff infra` to print local
|
|
140
|
-
development and infrastructure commands.
|
|
141
|
-
|
|
142
|
-
|
|
153
|
+
development and infrastructure commands. Native Go also copies
|
|
154
|
+
`runtime.config.example.json` to `runtime.config.json`; see the
|
|
155
|
+
[stack-specific configuration recipes](configuration-and-manifests.md#application-runtime-configuration).
|
|
143
156
|
- OpenSpec or Spec Kit changes drive normal feature work; release and hotfix
|
|
144
157
|
flows follow the governed GitFlow plan after activation evidence is green.
|
|
145
158
|
|
|
@@ -151,7 +164,7 @@ Use `liftoff plan` to resolve choices and preview requirements without writing
|
|
|
151
164
|
files or running installers:
|
|
152
165
|
|
|
153
166
|
```bash
|
|
154
|
-
liftoff plan --type
|
|
167
|
+
liftoff plan --type standard --api node --spec openspec --agents copilot
|
|
155
168
|
```
|
|
156
169
|
|
|
157
170
|
Automation can pass the same options to `liftoff init`. Use `--yes` for project
|
|
@@ -176,5 +189,5 @@ source remains byte-for-byte unchanged.
|
|
|
176
189
|
liftoff migrate ../legacy-app --region eastus --agents copilot,claude --yes
|
|
177
190
|
```
|
|
178
191
|
|
|
179
|
-
Power Apps
|
|
180
|
-
|
|
192
|
+
Power Apps support is retired, including existing-project maintenance. Retired
|
|
193
|
+
inputs are rejected without converting or deleting the original application.
|
package/docs/prerequisites.md
CHANGED
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
# Prerequisites
|
|
2
2
|
|
|
3
3
|
Liftoff derives workstation and project requirements from the complete resolved
|
|
4
|
-
plan. A
|
|
5
|
-
|
|
4
|
+
plan. A Go API does not inherit Python backend dependencies, although a selected
|
|
5
|
+
framework such as Spec Kit can require Python for its own tooling.
|
|
6
6
|
|
|
7
7
|
## Baseline
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
9
|
+
- Workstation Node.js: stable Node.js 24 LTS, version 24.20.0 or newer within 24.x.
|
|
10
|
+
- npm-dependent stacks or OpenSpec: stable npm 12.x, version 12.0.2 or newer.
|
|
11
|
+
- Python projects: stable Python 3.14.x and `uv` 0.12.x at version 0.12.7 or newer.
|
|
12
|
+
- Go projects: stable Go 1.27.x.
|
|
13
|
+
- Generated Azure infrastructure: stable OpenTofu 1.12.x at version 1.12.6 or newer.
|
|
13
14
|
- Selected framework: OpenSpec 1.11.0 or Spec Kit 1.0.1 exactly.
|
|
14
15
|
- Selected agents: GitHub Copilot, Claude Code, or both.
|
|
15
16
|
|
|
17
|
+
Minimum versions do not authorize a different, untested release line. Release
|
|
18
|
+
candidates and other prereleases do not satisfy stable floors or exact framework
|
|
19
|
+
pins. A working Node.js executable does not establish npm readiness: when npm is
|
|
20
|
+
required, it is probed separately before destination writes. A missing npm
|
|
21
|
+
executable requires a separately reviewed machine-level repair; Liftoff does not
|
|
22
|
+
try to run the missing executable or reinstall Node.js on its behalf.
|
|
23
|
+
|
|
16
24
|
Automatic `liftoff upgrade` additionally requires that the running canonical
|
|
17
25
|
`@msn-control/liftoff` package is a normal global npm installation beneath
|
|
18
26
|
`npm root --global`. Local dependencies, `npx` cache copies, linked checkouts,
|
|
@@ -27,6 +35,8 @@ runtime. GenAI uses Python 3.14 and the Python/FastAPI/PydanticAI stack.
|
|
|
27
35
|
Blocking checks must be ready before initialization can safely complete:
|
|
28
36
|
|
|
29
37
|
- Required runtime and minimum version.
|
|
38
|
+
- Required package managers, including npm for Node.js dependencies, a frontend,
|
|
39
|
+
or OpenSpec.
|
|
30
40
|
- Selected spec framework CLI.
|
|
31
41
|
- Every selected coding agent.
|
|
32
42
|
- For OpenSpec, global profile `custom`, delivery `both`, and all 12 workflows.
|
|
@@ -36,7 +46,6 @@ Advisory checks describe useful but deferrable capabilities:
|
|
|
36
46
|
- Docker CLI and daemon health for API workloads.
|
|
37
47
|
- OpenTofu for generated Azure infrastructure.
|
|
38
48
|
- Azure CLI and observable authentication health.
|
|
39
|
-
- Optional Code Apps plugin state for Power Apps.
|
|
40
49
|
|
|
41
50
|
Authentication checks are read-only. Liftoff never stores credentials or signs
|
|
42
51
|
in to a cloud or agent on your behalf.
|
|
@@ -63,7 +72,7 @@ can register each missing namespace explicitly before dependent resources.
|
|
|
63
72
|
without writing files or running installers:
|
|
64
73
|
|
|
65
74
|
```bash
|
|
66
|
-
liftoff plan --type
|
|
75
|
+
liftoff plan --type standard --api node --spec openspec --agents copilot,claude
|
|
67
76
|
```
|
|
68
77
|
|
|
69
78
|
## Tool installation consent
|
|
@@ -103,19 +112,22 @@ Project-local dependency setup is separate from workstation tools and requires
|
|
|
103
112
|
`--install-dependencies` or interactive approval after a successful project
|
|
104
113
|
merge.
|
|
105
114
|
|
|
106
|
-
For Power Apps, Liftoff runs only the root locked install:
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
npm ci
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
The generated `package.json` and `package-lock.json` are validated before
|
|
113
|
-
installation and protected from installer mutation. If dependency setup is
|
|
114
|
-
skipped or fails, Liftoff prints the exact resume command rather than claiming
|
|
115
|
-
the project is ready.
|
|
116
|
-
|
|
117
115
|
GenAI and API projects use their generated stack-native locked dependency
|
|
118
|
-
commands.
|
|
116
|
+
commands. If dependency setup is skipped or fails, Liftoff prints the exact
|
|
117
|
+
resume command rather than claiming the project is ready.
|
|
118
|
+
|
|
119
|
+
Recovery output identifies its shell: POSIX shell on macOS/Linux and PowerShell
|
|
120
|
+
on Windows. Copy the command into that shell; directory names and arguments are
|
|
121
|
+
quoted literally rather than expanded as environment variables.
|
|
122
|
+
|
|
123
|
+
If protected metadata changes during dependency setup, Liftoff stops and lists
|
|
124
|
+
the changed paths. It preserves those edits instead of assuming the installer
|
|
125
|
+
caused them and restoring older bytes over concurrent work. Review and repair
|
|
126
|
+
the metadata before retrying. Dependency scripts can also change other project
|
|
127
|
+
files; this check is not a script sandbox.
|
|
128
|
+
Dependencies that are already installed and usable do not need a new install
|
|
129
|
+
merely to satisfy a bootstrap checkbox. Local checks prove usability, not that
|
|
130
|
+
an installation or its consent occurred.
|
|
119
131
|
|
|
120
132
|
Python projects use the generated lock without resolving new versions:
|
|
121
133
|
|
|
@@ -130,24 +142,11 @@ Liftoff's npm locks are generated with npm 12.0.2 and verified in the supported
|
|
|
130
142
|
compatibility lanes. Do not replace a committed lock with an install from
|
|
131
143
|
open-ended manifest ranges.
|
|
132
144
|
|
|
133
|
-
## Power Apps local CLI
|
|
134
|
-
|
|
135
|
-
The Power Apps CLI is supplied by the generated project dependency graph.
|
|
136
|
-
Liftoff checks it without downloading another package:
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
npx --no-install power-apps --version
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
If `node_modules` is absent, run `npm ci` first. Environment binding and cloud
|
|
143
|
-
authentication remain separate later actions.
|
|
144
|
-
|
|
145
145
|
## Agent detection
|
|
146
146
|
|
|
147
147
|
Copilot can be detected through its CLI or supported VS Code extensions.
|
|
148
148
|
Claude Code is checked with its version and doctor commands. When both are
|
|
149
149
|
selected, both must be ready.
|
|
150
150
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
result is reported as not observable rather than silently treated as missing.
|
|
151
|
+
Power Apps and Code Apps plugin preparation are retired. Their inputs are
|
|
152
|
+
rejected before selecting or installing a former workload-specific tool set.
|