@msn-control/liftoff 0.10.3 → 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 +364 -20
- package/README.md +29 -29
- package/assets/governance/single-maintainer-gitflow/assessment-controls.json +39 -0
- package/assets/supported-stack.json +7 -138
- 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 -441
- package/dist/args.js.map +1 -1
- package/dist/artifact-lifecycle.d.ts +1 -21
- package/dist/artifact-lifecycle.js +1 -73
- 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 +4 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +4 -35
- package/dist/commands.js +3 -2812
- 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 -41
- package/dist/file-system.js +9 -1204
- 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 +107 -103
- 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 -24
- package/dist/governance-activation/readiness.js +1 -220
- 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 +10 -2
- package/dist/governance-activation/seed-lifecycle.js +244 -66
- 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 -157
- package/dist/governance-activation/transitions.js +143 -2045
- 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 +7 -0
- package/dist/governance-assessment/catalog.js +31 -0
- package/dist/governance-assessment/catalog.js.map +1 -0
- package/dist/governance-assessment/command.d.ts +10 -0
- package/dist/governance-assessment/command.js +77 -0
- package/dist/governance-assessment/command.js.map +1 -0
- package/dist/governance-assessment/engine.d.ts +14 -0
- package/dist/governance-assessment/engine.js +935 -0
- package/dist/governance-assessment/engine.js.map +1 -0
- package/dist/governance-assessment/index.d.ts +5 -0
- package/dist/governance-assessment/index.js +6 -0
- package/dist/governance-assessment/index.js.map +1 -0
- package/dist/governance-assessment/live-normalize.d.ts +1 -0
- package/dist/governance-assessment/live-normalize.js +2 -0
- package/dist/governance-assessment/live-normalize.js.map +1 -0
- package/dist/governance-assessment/live-transport.d.ts +34 -0
- package/dist/governance-assessment/live-transport.js +455 -0
- package/dist/governance-assessment/live-transport.js.map +1 -0
- package/dist/governance-assessment/live.d.ts +2 -0
- package/dist/governance-assessment/live.js +689 -0
- package/dist/governance-assessment/live.js.map +1 -0
- package/dist/governance-assessment/predicates.d.ts +1 -0
- package/dist/governance-assessment/predicates.js +2 -0
- package/dist/governance-assessment/predicates.js.map +1 -0
- package/dist/governance-assessment/project.d.ts +33 -0
- package/dist/governance-assessment/project.js +178 -0
- package/dist/governance-assessment/project.js.map +1 -0
- package/dist/governance-assessment/readers.d.ts +14 -0
- package/dist/governance-assessment/readers.js +122 -0
- package/dist/governance-assessment/readers.js.map +1 -0
- package/dist/governance-assessment/report.d.ts +1 -0
- package/dist/governance-assessment/report.js +2 -0
- package/dist/governance-assessment/report.js.map +1 -0
- package/dist/governance-assessment/sanitize.d.ts +1 -0
- package/dist/governance-assessment/sanitize.js +2 -0
- package/dist/governance-assessment/sanitize.js.map +1 -0
- package/dist/governance-assessment/types.d.ts +6 -0
- package/dist/governance-assessment/types.js +2 -0
- package/dist/governance-assessment/types.js.map +1 -0
- package/dist/governance-assessment/yaml.d.ts +1 -0
- package/dist/governance-assessment/yaml.js +2 -0
- package/dist/governance-assessment/yaml.js.map +1 -0
- 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 +5 -1
- package/dist/migrate-plan.js +87 -10
- 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 +5 -1
- package/dist/process-runner.js +164 -8
- package/dist/process-runner.js.map +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 +67 -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/release-identity.js +19 -0
- package/dist/release-identity.js.map +1 -1
- package/dist/repository-governance.d.ts +10 -2
- package/dist/repository-governance.js +240 -99
- 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/contract.d.ts +2 -0
- package/dist/telemetry/contract.js +7 -0
- package/dist/telemetry/contract.js.map +1 -1
- package/dist/telemetry/index.d.ts +1 -1
- package/dist/templates.d.ts +10 -20
- package/dist/templates.js +52 -3238
- 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 +127 -11
- package/docs/configuration-and-manifests.md +150 -35
- 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 +45 -47
- package/docs/repository-governance.md +207 -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/telemetry.md +9 -3
- package/docs/troubleshooting.md +107 -49
- package/docs/workloads.md +53 -62
- package/package.json +6 -8
- 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 -173
- 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
|
@@ -14,9 +14,17 @@ cd my-project
|
|
|
14
14
|
/liftoff-setup
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
`/liftoff-setup`
|
|
18
|
-
|
|
19
|
-
read-only Phase 0
|
|
17
|
+
`/liftoff-setup` uses the deterministic Liftoff governance engine to complete
|
|
18
|
+
the workflow-specific local bootstrap, then encounters the separately authorized
|
|
19
|
+
publication and read-only Phase 0 boundaries. The user-owned activation state records
|
|
20
|
+
execution, not an agent's claim of completion.
|
|
21
|
+
|
|
22
|
+
**Current activation limits:** local bootstrap is implemented, but the CLI does
|
|
23
|
+
not yet wire every production phase executor or expose approval persistence
|
|
24
|
+
and secure credential enrollment through the command-only setup flow. Missing
|
|
25
|
+
capabilities stop with a blocker; they are not completed by assessment or by
|
|
26
|
+
hand-editing evidence. See the [developer follow-up plan](../DEVELOPER.md#activation-completeness-and-separate-follow-up-plan)
|
|
27
|
+
for the remaining activation work.
|
|
20
28
|
|
|
21
29
|
## Managed files and user-owned state
|
|
22
30
|
|
|
@@ -31,6 +39,8 @@ Enabled governance adds managed-core files:
|
|
|
31
39
|
.liftoff/governance/credential-policy.schema.json
|
|
32
40
|
.github/prompts/liftoff-setup.prompt.md # Copilot selected
|
|
33
41
|
.claude/commands/liftoff-setup.md # Claude selected
|
|
42
|
+
.github/prompts/liftoff-governance-assess.prompt.md # Copilot selected
|
|
43
|
+
.claude/commands/liftoff-governance-assess.md # Claude selected
|
|
34
44
|
```
|
|
35
45
|
|
|
36
46
|
Older generated setup aliases are retired. Use `liftoff update --force` after
|
|
@@ -52,6 +62,126 @@ The complete policy is packaged at
|
|
|
52
62
|
Policy version 6 treats numbered policy sections as capability chapters, not
|
|
53
63
|
execution order. The managed phase graph is the sole execution-order authority.
|
|
54
64
|
|
|
65
|
+
## Read-only governance assessment
|
|
66
|
+
|
|
67
|
+
`/liftoff-governance-assess` is separate from `/liftoff-setup`, which remains the
|
|
68
|
+
primary post-init path. Both OpenSpec and Spec Kit receive only their selected
|
|
69
|
+
agents' assessment integrations when governance is enabled. Initialization never
|
|
70
|
+
runs assessment. It needs no commit, push, activation, or cloud credentials:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
liftoff governance assess --json
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The same CLI command works in an ordinary Git repository without initialization,
|
|
77
|
+
a manifest, or generated slash commands. An explicit path is authoritative;
|
|
78
|
+
otherwise the nearest applicable Git or Liftoff boundary is used, including
|
|
79
|
+
linked worktrees and unborn repositories. A malformed, unreadable, symlinked,
|
|
80
|
+
dangling, or retired inner manifest blocks fallback to an outer project or Git
|
|
81
|
+
repository. Assessment never installs agent wrappers into unrelated repositories.
|
|
82
|
+
|
|
83
|
+
For ordinary Git repositories the installed single-maintainer policy is the
|
|
84
|
+
displayed target, not a policy inferred from existing branches. Recorded Liftoff
|
|
85
|
+
identity stays nullable, and missing baseline, ownership, or evidence stays
|
|
86
|
+
`not-observed`. It is not the same as a valid Liftoff governance opt-out.
|
|
87
|
+
|
|
88
|
+
The pinned target is the **installed CLI** and its packaged policy, activation
|
|
89
|
+
identity, phase graph, and assessment control catalog, never registry latest.
|
|
90
|
+
The report compares four distinct layers: target, recorded project baseline,
|
|
91
|
+
declared project configuration, and observed enforcement. Each finding includes
|
|
92
|
+
expected and observed values, scope, provenance and capture metadata, impact,
|
|
93
|
+
and ownership-aware advisory remediation. Matching CLI versions or generated
|
|
94
|
+
hashes alone do not prove alignment.
|
|
95
|
+
The project policy version is shown when available. JSON observations may also
|
|
96
|
+
retain optional normalized `facts` alongside evaluator predicate values so a
|
|
97
|
+
predicate result does not hide observed configuration. Raw provider payloads are
|
|
98
|
+
not retained.
|
|
99
|
+
|
|
100
|
+
The default is **local-only with no network access** or registry lookup.
|
|
101
|
+
All assessment invocations, including `--live` and `--help`, skip telemetry and
|
|
102
|
+
disclosure entirely. Local Git reads inspect only repository root, HEAD, and
|
|
103
|
+
origin metadata, never `git status`, which can execute clean filters.
|
|
104
|
+
Applicable live proof stays unobserved. Only an explicit live-read request
|
|
105
|
+
allows the agent wrapper to substitute:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
liftoff governance assess --live --json
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Live mode performs bounded read-only GitHub/Azure metadata access with existing
|
|
112
|
+
permissions and verified repository/environment/resource bindings. Runner
|
|
113
|
+
organization metadata is limited to already-bound assignment IDs. Azure reads
|
|
114
|
+
do not guess a default subscription or search unrelated resources. Neither mode
|
|
115
|
+
enrolls credentials, expands permissions, registers providers, reads state blobs,
|
|
116
|
+
executes project code, runs scanners or infrastructure tools, or changes local
|
|
117
|
+
or remote configuration.
|
|
118
|
+
Azure scope and evidence-backed applicability require a current active-baseline
|
|
119
|
+
and referenced, validated saved-plan/evidence receipts. Current receipts bind
|
|
120
|
+
their canonical payload and live readback through `bodyDigest`; a header hash
|
|
121
|
+
alone cannot authorize changed runner IDs or Azure resources. Placeholder digests,
|
|
122
|
+
historical v1 receipts, future-dated approvals, and inferred bindings cannot establish proof. Missing
|
|
123
|
+
bindings remain `not-observed`. Do not fabricate or hand-edit activation state,
|
|
124
|
+
baselines, receipts, or evidence to manufacture alignment; use separately
|
|
125
|
+
approved setup or governance work to obtain trustworthy proof.
|
|
126
|
+
|
|
127
|
+
| Finding | Meaning |
|
|
128
|
+
| --- | --- |
|
|
129
|
+
| `aligned` | All required proof layers are available, fresh, and match the target |
|
|
130
|
+
| `outdated` | A recognized older baseline or recorded managed artifact differs from the target |
|
|
131
|
+
| `missing` | Complete authoritative observation proves an applicable requirement absent |
|
|
132
|
+
| `conflicting` | Known settings contradict the target, or declared and observed layers disagree |
|
|
133
|
+
| `approved-exception` | An exact, catalog-permitted, valid, unexpired approval covers the difference |
|
|
134
|
+
| `inapplicable` | Validated workload facts establish that the control does not apply |
|
|
135
|
+
| `not-observed` | Applicability or required proof is unknown, stale, denied, unsupported, or incomplete |
|
|
136
|
+
|
|
137
|
+
Coverage counts unknown applicability, unobserved live proof, and unsupported
|
|
138
|
+
evaluators explicitly. A local workflow declaration is not proof that its check
|
|
139
|
+
is enforced. Denied access, masked 404s, incomplete pagination, and timeouts are
|
|
140
|
+
not proof of absence. Single-maintainer expectations follow the canonical
|
|
141
|
+
zero-required-reviewer policy rather than generic peer-review advice.
|
|
142
|
+
Approved exceptions remain differences; free-form or expired claims cannot
|
|
143
|
+
waive controls or hide coverage gaps.
|
|
144
|
+
|
|
145
|
+
Collection failures do not erase independent facts. For example, denied GitHub
|
|
146
|
+
access cannot invalidate an unchanged local workflow, and a denied Azure resource
|
|
147
|
+
cannot hide a proven violation on another resource. Effective/classic/inherited
|
|
148
|
+
branch protection, release/hotfix check bindings, transitive required-job
|
|
149
|
+
dependencies, and complete runner restrictions are evaluated separately.
|
|
150
|
+
Rejected exception claims retain diagnostics instead of disappearing.
|
|
151
|
+
Required checks bind both their names and application identities. A passing
|
|
152
|
+
aggregator cannot hide a required scanner with `continue-on-error`; unresolved
|
|
153
|
+
reusable-workflow, matrix, or dynamic semantics stay unobserved. Runner checks
|
|
154
|
+
include repository/group restrictions, not only matching IDs or labels.
|
|
155
|
+
|
|
156
|
+
The catalog retains 30 controls across 17 families, including 10 unsupported
|
|
157
|
+
evaluators. Available evaluators are not completed proof; always-applicable
|
|
158
|
+
unsupported controls keep enabled assessments partial even with live access.
|
|
159
|
+
|
|
160
|
+
Human and schema-v1 JSON reports share `readOnly: true`, target and project
|
|
161
|
+
identities, findings, diagnostics, provenance, and coverage. Exit **0** means
|
|
162
|
+
fully observed `aligned` or explicitly disabled `not-applicable` governance
|
|
163
|
+
(not an alignment claim). Exit **2** means `partial` coverage or `differences`,
|
|
164
|
+
including approved exceptions. Exit **1** means `error`: invalid/unsafe input
|
|
165
|
+
or an invalid packaged catalog prevents a trustworthy report. Local-only runs
|
|
166
|
+
normally return partial coverage. Exit 2 is advisory, not proof that governance
|
|
167
|
+
is broken or permission to remediate.
|
|
168
|
+
|
|
169
|
+
Reports go to stdout only, never activation state or evidence. Assessment cannot
|
|
170
|
+
complete Phase 0, satisfy an approval gate, or advance any phase. The wrapper
|
|
171
|
+
explains the CLI's classifications without inventing findings or executing
|
|
172
|
+
recommendations. Neither installing the integration nor running it activates,
|
|
173
|
+
updates, upgrades, or migrates the project.
|
|
174
|
+
|
|
175
|
+
Older supported inventories without assessment entries remain readable. Use
|
|
176
|
+
`liftoff update --check`, then normal guarded `liftoff update` to install the
|
|
177
|
+
selected integrations. Unowned conflicting destinations remain unowned even with
|
|
178
|
+
`--force`; only already-managed modifications follow reviewed force rules.
|
|
179
|
+
Unsupported activation tuples can still receive safe identity and coverage
|
|
180
|
+
diagnostics, but no migration is available without an explicit supported mapping.
|
|
181
|
+
Force cannot bypass compatibility or overwrite project-owned configuration.
|
|
182
|
+
A future governance upgrade must reobserve facts and obtain its own reviewed
|
|
183
|
+
plan and approvals; an assessment report supplies no mutation authority.
|
|
184
|
+
|
|
55
185
|
## Canonical phase graph
|
|
56
186
|
|
|
57
187
|
The activation graph is packaged as `.liftoff/governance/phase-graph.json` and
|
|
@@ -94,22 +224,46 @@ remote import can satisfy `remote-ready`.
|
|
|
94
224
|
|
|
95
225
|
## Bootstrap seed and local baseline
|
|
96
226
|
|
|
97
|
-
Before commit/push or Phase 0, setup completes, syncs, and archives the
|
|
98
|
-
`bootstrap-<project>`
|
|
227
|
+
Before commit/push or Phase 0, OpenSpec setup completes, syncs, and archives the
|
|
228
|
+
generated `bootstrap-<project>` seed. Spec Kit setup instead validates the real
|
|
229
|
+
`specs/000-liftoff-bootstrap/{spec.md,plan.md,tasks.md}` bundle and official
|
|
230
|
+
framework markers, then finalizes the local bootstrap handoff. It never creates
|
|
231
|
+
an OpenSpec tree, invents an archive, or creates a Git branch. Older Spec Kit
|
|
232
|
+
projects without the bundle need separately reviewed seed adoption.
|
|
233
|
+
|
|
234
|
+
The bundle's exact identity is `000-liftoff-bootstrap`, with B001–B006 each
|
|
235
|
+
appearing once. It is not an active governance change. Dependencies may already
|
|
236
|
+
be installed; installing them requires separate consent, which passing tests
|
|
237
|
+
alone cannot prove. Successful explicit execution commits the checked projection
|
|
238
|
+
with body/full-plan-bound baseline evidence; failed checks leave tasks unchanged.
|
|
239
|
+
|
|
240
|
+
Both adapters run only local, applicable checks in the declared component roots:
|
|
99
241
|
|
|
100
242
|
- `liftoff validate`
|
|
101
243
|
- backend tests from the generated README
|
|
102
244
|
- frontend build when a frontend exists
|
|
103
245
|
- `docker compose config -q` when Compose exists
|
|
104
|
-
- `tofu fmt -check -recursive`
|
|
105
|
-
- `tofu init -backend=false`
|
|
106
|
-
- `tofu validate`
|
|
107
|
-
- strict OpenSpec validation
|
|
246
|
+
- `tofu fmt -check -recursive` at `infrastructure/opentofu/azure`, covering modules and roots
|
|
247
|
+
- `tofu init -backend=false` in each selected independent environment root
|
|
248
|
+
- `tofu validate` in each selected independent environment root
|
|
249
|
+
- strict OpenSpec validation, or validation of the real Spec Kit bootstrap bundle
|
|
108
250
|
|
|
109
251
|
Absent components are recorded as inapplicable. The baseline never starts
|
|
110
252
|
containers, runs a live `tofu plan` or `tofu apply`, deploys, mutates GitHub, or
|
|
111
|
-
requires cloud credentials. A failed check
|
|
112
|
-
|
|
253
|
+
requires cloud credentials. A failed local check remains unfinished; only
|
|
254
|
+
explicit execution retries it after repair. Read-only status, resume, and
|
|
255
|
+
verification do not advance tasks or rerun checks. Unchanged current proof can
|
|
256
|
+
be reused; changed relevant inputs require fresh evidence.
|
|
257
|
+
Recorded legacy-shared or unknown infrastructure layouts block this baseline
|
|
258
|
+
with migration-required and no commands, even if new-looking directories exist.
|
|
259
|
+
|
|
260
|
+
If the seed was already archived before setup began, it stays archived.
|
|
261
|
+
Setup still runs the entire applicable local baseline, but strict OpenSpec
|
|
262
|
+
validation targets the synchronized spec set with `openspec validate --all
|
|
263
|
+
--strict`, not the inactive bootstrap change name. The expected main capability
|
|
264
|
+
must exist with a concrete Purpose. A failed archived baseline can be retried
|
|
265
|
+
after repair: `resume` reports readiness without rewriting stored state, and
|
|
266
|
+
`apply-next --json --execute` reruns the checks before saving verified evidence.
|
|
113
267
|
|
|
114
268
|
## Questions and approval envelopes
|
|
115
269
|
|
|
@@ -128,6 +282,10 @@ types, destinations, permissions, cost ceiling, destructive scope, policy
|
|
|
128
282
|
exceptions, expiry, and baseline SHA. Retries inside the same envelope do not
|
|
129
283
|
ask again; expanded resources, destinations, permissions, cost, exceptions, or
|
|
130
284
|
destructive effects require a new approval.
|
|
285
|
+
Its time window must satisfy `approvedAt <= now < expiresAt` and have a valid
|
|
286
|
+
start/end interval. A future, reversed, or expired envelope cannot authorize
|
|
287
|
+
execution. The contract does not imply a public approval-persistence workflow
|
|
288
|
+
exists; an unavailable entry capability remains a blocker.
|
|
131
289
|
|
|
132
290
|
## Credentials for runner preflight
|
|
133
291
|
|
|
@@ -135,7 +293,8 @@ When `GITHUB_TOKEN` cannot read required hosted-runner metadata, setup first
|
|
|
135
293
|
prefers an existing verified selected-repository GitHub App installation with the
|
|
136
294
|
required read permissions. Liftoff does not install or broaden an App.
|
|
137
295
|
|
|
138
|
-
If no approved App is available,
|
|
296
|
+
If no approved App is available, the normative policy describes this
|
|
297
|
+
fine-grained PAT fallback, not an implemented enrollment command:
|
|
139
298
|
|
|
140
299
|
| Field | Value |
|
|
141
300
|
| --- | --- |
|
|
@@ -148,10 +307,12 @@ If no approved App is available, setup guides one fine-grained PAT with exactly:
|
|
|
148
307
|
| Writes | none |
|
|
149
308
|
| Workflow/job allowlist | `.github/workflows/bootstrap-import-preflight.yml` job `bootstrap-import-preflight`; `.github/workflows/private-dast-preflight.yml` job `private-dast-preflight` |
|
|
150
309
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
310
|
+
This release has no public masked credential-enrollment channel. Stop at the
|
|
311
|
+
reported capability blocker rather than creating a credential or hand-writing
|
|
312
|
+
state to make the phase pass.
|
|
313
|
+
Never paste or show the value in chat, argv, command arguments,
|
|
314
|
+
logs, evidence, files, or screenshots. A disclosed value is
|
|
315
|
+
compromised and must be revoked and rotated through its owner-controlled system.
|
|
155
316
|
|
|
156
317
|
The recorded credential policy is payload-free: it stores auth kind, display
|
|
157
318
|
name, secret name, owner, repository, expiry, rotation lead, permissions,
|
|
@@ -162,9 +323,19 @@ secret value.
|
|
|
162
323
|
|
|
163
324
|
Task checkboxes are a projection of phase state, not authority. Evidence
|
|
164
325
|
documents carry repository identity, activation version vector, graph hash, phase
|
|
165
|
-
contract digest, input
|
|
166
|
-
result.
|
|
167
|
-
|
|
326
|
+
contract digest, real input/baseline digests, body commitment, phase ID, timestamp,
|
|
327
|
+
producer, and result. The local execution anchor is separate from a verified
|
|
328
|
+
remote repository binding; Phase 0 does not replace the anchor beneath earlier
|
|
329
|
+
local receipts. Digests prove consistency, not an independent signature or
|
|
330
|
+
permission grant. Current valid proof may coexist with informational stale
|
|
331
|
+
history, but equally authoritative contradictory records block execution.
|
|
332
|
+
The current context includes reviewed immutable plans and state evidence
|
|
333
|
+
references. Payload `planDigest` binds semantic plan inputs; `savedPlanDigest`
|
|
334
|
+
binds the full saved plan, including clocks. `bodyDigest` covers the payload and
|
|
335
|
+
normalized readbacks. Consumers use the validated selected payload, not another
|
|
336
|
+
raw record that happens to reuse an ID. Repository publication binds the actual
|
|
337
|
+
reviewed push destination; Phase 0 cannot invalidate earlier local/publication
|
|
338
|
+
receipts by replacing the local anchor.
|
|
168
339
|
|
|
169
340
|
There may be only one active governance source of truth. An unfinished bootstrap
|
|
170
341
|
seed blocks Phase 0. Exactly one compatible active governance change is resumed.
|
|
@@ -172,15 +343,18 @@ Multiple overlapping changes require a schema-valid supersession or archive
|
|
|
172
343
|
record before any phase advances.
|
|
173
344
|
|
|
174
345
|
Managed updates install new policy, graph, schema, compatibility metadata, and
|
|
175
|
-
setup integrations without touching user-owned state. Forced update can remove
|
|
346
|
+
setup and assessment integrations without touching user-owned state. Forced update can remove
|
|
176
347
|
exact retired generated setup-alias entries from older manifests. When a policy,
|
|
177
348
|
activation-contract, schema, or graph-hash change affects active work, status
|
|
178
|
-
reports `reconciliation-required
|
|
179
|
-
|
|
180
|
-
|
|
349
|
+
reports `reconciliation-required` and identifies affected descendants. Historical
|
|
350
|
+
activation-v1 state and evidence stay byte-preserved and diagnostic-only under
|
|
351
|
+
activation v2. This release has no automatic historical-state reconciliation,
|
|
352
|
+
reset, or conversion workflow; do not acknowledge a new identity by editing JSON.
|
|
181
353
|
|
|
182
354
|
## Private staging and bootstrap retention
|
|
183
355
|
|
|
356
|
+
These are policy requirements for separately implemented production adapters,
|
|
357
|
+
not a claim that this CLI can provision the complete platform.
|
|
184
358
|
Private Staging DAST uses an ephemeral GitHub-hosted larger runner with Azure
|
|
185
359
|
VNet injection only when genuinely applicable. Phase 0 discovers repository,
|
|
186
360
|
subscription, authority, billing, network, DNS, cost, teardown, and capability
|
|
@@ -219,7 +393,16 @@ evidence-ready, approved phase. Here, approved means its approval status is
|
|
|
219
393
|
fail before project discovery or mutation. Verification reports consistency
|
|
220
394
|
separately from setup completion: a valid not-started or in-progress state may
|
|
221
395
|
have `ok: true` and `verificationStatus: "consistent"` while `complete` remains
|
|
222
|
-
false.
|
|
396
|
+
false. An intact bootstrap seed awaiting baseline verification or archive is
|
|
397
|
+
also incomplete rather than inconsistent. Missing or overlapping seeds, or an
|
|
398
|
+
active seed contradicting recorded archive completion, still fail verification.
|
|
399
|
+
|
|
400
|
+
Apply-next reports `selectedPhase` for the attempted transition and
|
|
401
|
+
`executedPhase` only when execution succeeds (otherwise `null`). Its legacy
|
|
402
|
+
`nextReadyPhase` field is not post-transition readiness; use the subsequent
|
|
403
|
+
status or verify response for the next phase. OpenSpec failures include bounded
|
|
404
|
+
diagnostics with terminal controls removed; credential-shaped output is
|
|
405
|
+
withheld rather than copied into state or command output.
|
|
223
406
|
|
|
224
407
|
## Existing projects
|
|
225
408
|
|
|
@@ -22,9 +22,13 @@ Selecting repository governance or passing `--yes` authorizes only deterministic
|
|
|
22
22
|
local handoff files. It never authorizes agent execution, Git mutation, GitHub
|
|
23
23
|
APIs, Azure or other cloud resources, rulesets, security configuration,
|
|
24
24
|
deployment, monitoring, file replacement, machine tools, or project
|
|
25
|
-
dependencies. `/liftoff-setup` first
|
|
26
|
-
|
|
25
|
+
dependencies. `/liftoff-setup` first verifies and archives the OpenSpec bootstrap
|
|
26
|
+
or finalizes the real Spec Kit bundle locally, then stops at authority gates.
|
|
27
|
+
Live activation requires explicit
|
|
27
28
|
commit/push approval, read-only Phase 0, and activation-plan approval.
|
|
29
|
+
Missing public approval persistence, secure credential enrollment, or production
|
|
30
|
+
executors remain blockers; this sequence does not promise a complete production
|
|
31
|
+
activation workflow.
|
|
28
32
|
|
|
29
33
|
An approved downstream local-state bootstrap remains encrypted, gitignored, and
|
|
30
34
|
single-writer. It is never transferred through GitHub artifacts or secrets,
|
|
@@ -48,6 +52,9 @@ cannot redirect machine-level discovery. Canonical npm selects the target while
|
|
|
48
52
|
the configured registry must provide that exact release. Liftoff does not expose
|
|
49
53
|
registry credentials, rewrite npm configuration, bypass a stale mirror, invoke
|
|
50
54
|
`sudo` or another elevation mechanism, or touch project files.
|
|
55
|
+
Machine-level `@msn-control:registry` takes precedence over default `registry`;
|
|
56
|
+
canonical verification isolates both settings, but installation still honors
|
|
57
|
+
the effective delivery registry.
|
|
51
58
|
|
|
52
59
|
npm replacement is not a Liftoff file transaction. If npm or post-install
|
|
53
60
|
verification fails, Liftoff reports an exact-version repair command and does not
|
|
@@ -87,16 +94,35 @@ Structural collisions are not overridable:
|
|
|
87
94
|
|
|
88
95
|
## Atomic writes and rollback
|
|
89
96
|
|
|
97
|
+
Project mutations share an exclusive cooperating-writer lock across initialization,
|
|
98
|
+
migration, dependency setup, managed update, and setup execution. The lock is a
|
|
99
|
+
sibling file named `.liftoff-mutation-<project-path-digest>.lock`, created with
|
|
100
|
+
0600 mode where POSIX permissions apply; the target's
|
|
101
|
+
parent directory must be writable. Reserving a new target does not create that
|
|
102
|
+
target or project state. Nested steps in one operation retain the same lock.
|
|
103
|
+
Reservation identities are NFC-normalized and lowercased on every platform; this
|
|
104
|
+
may serialize case-distinct sibling projects on case-sensitive volumes, but never
|
|
105
|
+
merges their ownership.
|
|
106
|
+
Read-only commands, including assessment and `update --check`, never acquire it.
|
|
107
|
+
An existing or changed lock blocks mutation and is never automatically stolen or
|
|
108
|
+
removed. After an interrupted process, verify its owner has stopped before
|
|
109
|
+
reviewing the exact reported lock. This coordinates Liftoff writers; it does not
|
|
110
|
+
replace path/content preconditions or isolate the project from other programs.
|
|
111
|
+
|
|
90
112
|
Individual project files use temporary-file replacement. Initialization keeps
|
|
91
113
|
backups for replaced files and records created files and directories. A handled
|
|
92
|
-
merge failure restores or removes
|
|
114
|
+
merge failure restores or removes attributable unchanged entries in reverse
|
|
115
|
+
order; concurrent or uncertain edits are preserved and reported.
|
|
116
|
+
Existing destination modes are preserved where supported, including POSIX 0600
|
|
117
|
+
files. Windows does not provide equivalent POSIX mode-bit guarantees; this is
|
|
118
|
+
not a promise to preserve all Windows ACLs or filesystem metadata.
|
|
93
119
|
|
|
94
120
|
Plain `liftoff update` preflights every eligible managed-core or authorized
|
|
95
121
|
create-only provisioning path and applies those writes, managed-core moves or
|
|
96
122
|
deletes, and the manifest as one rollback-capable transaction. Schema upgrades
|
|
97
123
|
are committed only after the other mutations succeed.
|
|
98
124
|
|
|
99
|
-
Managed update may install manifest v7, policy v6, activation-contract
|
|
125
|
+
Managed update may install manifest v7, policy v6, activation-contract v2,
|
|
100
126
|
phase graph, compatibility metadata, credential-policy schema, setup
|
|
101
127
|
integrations, and forced removal of exact retired generated setup-alias entries
|
|
102
128
|
from older manifests. It preserves user-owned activation state, approvals,
|
|
@@ -104,6 +130,10 @@ immutable evidence, credential policies, active OpenSpec changes, and bootstrap
|
|
|
104
130
|
retention/disposal records. If the current activation identity is future,
|
|
105
131
|
unsupported, or graph-incompatible, update and setup block with a remedy instead
|
|
106
132
|
of downgrading or rewriting state.
|
|
133
|
+
Exact known historical v1 identity is a separate diagnostic-only case:
|
|
134
|
+
safe managed-core maintenance may continue while preserving the recorded
|
|
135
|
+
historical identity, state, and receipts. That maintenance never makes history
|
|
136
|
+
executable or supplies a missing reconciliation workflow.
|
|
107
137
|
|
|
108
138
|
If automatic rollback itself cannot safely restore a path because another
|
|
109
139
|
process changed it, Liftoff reports the incomplete rollback rather than
|
|
@@ -112,6 +142,13 @@ overwriting unknown bytes.
|
|
|
112
142
|
Update snapshots exist only for rollback after a failed transaction. Liftoff
|
|
113
143
|
does not retain them as backups after success.
|
|
114
144
|
|
|
145
|
+
Dependency execution has a different recovery boundary: installer scripts can
|
|
146
|
+
write arbitrary project files, and a concurrent developer edit cannot be
|
|
147
|
+
attributed safely from a content difference alone. Changed or deleted protected
|
|
148
|
+
metadata is therefore preserved and reported, not automatically restored.
|
|
149
|
+
Liftoff stops further dependency commands and identifies the recovery shell and
|
|
150
|
+
literal-path recipe. This does not claim the entire scaffold was unchanged.
|
|
151
|
+
|
|
115
152
|
## Update ownership
|
|
116
153
|
|
|
117
154
|
Update mode is selected explicitly rather than from terminal interactivity:
|
|
@@ -133,6 +170,9 @@ Update mode is selected explicitly rather than from terminal interactivity:
|
|
|
133
170
|
- A newly selected frontend or environment is provisioned once only at absent
|
|
134
171
|
or byte-identical destinations. A collision blocks the complete group and
|
|
135
172
|
cannot be forced.
|
|
173
|
+
- A new environment additionally requires recorded independent-root provenance
|
|
174
|
+
and safe existing shared-module files. Legacy or unknown layouts are blocked
|
|
175
|
+
without moving state or rewriting project-owned infrastructure.
|
|
136
176
|
- Unrecorded governance conflicts remain outside manifest ownership and produce
|
|
137
177
|
`handoff-partial` until a later update safely writes or adopts every artifact.
|
|
138
178
|
- Orphans are reported and left on disk for manual review.
|
|
@@ -142,9 +182,15 @@ Update mode is selected explicitly rather than from terminal interactivity:
|
|
|
142
182
|
`--force` cannot be combined with `--check` and cannot weaken project-boundary,
|
|
143
183
|
symlink, collision, manifest, or transaction guards.
|
|
144
184
|
|
|
145
|
-
Power Apps
|
|
146
|
-
|
|
147
|
-
|
|
185
|
+
Power Apps support is retired. Its manifests are rejected without fetching
|
|
186
|
+
starter source, changing application files, or treating force as conversion
|
|
187
|
+
authority.
|
|
188
|
+
|
|
189
|
+
The eight flat-root OpenTofu identities are retired from new 0.11.0 output only.
|
|
190
|
+
Their historical records, paths, generation hashes, files, and state remain
|
|
191
|
+
unchanged by update, force, helpers, or assessment. They are not aliases to new
|
|
192
|
+
roots or managed-core deletion targets; see the
|
|
193
|
+
[explicit inventory](azure-deployment.md#explicit-flat-root-identity-retirement).
|
|
148
194
|
|
|
149
195
|
## Framework and seed ownership
|
|
150
196
|
|
|
@@ -153,7 +199,11 @@ initializers. Liftoff validates the selected contract and agent markers but
|
|
|
153
199
|
does not claim framework-owned files in durable artifact hashes.
|
|
154
200
|
|
|
155
201
|
One-time seed content is also omitted from durable hashes so it can follow its
|
|
156
|
-
own lifecycle after generation.
|
|
202
|
+
own lifecycle after generation. Spec Kit's `000-liftoff-bootstrap` bundle is
|
|
203
|
+
project-owned, separate from official markers, and not an active governance
|
|
204
|
+
change. Missing older seeds require reviewed adoption. Failed local checks leave
|
|
205
|
+
B001–B006 unchecked; explicit successful execution commits the projection with
|
|
206
|
+
body/full-plan-bound evidence. Read-only verify, status, and resume never mark it.
|
|
157
207
|
|
|
158
208
|
OpenSpec workflow profile and delivery are global machine preferences. Liftoff
|
|
159
209
|
changes them only after dedicated consent and verifies the result before
|
|
@@ -188,19 +238,22 @@ Liftoff does not:
|
|
|
188
238
|
- Store cloud or agent credentials.
|
|
189
239
|
- Perform cloud sign-in.
|
|
190
240
|
- Apply OpenTofu.
|
|
191
|
-
-
|
|
192
|
-
- Run Microsoft's broad Code Apps marketplace installer.
|
|
241
|
+
- Restore or manage the retired Power Apps workload or Code Apps integration.
|
|
193
242
|
|
|
194
243
|
Those actions require their own review, authentication, and consent.
|
|
195
244
|
|
|
196
245
|
Governance runner-preflight credentials have a stricter contract. Setup first
|
|
197
246
|
uses an existing verified selected-repository GitHub App installation when it
|
|
198
|
-
has the required read permissions.
|
|
247
|
+
has the required read permissions. The normative fallback specifies one
|
|
248
|
+
fine-grained PAT:
|
|
199
249
|
display name `<repo>-runner-preflight-read`, repository secret
|
|
200
250
|
`RUNNER_CONFIGURATION_READ_TOKEN`, 30-day lifetime, current repository only,
|
|
201
251
|
repository metadata read, organization hosted-runner read and
|
|
202
252
|
network-configuration read, no writes, and only the recorded workflow/job
|
|
203
|
-
allowlist. The
|
|
253
|
+
allowlist. The CLI currently lacks public secure enrollment, independent
|
|
254
|
+
credential readback, and approval-persistence entry points; stop at the capability
|
|
255
|
+
blocker instead of creating JSON or inventing an input channel. Any future
|
|
256
|
+
supported enrollment must use masked input. Never paste or
|
|
204
257
|
show it in chat, argv, command arguments, logs, evidence, generated files, or
|
|
205
258
|
screenshots. If it appears there, treat it as compromised and manually revoke and
|
|
206
259
|
rotate it before continuing.
|
|
@@ -36,6 +36,29 @@ integration, and records the default separately from the full agent set.
|
|
|
36
36
|
Generated projects contain `.specify/`, `specs/`, and the selected agent
|
|
37
37
|
integration markers.
|
|
38
38
|
|
|
39
|
+
New projects also receive `specs/000-liftoff-bootstrap/spec.md`, `plan.md`, and
|
|
40
|
+
`tasks.md`. These are explicit one-time, project-owned `seed` artifacts, separate
|
|
41
|
+
from official framework templates. Local setup validates the real bundle and
|
|
42
|
+
official markers, performs the applicable baseline, and then finalizes its task
|
|
43
|
+
projection and receipt. It creates neither a Git branch nor an OpenSpec archive.
|
|
44
|
+
|
|
45
|
+
All three files identify `000-liftoff-bootstrap`. The tasks contain exactly one
|
|
46
|
+
initial unchecked entry each for **B001–B006**: review the real bundle and markers;
|
|
47
|
+
use already-installed locked dependencies or install with explicit consent;
|
|
48
|
+
run Liftoff/backend/applicable-worker checks; build the frontend or record
|
|
49
|
+
inapplicability; validate Compose and all infrastructure roots; then finalize.
|
|
50
|
+
The non-checkbox command reference list is not execution evidence.
|
|
51
|
+
Only after every applicable check passes does explicit setup execution commit
|
|
52
|
+
the checked projection with body/full-plan-bound baseline evidence. Failed checks
|
|
53
|
+
leave tasks untouched; status, verify, and resume do not edit checkboxes.
|
|
54
|
+
`seed-archived` means a local handoff for Spec Kit, not an archive operation.
|
|
55
|
+
This exact bootstrap is not an active governance change and has no
|
|
56
|
+
`liftoff-governance.json`.
|
|
57
|
+
|
|
58
|
+
An existing Spec Kit project without this bundle receives a seed-adoption
|
|
59
|
+
blocker. Adopting it requires separate reviewed project work; ordinary update,
|
|
60
|
+
force, and assessment do not create seeds or infer earlier completion.
|
|
61
|
+
|
|
39
62
|
Liftoff does not hand-write framework-owned core or integration output. It
|
|
40
63
|
executes the tested official initializer, confines its writes to allowed roots,
|
|
41
64
|
and validates the declared markers before merging.
|
|
@@ -92,9 +115,9 @@ files.
|
|
|
92
115
|
Repository-governance launchers are separate managed-core Liftoff files at the exact
|
|
93
116
|
Copilot prompt and Claude command paths documented in
|
|
94
117
|
[repository governance](repository-governance.md). They reference one canonical
|
|
95
|
-
policy and context rather than duplicating framework-owned content.
|
|
96
|
-
|
|
97
|
-
|
|
118
|
+
policy and context rather than duplicating framework-owned content. Later
|
|
119
|
+
governance changes are distinct from the exact bootstrap seed. The setup kernel
|
|
120
|
+
does not invent an active change, approval, or missing production executor.
|
|
98
121
|
|
|
99
122
|
Install the exact selected framework release with its supported package manager:
|
|
100
123
|
|
|
@@ -118,29 +141,9 @@ Use `--copilot-cloud` or `--no-copilot-cloud` in automation. The choice is
|
|
|
118
141
|
recorded as `githubCopilot.cloudAgent` in `openspec/config.yaml`; it is not stored
|
|
119
142
|
as Liftoff overwrite or machine-configuration consent.
|
|
120
143
|
|
|
121
|
-
##
|
|
122
|
-
|
|
123
|
-
Power Apps projects can request Microsoft's
|
|
124
|
-
`code-apps-preview@power-platform-skills` plugin. The integration is optional,
|
|
125
|
-
Preview, and independent for each selected agent.
|
|
126
|
-
|
|
127
|
-
Liftoff runs only allowlisted read-only plugin-list probes. A missing or
|
|
128
|
-
unobservable plugin produces advisory guidance and never makes initialization
|
|
129
|
-
or doctor fail by itself.
|
|
130
|
-
|
|
131
|
-
Install the targeted plugin manually inside the selected agent:
|
|
132
|
-
|
|
133
|
-
```text
|
|
134
|
-
/plugin marketplace add microsoft/power-platform-skills
|
|
135
|
-
/plugin install code-apps-preview@power-platform-skills
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
Liftoff does not run Microsoft's broad marketplace installer and does not
|
|
139
|
-
invoke `/create-code-app`. The plugin's connector and deployment skills remain
|
|
140
|
-
available for post-creation work.
|
|
144
|
+
## Retired Code Apps integration
|
|
141
145
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
writing.
|
|
146
|
+
The Power Apps workload and Code Apps plugin options are retired. Liftoff no
|
|
147
|
+
longer installs, probes, or manages that integration. This does not uninstall
|
|
148
|
+
machine-wide tools or plugins; existing installations remain outside Liftoff's
|
|
149
|
+
maintenance authority.
|
package/docs/supported-stack.md
CHANGED
|
@@ -17,17 +17,20 @@ file; they never resolve mutable `latest` versions.
|
|
|
17
17
|
| OpenSpec | 1.11.0 |
|
|
18
18
|
| Spec Kit | 1.0.1 |
|
|
19
19
|
| AzureRM provider | 5.3.0 |
|
|
20
|
-
| Power Apps SDK | 1.2.7 |
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
Python's tested patch is 3.14.7; its supported runtime floor is 3.14.0 within
|
|
22
|
+
3.14.x. Floors, tested versions, and allowed release lines are separate values
|
|
23
|
+
in the baseline; a newer untested major is not automatically compatible.
|
|
24
|
+
|
|
25
|
+
Power Apps is retired and has no active SDK, starter snapshot, or source-commit
|
|
26
|
+
compatibility lane in the supported baseline.
|
|
27
27
|
|
|
28
28
|
Generated npm projects include `package-lock.json`. Python projects include
|
|
29
29
|
`uv.lock` and use `uv sync --frozen`. Go projects include `go.mod` and
|
|
30
30
|
`go.sum`. Generated OpenTofu includes a multi-platform `.terraform.lock.hcl`.
|
|
31
|
+
Each selected independent environment root receives its own provider lock and
|
|
32
|
+
backend configuration; the application module is shared. Generic GenAI's default
|
|
33
|
+
Python project and lock do not require a `pgvector` package.
|
|
31
34
|
|
|
32
35
|
Container references include a readable stable tag and an immutable
|
|
33
36
|
multi-architecture digest. The optional Langfuse profile uses the v4 web and
|
|
@@ -52,11 +55,10 @@ digests and upstream provenance, then run:
|
|
|
52
55
|
npm run refresh:supported-stack
|
|
53
56
|
npm run check
|
|
54
57
|
npm run verify:standard-node-templates
|
|
55
|
-
npm run verify:power-apps-starter
|
|
56
58
|
```
|
|
57
59
|
|
|
58
|
-
Power Apps
|
|
59
|
-
|
|
60
|
+
Retired Power Apps fixtures are negative inputs only and do not participate in
|
|
61
|
+
generation, freshness, or dependency promotion.
|
|
60
62
|
|
|
61
63
|
## Existing generated projects
|
|
62
64
|
|
package/docs/telemetry.md
CHANGED
|
@@ -7,7 +7,7 @@ the CLI to work. It creates no persistent installation or session identifier.
|
|
|
7
7
|
|
|
8
8
|
## Event contract
|
|
9
9
|
|
|
10
|
-
Each
|
|
10
|
+
Each telemetry-eligible command can send at most one event after it finishes:
|
|
11
11
|
|
|
12
12
|
```json
|
|
13
13
|
{
|
|
@@ -21,8 +21,14 @@ Each recognized command can send at most one event after it finishes:
|
|
|
21
21
|
|
|
22
22
|
`outcome` is `success` for exit code zero and `failure` for every nonzero exit
|
|
23
23
|
code. It is an exit-status class, not an error diagnosis. Help requests are
|
|
24
|
-
recorded as `help`,
|
|
25
|
-
command is not recorded.
|
|
24
|
+
recorded as `help`, except assessment help as described below. Rejected input
|
|
25
|
+
that never resolves to a recognized command is not recorded.
|
|
26
|
+
|
|
27
|
+
`liftoff governance assess` skips telemetry and disclosure entirely, including
|
|
28
|
+
`--live` and `--help`. It sends no telemetry event, displays no disclosure notice,
|
|
29
|
+
and writes no disclosure state, regardless of the default telemetry setting.
|
|
30
|
+
Opting into live assessment authorizes only its scoped read-only observations,
|
|
31
|
+
not telemetry delivery.
|
|
26
32
|
|
|
27
33
|
`upgrade` is recorded only as the aggregate command value. Check/apply mode,
|
|
28
34
|
target or configured-registry details, installation origin, paths, npm output,
|