@empire-builder-kit/nx 1.0.0-rc.37 → 1.0.0-rc.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/executors.json +5 -0
- package/generators.json +10 -0
- package/package.json +20 -3
- package/src/aws-authority/index.d.ts +1 -0
- package/src/aws-authority/index.js +1 -0
- package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
- package/src/aws-authority/lambda-policy-ordering.js +56 -0
- package/src/aws-authority/stage-authority.d.ts +11 -3
- package/src/aws-authority/stage-authority.js +615 -29
- package/src/blueprints/external-sandbox.js +21 -9
- package/src/blueprints/manifest.d.ts +1 -1
- package/src/blueprints/resolver.js +28 -15
- package/src/cli/bootstrap.d.ts +1 -1
- package/src/cli/deploy-runtime.d.ts +6 -0
- package/src/cli/deploy-runtime.js +58 -0
- package/src/cli/dev-command.d.ts +16 -4
- package/src/cli/dev-command.js +63 -0
- package/src/cli/main.d.ts +7 -1
- package/src/cli/main.js +128 -20
- package/src/cli/output.d.ts +1 -1
- package/src/developer-agent/context.js +41 -9
- package/src/developer-agent/generator-planning.js +16 -2
- package/src/developer-agent/git-inspection.d.ts +6 -2
- package/src/developer-agent/git-inspection.js +78 -6
- package/src/developer-agent/model.d.ts +4 -2
- package/src/developer-agent/operation-registry.d.ts +5 -0
- package/src/developer-agent/operation-registry.js +179 -23
- package/src/developer-agent/preview-changes.d.ts +2 -0
- package/src/developer-agent/preview-changes.js +14 -2
- package/src/developer-agent/preview-source.js +3 -0
- package/src/developer-agent/validation.js +20 -8
- package/src/developer-agent/workspace-inspection.js +37 -3
- package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
- package/src/executors/deployment-plan/deployment-plan.js +51 -4
- package/src/executors/dev-doctor/dev-doctor.js +13 -6
- package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
- package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
- package/src/executors/dev-task-cleanup/schema.json +9 -0
- package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
- package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
- package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
- package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
- package/src/executors/fleet/fleet.js +1 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +28 -1
- package/src/executors/local-deploy/local-deploy.d.ts +8 -1
- package/src/executors/local-deploy/local-deploy.js +97 -24
- package/src/executors/local-deploy/schema.json +8 -0
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +30 -18
- package/src/executors/sst-lifecycle/governed-native-operation.d.ts +2 -0
- package/src/executors/sst-lifecycle/governed-native-operation.js +9 -0
- package/src/executors/sst-lifecycle/run-sst-command.d.ts +5 -0
- package/src/executors/sst-lifecycle/run-sst-command.js +220 -32
- package/src/executors/sst-lifecycle/sst-environment-source.d.ts +8 -0
- package/src/executors/sst-lifecycle/sst-environment-source.js +54 -0
- package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
- package/src/executors/sst-lifecycle/task-unlock.js +126 -0
- package/src/foundation/capability-plan.d.ts +43 -0
- package/src/foundation/capability-plan.js +168 -0
- package/src/foundation/discovery.d.ts +14 -11
- package/src/foundation/discovery.js +32 -6
- package/src/foundation/index.d.ts +1 -0
- package/src/foundation/index.js +1 -0
- package/src/foundation/local-database-contract.d.ts +20 -0
- package/src/foundation/local-database-contract.js +262 -13
- package/src/foundation/local-private-smoke-access.d.ts +20 -0
- package/src/foundation/local-private-smoke-access.js +197 -0
- package/src/foundation/preflight.js +37 -18
- package/src/foundation/private-smoke-access.js +10 -2
- package/src/foundation/private-smoke-admission.d.ts +3 -1
- package/src/foundation/private-smoke-admission.js +29 -8
- package/src/foundation/private-smoke-control-plane.js +17 -6
- package/src/foundation/provision-database-bindings.d.ts +5 -0
- package/src/foundation/provision-database-bindings.js +41 -8
- package/src/foundation/provision-logical-database.js +13 -8
- package/src/foundation/requirements.d.ts +3 -3
- package/src/foundation/requirements.js +24 -12
- package/src/foundation/router-waf.d.ts +1 -0
- package/src/foundation/router-waf.js +14 -1
- package/src/generators/blueprint/blueprint.d.ts +5 -0
- package/src/generators/blueprint/blueprint.js +102 -0
- package/src/generators/blueprint/files.d.ts +6 -0
- package/src/generators/blueprint/files.js +217 -0
- package/src/generators/blueprint/schema.d.ts +4 -0
- package/src/generators/blueprint/schema.json +18 -0
- package/src/generators/formatting.js +24 -1
- package/src/generators/logging-registry.d.ts +2 -0
- package/src/generators/logging-registry.js +22 -0
- package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
- package/src/generators/preset/workspace-files-adopter-skills.js +301 -0
- package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
- package/src/generators/preset/workspace-files-ci-install.js +196 -0
- package/src/generators/preset/workspace-files-developer-agent.js +40 -13
- package/src/generators/preset/workspace-files-performance-load.js +8 -0
- package/src/generators/preset/workspace-files-stage-authority.js +40 -1
- package/src/generators/preset/workspace-files-thin-deploy.js +66 -34
- package/src/generators/preset/workspace-files-thin-docs.js +64 -18
- package/src/generators/preset/workspace-files.d.ts +4 -0
- package/src/generators/preset/workspace-files.js +159 -91
- package/src/generators/repository-policy/repository-policy.js +37 -0
- package/src/generators/slice/built-in-plan-api-contract-files.js +42 -7
- package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-api-files.js +47 -389
- package/src/generators/slice/built-in-plan-async-work-files.js +19 -1912
- package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +36 -2
- package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
- package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
- package/src/generators/slice/built-in-plan-background-work-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-background-work-files.js +15 -5
- package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
- package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-data-files.js +61 -1164
- package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +18 -2
- package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2446
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +30 -6
- package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js +4 -15
- package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-foundation-files.js +34 -10
- package/src/generators/slice/built-in-plan-frontend-files.js +2 -2
- package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js +180 -522
- package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
- package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
- package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
- package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-delivery.js +120 -0
- package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
- package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
- package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
- package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
- package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
- package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
- package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
- package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
- package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
- package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
- package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
- package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
- package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
- package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
- package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-metadata-files.js +140 -28
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +36 -19
- package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-operations-files.js +89 -50
- package/src/generators/slice/built-in-plan-performance-files.js +84 -1010
- package/src/generators/slice/built-in-plan-project-files.js +116 -67
- package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-release-files.js +64 -15
- package/src/generators/slice/built-in-plan-reliability-files.js +54 -28
- package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
- package/src/generators/slice/built-in-plan-shared.js +41 -19
- package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
- package/src/generators/slice/built-in-plan-sql-events.js +257 -0
- package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-testing-files.js +184 -132
- package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-testing-persistence-files.js +178 -0
- package/src/generators/slice/built-in-plan-thin-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-thin-release-files.js +35 -2
- package/src/generators/slice/built-in-plan-verification-files.js +70 -0
- package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-web-files.js +206 -14
- package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js +113 -274
- package/src/generators/slice/built-in-plan.d.ts +9 -1
- package/src/generators/slice/built-in-plan.js +49 -21
- package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
- package/src/generators/slice/data-policy-review-seed.js +22 -0
- package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
- package/src/generators/slice/deployed-smoke-readiness.js +214 -0
- package/src/generators/slice/local-source-identity.d.ts +2 -0
- package/src/generators/slice/local-source-identity.js +31 -0
- package/src/generators/slice/persistence-contract.d.ts +14 -0
- package/src/generators/slice/persistence-contract.js +32 -0
- package/src/generators/slice/slice.js +29 -24
- package/src/generators/sql/schema.d.ts +7 -0
- package/src/generators/sql/schema.json +38 -0
- package/src/generators/sql/sql.d.ts +6 -0
- package/src/generators/sql/sql.js +53 -0
- package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
- package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
- package/src/generators/upgrade/upgrade.d.ts +2 -0
- package/src/generators/upgrade/upgrade.js +136 -9
- package/src/generators/workload/workload.js +51 -2
- package/src/local-dev/browser-verification.d.ts +37 -0
- package/src/local-dev/browser-verification.js +281 -0
- package/src/local-dev/contracts.d.ts +10 -1
- package/src/local-dev/contracts.js +114 -13
- package/src/local-dev/dev-command-core.js +24 -5
- package/src/local-dev/docker-credential-health.d.ts +14 -0
- package/src/local-dev/docker-credential-health.js +94 -0
- package/src/local-dev/environment-inspector.d.ts +7 -0
- package/src/local-dev/environment-inspector.js +42 -15
- package/src/local-dev/environment-state.js +2 -2
- package/src/local-dev/errors.d.ts +1 -1
- package/src/local-dev/errors.js +2 -0
- package/src/local-dev/fleet-client.js +2 -2
- package/src/local-dev/fleet-configuration.js +57 -25
- package/src/local-dev/fleet-inventory.js +46 -18
- package/src/local-dev/fleet-ipc.d.ts +7 -0
- package/src/local-dev/fleet-ipc.js +14 -2
- package/src/local-dev/fleet-launcher.d.ts +6 -0
- package/src/local-dev/fleet-launcher.js +14 -2
- package/src/local-dev/fleet-logs.js +50 -22
- package/src/local-dev/fleet-process.d.ts +20 -1
- package/src/local-dev/fleet-process.js +197 -41
- package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
- package/src/local-dev/fleet-runner-evidence.js +56 -0
- package/src/local-dev/fleet-runtime.js +268 -229
- package/src/local-dev/fleet-session.d.ts +2 -0
- package/src/local-dev/fleet-session.js +28 -11
- package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
- package/src/local-dev/fleet-state.d.ts +5 -2
- package/src/local-dev/fleet-state.js +25 -4
- package/src/local-dev/fleet-supervisor.d.ts +3 -0
- package/src/local-dev/fleet-supervisor.js +66 -11
- package/src/local-dev/fleet-web-start.d.ts +12 -0
- package/src/local-dev/fleet-web-start.js +48 -0
- package/src/local-dev/identity.js +3 -14
- package/src/local-dev/index.d.ts +1 -0
- package/src/local-dev/index.js +1 -0
- package/src/local-dev/native-completion.d.ts +9 -0
- package/src/local-dev/native-completion.js +130 -0
- package/src/local-dev/nx-workspace.d.ts +4 -2
- package/src/local-dev/nx-workspace.js +11 -6
- package/src/local-dev/personal-stage.d.ts +4 -5
- package/src/local-dev/personal-stage.js +6 -54
- package/src/local-dev/port-claims.d.ts +13 -0
- package/src/local-dev/port-claims.js +46 -0
- package/src/local-dev/ports.d.ts +14 -2
- package/src/local-dev/ports.js +78 -3
- package/src/local-dev/private-state.d.ts +6 -0
- package/src/local-dev/private-state.js +126 -34
- package/src/local-dev/process-group.d.ts +4 -0
- package/src/local-dev/process-group.js +29 -0
- package/src/local-dev/process-identity.d.ts +8 -0
- package/src/local-dev/process-identity.js +31 -1
- package/src/local-dev/proxy.js +11 -12
- package/src/local-dev/runtime-paths.js +1 -1
- package/src/local-dev/slice-claim.js +1 -1
- package/src/local-dev/slice-runner.d.ts +15 -6
- package/src/local-dev/slice-runner.js +189 -54
- package/src/local-dev/task-attachment.d.ts +17 -0
- package/src/local-dev/task-attachment.js +73 -0
- package/src/local-dev/task-authority.d.ts +10 -0
- package/src/local-dev/task-authority.js +27 -0
- package/src/local-dev/task-identity.d.ts +33 -0
- package/src/local-dev/task-identity.js +418 -0
- package/src/local-dev/task-native-writer.d.ts +18 -0
- package/src/local-dev/task-native-writer.js +329 -0
- package/src/local-dev/tls.js +3 -1
- package/src/local-dev/web-launch.d.ts +9 -0
- package/src/local-dev/web-launch.js +130 -0
- package/src/ownership/composition.d.ts +2 -1
- package/src/ownership/composition.js +1 -0
- package/src/performance/scenario.d.ts +22 -0
- package/src/performance/scenario.js +100 -92
- package/src/repository-policy/deployment-plan.d.ts +2 -2
- package/src/repository-policy/deployment-plan.js +2 -1
- package/src/repository-policy/policy.js +38 -3
- package/src/schemas/blueprint-v1.json +5 -4
- package/src/schemas/foundation-requirement-v1.json +5 -4
- package/src/schemas/testing-evidence-result-v1.json +1 -1
- package/src/secrets/operator.d.ts +3 -1
- package/src/secrets/operator.js +22 -3
- package/src/sst-environment-source-format.d.ts +3 -0
- package/src/sst-environment-source-format.js +20 -0
- package/src/supply-chain/blueprint-trust-git.js +13 -3
- package/src/supply-chain/build-output.js +15 -0
- package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
- package/src/testing-evidence/fixture-scope.d.ts +2 -1
- package/src/testing-evidence/fixture-scope.js +4 -2
- package/src/testing-evidence/result.d.ts +2 -1
- package/src/testing-evidence/result.js +18 -4
- package/src/workload-roles/standard-slice.js +2 -3
- package/src/api-contract/baseline-update.js.map +0 -1
- package/src/api-contract/compatibility.js.map +0 -1
- package/src/api-contract/contract-graph.js.map +0 -1
- package/src/api-contract/evidence.js.map +0 -1
- package/src/api-contract/index.js.map +0 -1
- package/src/api-contract/model.fixtures.d.ts +0 -2
- package/src/api-contract/model.fixtures.js +0 -81
- package/src/api-contract/model.fixtures.js.map +0 -1
- package/src/api-contract/model.js.map +0 -1
- package/src/api-contract/rollout.js.map +0 -1
- package/src/authorization/compatibility.js.map +0 -1
- package/src/authorization/index.js.map +0 -1
- package/src/aws/child-environment.js.map +0 -1
- package/src/aws/identity.js.map +0 -1
- package/src/aws-authority/index.js.map +0 -1
- package/src/aws-authority/stage-authority.js.map +0 -1
- package/src/blueprints/execution.js.map +0 -1
- package/src/blueprints/external-sandbox.js.map +0 -1
- package/src/blueprints/index.js.map +0 -1
- package/src/blueprints/inputs.js.map +0 -1
- package/src/blueprints/manifest.js.map +0 -1
- package/src/blueprints/resolver.js.map +0 -1
- package/src/blueprints/transitions.js.map +0 -1
- package/src/cli/agent-command.js.map +0 -1
- package/src/cli/agent-runtime.js.map +0 -1
- package/src/cli/blueprint-authority.js.map +0 -1
- package/src/cli/blueprint-command.js.map +0 -1
- package/src/cli/bootstrap.js.map +0 -1
- package/src/cli/dev-command.js.map +0 -1
- package/src/cli/main.js.map +0 -1
- package/src/cli/output.js.map +0 -1
- package/src/cli/personal-secret-runtime.js.map +0 -1
- package/src/cli/secret-terminal.js.map +0 -1
- package/src/container-images.js.map +0 -1
- package/src/data-lifecycle/index.js.map +0 -1
- package/src/data-lifecycle/model.fixtures.d.ts +0 -2
- package/src/data-lifecycle/model.fixtures.js +0 -244
- package/src/data-lifecycle/model.fixtures.js.map +0 -1
- package/src/data-lifecycle/model.js.map +0 -1
- package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
- package/src/data-lifecycle/validation.js.map +0 -1
- package/src/database-retirement/contract.js.map +0 -1
- package/src/database-retirement/index.js.map +0 -1
- package/src/deterministic-order.js.map +0 -1
- package/src/developer-agent/context.js.map +0 -1
- package/src/developer-agent/generator-planning.js.map +0 -1
- package/src/developer-agent/generator-preview.js.map +0 -1
- package/src/developer-agent/git-inspection.js.map +0 -1
- package/src/developer-agent/handoff.js.map +0 -1
- package/src/developer-agent/index.js.map +0 -1
- package/src/developer-agent/model.js.map +0 -1
- package/src/developer-agent/operation-registry.js.map +0 -1
- package/src/developer-agent/ordering.js.map +0 -1
- package/src/developer-agent/planning.js.map +0 -1
- package/src/developer-agent/preview-changes.js.map +0 -1
- package/src/developer-agent/preview-source.js.map +0 -1
- package/src/developer-agent/validation.js.map +0 -1
- package/src/developer-agent/workspace-inspection.js.map +0 -1
- package/src/developer-agent/workspace-path.js.map +0 -1
- package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
- package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
- package/src/executors/deploy/deploy.js.map +0 -1
- package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
- package/src/executors/dev/dev.js.map +0 -1
- package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
- package/src/executors/dev-setup/dev-setup.js.map +0 -1
- package/src/executors/developer-context/developer-context.js.map +0 -1
- package/src/executors/fleet/fleet.js.map +0 -1
- package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
- package/src/executors/foundation-profile-preflight/production-database-safeguard.js.map +0 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
- package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
- package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
- package/src/executors/local-deploy/federated-credential-transport.js.map +0 -1
- package/src/executors/local-deploy/fixtures/local-deploy-state-machine.mjs +0 -53
- package/src/executors/local-deploy/local-approval.js.map +0 -1
- package/src/executors/local-deploy/local-deploy.js.map +0 -1
- package/src/executors/refresh/refresh.js.map +0 -1
- package/src/executors/remove/remove.js.map +0 -1
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js.map +0 -1
- package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
- package/src/executors/secret-initialize/secret-initialize.js.map +0 -1
- package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
- package/src/executors/sst-lifecycle/generated-secret-retirement.js.map +0 -1
- package/src/executors/sst-lifecycle/governed-native-operation.js.map +0 -1
- package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
- package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
- package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
- package/src/executors/sst-lifecycle/sst-environment-source.js.map +0 -1
- package/src/executors/unlock/unlock.js.map +0 -1
- package/src/executors/work-markers/work-markers.js.map +0 -1
- package/src/foundation/discovery.js.map +0 -1
- package/src/foundation/index.js.map +0 -1
- package/src/foundation/local-database-contract.js.map +0 -1
- package/src/foundation/logging-preflight.js.map +0 -1
- package/src/foundation/logging.js.map +0 -1
- package/src/foundation/partial-state.js.map +0 -1
- package/src/foundation/preflight.js.map +0 -1
- package/src/foundation/private-smoke-access.js.map +0 -1
- package/src/foundation/private-smoke-admission.js.map +0 -1
- package/src/foundation/private-smoke-control-plane.js.map +0 -1
- package/src/foundation/provision-database-bindings.js.map +0 -1
- package/src/foundation/provision-logical-database.js.map +0 -1
- package/src/foundation/requirements.js.map +0 -1
- package/src/foundation/router-origin-proof.js.map +0 -1
- package/src/foundation/router-waf-rate-rehearsal.js.map +0 -1
- package/src/foundation/router-waf.js.map +0 -1
- package/src/foundation/stages.js.map +0 -1
- package/src/frontend-security/index.js.map +0 -1
- package/src/frontend-security/security-headers.js.map +0 -1
- package/src/generators/feature-registry.js.map +0 -1
- package/src/generators/formatting.js.map +0 -1
- package/src/generators/function/function.js.map +0 -1
- package/src/generators/job/job.js.map +0 -1
- package/src/generators/logging-registry.js.map +0 -1
- package/src/generators/post-generation-install.js.map +0 -1
- package/src/generators/preset/dependency-overrides.js.map +0 -1
- package/src/generators/preset/generator.js.map +0 -1
- package/src/generators/preset/tool-versions.js.map +0 -1
- package/src/generators/preset/workspace-files-ci-acceptance.js.map +0 -1
- package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
- package/src/generators/preset/workspace-files-ecr-inspector.js.map +0 -1
- package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
- package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
- package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
- package/src/generators/preset/workspace-files-stage-authority.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-deploy.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-docs.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-release.js.map +0 -1
- package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
- package/src/generators/preset/workspace-files.js.map +0 -1
- package/src/generators/repository-policy/repository-policy.js.map +0 -1
- package/src/generators/repository-policy/tree-policy.js.map +0 -1
- package/src/generators/service/service.js.map +0 -1
- package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-background-work-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-shared.js.map +0 -1
- package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-thin-release-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
- package/src/generators/slice/built-in-plan.js.map +0 -1
- package/src/generators/slice/slice.js.map +0 -1
- package/src/generators/upgrade/upgrade.js.map +0 -1
- package/src/generators/workload/frozen-container.js.map +0 -1
- package/src/generators/workload/performance-registration.js.map +0 -1
- package/src/generators/workload/reliability-registration.js.map +0 -1
- package/src/generators/workload/service-performance-files.js.map +0 -1
- package/src/generators/workload/workload.js.map +0 -1
- package/src/git-policy/action-pins.js.map +0 -1
- package/src/git-policy/github-bootstrap.js.map +0 -1
- package/src/git-policy/index.js.map +0 -1
- package/src/git-policy/routing.js.map +0 -1
- package/src/index.js.map +0 -1
- package/src/infrastructure-change/convergence.js.map +0 -1
- package/src/infrastructure-change/drift.js.map +0 -1
- package/src/infrastructure-change/index.js.map +0 -1
- package/src/infrastructure-change/local-capability.js.map +0 -1
- package/src/infrastructure-change/model.js.map +0 -1
- package/src/infrastructure-change/normalize.js.map +0 -1
- package/src/infrastructure-change/plan.js.map +0 -1
- package/src/infrastructure-change/risk.js.map +0 -1
- package/src/infrastructure-change/summary.js.map +0 -1
- package/src/local-dev/context-discovery.js.map +0 -1
- package/src/local-dev/contract-validation.js.map +0 -1
- package/src/local-dev/contracts.js.map +0 -1
- package/src/local-dev/control-contract.js.map +0 -1
- package/src/local-dev/dev-command-core.js.map +0 -1
- package/src/local-dev/effects.js.map +0 -1
- package/src/local-dev/environment-inspector.js.map +0 -1
- package/src/local-dev/environment-state.js.map +0 -1
- package/src/local-dev/errors.js.map +0 -1
- package/src/local-dev/fleet-client.js.map +0 -1
- package/src/local-dev/fleet-configuration.js.map +0 -1
- package/src/local-dev/fleet-inventory.js.map +0 -1
- package/src/local-dev/fleet-ipc.js.map +0 -1
- package/src/local-dev/fleet-launcher.js.map +0 -1
- package/src/local-dev/fleet-lock.js.map +0 -1
- package/src/local-dev/fleet-logs.js.map +0 -1
- package/src/local-dev/fleet-process.js.map +0 -1
- package/src/local-dev/fleet-runtime.js.map +0 -1
- package/src/local-dev/fleet-session.js.map +0 -1
- package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
- package/src/local-dev/fleet-startup.js.map +0 -1
- package/src/local-dev/fleet-state.js.map +0 -1
- package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
- package/src/local-dev/fleet-supervisor.js.map +0 -1
- package/src/local-dev/gateway-daemon.js.map +0 -1
- package/src/local-dev/gateway.js.map +0 -1
- package/src/local-dev/identity.js.map +0 -1
- package/src/local-dev/index.js.map +0 -1
- package/src/local-dev/local-context.js.map +0 -1
- package/src/local-dev/nx-workspace.js.map +0 -1
- package/src/local-dev/personal-secret-ledger.js.map +0 -1
- package/src/local-dev/personal-stage.js.map +0 -1
- package/src/local-dev/portless.js.map +0 -1
- package/src/local-dev/ports.js.map +0 -1
- package/src/local-dev/private-state.js.map +0 -1
- package/src/local-dev/process-identity.js.map +0 -1
- package/src/local-dev/proxy.js.map +0 -1
- package/src/local-dev/runtime-paths.js.map +0 -1
- package/src/local-dev/secret-slice-claim.js.map +0 -1
- package/src/local-dev/slice-claim.js.map +0 -1
- package/src/local-dev/slice-runner.js.map +0 -1
- package/src/local-dev/tls.js.map +0 -1
- package/src/ownership/composition.js.map +0 -1
- package/src/ownership/foundation-record.js.map +0 -1
- package/src/ownership/hash.js.map +0 -1
- package/src/ownership/index.js.map +0 -1
- package/src/ownership/json-ownership.js.map +0 -1
- package/src/ownership/record.js.map +0 -1
- package/src/ownership/workspace-record.js.map +0 -1
- package/src/performance/cost-collection.js.map +0 -1
- package/src/performance/cost-controls.js.map +0 -1
- package/src/performance/evidence.js.map +0 -1
- package/src/performance/index.js.map +0 -1
- package/src/performance/load-safety.js.map +0 -1
- package/src/performance/model.js.map +0 -1
- package/src/performance/pr-artifact-budget.js.map +0 -1
- package/src/performance/runner.js.map +0 -1
- package/src/performance/scenario-endpoint.js.map +0 -1
- package/src/performance/scenario.js.map +0 -1
- package/src/performance/test-fixtures.d.ts +0 -7
- package/src/performance/test-fixtures.js +0 -167
- package/src/performance/test-fixtures.js.map +0 -1
- package/src/performance/unit-cost.js.map +0 -1
- package/src/release/index.js.map +0 -1
- package/src/release/lifecycle.js.map +0 -1
- package/src/release/manifest.js.map +0 -1
- package/src/release/rollout.js.map +0 -1
- package/src/release/source-authority.js.map +0 -1
- package/src/repository-policy/aurora-preflight.js.map +0 -1
- package/src/repository-policy/capacity-migration.js.map +0 -1
- package/src/repository-policy/deployment-plan.js.map +0 -1
- package/src/repository-policy/foundation-profile.js.map +0 -1
- package/src/repository-policy/index.js.map +0 -1
- package/src/repository-policy/policy.js.map +0 -1
- package/src/secrets/adapters.js.map +0 -1
- package/src/secrets/aws-control-plane.js.map +0 -1
- package/src/secrets/declaration-verification.js.map +0 -1
- package/src/secrets/generated-aws-control-plane.js.map +0 -1
- package/src/secrets/guardrails.js.map +0 -1
- package/src/secrets/index.js.map +0 -1
- package/src/secrets/metadata.js.map +0 -1
- package/src/secrets/model.js.map +0 -1
- package/src/secrets/operator.js.map +0 -1
- package/src/secrets/permissions.js.map +0 -1
- package/src/secrets/personal-command.js.map +0 -1
- package/src/secrets/personal-ledger.js.map +0 -1
- package/src/secrets/registry.js.map +0 -1
- package/src/secrets/verification.js.map +0 -1
- package/src/secrets/workload-access.js.map +0 -1
- package/src/sst-environment-source-format.js.map +0 -1
- package/src/supply-chain/action-pins.js.map +0 -1
- package/src/supply-chain/blueprint-trust-git.js.map +0 -1
- package/src/supply-chain/blueprint-trust-process.js.map +0 -1
- package/src/supply-chain/blueprint-trust.js.map +0 -1
- package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
- package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
- package/src/supply-chain/build-output-bounds.js.map +0 -1
- package/src/supply-chain/build-output.js.map +0 -1
- package/src/supply-chain/common.js.map +0 -1
- package/src/supply-chain/container-artifact-contract.js.map +0 -1
- package/src/supply-chain/container-release.js.map +0 -1
- package/src/supply-chain/ecr-applicability.js.map +0 -1
- package/src/supply-chain/ecr-scanning.js.map +0 -1
- package/src/supply-chain/ecs-deployed-image.js.map +0 -1
- package/src/supply-chain/errors.js.map +0 -1
- package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
- package/src/supply-chain/generated-command.js.map +0 -1
- package/src/supply-chain/generated-container-release-command.js.map +0 -1
- package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
- package/src/supply-chain/generated-files.js.map +0 -1
- package/src/supply-chain/generated-scanner-command.js.map +0 -1
- package/src/supply-chain/index.js.map +0 -1
- package/src/supply-chain/inventory.js.map +0 -1
- package/src/supply-chain/license-expression.js.map +0 -1
- package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
- package/src/supply-chain/policy.js.map +0 -1
- package/src/supply-chain/publication.js.map +0 -1
- package/src/supply-chain/sbom.js.map +0 -1
- package/src/supply-chain/scanner.js.map +0 -1
- package/src/supply-chain/vendored-source.js.map +0 -1
- package/src/testing-evidence/fixture-scope.js.map +0 -1
- package/src/testing-evidence/index.js.map +0 -1
- package/src/testing-evidence/quarantine.js.map +0 -1
- package/src/testing-evidence/result.js.map +0 -1
- package/src/testing-evidence/runner-adapter.js.map +0 -1
- package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
- package/src/validation.js.map +0 -1
- package/src/work-markers/index.js.map +0 -1
- package/src/work-markers/work-markers.js.map +0 -1
- package/src/workload-roles/account-baseline.js.map +0 -1
- package/src/workload-roles/authority.js.map +0 -1
- package/src/workload-roles/aws-adapter.js.map +0 -1
- package/src/workload-roles/aws-internal-handler.js.map +0 -1
- package/src/workload-roles/aws-s3-state.js.map +0 -1
- package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
- package/src/workload-roles/boundary.js.map +0 -1
- package/src/workload-roles/convergence.js.map +0 -1
- package/src/workload-roles/effective-policy.js.map +0 -1
- package/src/workload-roles/handler.js.map +0 -1
- package/src/workload-roles/history.js.map +0 -1
- package/src/workload-roles/index.js.map +0 -1
- package/src/workload-roles/injection.js.map +0 -1
- package/src/workload-roles/manifest.js.map +0 -1
- package/src/workload-roles/provisioner.js.map +0 -1
- package/src/workload-roles/registration.js.map +0 -1
- package/src/workload-roles/stage-boundary.js.map +0 -1
- package/src/workload-roles/standard-slice.js.map +0 -1
- package/src/workspace-deployment/affected-lifecycle.js.map +0 -1
- package/src/workspace-deployment/identity.js.map +0 -1
- package/src/workspace-deployment/index.js.map +0 -1
- package/src/workspace-deployment/migration-evidence.js.map +0 -1
- package/src/workspace-deployment/migration.js.map +0 -1
- package/src/workspace-deployment/ownership.js.map +0 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/schema",
|
|
3
|
+
"$id": "EmpireBuilderKitSql",
|
|
4
|
+
"title": "Add a relational requirement to an existing Standard Slice",
|
|
5
|
+
"description": "Report or apply an additive Foundation/Slice SQL declaration while preserving existing data stores and managed ownership. No AWS calls.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"name": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"pattern": "^[a-z][a-z0-9-]{0,62}$",
|
|
12
|
+
"$default": { "$source": "argv", "index": 0 },
|
|
13
|
+
"description": "Existing Standard Product Slice."
|
|
14
|
+
},
|
|
15
|
+
"reason": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"minLength": 1,
|
|
18
|
+
"maxLength": 512,
|
|
19
|
+
"description": "Concrete relational requirement, such as integrity constraints or reporting joins. Stored in the existing Blueprint inputs.sql declaration."
|
|
20
|
+
},
|
|
21
|
+
"apply": {
|
|
22
|
+
"type": "boolean",
|
|
23
|
+
"default": false,
|
|
24
|
+
"description": "Apply the paired managed Foundation/Slice source upgrade; otherwise only report it. No AWS operation is performed."
|
|
25
|
+
},
|
|
26
|
+
"skipFormat": {
|
|
27
|
+
"type": "boolean",
|
|
28
|
+
"default": false,
|
|
29
|
+
"description": "Leave source formatting to a subsequent explicit check."
|
|
30
|
+
},
|
|
31
|
+
"skipInstall": {
|
|
32
|
+
"type": "boolean",
|
|
33
|
+
"default": false,
|
|
34
|
+
"description": "Do not run the dependency-install callback after applying source changes."
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"required": ["name", "reason"]
|
|
38
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
|
2
|
+
import { type UpgradeGeneratorLogger } from '../upgrade/upgrade.js';
|
|
3
|
+
import type { SqlGeneratorSchema } from './schema.js';
|
|
4
|
+
/** One additive entry point; the existing upgrader owns validation and all writes. */
|
|
5
|
+
export declare function sqlGenerator(tree: Tree, options: SqlGeneratorSchema, output?: UpgradeGeneratorLogger): Promise<void | GeneratorCallback>;
|
|
6
|
+
export default sqlGenerator;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sqlGenerator = sqlGenerator;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const index_js_1 = require("../../blueprints/index.js");
|
|
6
|
+
const capability_plan_js_1 = require("../../foundation/capability-plan.js");
|
|
7
|
+
const index_js_2 = require("../../ownership/index.js");
|
|
8
|
+
const upgrade_js_1 = require("../upgrade/upgrade.js");
|
|
9
|
+
/** One additive entry point; the existing upgrader owns validation and all writes. */
|
|
10
|
+
async function sqlGenerator(tree, options, output = devkit_1.logger) {
|
|
11
|
+
if (typeof options.name !== 'string' ||
|
|
12
|
+
!/^[a-z][a-z0-9-]{0,62}$/.test(options.name) ||
|
|
13
|
+
['foundation', 'workspace'].includes(options.name))
|
|
14
|
+
throw new Error('SQL requires one existing Standard Product Slice name.');
|
|
15
|
+
const declaration = (0, capability_plan_js_1.readStandardSqlDeclaration)({
|
|
16
|
+
sql: { reason: options.reason },
|
|
17
|
+
});
|
|
18
|
+
if (!declaration)
|
|
19
|
+
throw new Error('A concrete relational reason is required.');
|
|
20
|
+
const ownershipPath = `packages/${options.name}/.ebk/ownership.json`;
|
|
21
|
+
const source = tree.read(ownershipPath, 'utf8');
|
|
22
|
+
if (!source)
|
|
23
|
+
throw new Error(`Standard Slice ownership is missing at ${ownershipPath}. Generate the Slice first.`);
|
|
24
|
+
let parsed;
|
|
25
|
+
try {
|
|
26
|
+
parsed = JSON.parse(source);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
throw new Error(`Standard Slice ownership is invalid at ${ownershipPath}.`);
|
|
30
|
+
}
|
|
31
|
+
const ownership = (0, index_js_2.validateGeneratedOwnershipRecord)(parsed);
|
|
32
|
+
if (!ownership.valid || ownership.value.slice !== options.name)
|
|
33
|
+
throw new Error(`Standard Slice ownership is invalid at ${ownershipPath}.`);
|
|
34
|
+
if (ownership.value.blueprint.name !== index_js_1.BUILTIN_BLUEPRINT_NAME)
|
|
35
|
+
throw new Error('The sql generator only supports the Standard Blueprint. Declare relational capabilities through the external Blueprint owner.');
|
|
36
|
+
const existing = (0, capability_plan_js_1.readStandardSqlDeclaration)(ownership.value.inputs);
|
|
37
|
+
if (existing && existing.reason !== declaration.reason)
|
|
38
|
+
throw new Error('SQL is already declared with a different reason. Keep the recorded reason, or use the managed upgrade inputs surface for an intentional declaration change.');
|
|
39
|
+
output.info(`[ebk-sql] ${options.name}: ${existing ? 'retain' : 'add'} the relational declaration. ` +
|
|
40
|
+
'The paired upgrade reports Foundation Aurora, private networking/container compute and Slice Drizzle/migration sources. ' +
|
|
41
|
+
'Existing default-store records, resource identities, capacity, protections and seeded features are preserved. ' +
|
|
42
|
+
'Aurora/network/container resources can add recurring cost; inspect the generated plan and committed capacity policy before deployment. ' +
|
|
43
|
+
'This command does not deploy, copy data or retire SQL.');
|
|
44
|
+
return (0, upgrade_js_1.upgradeGenerator)(tree, {
|
|
45
|
+
name: options.name,
|
|
46
|
+
inputs: { ...ownership.value.inputs, sql: declaration },
|
|
47
|
+
apply: options.apply === true,
|
|
48
|
+
skipFormat: options.skipFormat,
|
|
49
|
+
skipInstall: options.skipInstall,
|
|
50
|
+
}, output);
|
|
51
|
+
}
|
|
52
|
+
exports.default = sqlGenerator;
|
|
53
|
+
//# sourceMappingURL=sql.js.map
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.planSqlSeededReconciliation = planSqlSeededReconciliation;
|
|
4
|
+
const node_util_1 = require("node:util");
|
|
5
|
+
const ts = require("typescript");
|
|
6
|
+
/** Only append required SQL members; never replace an adopter's seeded decisions. */
|
|
7
|
+
function planSqlSeededReconciliation(current, target) {
|
|
8
|
+
const updates = new Map();
|
|
9
|
+
const read = (path, contents) => {
|
|
10
|
+
const value = JSON.parse(contents);
|
|
11
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
12
|
+
throw new Error(`SQL reconciliation requires an object at ${path}.`);
|
|
13
|
+
return value;
|
|
14
|
+
};
|
|
15
|
+
const append = (path, property, key, select, preserveExisting = false, equivalent = node_util_1.isDeepStrictEqual) => {
|
|
16
|
+
const contents = current.get(path);
|
|
17
|
+
if (contents == null)
|
|
18
|
+
return;
|
|
19
|
+
const existing = read(path, contents), desired = read(path, target[path]);
|
|
20
|
+
if (!Array.isArray(existing[property]) || !Array.isArray(desired[property]))
|
|
21
|
+
throw new Error(`SQL reconciliation requires ${path}#/${property}.`);
|
|
22
|
+
let changed = false;
|
|
23
|
+
for (const addition of desired[property].filter(select)) {
|
|
24
|
+
const matches = existing[property].filter((entry) => entry?.[key] === addition[key]);
|
|
25
|
+
if (matches.length > 1 ||
|
|
26
|
+
(matches.length === 1 &&
|
|
27
|
+
!preserveExisting &&
|
|
28
|
+
!equivalent(matches[0], addition)))
|
|
29
|
+
throw new Error(`SQL reconciliation conflict at ${path}: ${addition[key]}. Preserve the customization and reconcile this required declaration explicitly; no files changed.`);
|
|
30
|
+
if (matches.length === 0) {
|
|
31
|
+
existing[property].push(addition);
|
|
32
|
+
changed = true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (changed)
|
|
36
|
+
updates.set(path, JSON.stringify(existing, null, 2) + '\n');
|
|
37
|
+
};
|
|
38
|
+
append('operations/features.json', 'features', 'id', (entry) => entry.id === 'database-lifecycle', true);
|
|
39
|
+
append('secrets/metadata.json', 'declarations', 'logicalName', (entry) => entry.source === 'database-bootstrap', false, (existing, desired) => {
|
|
40
|
+
// Rotation is an adopter decision. Required identity, stage and source
|
|
41
|
+
// bindings still have to agree; never silently overwrite either kind.
|
|
42
|
+
const existingBinding = { ...existing }, desiredBinding = { ...desired };
|
|
43
|
+
delete existingBinding.rotation;
|
|
44
|
+
delete desiredBinding.rotation;
|
|
45
|
+
return (0, node_util_1.isDeepStrictEqual)(existingBinding, desiredBinding);
|
|
46
|
+
});
|
|
47
|
+
append('operations/release.json', 'artifactInventory', 'id', (entry) => typeof entry.id === 'string' &&
|
|
48
|
+
/\.job\.database-(migration|retirement)$/.test(entry.id), true);
|
|
49
|
+
const backgroundPath = 'operations/background-work.json';
|
|
50
|
+
const background = current.get(backgroundPath);
|
|
51
|
+
if (background != null) {
|
|
52
|
+
const existing = read(backgroundPath, background), desired = read(backgroundPath, target[backgroundPath]);
|
|
53
|
+
if (!existing.stages ||
|
|
54
|
+
typeof existing.stages !== 'object' ||
|
|
55
|
+
Array.isArray(existing.stages))
|
|
56
|
+
throw new Error('SQL reconciliation requires declared background-work stages.');
|
|
57
|
+
let changed = false;
|
|
58
|
+
for (const [stage, defaults] of Object.entries(desired.stages)) {
|
|
59
|
+
const settings = existing.stages[stage];
|
|
60
|
+
if (!settings ||
|
|
61
|
+
typeof settings !== 'object' ||
|
|
62
|
+
Array.isArray(settings) ||
|
|
63
|
+
typeof settings.outbox?.enabled !== 'boolean')
|
|
64
|
+
throw new Error(`SQL reconciliation requires the existing ${stage} outbox pause decision.`);
|
|
65
|
+
if (!Object.prototype.hasOwnProperty.call(settings, 'sqlOutboxRecovery')) {
|
|
66
|
+
settings.sqlOutboxRecovery = {
|
|
67
|
+
...defaults.sqlOutboxRecovery,
|
|
68
|
+
enabled: settings.outbox.enabled,
|
|
69
|
+
};
|
|
70
|
+
changed = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (changed)
|
|
74
|
+
updates.set(backgroundPath, JSON.stringify(existing, null, 2) + '\n');
|
|
75
|
+
}
|
|
76
|
+
const path = 'secrets/declarations.ts', contents = current.get(path);
|
|
77
|
+
if (contents == null)
|
|
78
|
+
return updates;
|
|
79
|
+
const parse = (source) => {
|
|
80
|
+
const file = ts.createSourceFile(path, source, ts.ScriptTarget.Latest, true);
|
|
81
|
+
const declarations = file.statements
|
|
82
|
+
.flatMap((statement) => ts.isVariableStatement(statement)
|
|
83
|
+
? [...statement.declarationList.declarations]
|
|
84
|
+
: [])
|
|
85
|
+
.filter((declaration) => ts.isIdentifier(declaration.name) &&
|
|
86
|
+
declaration.name.text === 'SecretDefinitions');
|
|
87
|
+
let expression = declarations.length === 1 ? declarations[0].initializer : undefined;
|
|
88
|
+
while (expression &&
|
|
89
|
+
(ts.isAsExpression(expression) ||
|
|
90
|
+
ts.isSatisfiesExpression(expression) ||
|
|
91
|
+
ts.isParenthesizedExpression(expression)))
|
|
92
|
+
expression = expression.expression;
|
|
93
|
+
if (!expression ||
|
|
94
|
+
!ts.isObjectLiteralExpression(expression) ||
|
|
95
|
+
expression.properties.some((property) => !ts.isPropertyAssignment(property)))
|
|
96
|
+
throw new Error('SQL reconciliation requires a literal SecretDefinitions object without spreads. Preserve custom declarations and add the generated database credential explicitly; no files changed.');
|
|
97
|
+
return {
|
|
98
|
+
file,
|
|
99
|
+
object: expression,
|
|
100
|
+
properties: expression.properties.filter(ts.isPropertyAssignment),
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
const existing = parse(contents), desired = parse(target[path]);
|
|
104
|
+
const name = (property) => ts.isIdentifier(property.name) || ts.isStringLiteral(property.name)
|
|
105
|
+
? property.name.text
|
|
106
|
+
: undefined;
|
|
107
|
+
// Compare syntax, not the printer's retained quote style or trailing commas.
|
|
108
|
+
// Formatting a seeded declaration must not turn an unchanged binding into a
|
|
109
|
+
// conflict. Preserve every expression/operator and literal value in the shape.
|
|
110
|
+
const shape = (node) => {
|
|
111
|
+
if (ts.isStringLiteral(node) ||
|
|
112
|
+
ts.isNumericLiteral(node) ||
|
|
113
|
+
ts.isIdentifier(node))
|
|
114
|
+
return [node.kind, node.text];
|
|
115
|
+
const children = [];
|
|
116
|
+
ts.forEachChild(node, (child) => {
|
|
117
|
+
children.push(shape(child));
|
|
118
|
+
});
|
|
119
|
+
return [node.kind, children.length ? children : node.getText()];
|
|
120
|
+
};
|
|
121
|
+
const additions = [];
|
|
122
|
+
const bindingShape = (property) => {
|
|
123
|
+
const value = property.initializer;
|
|
124
|
+
if (!ts.isObjectLiteralExpression(value))
|
|
125
|
+
return shape(property);
|
|
126
|
+
return value.properties
|
|
127
|
+
.filter((entry) => !ts.isPropertyAssignment(entry) || name(entry) !== 'rotation')
|
|
128
|
+
.map(shape);
|
|
129
|
+
};
|
|
130
|
+
for (const property of desired.properties.filter((entry) => name(entry)?.endsWith('PrimaryDatabaseCredential'))) {
|
|
131
|
+
const matches = existing.properties.filter((entry) => name(entry) === name(property));
|
|
132
|
+
if (matches.length > 1 ||
|
|
133
|
+
(matches.length === 1 &&
|
|
134
|
+
!(0, node_util_1.isDeepStrictEqual)(bindingShape(matches[0]), bindingShape(property))))
|
|
135
|
+
throw new Error(`SQL reconciliation conflict at ${path}: ${name(property)}. No files changed.`);
|
|
136
|
+
if (!matches.length)
|
|
137
|
+
additions.push(property.getText(desired.file));
|
|
138
|
+
}
|
|
139
|
+
if (additions.length) {
|
|
140
|
+
// Use AST offsets so unrelated declarations, comments and feature code remain byte-for-byte intact.
|
|
141
|
+
const end = existing.object.end - 1;
|
|
142
|
+
const comma = existing.properties.length && !existing.object.properties.hasTrailingComma
|
|
143
|
+
? ','
|
|
144
|
+
: '';
|
|
145
|
+
let result = contents.slice(0, end) +
|
|
146
|
+
comma +
|
|
147
|
+
'\n' +
|
|
148
|
+
additions.join(',\n') +
|
|
149
|
+
',\n' +
|
|
150
|
+
contents.slice(end);
|
|
151
|
+
const imports = existing.file.statements.filter(ts.isImportDeclaration);
|
|
152
|
+
const schemaImport = imports.some((entry) => ts.isStringLiteral(entry.moduleSpecifier) &&
|
|
153
|
+
entry.moduleSpecifier.text === '@empire-builder-kit/runtime/database' &&
|
|
154
|
+
entry.importClause?.namedBindings &&
|
|
155
|
+
ts.isNamedImports(entry.importClause.namedBindings) &&
|
|
156
|
+
entry.importClause.namedBindings.elements.some((binding) => binding.name.text === 'databaseCredentialSecretSchema' &&
|
|
157
|
+
(!binding.propertyName ||
|
|
158
|
+
binding.propertyName.text === 'databaseCredentialSecretSchema')));
|
|
159
|
+
if (!schemaImport) {
|
|
160
|
+
if (/\bdatabaseCredentialSecretSchema\b/.test(contents))
|
|
161
|
+
throw new Error(`SQL reconciliation conflict at ${path}: databaseCredentialSecretSchema is already bound. No files changed.`);
|
|
162
|
+
result =
|
|
163
|
+
"import { databaseCredentialSecretSchema } from '@empire-builder-kit/runtime/database';\n" +
|
|
164
|
+
result;
|
|
165
|
+
}
|
|
166
|
+
updates.set(path, result);
|
|
167
|
+
}
|
|
168
|
+
return updates;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=sql-seeded-reconciliation.js.map
|
|
@@ -85,5 +85,7 @@ export declare function preserveCompositionRegions(current: string, target: stri
|
|
|
85
85
|
export declare function reemitRecordedNativeRuntimeCompositions(files: Readonly<Record<string, string>>, ownership: Pick<GeneratedOwnershipRecord, 'compositions'>): Readonly<Record<string, string>>;
|
|
86
86
|
export declare function inspectWorkspaceSstVersion(tree: Tree, packageJson: WorkspacePackageJson): WorkspaceSstVersionState;
|
|
87
87
|
export declare function createUpgradeReport(currentFiles: ReadonlyMap<string, string | null>, currentOwnership: OwnershipPaths, targetFiles: ReadonlyMap<string, string>, targetOwnership: OwnershipPaths, jsonOwnershipChanges?: JsonOwnershipChanges): UpgradeReport;
|
|
88
|
+
/** Internal paired-generation path: the ordinary ownership-preserving upgrader owns Foundation writes. */
|
|
89
|
+
export declare function upgradeFoundationForRequirements(tree: Tree, requirements: readonly unknown[], apply: boolean, output?: UpgradeGeneratorLogger): Promise<void>;
|
|
88
90
|
export declare function upgradeGenerator(tree: Tree, options: UpgradeGeneratorSchema, output?: UpgradeGeneratorLogger, executionOptions?: UpgradeGeneratorExecutionOptions): Promise<GeneratorCallback | void>;
|
|
89
91
|
export default upgradeGenerator;
|
|
@@ -6,10 +6,13 @@ exports.preserveCompositionRegions = preserveCompositionRegions;
|
|
|
6
6
|
exports.reemitRecordedNativeRuntimeCompositions = reemitRecordedNativeRuntimeCompositions;
|
|
7
7
|
exports.inspectWorkspaceSstVersion = inspectWorkspaceSstVersion;
|
|
8
8
|
exports.createUpgradeReport = createUpgradeReport;
|
|
9
|
+
exports.upgradeFoundationForRequirements = upgradeFoundationForRequirements;
|
|
9
10
|
exports.upgradeGenerator = upgradeGenerator;
|
|
10
11
|
const deterministic_order_js_1 = require("../../deterministic-order.js");
|
|
11
12
|
const capacity_migration_js_1 = require("../../repository-policy/capacity-migration.js");
|
|
12
13
|
const dependency_overrides_js_1 = require("../preset/dependency-overrides.js");
|
|
14
|
+
const workspace_files_adopter_skills_js_1 = require("../preset/workspace-files-adopter-skills.js");
|
|
15
|
+
const sql_seeded_reconciliation_js_1 = require("./sql-seeded-reconciliation.js");
|
|
13
16
|
const devkit_1 = require("@nx/devkit");
|
|
14
17
|
const node_buffer_1 = require("node:buffer");
|
|
15
18
|
const node_crypto_1 = require("node:crypto");
|
|
@@ -20,13 +23,17 @@ const yaml_1 = require("yaml");
|
|
|
20
23
|
const index_js_1 = require("../../blueprints/index.js");
|
|
21
24
|
const index_js_2 = require("../../api-contract/index.js");
|
|
22
25
|
const index_js_3 = require("../../foundation/index.js");
|
|
26
|
+
const capability_plan_js_1 = require("../../foundation/capability-plan.js");
|
|
27
|
+
const persistence_contract_js_1 = require("../slice/persistence-contract.js");
|
|
23
28
|
const index_js_4 = require("../../ownership/index.js");
|
|
24
29
|
const function_js_1 = require("../function/function.js");
|
|
30
|
+
const logging_registry_js_1 = require("../logging-registry.js");
|
|
25
31
|
const feature_registry_js_1 = require("../feature-registry.js");
|
|
26
32
|
const generator_js_1 = require("../preset/generator.js");
|
|
27
33
|
const tool_versions_js_1 = require("../preset/tool-versions.js");
|
|
28
34
|
const workspace_files_js_1 = require("../preset/workspace-files.js");
|
|
29
35
|
const built_in_plan_js_1 = require("../slice/built-in-plan.js");
|
|
36
|
+
const data_policy_review_seed_js_1 = require("../slice/data-policy-review-seed.js");
|
|
30
37
|
const workload_js_1 = require("../workload/workload.js");
|
|
31
38
|
const formatting_js_1 = require("../formatting.js");
|
|
32
39
|
const git_inspection_js_1 = require("../../developer-agent/git-inspection.js");
|
|
@@ -342,6 +349,7 @@ const SEEDED_RECONCILIATION = {
|
|
|
342
349
|
category: 'reliability-operations',
|
|
343
350
|
implications: [
|
|
344
351
|
'alarm-registration',
|
|
352
|
+
'database-capacity-dynamodb-table-and-pending-events-throttle-metrics',
|
|
345
353
|
'diagnostic-authority',
|
|
346
354
|
'incident-remediation',
|
|
347
355
|
],
|
|
@@ -407,11 +415,18 @@ function developerAgentAgentsAppendix(renderedAgents) {
|
|
|
407
415
|
return renderedAgents.slice(start + 1);
|
|
408
416
|
}
|
|
409
417
|
function planDeveloperAgentInstructionAppend(currentAgents, targetAgents) {
|
|
410
|
-
if (currentAgents === null
|
|
411
|
-
new RegExp(`(?:^|\\r?\\n)${DEVELOPER_AGENT_AGENTS_HEADING}(?:\\r?\\n|$)`).test(currentAgents)) {
|
|
418
|
+
if (currentAgents === null)
|
|
412
419
|
return null;
|
|
420
|
+
const additions = [];
|
|
421
|
+
if (!/(?:^|\r?\n)## Bundled adopter skills(?:\r?\n|$)/u.test(currentAgents)) {
|
|
422
|
+
additions.push((0, workspace_files_adopter_skills_js_1.renderAdopterSkillIndex)());
|
|
413
423
|
}
|
|
414
|
-
|
|
424
|
+
if (!new RegExp(`(?:^|\\r?\\n)${DEVELOPER_AGENT_AGENTS_HEADING}(?:\\r?\\n|$)`).test(currentAgents)) {
|
|
425
|
+
additions.push(developerAgentAgentsAppendix(targetAgents));
|
|
426
|
+
}
|
|
427
|
+
if (additions.length === 0)
|
|
428
|
+
return null;
|
|
429
|
+
const appendix = additions.join('\n');
|
|
415
430
|
const separator = currentAgents.length === 0
|
|
416
431
|
? ''
|
|
417
432
|
: currentAgents.endsWith('\n\n')
|
|
@@ -1229,7 +1244,7 @@ function carryRetainedServiceAdapterAuthority(targetFiles, owner) {
|
|
|
1229
1244
|
'managed-generated-service-runtime-endpoint';
|
|
1230
1245
|
return { ...targetFiles, [path]: json(target) };
|
|
1231
1246
|
}
|
|
1232
|
-
async function upgradeFoundation(tree, options, packageJson, output) {
|
|
1247
|
+
async function upgradeFoundation(tree, options, packageJson, output, foundationRequirements = []) {
|
|
1233
1248
|
if (options.blueprint !== undefined || options.inputs !== undefined) {
|
|
1234
1249
|
throw new Error('Standard Foundation upgrades do not accept Blueprint or input options.');
|
|
1235
1250
|
}
|
|
@@ -1245,6 +1260,8 @@ async function upgradeFoundation(tree, options, packageJson, output) {
|
|
|
1245
1260
|
const deployment = readRepositoryDeploymentRenderingOptions(tree);
|
|
1246
1261
|
const renderedTarget = (0, workspace_files_js_1.renderFoundationFilePlan)({
|
|
1247
1262
|
...deployment,
|
|
1263
|
+
foundationRequirements,
|
|
1264
|
+
foundationDescriptor: readJson(tree, node_path_1.posix.join(root, 'contracts/foundation.json'), 'Existing Foundation resource declaration'),
|
|
1248
1265
|
frameworkVersion: (0, generator_js_1.frameworkPackageVersion)(),
|
|
1249
1266
|
name: packageJson.name,
|
|
1250
1267
|
});
|
|
@@ -1298,6 +1315,24 @@ async function upgradeFoundation(tree, options, packageJson, output) {
|
|
|
1298
1315
|
// that skip workspace formatting. Canonicalize before binding those bytes.
|
|
1299
1316
|
await formatOwnershipRecord(tree, node_path_1.posix.join(root, '.ebk/ownership.json'), 'Standard Foundation');
|
|
1300
1317
|
}
|
|
1318
|
+
/** Internal paired-generation path: the ordinary ownership-preserving upgrader owns Foundation writes. */
|
|
1319
|
+
async function upgradeFoundationForRequirements(tree, requirements, apply, output = devkit_1.logger) {
|
|
1320
|
+
requireUpgradePrerequisites(tree, 'product-slice');
|
|
1321
|
+
const capabilityPlan = (0, capability_plan_js_1.planFoundationCapabilities)({
|
|
1322
|
+
current: readJson(tree, 'packages/foundation/contracts/foundation.json', 'Standard Foundation descriptor'),
|
|
1323
|
+
requirements,
|
|
1324
|
+
});
|
|
1325
|
+
if (capabilityPlan.migratedFromContract !== null)
|
|
1326
|
+
throw new Error('Paired generation cannot migrate a prerelease Foundation contract. Report and apply the explicit Foundation upgrade first; no files changed.');
|
|
1327
|
+
// A Slice generator is not an implicit Foundation version/formatting upgrade.
|
|
1328
|
+
if (capabilityPlan.added.length === 0)
|
|
1329
|
+
return;
|
|
1330
|
+
const policy = (0, tree_policy_js_1.readRepositoryOperatingPolicyFromTree)(tree);
|
|
1331
|
+
if (tree.exists('packages/foundation/contracts/costs.json'))
|
|
1332
|
+
(0, capacity_migration_js_1.assertCapacityMigrationChoice)(policy.productionFoundation.profile, readJson(tree, 'packages/foundation/contracts/costs.json', 'Foundation cost contract'));
|
|
1333
|
+
const packageJson = readJson(tree, 'package.json', 'Workspace package.json');
|
|
1334
|
+
await upgradeFoundation(tree, { name: 'foundation', apply, skipFormat: true, skipInstall: true }, packageJson, output, requirements);
|
|
1335
|
+
}
|
|
1301
1336
|
async function upgradeWorkspace(tree, options, packageJson, output) {
|
|
1302
1337
|
if (options.blueprint !== undefined || options.inputs !== undefined) {
|
|
1303
1338
|
throw new Error('Workspace upgrades do not accept Blueprint or input options.');
|
|
@@ -1397,6 +1432,30 @@ async function executeUpgradeGenerator(tree, options, output = devkit_1.logger,
|
|
|
1397
1432
|
}
|
|
1398
1433
|
if (name === 'foundation') {
|
|
1399
1434
|
requireUpgradePrerequisites(tree, 'foundation');
|
|
1435
|
+
// Refuse an unsupported core transition before changing shared contracts.
|
|
1436
|
+
// This is a preflight, not a prerelease migration or compatibility layer.
|
|
1437
|
+
for (const slice of tree.children('packages')) {
|
|
1438
|
+
const root = node_path_1.posix.join('packages', slice);
|
|
1439
|
+
const path = node_path_1.posix.join(root, '.ebk/ownership.json');
|
|
1440
|
+
if (slice === 'foundation' || !tree.exists(path))
|
|
1441
|
+
continue;
|
|
1442
|
+
const recorded = readJson(tree, path, 'Product Slice ownership metadata');
|
|
1443
|
+
if (recorded?.blueprint
|
|
1444
|
+
?.name !== index_js_1.BUILTIN_BLUEPRINT_NAME)
|
|
1445
|
+
continue;
|
|
1446
|
+
const parsed = (0, index_js_4.validateGeneratedOwnershipRecord)(recorded);
|
|
1447
|
+
if (!parsed.valid)
|
|
1448
|
+
throw new Error(ownershipValidationMessage('Product Slice ownership metadata', parsed.issues));
|
|
1449
|
+
(0, persistence_contract_js_1.standardPersistenceContract)({
|
|
1450
|
+
inputs: parsed.value.inputs,
|
|
1451
|
+
existingStandardRequirement: parsed.value.foundation,
|
|
1452
|
+
...(tree.exists(node_path_1.posix.join(root, persistence_contract_js_1.STANDARD_PERSISTENCE_PATH))
|
|
1453
|
+
? {
|
|
1454
|
+
current: readJson(tree, node_path_1.posix.join(root, persistence_contract_js_1.STANDARD_PERSISTENCE_PATH), 'Standard persistence declaration'),
|
|
1455
|
+
}
|
|
1456
|
+
: {}),
|
|
1457
|
+
});
|
|
1458
|
+
}
|
|
1400
1459
|
return upgradeFoundation(tree, options, packageJson, output);
|
|
1401
1460
|
}
|
|
1402
1461
|
requireUpgradePrerequisites(tree, 'product-slice');
|
|
@@ -1425,13 +1484,39 @@ async function executeUpgradeGenerator(tree, options, output = devkit_1.logger,
|
|
|
1425
1484
|
if (serviceAdapterOwner !== null && blueprint.source !== 'built-in') {
|
|
1426
1485
|
throw new Error('External Blueprint upgrades cannot retain the managed generated Service adapter authority; remove or explicitly migrate the elected adapter before changing Blueprint authority.');
|
|
1427
1486
|
}
|
|
1428
|
-
const
|
|
1487
|
+
const requestedInputs = parseInputs(options.inputs, currentOwnership.inputs);
|
|
1488
|
+
if (blueprint.source === 'built-in') {
|
|
1489
|
+
// Refuse old framework cores before any paired Foundation/Slice changes.
|
|
1490
|
+
// Keeping the old database safe does not imply supporting its old runtime.
|
|
1491
|
+
(0, persistence_contract_js_1.standardPersistenceContract)({
|
|
1492
|
+
inputs: requestedInputs,
|
|
1493
|
+
existingStandardRequirement: currentOwnership.foundation,
|
|
1494
|
+
...(tree.exists(node_path_1.posix.join(root, persistence_contract_js_1.STANDARD_PERSISTENCE_PATH))
|
|
1495
|
+
? {
|
|
1496
|
+
current: readJson(tree, node_path_1.posix.join(root, persistence_contract_js_1.STANDARD_PERSISTENCE_PATH), 'Standard persistence declaration'),
|
|
1497
|
+
}
|
|
1498
|
+
: {}),
|
|
1499
|
+
});
|
|
1500
|
+
if (currentOwnership.foundation.capabilities.includes('postgres') &&
|
|
1501
|
+
!(0, capability_plan_js_1.readStandardSqlDeclaration)(requestedInputs))
|
|
1502
|
+
throw new Error('SQL cannot be retired through an upgrade. Keep the explicit inputs.sql declaration; database retirement requires a separate reviewed operation.');
|
|
1503
|
+
}
|
|
1504
|
+
const inputResult = (0, index_js_1.validateBlueprintInputs)(blueprint.inputSchema, requestedInputs);
|
|
1429
1505
|
if (!inputResult.valid) {
|
|
1430
1506
|
throw new Error(`Blueprint inputs are invalid:\n${inputResult.issues
|
|
1431
1507
|
.map((issue) => `- ${issue.path}: ${issue.message}`)
|
|
1432
1508
|
.join('\n')}`);
|
|
1433
1509
|
}
|
|
1434
|
-
const
|
|
1510
|
+
const requiredFoundation = blueprint.source === 'built-in'
|
|
1511
|
+
? (0, capability_plan_js_1.standardPersistenceRequirement)(inputResult.value, currentOwnership.compositions)
|
|
1512
|
+
: blueprint.manifest.foundation;
|
|
1513
|
+
const existingFoundation = readJson(tree, 'packages/foundation/contracts/foundation.json', 'Standard Foundation descriptor');
|
|
1514
|
+
const compatibility = (0, index_js_3.validateFoundationCompatibility)(requiredFoundation, blueprint.source === 'built-in'
|
|
1515
|
+
? (0, capability_plan_js_1.planFoundationCapabilities)({
|
|
1516
|
+
current: existingFoundation,
|
|
1517
|
+
requirements: [requiredFoundation],
|
|
1518
|
+
}).descriptor
|
|
1519
|
+
: existingFoundation);
|
|
1435
1520
|
if (!compatibility.valid) {
|
|
1436
1521
|
throw new Error(`Standard Foundation is incompatible with the target Blueprint:\n${compatibility.issues
|
|
1437
1522
|
.map((issue) => `- ${issue.path}: ${issue.message}`)
|
|
@@ -1449,7 +1534,15 @@ async function executeUpgradeGenerator(tree, options, output = devkit_1.logger,
|
|
|
1449
1534
|
const runtimeVersion = packageJson.dependencies?.['@empire-builder-kit/runtime'];
|
|
1450
1535
|
if (!runtimeVersion)
|
|
1451
1536
|
throw new Error('Workspace must depend on @empire-builder-kit/runtime.');
|
|
1452
|
-
const plan = (0, built_in_plan_js_1.createBuiltInSlicePlan)(name, scope, runtimeVersion, blueprint.manifest, inputResult.value,
|
|
1537
|
+
const plan = (0, built_in_plan_js_1.createBuiltInSlicePlan)(name, scope, runtimeVersion, blueprint.manifest, inputResult.value, (0, data_policy_review_seed_js_1.dataPolicyReviewSeed)(tree, root), deployment.deploymentProfile, {
|
|
1538
|
+
existingStandardRequirement: currentOwnership.foundation,
|
|
1539
|
+
compositions: currentOwnership.compositions,
|
|
1540
|
+
...(tree.exists(node_path_1.posix.join(root, persistence_contract_js_1.STANDARD_PERSISTENCE_PATH))
|
|
1541
|
+
? {
|
|
1542
|
+
current: readJson(tree, node_path_1.posix.join(root, persistence_contract_js_1.STANDARD_PERSISTENCE_PATH), 'Standard persistence declaration'),
|
|
1543
|
+
}
|
|
1544
|
+
: {}),
|
|
1545
|
+
});
|
|
1453
1546
|
targetFiles = Object.fromEntries(Object.entries(plan.files).map(([path, contents]) => {
|
|
1454
1547
|
const current = tree.read(node_path_1.posix.join(root, path), 'utf8');
|
|
1455
1548
|
return [
|
|
@@ -1608,23 +1701,54 @@ async function executeUpgradeGenerator(tree, options, output = devkit_1.logger,
|
|
|
1608
1701
|
]));
|
|
1609
1702
|
let mergedTarget = mergeStructuredTargetFiles(currentFiles, currentOwnership, new Map(Object.entries(targetFiles)), targetOwnership);
|
|
1610
1703
|
mergedTarget = await formatMergedManagedJsonFiles(tree, root, mergedTarget, targetOwnership);
|
|
1704
|
+
const sqlAppends = blueprint.source === 'built-in' &&
|
|
1705
|
+
(0, capability_plan_js_1.readStandardSqlDeclaration)(inputResult.value)
|
|
1706
|
+
? (0, sql_seeded_reconciliation_js_1.planSqlSeededReconciliation)(currentFiles, targetFiles)
|
|
1707
|
+
: new Map();
|
|
1708
|
+
for (const [path, contents] of sqlAppends) {
|
|
1709
|
+
const workspacePath = node_path_1.posix.join(root, path);
|
|
1710
|
+
mergedTarget.files.set(path, await (0, formatting_js_1.formatTreeContentsToFixedPoint)(contents, await (0, formatting_js_1.effectiveTreePrettierOptions)(tree, workspacePath, (0, formatting_js_1.changedTreePrettierOptions)(tree)), workspacePath));
|
|
1711
|
+
}
|
|
1611
1712
|
requireTargetCompositionFeatures(mergedTarget.files, targetOwnership);
|
|
1713
|
+
const loggingAppend = blueprint.source === 'built-in'
|
|
1714
|
+
? (0, logging_registry_js_1.planRequiredSliceLoggingComponents)(currentFiles.get(logging_registry_js_1.SLICE_LOGGING_REGISTRY_PATH) ?? null, targetFiles[logging_registry_js_1.SLICE_LOGGING_REGISTRY_PATH])
|
|
1715
|
+
: null;
|
|
1716
|
+
if (loggingAppend !== null) {
|
|
1717
|
+
const workspacePath = node_path_1.posix.join(root, logging_registry_js_1.SLICE_LOGGING_REGISTRY_PATH);
|
|
1718
|
+
const formatting = await (0, formatting_js_1.effectiveTreePrettierOptions)(tree, workspacePath, (0, formatting_js_1.changedTreePrettierOptions)(tree));
|
|
1719
|
+
mergedTarget.files.set(logging_registry_js_1.SLICE_LOGGING_REGISTRY_PATH, await (0, formatting_js_1.formatTreeContentsToFixedPoint)(loggingAppend, formatting, workspacePath));
|
|
1720
|
+
}
|
|
1612
1721
|
const report = createUpgradeReport(currentFiles, currentOwnership, mergedTarget.files, targetOwnership, mergedTarget);
|
|
1722
|
+
if (loggingAppend !== null) {
|
|
1723
|
+
report.preservedSeeded = report.preservedSeeded.filter((path) => path !== logging_registry_js_1.SLICE_LOGGING_REGISTRY_PATH);
|
|
1724
|
+
report.appendedSeeded.push(logging_registry_js_1.SLICE_LOGGING_REGISTRY_PATH);
|
|
1725
|
+
}
|
|
1726
|
+
for (const path of sqlAppends.keys()) {
|
|
1727
|
+
report.preservedSeeded = report.preservedSeeded.filter((entry) => entry !== path);
|
|
1728
|
+
report.appendedSeeded.push(path);
|
|
1729
|
+
}
|
|
1730
|
+
report.appendedSeeded.sort(deterministic_order_js_1.compareUtf16);
|
|
1613
1731
|
output.info(`[ebk-upgrade] ${name} ${currentOwnership.blueprint.name}@${currentOwnership.blueprint.version} -> ${blueprint.manifest.name}@${blueprint.manifest.version}\n${JSON.stringify(report, null, 2)}`);
|
|
1614
|
-
if (!options.apply)
|
|
1732
|
+
if (!options.apply) {
|
|
1733
|
+
if (blueprint.source === 'built-in')
|
|
1734
|
+
await upgradeFoundationForRequirements(tree, [requiredFoundation], false, output);
|
|
1615
1735
|
return;
|
|
1736
|
+
}
|
|
1616
1737
|
if (report.incompatibleSeededMigrations.length > 0) {
|
|
1617
1738
|
throw new Error(seededMigrationUpgradeMessage('Product Slice', report));
|
|
1618
1739
|
}
|
|
1619
1740
|
if (report.conflicting.length > 0) {
|
|
1620
1741
|
throw new Error(upgradeConflictMessage('Product Slice', report));
|
|
1621
1742
|
}
|
|
1743
|
+
if (blueprint.source === 'built-in')
|
|
1744
|
+
await upgradeFoundationForRequirements(tree, [requiredFoundation], true, output);
|
|
1622
1745
|
for (const path of report.obsolete)
|
|
1623
1746
|
tree.delete(node_path_1.posix.join(root, path));
|
|
1624
1747
|
const writePaths = new Set([
|
|
1625
1748
|
...report.changed,
|
|
1626
1749
|
...report.missing,
|
|
1627
1750
|
...report.addedSeeded,
|
|
1751
|
+
...report.appendedSeeded,
|
|
1628
1752
|
'.ebk/ownership.json',
|
|
1629
1753
|
]);
|
|
1630
1754
|
for (const path of writePaths) {
|
|
@@ -1657,7 +1781,10 @@ async function executeUpgradeGenerator(tree, options, output = devkit_1.logger,
|
|
|
1657
1781
|
async function upgradeGenerator(tree, options, output = devkit_1.logger, executionOptions = {}) {
|
|
1658
1782
|
const previewFile = await requireDeveloperAgentPreviewBinding(tree, options, executionOptions);
|
|
1659
1783
|
if (!previewFile) {
|
|
1660
|
-
|
|
1784
|
+
const deferred = new preview_changes_js_1.DeferredDeveloperAgentTree(tree);
|
|
1785
|
+
const install = await executeUpgradeGenerator(deferred, options, output, executionOptions);
|
|
1786
|
+
deferred.apply();
|
|
1787
|
+
return install;
|
|
1661
1788
|
}
|
|
1662
1789
|
const upgradeOptions = { ...options };
|
|
1663
1790
|
delete upgradeOptions.developerAgentPreview;
|
|
@@ -6,6 +6,10 @@ exports.workloadGenerator = workloadGenerator;
|
|
|
6
6
|
const deterministic_order_js_1 = require("../../deterministic-order.js");
|
|
7
7
|
const node_path_1 = require("node:path");
|
|
8
8
|
const index_js_1 = require("../../ownership/index.js");
|
|
9
|
+
const capability_plan_js_1 = require("../../foundation/capability-plan.js");
|
|
10
|
+
const preview_changes_js_1 = require("../../developer-agent/preview-changes.js");
|
|
11
|
+
const upgrade_js_1 = require("../upgrade/upgrade.js");
|
|
12
|
+
const built_in_plan_foundation_files_js_1 = require("../slice/built-in-plan-foundation-files.js");
|
|
9
13
|
const feature_registry_js_1 = require("../feature-registry.js");
|
|
10
14
|
const formatting_js_1 = require("../formatting.js");
|
|
11
15
|
const logging_registry_js_1 = require("../logging-registry.js");
|
|
@@ -1030,7 +1034,7 @@ describe('${workload} ${kind} outage behavior', () => {
|
|
|
1030
1034
|
project: `@${slice}/${kind}-${workload}`,
|
|
1031
1035
|
};
|
|
1032
1036
|
}
|
|
1033
|
-
async function
|
|
1037
|
+
async function executeWorkloadGenerator(tree, options, kind) {
|
|
1034
1038
|
const slice = name(options.slice, 'Product Slice name');
|
|
1035
1039
|
const workload = name(options.name, kind === 'service' ? 'Service name' : 'Job name');
|
|
1036
1040
|
const requestedFeature = name(options.feature, 'Feature');
|
|
@@ -1091,6 +1095,26 @@ async function workloadGenerator(tree, options, kind) {
|
|
|
1091
1095
|
if (!tree.exists(productPath)) {
|
|
1092
1096
|
throw new Error(`${slice} is not an EBK v1 Product Slice.`);
|
|
1093
1097
|
}
|
|
1098
|
+
const ownership = (0, index_js_1.validateGeneratedOwnershipRecord)(JSON.parse(tree.read(node_path_1.posix.join(sliceRoot, '.ebk/ownership.json'), 'utf8') ?? 'null'));
|
|
1099
|
+
if (!ownership.valid)
|
|
1100
|
+
throw new Error('Product Slice ownership is invalid before workload composition.');
|
|
1101
|
+
const foundationPath = node_path_1.posix.join(sliceRoot, 'infra/foundation.ts');
|
|
1102
|
+
const foundationSource = tree.read(foundationPath, 'utf8');
|
|
1103
|
+
const foundationOwner = ownership.value.paths.find(({ path }) => path === 'infra/foundation.ts');
|
|
1104
|
+
if (foundationSource === null ||
|
|
1105
|
+
foundationOwner?.mode !== 'managed' ||
|
|
1106
|
+
(0, index_js_1.hashOwnedContent)(foundationSource, foundationOwner) !==
|
|
1107
|
+
foundationOwner.sha256)
|
|
1108
|
+
throw new Error('Product Slice Foundation bindings have managed drift; reconcile ownership before workload generation.');
|
|
1109
|
+
const foundationRequirement = {
|
|
1110
|
+
contract: ownership.value.foundation.contract,
|
|
1111
|
+
capabilities: (0, capability_plan_js_1.planFoundationCapabilities)({
|
|
1112
|
+
requirements: [
|
|
1113
|
+
ownership.value.foundation,
|
|
1114
|
+
{ contract: '^2.0.0', capabilities: ['network', 'container-compute'] },
|
|
1115
|
+
],
|
|
1116
|
+
}).descriptor.capabilities,
|
|
1117
|
+
};
|
|
1094
1118
|
requireCompositionMarker(tree, topologyPath, '// <ebk:native-runtime-extensions:end>');
|
|
1095
1119
|
requireCompositionMarker(tree, intentPath, '// <ebk:native-runtime-intent-contributions:end>');
|
|
1096
1120
|
for (const marker of [
|
|
@@ -1124,6 +1148,7 @@ async function workloadGenerator(tree, options, kind) {
|
|
|
1124
1148
|
const additionalPerformancePaths = performanceRegistration.additionalFiles.map(({ path }) => path);
|
|
1125
1149
|
const installScope = {
|
|
1126
1150
|
exactPaths: [
|
|
1151
|
+
foundationPath,
|
|
1127
1152
|
productPath,
|
|
1128
1153
|
topologyPath,
|
|
1129
1154
|
intentPath,
|
|
@@ -1146,12 +1171,28 @@ async function workloadGenerator(tree, options, kind) {
|
|
|
1146
1171
|
node_path_1.posix.join(sliceRoot, RELEASE_REGISTRY_PATH),
|
|
1147
1172
|
node_path_1.posix.join(sliceRoot, '.ebk/ownership.json'),
|
|
1148
1173
|
],
|
|
1149
|
-
roots: [root],
|
|
1174
|
+
roots: [root, 'packages/foundation'],
|
|
1150
1175
|
};
|
|
1151
1176
|
const installState = options.skipInstall
|
|
1152
1177
|
? undefined
|
|
1153
1178
|
: (0, post_generation_install_js_1.capturePostGenerationInstallState)(tree, installScope, installOperation);
|
|
1154
1179
|
const { factoryName } = plan;
|
|
1180
|
+
// Capability growth and its consuming bindings are a single deferred source
|
|
1181
|
+
// operation. A container needs network/compute, never an implicit database.
|
|
1182
|
+
await (0, upgrade_js_1.upgradeFoundationForRequirements)(tree, [foundationRequirement], true);
|
|
1183
|
+
if (!ownership.value.foundation.capabilities.includes('network')) {
|
|
1184
|
+
// Capability growth must update the API's consuming network binding in
|
|
1185
|
+
// this same generation, before a Service registers private ingress.
|
|
1186
|
+
const source = tree.read(productPath, 'utf8');
|
|
1187
|
+
if (source === null)
|
|
1188
|
+
throw new Error('Product Slice API source is missing; no workload files changed.');
|
|
1189
|
+
const anchor = ` const api = new sst.aws.ApiGatewayV2('${pascal(slice)}Api', {`;
|
|
1190
|
+
if (source.split(anchor).length !== 2)
|
|
1191
|
+
throw new Error('Product Slice API composition is not recognized; no workload files changed.');
|
|
1192
|
+
tree.write(productPath, source.replace(anchor, anchor +
|
|
1193
|
+
'\n ...(performanceDeploymentAuthority ? { vpc: foundation.vpc } : {}),'));
|
|
1194
|
+
}
|
|
1195
|
+
tree.write(foundationPath, (0, built_in_plan_foundation_files_js_1.renderSliceFoundationFiles)(slice, pascal(slice), foundationRequirement.capabilities)['infra/foundation.ts']);
|
|
1155
1196
|
const infraRelative = `../${plural}/${workload}/infra.js`;
|
|
1156
1197
|
for (const [path, contents] of Object.entries(plan.files)) {
|
|
1157
1198
|
tree.write(node_path_1.posix.join(sliceRoot, path), contents);
|
|
@@ -1219,8 +1260,10 @@ ${kind === 'service' && performanceRegistration.ownsProtectedLoadAdapter
|
|
|
1219
1260
|
}
|
|
1220
1261
|
(0, index_js_1.recordCompositionOwnership)(tree, {
|
|
1221
1262
|
compositions: [{ feature, kind, name: workload }],
|
|
1263
|
+
foundation: foundationRequirement,
|
|
1222
1264
|
paths: [
|
|
1223
1265
|
...plan.paths,
|
|
1266
|
+
{ path: 'infra/foundation.ts' },
|
|
1224
1267
|
{ path: 'infra/product.ts' },
|
|
1225
1268
|
{ path: 'infra/native-runtime-authority/topology.ts' },
|
|
1226
1269
|
{ path: 'infra/native-runtime-authority/effective-intent.ts' },
|
|
@@ -1246,4 +1289,10 @@ ${kind === 'service' && performanceRegistration.ownsProtectedLoadAdapter
|
|
|
1246
1289
|
}
|
|
1247
1290
|
return (0, post_generation_install_js_1.createPostGenerationInstallCallback)(tree, installState, installScope, installOperation);
|
|
1248
1291
|
}
|
|
1292
|
+
async function workloadGenerator(tree, options, kind) {
|
|
1293
|
+
const deferred = new preview_changes_js_1.DeferredDeveloperAgentTree(tree);
|
|
1294
|
+
const install = await executeWorkloadGenerator(deferred, options, kind);
|
|
1295
|
+
deferred.apply();
|
|
1296
|
+
return install;
|
|
1297
|
+
}
|
|
1249
1298
|
//# sourceMappingURL=workload.js.map
|