@empire-builder-kit/nx 1.0.0-rc.4 → 1.0.0-rc.40
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 +21 -1
- package/generators.json +10 -0
- package/package.json +31 -7
- package/src/aws/child-environment.d.ts +10 -0
- package/src/aws/child-environment.js +77 -0
- package/src/aws/identity.d.ts +13 -0
- package/src/aws/identity.js +41 -0
- package/src/aws-authority/index.d.ts +2 -0
- package/src/aws-authority/index.js +6 -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 +248 -0
- package/src/aws-authority/stage-authority.js +3558 -0
- 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 +9 -1
- package/src/cli/main.js +139 -20
- package/src/cli/output.d.ts +1 -1
- package/src/cli/output.js +1 -1
- package/src/developer-agent/context.js +41 -9
- package/src/developer-agent/generator-planning.js +20 -6
- 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 +5 -3
- package/src/developer-agent/model.js +4 -4
- package/src/developer-agent/operation-registry.d.ts +5 -0
- package/src/developer-agent/operation-registry.js +286 -40
- package/src/developer-agent/planning.js +16 -13
- 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 +25 -9
- package/src/developer-agent/workspace-inspection.js +60 -5
- package/src/executors/blueprint-trust/blueprint-trust.js +6 -0
- package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
- package/src/executors/deployment-plan/deployment-plan.js +57 -2
- 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-preflight/foundation-preflight.d.ts +1 -0
- package/src/executors/foundation-preflight/foundation-preflight.js +6 -2
- package/src/executors/foundation-preflight/schema.json +5 -0
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +13 -2
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -31
- package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +65 -0
- package/src/executors/foundation-profile-preflight/production-database-safeguard.js +223 -0
- package/src/executors/foundation-profile-preflight/schema.json +15 -4
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +70 -20
- package/src/executors/foundation-remove-preflight/schema.json +6 -1
- package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
- package/src/executors/github-bootstrap/github-bootstrap.js +3 -0
- package/src/executors/github-bootstrap/schema.json +7 -1
- package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +29 -136
- package/src/executors/infrastructure-plan/infrastructure-plan.js +230 -3282
- package/src/executors/infrastructure-plan/schema.json +12 -52
- package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
- package/src/executors/local-deploy/federated-credential-transport.js +252 -0
- package/src/executors/local-deploy/local-approval.d.ts +18 -0
- package/src/executors/local-deploy/local-approval.js +39 -0
- package/src/executors/local-deploy/local-deploy.d.ts +112 -0
- package/src/executors/local-deploy/local-deploy.js +1404 -0
- package/src/executors/local-deploy/schema.json +70 -0
- package/src/executors/refresh/refresh.js +2 -2
- package/src/executors/remove/remove.js +2 -2
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +42 -0
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +1229 -0
- package/src/executors/router-waf-rehearsal/schema.json +29 -0
- package/src/executors/secret-initialize/schema.json +42 -0
- package/src/executors/secret-initialize/secret-initialize.d.ts +34 -0
- package/src/executors/secret-initialize/secret-initialize.js +297 -0
- package/src/executors/secret-metadata/schema.json +5 -0
- package/src/executors/secret-metadata/secret-metadata.d.ts +16 -2
- package/src/executors/secret-metadata/secret-metadata.js +129 -30
- package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
- package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
- package/src/executors/sst-lifecycle/governed-native-operation.d.ts +48 -0
- package/src/executors/sst-lifecycle/governed-native-operation.js +162 -0
- package/src/executors/sst-lifecycle/logging-preflight.d.ts +5 -0
- package/src/executors/sst-lifecycle/logging-preflight.js +23 -13
- package/src/executors/sst-lifecycle/run-sst-command.d.ts +40 -6
- package/src/executors/sst-lifecycle/run-sst-command.js +779 -70
- package/src/executors/sst-lifecycle/schema.json +8 -1
- package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
- package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
- package/src/executors/sst-lifecycle/sst-environment-source.d.ts +33 -0
- package/src/executors/sst-lifecycle/sst-environment-source.js +267 -0
- package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
- package/src/executors/sst-lifecycle/task-unlock.js +126 -0
- package/src/executors/unlock/unlock.js +2 -2
- 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 +4 -0
- package/src/foundation/index.js +11 -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/logging-preflight.js +1 -1
- package/src/foundation/logging.d.ts +3 -1
- package/src/foundation/logging.js +1 -1
- package/src/foundation/partial-state.d.ts +10 -0
- package/src/foundation/partial-state.js +21 -0
- package/src/foundation/preflight.js +37 -18
- package/src/foundation/private-smoke-access.d.ts +25 -0
- package/src/foundation/private-smoke-access.js +135 -0
- package/src/foundation/private-smoke-admission.d.ts +45 -0
- package/src/foundation/private-smoke-admission.js +180 -0
- package/src/foundation/private-smoke-control-plane.d.ts +18 -0
- package/src/foundation/private-smoke-control-plane.js +184 -0
- 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 +15 -8
- package/src/foundation/requirements.d.ts +3 -3
- package/src/foundation/requirements.js +24 -12
- package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
- package/src/foundation/router-waf-rate-rehearsal.js +210 -0
- package/src/foundation/router-waf.d.ts +149 -0
- package/src/foundation/router-waf.js +809 -0
- package/src/foundation/stages.d.ts +1 -0
- package/src/foundation/stages.js +11 -0
- 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.d.ts +8 -0
- package/src/generators/formatting.js +141 -0
- package/src/generators/function/function.js +38 -17
- package/src/generators/logging-registry.d.ts +2 -0
- package/src/generators/logging-registry.js +22 -0
- package/src/generators/post-generation-install.js +2 -2
- package/src/generators/preset/dependency-overrides.d.ts +8 -0
- package/src/generators/preset/dependency-overrides.js +55 -0
- package/src/generators/preset/generator.js +43 -3
- package/src/generators/preset/schema.d.ts +10 -0
- package/src/generators/preset/schema.json +47 -0
- package/src/generators/preset/tool-versions.d.ts +2 -0
- package/src/generators/preset/tool-versions.js +3 -1
- package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
- package/src/generators/preset/workspace-files-adopter-skills.js +303 -0
- package/src/generators/preset/workspace-files-ci-acceptance.d.ts +1 -0
- package/src/generators/preset/workspace-files-ci-acceptance.js +791 -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.d.ts +2 -0
- package/src/generators/preset/workspace-files-developer-agent.js +90 -28
- package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
- package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
- package/src/generators/preset/workspace-files-foundation-workload-roles.js +5 -2
- package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
- package/src/generators/preset/workspace-files-performance-cost.js +8 -8
- package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
- package/src/generators/preset/workspace-files-performance-load.js +39 -25
- package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
- package/src/generators/preset/workspace-files-stage-authority.js +518 -0
- package/src/generators/preset/workspace-files-thin-deploy.d.ts +55 -0
- package/src/generators/preset/workspace-files-thin-deploy.js +2473 -0
- package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
- package/src/generators/preset/workspace-files-thin-docs.js +352 -0
- package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
- package/src/generators/preset/workspace-files-thin-release.js +26 -0
- package/src/generators/preset/workspace-files-workload-role-baseline.js +254 -42
- package/src/generators/preset/workspace-files.d.ts +18 -2
- package/src/generators/preset/workspace-files.js +1504 -608
- package/src/generators/repository-policy/repository-policy.js +235 -5
- package/src/generators/repository-policy/schema.d.ts +10 -0
- package/src/generators/repository-policy/schema.json +80 -4
- package/src/generators/repository-policy/tree-policy.d.ts +3 -0
- package/src/generators/repository-policy/tree-policy.js +25 -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 +130 -414
- package/src/generators/slice/built-in-plan-async-work-files.js +166 -1969
- package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +60 -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 +2 -0
- package/src/generators/slice/built-in-plan-background-work-files.js +99 -0
- package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
- package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
- package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-data-files.js +163 -1196
- 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 +37 -2
- package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2443
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +50 -8
- package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js +44 -25
- package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +20 -1
- package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-foundation-files.js +39 -18
- package/src/generators/slice/built-in-plan-frontend-files.js +7 -3
- package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js +933 -729
- package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +67 -11
- 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 +137 -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 +157 -28
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +324 -0
- package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-operations-files.js +585 -97
- package/src/generators/slice/built-in-plan-performance-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-performance-files.js +220 -1074
- package/src/generators/slice/built-in-plan-project-files.js +141 -135
- package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-release-files.js +310 -70
- package/src/generators/slice/built-in-plan-reliability-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-reliability-files.js +279 -43
- package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
- 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 +276 -0
- package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-testing-files.js +304 -172
- 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 +11 -0
- package/src/generators/slice/built-in-plan-thin-release-files.js +162 -0
- package/src/generators/slice/built-in-plan-verification-files.js +76 -2
- package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-web-files.js +223 -16
- 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 +143 -279
- package/src/generators/slice/built-in-plan.d.ts +11 -1
- package/src/generators/slice/built-in-plan.js +80 -29
- 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 +61 -50
- 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 +15 -1
- package/src/generators/upgrade/upgrade.js +435 -44
- package/src/generators/workload/performance-registration.d.ts +1 -0
- package/src/generators/workload/performance-registration.js +9 -11
- package/src/generators/workload/service-performance-files.d.ts +1 -0
- package/src/generators/workload/service-performance-files.js +27 -7
- package/src/generators/workload/workload.d.ts +1 -1
- package/src/generators/workload/workload.js +105 -29
- package/src/git-policy/action-pins.d.ts +5 -0
- package/src/git-policy/action-pins.js +5 -0
- package/src/git-policy/github-bootstrap.d.ts +39 -8
- package/src/git-policy/github-bootstrap.js +329 -175
- package/src/git-policy/routing.d.ts +7 -1
- package/src/git-policy/routing.js +62 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/infrastructure-change/local-capability.d.ts +73 -0
- package/src/infrastructure-change/local-capability.js +114 -0
- package/src/infrastructure-change/model.d.ts +25 -4
- package/src/infrastructure-change/model.js +1 -0
- package/src/infrastructure-change/normalize.d.ts +4 -0
- package/src/infrastructure-change/normalize.js +47 -7
- package/src/infrastructure-change/plan.d.ts +30 -3
- package/src/infrastructure-change/plan.js +323 -13
- package/src/infrastructure-change/risk.d.ts +3 -1
- package/src/infrastructure-change/risk.js +96 -16
- 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 +11 -0
- package/src/local-dev/private-state.js +146 -40
- 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 +8 -2
- 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/cost-collection.d.ts +1 -1
- package/src/performance/cost-collection.js +4 -2
- package/src/performance/cost-controls.d.ts +8 -4
- package/src/performance/cost-controls.js +39 -28
- package/src/performance/evidence.d.ts +1 -1
- package/src/performance/evidence.js +5 -3
- package/src/performance/load-safety.js +5 -3
- package/src/performance/model.d.ts +4 -4
- package/src/performance/model.js +4 -5
- package/src/performance/scenario.d.ts +22 -0
- package/src/performance/scenario.js +100 -92
- package/src/release/index.d.ts +0 -2
- package/src/release/index.js +0 -2
- package/src/release/source-authority.d.ts +5 -5
- package/src/release/source-authority.js +141 -124
- package/src/repository-policy/aurora-preflight.d.ts +1 -1
- package/src/repository-policy/aurora-preflight.js +4 -1
- package/src/repository-policy/capacity-migration.d.ts +3 -0
- package/src/repository-policy/capacity-migration.js +21 -0
- package/src/repository-policy/deployment-plan.d.ts +4 -1
- package/src/repository-policy/deployment-plan.js +9 -0
- package/src/repository-policy/foundation-profile.js +10 -1
- package/src/repository-policy/policy.d.ts +57 -3
- package/src/repository-policy/policy.js +497 -11
- package/src/schemas/blueprint-v1.json +5 -4
- package/src/schemas/foundation-requirement-v1.json +5 -4
- package/src/schemas/performance-policy-v1.json +3 -3
- package/src/schemas/repository-policy-v1.json +130 -6
- package/src/schemas/testing-evidence-result-v1.json +1 -1
- package/src/secrets/adapters.d.ts +7 -2
- package/src/secrets/adapters.js +34 -3
- package/src/secrets/aws-control-plane.d.ts +10 -1
- package/src/secrets/aws-control-plane.js +67 -0
- package/src/secrets/generated-aws-control-plane.d.ts +23 -0
- package/src/secrets/generated-aws-control-plane.js +259 -0
- package/src/secrets/metadata.js +38 -10
- package/src/secrets/model.d.ts +8 -1
- package/src/secrets/model.js +24 -3
- package/src/secrets/operator.d.ts +91 -3
- package/src/secrets/operator.js +463 -13
- package/src/secrets/registry.d.ts +2 -1
- package/src/secrets/registry.js +18 -1
- package/src/secrets/verification.js +9 -1
- package/src/secrets/workload-access.js +10 -2
- package/src/sst-environment-source-format.d.ts +6 -0
- package/src/sst-environment-source-format.js +199 -0
- package/src/supply-chain/action-pins.js +61 -7
- package/src/supply-chain/blueprint-trust-git.js +85 -24
- package/src/supply-chain/blueprint-verification-authority.js +55 -3
- package/src/supply-chain/build-output-bounds.d.ts +2 -0
- package/src/supply-chain/build-output-bounds.js +12 -0
- package/src/supply-chain/build-output.d.ts +7 -1
- package/src/supply-chain/build-output.js +177 -24
- package/src/supply-chain/ecr-scanning.d.ts +5 -3
- package/src/supply-chain/ecr-scanning.js +11 -7
- package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
- package/src/supply-chain/ecs-deployed-image.js +6 -4
- package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
- package/src/supply-chain/generated-command.js +1 -0
- package/src/supply-chain/generated-container-release-command.js +1285 -124
- package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
- package/src/supply-chain/generated-ecr-collector-command.js +200 -93
- package/src/supply-chain/generated-files.js +25 -14
- package/src/supply-chain/generated-scanner-command.js +2 -1
- package/src/supply-chain/index.d.ts +1 -1
- package/src/supply-chain/index.js +2 -1
- package/src/supply-chain/sbom.d.ts +1 -1
- package/src/supply-chain/sbom.js +30 -5
- package/src/supply-chain/scanner.js +3 -0
- 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/account-baseline.d.ts +11 -0
- package/src/workload-roles/account-baseline.js +253 -16
- package/src/workload-roles/authority.d.ts +3 -1
- package/src/workload-roles/authority.js +48 -2
- package/src/workload-roles/aws-s3-state.js +27 -0
- package/src/workload-roles/boundary.d.ts +2 -1
- package/src/workload-roles/boundary.js +9 -2
- package/src/workload-roles/handler.js +52 -24
- package/src/workload-roles/index.d.ts +10 -17
- package/src/workload-roles/index.js +5 -18
- package/src/workload-roles/injection.js +1 -1
- package/src/workload-roles/provisioner.js +12 -4
- package/src/workload-roles/registration.d.ts +1 -0
- package/src/workload-roles/registration.js +5 -0
- package/src/workload-roles/stage-boundary.js +1 -1
- package/src/workload-roles/standard-slice.js +3 -3
- package/src/workspace-deployment/affected-lifecycle.d.ts +53 -0
- package/src/workspace-deployment/affected-lifecycle.js +84 -0
- package/src/workspace-deployment/identity.d.ts +3 -0
- package/src/workspace-deployment/identity.js +22 -0
- package/src/workspace-deployment/index.d.ts +4 -0
- package/src/workspace-deployment/index.js +8 -0
- package/src/workspace-deployment/migration-evidence.d.ts +29 -0
- package/src/workspace-deployment/migration-evidence.js +83 -0
- package/src/workspace-deployment/migration.d.ts +27 -0
- package/src/workspace-deployment/migration.js +109 -0
- package/src/workspace-deployment/ownership.d.ts +81 -0
- package/src/workspace-deployment/ownership.js +381 -0
- 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/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-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/refresh/refresh.js.map +0 -1
- package/src/executors/remove/remove.js.map +0 -1
- package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
- package/src/executors/secret-metadata/secret-metadata.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/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/preflight.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/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/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/generator.js.map +0 -1
- package/src/generators/preset/tool-versions.js.map +0 -1
- package/src/generators/preset/workspace-files-developer-agent.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-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/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-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-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-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/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 -169
- 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/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/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/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.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
|
@@ -1,27 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.REPOSITORY_MODE_PRESETS = exports.SLICE_PRODUCTION_STATUSES = exports.DEFAULT_RECOVERY_PRODUCTION_FOUNDATION_PROFILE = exports.PRODUCTION_FOUNDATION_PROFILES = exports.PRODUCTION_APPROVAL_MODES = exports.PRODUCTION_ACCESS_VALUES = exports.REPOSITORY_POLICY_SCHEMA_URL = exports.REPOSITORY_POLICY_SCHEMA_VERSION = exports.REPOSITORY_POLICY_FILE = void 0;
|
|
3
|
+
exports.DEFAULT_DELIVERY_LANE = exports.DELIVERY_LANES = exports.DEPLOYMENT_PROFILES = exports.REPOSITORY_MODE_PRESETS = exports.SLICE_PRODUCTION_STATUSES = exports.DEFAULT_RECOVERY_PRODUCTION_FOUNDATION_PROFILE = exports.PRODUCTION_FOUNDATION_PROFILES = exports.PRODUCTION_APPROVAL_MODES = exports.PRODUCTION_ACCESS_VALUES = exports.REPOSITORY_POLICY_SCHEMA_URL = exports.REPOSITORY_POLICY_SCHEMA_VERSION = exports.REPOSITORY_POLICY_FILE = void 0;
|
|
4
|
+
exports.deliveryLaneOf = deliveryLaneOf;
|
|
5
|
+
exports.normalizeDeploymentAccountId = normalizeDeploymentAccountId;
|
|
6
|
+
exports.requiresGithubDeployment = requiresGithubDeployment;
|
|
7
|
+
exports.activeDeploymentStages = activeDeploymentStages;
|
|
8
|
+
exports.isActiveDeploymentStage = isActiveDeploymentStage;
|
|
9
|
+
exports.productionRehearsalStage = productionRehearsalStage;
|
|
10
|
+
exports.validateDeploymentAccountTopology = validateDeploymentAccountTopology;
|
|
11
|
+
exports.configuredDeploymentAccountTopology = configuredDeploymentAccountTopology;
|
|
12
|
+
exports.configuredDeploymentAccountForStage = configuredDeploymentAccountForStage;
|
|
13
|
+
exports.configuredDeploymentRegion = configuredDeploymentRegion;
|
|
4
14
|
exports.validateRepositoryOperatingPolicy = validateRepositoryOperatingPolicy;
|
|
5
15
|
exports.formatRepositoryPolicyIssues = formatRepositoryPolicyIssues;
|
|
6
16
|
exports.parseRepositoryOperatingPolicy = parseRepositoryOperatingPolicy;
|
|
17
|
+
exports.validateRepositoryOperatingPolicyMigrationProvenance = validateRepositoryOperatingPolicyMigrationProvenance;
|
|
7
18
|
exports.readRepositoryOperatingPolicy = readRepositoryOperatingPolicy;
|
|
8
19
|
exports.createIncubationRepositoryPolicy = createIncubationRepositoryPolicy;
|
|
9
20
|
exports.applyRepositoryPolicyChange = applyRepositoryPolicyChange;
|
|
10
21
|
exports.evaluateRepositoryPolicyRequest = evaluateRepositoryPolicyRequest;
|
|
11
22
|
exports.assertRepositoryPolicyRequest = assertRepositoryPolicyRequest;
|
|
23
|
+
const node_crypto_1 = require("node:crypto");
|
|
24
|
+
const capacity_migration_js_1 = require("./capacity-migration.js");
|
|
25
|
+
const node_buffer_1 = require("node:buffer");
|
|
12
26
|
const node_fs_1 = require("node:fs");
|
|
13
27
|
const node_path_1 = require("node:path");
|
|
14
28
|
const validation_js_1 = require("../validation.js");
|
|
29
|
+
const identity_js_1 = require("../workspace-deployment/identity.js");
|
|
30
|
+
const migration_evidence_js_1 = require("../workspace-deployment/migration-evidence.js");
|
|
15
31
|
exports.REPOSITORY_POLICY_FILE = 'ebk.repository-policy.json';
|
|
16
32
|
exports.REPOSITORY_POLICY_SCHEMA_VERSION = 1;
|
|
33
|
+
const MAX_REPOSITORY_POLICY_BYTES = 1024 * 1024;
|
|
34
|
+
const MAX_WORKSPACE_DEPLOYMENT_MIGRATION_EVIDENCE_BYTES = 128 * 1024;
|
|
35
|
+
const UNSUPPORTED_AWS_PARTITION_REGION = /^(?:us-iso-|us-isob-|eu-isoe-|us-isof-)/u;
|
|
17
36
|
exports.REPOSITORY_POLICY_SCHEMA_URL = './node_modules/@empire-builder-kit/nx/schemas/repository-policy-v1.json';
|
|
18
37
|
exports.PRODUCTION_ACCESS_VALUES = ['disabled', 'controlled'];
|
|
19
38
|
exports.PRODUCTION_APPROVAL_MODES = [
|
|
20
39
|
'promotion-pr',
|
|
21
40
|
'environment-reviewer',
|
|
41
|
+
'trunk-promotion',
|
|
22
42
|
];
|
|
23
43
|
exports.PRODUCTION_FOUNDATION_PROFILES = [
|
|
24
44
|
'cost-optimized',
|
|
45
|
+
'balanced',
|
|
25
46
|
'standard',
|
|
26
47
|
];
|
|
27
48
|
exports.DEFAULT_RECOVERY_PRODUCTION_FOUNDATION_PROFILE = 'standard';
|
|
@@ -31,21 +52,161 @@ exports.REPOSITORY_MODE_PRESETS = [
|
|
|
31
52
|
'controlled-production',
|
|
32
53
|
'operational',
|
|
33
54
|
];
|
|
55
|
+
exports.DEPLOYMENT_PROFILES = [
|
|
56
|
+
'starter',
|
|
57
|
+
'production-isolated',
|
|
58
|
+
'fully-isolated',
|
|
59
|
+
];
|
|
60
|
+
/** How work reaches production. protected-pair keeps develop and main with a
|
|
61
|
+
* promotion pull request and sync-back; trunk protects main alone and deploys
|
|
62
|
+
* production from every merged main push (starter fast lane). */
|
|
63
|
+
exports.DELIVERY_LANES = ['protected-pair', 'trunk'];
|
|
64
|
+
exports.DEFAULT_DELIVERY_LANE = 'protected-pair';
|
|
65
|
+
function deliveryLaneOf(policy) {
|
|
66
|
+
return policy.deliveryLane ?? exports.DEFAULT_DELIVERY_LANE;
|
|
67
|
+
}
|
|
68
|
+
const DEPLOYMENT_STAGES_BY_PROFILE = {
|
|
69
|
+
starter: ['development', 'production'],
|
|
70
|
+
'production-isolated': ['development', 'staging', 'production'],
|
|
71
|
+
'fully-isolated': ['development', 'staging', 'production'],
|
|
72
|
+
};
|
|
73
|
+
function normalizeDeploymentAccountId(value, label) {
|
|
74
|
+
if (typeof value === 'string' && /^\d{12}$/.test(value))
|
|
75
|
+
return value;
|
|
76
|
+
if (typeof value === 'number' &&
|
|
77
|
+
Number.isSafeInteger(value) &&
|
|
78
|
+
value >= 100_000_000_000 &&
|
|
79
|
+
value <= 999_999_999_999) {
|
|
80
|
+
return String(value);
|
|
81
|
+
}
|
|
82
|
+
throw new Error(`${label} must be an exact 12-digit AWS account ID.`);
|
|
83
|
+
}
|
|
84
|
+
function requiresGithubDeployment(profile, stage) {
|
|
85
|
+
return ((profile === 'production-isolated' && stage === 'production') ||
|
|
86
|
+
(profile === 'fully-isolated' && stage === 'staging') ||
|
|
87
|
+
(profile === 'fully-isolated' && stage === 'production'));
|
|
88
|
+
}
|
|
89
|
+
function activeDeploymentStages(profile) {
|
|
90
|
+
return DEPLOYMENT_STAGES_BY_PROFILE[profile];
|
|
91
|
+
}
|
|
92
|
+
function isActiveDeploymentStage(profile, stage) {
|
|
93
|
+
return activeDeploymentStages(profile).includes(stage);
|
|
94
|
+
}
|
|
95
|
+
function productionRehearsalStage(profile) {
|
|
96
|
+
return profile === 'starter' ? 'development' : 'staging';
|
|
97
|
+
}
|
|
98
|
+
function validateDeploymentAccountTopology(profile, accounts) {
|
|
99
|
+
for (const stage of ['development', 'production']) {
|
|
100
|
+
if (!/^\d{12}$/.test(accounts[stage])) {
|
|
101
|
+
throw new Error(`Deployment account for ${stage} must be an exact 12-digit AWS account ID.`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (profile === 'starter') {
|
|
105
|
+
if (accounts.staging !== null) {
|
|
106
|
+
throw new Error('The starter deployment profile has no staging stage; its staging deployment account must be null.');
|
|
107
|
+
}
|
|
108
|
+
if (accounts.development !== accounts.production) {
|
|
109
|
+
throw new Error('The starter deployment profile requires one shared development and production AWS account.');
|
|
110
|
+
}
|
|
111
|
+
return { ...accounts };
|
|
112
|
+
}
|
|
113
|
+
if (accounts.staging === null || !/^\d{12}$/.test(accounts.staging)) {
|
|
114
|
+
throw new Error('Deployment account for staging must be an exact 12-digit AWS account ID.');
|
|
115
|
+
}
|
|
116
|
+
const unique = new Set(Object.values(accounts));
|
|
117
|
+
if (profile === 'production-isolated' &&
|
|
118
|
+
(accounts.development !== accounts.staging ||
|
|
119
|
+
accounts.production === accounts.staging)) {
|
|
120
|
+
throw new Error('The production-isolated deployment profile requires one shared development/staging account and one distinct production account.');
|
|
121
|
+
}
|
|
122
|
+
if (profile === 'fully-isolated' && unique.size !== 3) {
|
|
123
|
+
throw new Error('The fully-isolated deployment profile requires three distinct AWS accounts.');
|
|
124
|
+
}
|
|
125
|
+
return { ...accounts };
|
|
126
|
+
}
|
|
127
|
+
function configuredDeploymentAccountTopology(profile, accounts) {
|
|
128
|
+
if (accounts.development === null || accounts.production === null) {
|
|
129
|
+
throw new Error('Deployment account topology is incomplete; configure exact development and production AWS account IDs before deployment.');
|
|
130
|
+
}
|
|
131
|
+
if (profile !== 'starter' && accounts.staging === null) {
|
|
132
|
+
throw new Error('Deployment account topology is incomplete; isolated profiles require an exact staging AWS account ID.');
|
|
133
|
+
}
|
|
134
|
+
return validateDeploymentAccountTopology(profile, {
|
|
135
|
+
development: accounts.development,
|
|
136
|
+
production: accounts.production,
|
|
137
|
+
staging: accounts.staging,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
function validateConfiguredIsolatedAccounts(accounts) {
|
|
141
|
+
const configured = new Set();
|
|
142
|
+
for (const stage of ['development', 'staging', 'production']) {
|
|
143
|
+
const account = accounts[stage];
|
|
144
|
+
if (account === null)
|
|
145
|
+
continue;
|
|
146
|
+
if (typeof account !== 'string' || !/^\d{12}$/.test(account)) {
|
|
147
|
+
throw new Error(`Deployment account for ${stage} must be null or an exact 12-digit AWS account ID.`);
|
|
148
|
+
}
|
|
149
|
+
if (configured.has(account)) {
|
|
150
|
+
throw new Error('The fully-isolated deployment profile requires distinct configured AWS accounts.');
|
|
151
|
+
}
|
|
152
|
+
configured.add(account);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function configuredDeploymentAccountForStage(profile, accounts, stage) {
|
|
156
|
+
if (!isActiveDeploymentStage(profile, stage)) {
|
|
157
|
+
throw new Error(`Deployment stage ${stage} is inactive for the ${profile} deployment profile.`);
|
|
158
|
+
}
|
|
159
|
+
// Fresh isolated accounts can be provisioned independently. This does not
|
|
160
|
+
// relax production rehearsal or migrated-workspace tuple requirements.
|
|
161
|
+
if (profile === 'fully-isolated' && stage !== 'production') {
|
|
162
|
+
validateConfiguredIsolatedAccounts(accounts);
|
|
163
|
+
const account = accounts[stage];
|
|
164
|
+
if (account === null) {
|
|
165
|
+
throw new Error(`Deployment account for active stage ${stage} is not configured.`);
|
|
166
|
+
}
|
|
167
|
+
return account;
|
|
168
|
+
}
|
|
169
|
+
const topology = configuredDeploymentAccountTopology(profile, accounts);
|
|
170
|
+
const account = topology[stage];
|
|
171
|
+
if (account === null) {
|
|
172
|
+
throw new Error(`Deployment account for active stage ${stage} is not configured.`);
|
|
173
|
+
}
|
|
174
|
+
return account;
|
|
175
|
+
}
|
|
176
|
+
function configuredDeploymentRegion(region) {
|
|
177
|
+
if (region === null ||
|
|
178
|
+
!/^[a-z]{2}(?:-gov)?-[a-z]+(?:-[a-z]+)*-\d$/.test(region) ||
|
|
179
|
+
UNSUPPORTED_AWS_PARTITION_REGION.test(region)) {
|
|
180
|
+
throw new Error('Deployment Region is incomplete or belongs to an unsupported AWS partition; configure one exact commercial, China, or GovCloud AWS Region before deployment.');
|
|
181
|
+
}
|
|
182
|
+
return region;
|
|
183
|
+
}
|
|
34
184
|
const SLICE_NAME_PATTERN = /^[a-z0-9][a-z0-9-]*$/;
|
|
35
185
|
const POLICY_PROPERTIES = new Set([
|
|
36
186
|
'$schema',
|
|
187
|
+
'deliveryLane',
|
|
188
|
+
'deploymentAccounts',
|
|
189
|
+
'deploymentProfile',
|
|
190
|
+
'deploymentRegion',
|
|
37
191
|
'productionAccess',
|
|
38
192
|
'productionApproval',
|
|
39
193
|
'productionFoundation',
|
|
40
194
|
'schemaVersion',
|
|
41
195
|
'slices',
|
|
196
|
+
'workspaceDeploymentId',
|
|
197
|
+
'workspaceDeploymentProvenance',
|
|
42
198
|
]);
|
|
43
199
|
const REQUIRED_POLICY_PROPERTIES = [
|
|
200
|
+
'deploymentAccounts',
|
|
201
|
+
'deploymentProfile',
|
|
202
|
+
'deploymentRegion',
|
|
44
203
|
'productionAccess',
|
|
45
204
|
'productionApproval',
|
|
46
205
|
'productionFoundation',
|
|
47
206
|
'schemaVersion',
|
|
48
207
|
'slices',
|
|
208
|
+
'workspaceDeploymentId',
|
|
209
|
+
'workspaceDeploymentProvenance',
|
|
49
210
|
];
|
|
50
211
|
function rejectUnknownProperties(value, allowed, path, issues) {
|
|
51
212
|
for (const property of Object.keys(value)) {
|
|
@@ -79,6 +240,153 @@ function validateRepositoryOperatingPolicy(value) {
|
|
|
79
240
|
path: 'policy.$schema',
|
|
80
241
|
});
|
|
81
242
|
}
|
|
243
|
+
if (value.deliveryLane !== undefined &&
|
|
244
|
+
!isOneOf(value.deliveryLane, exports.DELIVERY_LANES)) {
|
|
245
|
+
issues.push({
|
|
246
|
+
message: 'must be protected-pair or trunk',
|
|
247
|
+
path: 'policy.deliveryLane',
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
if (value.deliveryLane === 'trunk' && value.deploymentProfile !== 'starter') {
|
|
251
|
+
issues.push({
|
|
252
|
+
message: 'trunk delivery requires the starter deployment profile',
|
|
253
|
+
path: 'policy.deliveryLane',
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
if ((0, validation_js_1.isRecord)(value.productionApproval) &&
|
|
257
|
+
value.productionApproval.mode === 'trunk-promotion' &&
|
|
258
|
+
(value.deploymentProfile === 'starter' || value.deliveryLane === 'trunk')) {
|
|
259
|
+
issues.push({
|
|
260
|
+
message: 'trunk-promotion requires an isolated deployment profile on the protected pair; the starter profile uses the trunk delivery lane instead',
|
|
261
|
+
path: 'policy.productionApproval.mode',
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
if (!(0, validation_js_1.isRecord)(value.workspaceDeploymentProvenance)) {
|
|
265
|
+
issues.push({
|
|
266
|
+
message: 'must declare exact fresh or migrated provenance',
|
|
267
|
+
path: 'policy.workspaceDeploymentProvenance',
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
const provenance = value.workspaceDeploymentProvenance;
|
|
272
|
+
const provenancePath = 'policy.workspaceDeploymentProvenance';
|
|
273
|
+
if (provenance.kind === 'fresh') {
|
|
274
|
+
rejectUnknownProperties(provenance, new Set(['kind', 'schemaVersion']), provenancePath, issues);
|
|
275
|
+
if (provenance.schemaVersion !== 1) {
|
|
276
|
+
issues.push({
|
|
277
|
+
message: 'must equal 1',
|
|
278
|
+
path: `${provenancePath}.schemaVersion`,
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
else if (provenance.kind === 'migrated') {
|
|
283
|
+
rejectUnknownProperties(provenance, new Set(['evidencePath', 'evidenceSha256', 'kind', 'schemaVersion']), provenancePath, issues);
|
|
284
|
+
const evidencePath = provenance.evidencePath;
|
|
285
|
+
const pathSegments = typeof evidencePath === 'string' ? evidencePath.split('/') : [];
|
|
286
|
+
if (typeof evidencePath !== 'string' ||
|
|
287
|
+
!/^docs\/adoption\/[A-Za-z0-9._/-]+[.]json$/u.test(evidencePath) ||
|
|
288
|
+
(0, node_path_1.isAbsolute)(evidencePath) ||
|
|
289
|
+
evidencePath.includes('\\') ||
|
|
290
|
+
evidencePath.includes('//') ||
|
|
291
|
+
pathSegments.some((segment) => segment === '' || segment === '.' || segment === '..')) {
|
|
292
|
+
issues.push({
|
|
293
|
+
message: 'must be one normalized JSON path beneath docs/adoption without traversal',
|
|
294
|
+
path: `${provenancePath}.evidencePath`,
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
if (typeof provenance.evidenceSha256 !== 'string' ||
|
|
298
|
+
!/^[a-f0-9]{64}$/u.test(provenance.evidenceSha256)) {
|
|
299
|
+
issues.push({
|
|
300
|
+
message: 'must be one lowercase SHA-256 digest',
|
|
301
|
+
path: `${provenancePath}.evidenceSha256`,
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
if (provenance.schemaVersion !== 1) {
|
|
305
|
+
issues.push({
|
|
306
|
+
message: 'must equal 1',
|
|
307
|
+
path: `${provenancePath}.schemaVersion`,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
issues.push({
|
|
313
|
+
message: 'kind must equal fresh or migrated',
|
|
314
|
+
path: `${provenancePath}.kind`,
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
if (typeof value.workspaceDeploymentId !== 'string' ||
|
|
319
|
+
!identity_js_1.WORKSPACE_DEPLOYMENT_ID_PATTERN.test(value.workspaceDeploymentId)) {
|
|
320
|
+
issues.push({
|
|
321
|
+
message: 'must be ebkws- followed by exactly 128 bits of lowercase hexadecimal identity',
|
|
322
|
+
path: 'policy.workspaceDeploymentId',
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
if (!isOneOf(value.deploymentProfile, exports.DEPLOYMENT_PROFILES)) {
|
|
326
|
+
issues.push({
|
|
327
|
+
message: `must equal ${exports.DEPLOYMENT_PROFILES.join(', ')}`,
|
|
328
|
+
path: 'policy.deploymentProfile',
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
if (value.deploymentRegion !== null &&
|
|
332
|
+
(typeof value.deploymentRegion !== 'string' ||
|
|
333
|
+
!/^[a-z]{2}(?:-gov)?-[a-z]+(?:-[a-z]+)*-\d$/.test(value.deploymentRegion) ||
|
|
334
|
+
UNSUPPORTED_AWS_PARTITION_REGION.test(value.deploymentRegion))) {
|
|
335
|
+
issues.push({
|
|
336
|
+
message: 'must be null or one exact commercial, China, or GovCloud AWS Region',
|
|
337
|
+
path: 'policy.deploymentRegion',
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
if (!(0, validation_js_1.isRecord)(value.deploymentAccounts)) {
|
|
341
|
+
issues.push({
|
|
342
|
+
message: 'must be an object with development, staging, and production account decisions',
|
|
343
|
+
path: 'policy.deploymentAccounts',
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
rejectUnknownProperties(value.deploymentAccounts, new Set(['development', 'staging', 'production']), 'policy.deploymentAccounts', issues);
|
|
348
|
+
for (const stage of ['development', 'staging', 'production']) {
|
|
349
|
+
const account = value.deploymentAccounts[stage];
|
|
350
|
+
if (account !== null &&
|
|
351
|
+
(typeof account !== 'string' || !/^\d{12}$/.test(account))) {
|
|
352
|
+
issues.push({
|
|
353
|
+
message: 'must be null or an exact 12-digit AWS account ID',
|
|
354
|
+
path: `policy.deploymentAccounts.${stage}`,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
if (value.deploymentProfile === 'fully-isolated' &&
|
|
359
|
+
Object.values(value.deploymentAccounts).some((account) => account === null)) {
|
|
360
|
+
try {
|
|
361
|
+
validateConfiguredIsolatedAccounts(value.deploymentAccounts);
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
issues.push({
|
|
365
|
+
message: error instanceof Error ? error.message : String(error),
|
|
366
|
+
path: 'policy.deploymentAccounts',
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
if (isOneOf(value.deploymentProfile, exports.DEPLOYMENT_PROFILES) &&
|
|
371
|
+
typeof value.deploymentAccounts.development === 'string' &&
|
|
372
|
+
typeof value.deploymentAccounts.production === 'string' &&
|
|
373
|
+
(value.deploymentAccounts.staging === null ||
|
|
374
|
+
typeof value.deploymentAccounts.staging === 'string')) {
|
|
375
|
+
try {
|
|
376
|
+
validateDeploymentAccountTopology(value.deploymentProfile, {
|
|
377
|
+
development: value.deploymentAccounts.development,
|
|
378
|
+
production: value.deploymentAccounts.production,
|
|
379
|
+
staging: value.deploymentAccounts.staging,
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
catch (error) {
|
|
383
|
+
issues.push({
|
|
384
|
+
message: error instanceof Error ? error.message : String(error),
|
|
385
|
+
path: 'policy.deploymentAccounts',
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
82
390
|
if (!isOneOf(value.productionAccess, exports.PRODUCTION_ACCESS_VALUES)) {
|
|
83
391
|
issues.push({
|
|
84
392
|
message: `must equal ${exports.PRODUCTION_ACCESS_VALUES.join(' or ')}`,
|
|
@@ -87,7 +395,7 @@ function validateRepositoryOperatingPolicy(value) {
|
|
|
87
395
|
}
|
|
88
396
|
if (!(0, validation_js_1.isRecord)(value.productionApproval)) {
|
|
89
397
|
issues.push({
|
|
90
|
-
message: 'must be an object with an explicit promotion-pr
|
|
398
|
+
message: 'must be an object with an explicit promotion-pr, environment-reviewer, or trunk-promotion mode',
|
|
91
399
|
path: 'policy.productionApproval',
|
|
92
400
|
});
|
|
93
401
|
}
|
|
@@ -151,7 +459,7 @@ function missingPolicyDecisionGuidance(value) {
|
|
|
151
459
|
const missing = REQUIRED_POLICY_PROPERTIES.filter((property) => !Object.prototype.hasOwnProperty.call(value, property));
|
|
152
460
|
if (missing.length === 0)
|
|
153
461
|
return '';
|
|
154
|
-
return `\nMissing required top-level policy members: ${missing.join(', ')}.\nClean regeneration required: regenerate the workspace from the current exact packed candidate, then deliberately reapply the reviewed production-access, approval-mode, Foundation-profile, and per-Slice decisions. Missing decisions are not inferred or amended in place.`;
|
|
462
|
+
return `\nMissing required top-level policy members: ${missing.join(', ')}.\nClean regeneration required: regenerate the workspace from the current exact packed candidate, then deliberately reapply the reviewed deployment-profile, production-access, approval-mode, Foundation-profile, and per-Slice decisions. Existing prerelease repositories must explicitly migrate a stable workspaceDeploymentId and required migrated provenance with bounded, version-controlled tuple occupancy evidence; a legacy profile migration also requires --deploymentProfile=fully-isolated. Then commit exact development, staging, and production AWS account IDs plus deploymentRegion before any deployment. Migration preserves the reviewed authority model and workspace ownership assertion, not deployability; all-null account topology remains fail closed. Missing decisions are not inferred or amended in place.`;
|
|
155
463
|
}
|
|
156
464
|
function parseRepositoryOperatingPolicy(contents, source = exports.REPOSITORY_POLICY_FILE) {
|
|
157
465
|
let value;
|
|
@@ -167,27 +475,173 @@ function parseRepositoryOperatingPolicy(contents, source = exports.REPOSITORY_PO
|
|
|
167
475
|
}
|
|
168
476
|
return result.value;
|
|
169
477
|
}
|
|
170
|
-
function
|
|
171
|
-
const
|
|
172
|
-
|
|
478
|
+
function workspaceDeploymentMigrationCoordinates(policy) {
|
|
479
|
+
const region = configuredDeploymentRegion(policy.deploymentRegion);
|
|
480
|
+
const accounts = configuredDeploymentAccountTopology(policy.deploymentProfile, policy.deploymentAccounts);
|
|
481
|
+
return activeDeploymentStages(policy.deploymentProfile)
|
|
482
|
+
.map((stage) => ({ accountId: accounts[stage], region, stage }))
|
|
483
|
+
.sort((left, right) => left.stage < right.stage ? -1 : left.stage > right.stage ? 1 : 0);
|
|
484
|
+
}
|
|
485
|
+
function validateRepositoryOperatingPolicyMigrationProvenance(input) {
|
|
486
|
+
if (input.policy.workspaceDeploymentProvenance.kind !== 'migrated')
|
|
487
|
+
return;
|
|
488
|
+
if (node_buffer_1.Buffer.byteLength(input.evidenceBytes, 'utf8') > 131_072) {
|
|
489
|
+
throw new Error(`Workspace deployment migration evidence at ${input.evidenceSource} exceeds the 128 KiB retention bound.`);
|
|
490
|
+
}
|
|
491
|
+
const actualDigest = (0, node_crypto_1.createHash)('sha256')
|
|
492
|
+
.update(input.evidenceBytes, 'utf8')
|
|
493
|
+
.digest('hex');
|
|
494
|
+
if (actualDigest !== input.policy.workspaceDeploymentProvenance.evidenceSha256) {
|
|
495
|
+
throw new Error(`Workspace deployment migration evidence at ${input.evidenceSource} does not match the committed SHA-256 binding.`);
|
|
496
|
+
}
|
|
497
|
+
let evidence;
|
|
498
|
+
try {
|
|
499
|
+
evidence = JSON.parse(input.evidenceBytes);
|
|
500
|
+
}
|
|
501
|
+
catch (error) {
|
|
502
|
+
throw new Error(`Workspace deployment migration evidence at ${input.evidenceSource} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
503
|
+
}
|
|
504
|
+
(0, migration_evidence_js_1.validateWorkspaceDeploymentMigrationEvidence)({
|
|
505
|
+
evidence,
|
|
506
|
+
expectedCoordinates: workspaceDeploymentMigrationCoordinates(input.policy),
|
|
507
|
+
workspaceDeploymentId: input.policy.workspaceDeploymentId,
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
function isContainedFilesystemPath(root, path) {
|
|
511
|
+
const fromRoot = (0, node_path_1.relative)(root, path);
|
|
512
|
+
return (fromRoot === '' ||
|
|
513
|
+
(!fromRoot.startsWith(`..${node_path_1.sep}`) &&
|
|
514
|
+
fromRoot !== '..' &&
|
|
515
|
+
!(0, node_path_1.isAbsolute)(fromRoot)));
|
|
516
|
+
}
|
|
517
|
+
function repositoryPolicyWorkspaceRoot(workspaceRoot) {
|
|
173
518
|
try {
|
|
174
|
-
|
|
519
|
+
const root = (0, node_fs_1.realpathSync)(workspaceRoot);
|
|
520
|
+
if (!(0, node_fs_1.lstatSync)(root).isDirectory()) {
|
|
521
|
+
throw new Error('workspace root is not a directory');
|
|
522
|
+
}
|
|
523
|
+
return root;
|
|
175
524
|
}
|
|
176
525
|
catch (error) {
|
|
177
|
-
throw new Error(`Repository Operating Policy is
|
|
526
|
+
throw new Error(`Repository Operating Policy workspace root is unavailable at ${workspaceRoot}: ${error instanceof Error ? error.message : String(error)}`);
|
|
178
527
|
}
|
|
179
|
-
return parseRepositoryOperatingPolicy(contents, path);
|
|
180
528
|
}
|
|
181
|
-
function
|
|
529
|
+
function readBoundedContainedRepositoryFile(input) {
|
|
530
|
+
const segments = input.relativePath.split('/');
|
|
531
|
+
if (input.relativePath.length === 0 ||
|
|
532
|
+
input.relativePath.includes('\0') ||
|
|
533
|
+
input.relativePath.includes('\\') ||
|
|
534
|
+
(0, node_path_1.isAbsolute)(input.relativePath) ||
|
|
535
|
+
segments.some((segment) => segment === '' || segment === '.' || segment === '..')) {
|
|
536
|
+
throw new Error(`${input.label} path escaped the workspace: ${input.relativePath}`);
|
|
537
|
+
}
|
|
538
|
+
const path = (0, node_path_1.resolve)(input.workspaceRoot, ...segments);
|
|
539
|
+
if (!isContainedFilesystemPath(input.workspaceRoot, path)) {
|
|
540
|
+
throw new Error(`${input.label} path escaped the workspace: ${path}`);
|
|
541
|
+
}
|
|
542
|
+
let descriptor;
|
|
543
|
+
try {
|
|
544
|
+
const pathMetadata = (0, node_fs_1.lstatSync)(path);
|
|
545
|
+
if (pathMetadata.isSymbolicLink() || !pathMetadata.isFile()) {
|
|
546
|
+
throw new Error('path is not one regular non-symlink file');
|
|
547
|
+
}
|
|
548
|
+
const resolvedPath = (0, node_fs_1.realpathSync)(path);
|
|
549
|
+
if (!isContainedFilesystemPath(input.workspaceRoot, resolvedPath)) {
|
|
550
|
+
throw new Error(`${input.label} path escaped the workspace through a parent path`);
|
|
551
|
+
}
|
|
552
|
+
descriptor = (0, node_fs_1.openSync)(path, node_fs_1.constants.O_RDONLY | (node_fs_1.constants.O_NOFOLLOW ?? 0));
|
|
553
|
+
const metadata = (0, node_fs_1.fstatSync)(descriptor);
|
|
554
|
+
if (!metadata.isFile() ||
|
|
555
|
+
metadata.dev !== pathMetadata.dev ||
|
|
556
|
+
metadata.ino !== pathMetadata.ino) {
|
|
557
|
+
throw new Error('path changed before it could be read safely');
|
|
558
|
+
}
|
|
559
|
+
if (metadata.size > input.maximumBytes) {
|
|
560
|
+
throw new Error(`file exceeds ${input.maximumDescription}`);
|
|
561
|
+
}
|
|
562
|
+
const capacity = Math.min(input.maximumBytes + 1, metadata.size + 1);
|
|
563
|
+
const buffer = node_buffer_1.Buffer.alloc(capacity);
|
|
564
|
+
let offset = 0;
|
|
565
|
+
while (offset < buffer.byteLength) {
|
|
566
|
+
const count = (0, node_fs_1.readSync)(descriptor, buffer, offset, buffer.byteLength - offset, null);
|
|
567
|
+
if (count === 0)
|
|
568
|
+
break;
|
|
569
|
+
offset += count;
|
|
570
|
+
}
|
|
571
|
+
const finalMetadata = (0, node_fs_1.fstatSync)(descriptor);
|
|
572
|
+
if (offset !== metadata.size ||
|
|
573
|
+
finalMetadata.size !== metadata.size ||
|
|
574
|
+
finalMetadata.mtimeMs !== metadata.mtimeMs ||
|
|
575
|
+
finalMetadata.ctimeMs !== metadata.ctimeMs) {
|
|
576
|
+
throw new Error('file changed while it was read or exceeded its fixed byte bound');
|
|
577
|
+
}
|
|
578
|
+
const finalPathMetadata = (0, node_fs_1.lstatSync)(path);
|
|
579
|
+
const finalResolvedPath = (0, node_fs_1.realpathSync)(path);
|
|
580
|
+
if (finalPathMetadata.isSymbolicLink() ||
|
|
581
|
+
!finalPathMetadata.isFile() ||
|
|
582
|
+
finalPathMetadata.dev !== metadata.dev ||
|
|
583
|
+
finalPathMetadata.ino !== metadata.ino ||
|
|
584
|
+
!isContainedFilesystemPath(input.workspaceRoot, finalResolvedPath)) {
|
|
585
|
+
throw new Error('path changed after it was read safely');
|
|
586
|
+
}
|
|
587
|
+
return {
|
|
588
|
+
contents: buffer.subarray(0, offset).toString('utf8'),
|
|
589
|
+
path: finalResolvedPath,
|
|
590
|
+
};
|
|
591
|
+
}
|
|
592
|
+
catch (error) {
|
|
593
|
+
throw new Error(`${input.label} is required as a bounded contained regular non-symlink file at ${path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
594
|
+
}
|
|
595
|
+
finally {
|
|
596
|
+
if (descriptor !== undefined)
|
|
597
|
+
(0, node_fs_1.closeSync)(descriptor);
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
function readRepositoryOperatingPolicy(workspaceRoot) {
|
|
601
|
+
const workspace = repositoryPolicyWorkspaceRoot(workspaceRoot);
|
|
602
|
+
const policySource = readBoundedContainedRepositoryFile({
|
|
603
|
+
label: 'Repository Operating Policy',
|
|
604
|
+
maximumBytes: MAX_REPOSITORY_POLICY_BYTES,
|
|
605
|
+
maximumDescription: 'its 1 MiB control-file bound',
|
|
606
|
+
relativePath: exports.REPOSITORY_POLICY_FILE,
|
|
607
|
+
workspaceRoot: workspace,
|
|
608
|
+
});
|
|
609
|
+
const policy = parseRepositoryOperatingPolicy(policySource.contents, policySource.path);
|
|
610
|
+
if (policy.workspaceDeploymentProvenance.kind === 'migrated') {
|
|
611
|
+
const evidenceSource = readBoundedContainedRepositoryFile({
|
|
612
|
+
label: 'Workspace deployment migration evidence',
|
|
613
|
+
maximumBytes: MAX_WORKSPACE_DEPLOYMENT_MIGRATION_EVIDENCE_BYTES,
|
|
614
|
+
maximumDescription: 'the 128 KiB retention bound',
|
|
615
|
+
relativePath: policy.workspaceDeploymentProvenance.evidencePath,
|
|
616
|
+
workspaceRoot: workspace,
|
|
617
|
+
});
|
|
618
|
+
validateRepositoryOperatingPolicyMigrationProvenance({
|
|
619
|
+
evidenceBytes: evidenceSource.contents,
|
|
620
|
+
evidenceSource: evidenceSource.path,
|
|
621
|
+
policy,
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
return policy;
|
|
625
|
+
}
|
|
626
|
+
function createIncubationRepositoryPolicy(deploymentProfile = 'starter', workspaceDeploymentId = (0, identity_js_1.createWorkspaceDeploymentId)()) {
|
|
182
627
|
return {
|
|
183
628
|
$schema: exports.REPOSITORY_POLICY_SCHEMA_URL,
|
|
629
|
+
deploymentAccounts: {
|
|
630
|
+
development: null,
|
|
631
|
+
production: null,
|
|
632
|
+
staging: null,
|
|
633
|
+
},
|
|
634
|
+
deploymentProfile,
|
|
635
|
+
deploymentRegion: null,
|
|
184
636
|
productionAccess: 'disabled',
|
|
185
637
|
productionApproval: { mode: 'promotion-pr' },
|
|
186
638
|
productionFoundation: {
|
|
187
|
-
profile:
|
|
639
|
+
profile: 'cost-optimized',
|
|
188
640
|
},
|
|
189
641
|
schemaVersion: exports.REPOSITORY_POLICY_SCHEMA_VERSION,
|
|
190
642
|
slices: {},
|
|
643
|
+
workspaceDeploymentId,
|
|
644
|
+
workspaceDeploymentProvenance: { kind: 'fresh', schemaVersion: 1 },
|
|
191
645
|
};
|
|
192
646
|
}
|
|
193
647
|
function applyRepositoryPolicyChange(current, change) {
|
|
@@ -209,9 +663,32 @@ function applyRepositoryPolicyChange(current, change) {
|
|
|
209
663
|
if (change.productionAccess !== undefined) {
|
|
210
664
|
next.productionAccess = change.productionAccess;
|
|
211
665
|
}
|
|
666
|
+
if (change.deploymentProfile !== undefined) {
|
|
667
|
+
next.deploymentProfile = change.deploymentProfile;
|
|
668
|
+
if (change.deploymentProfile === 'starter') {
|
|
669
|
+
next.deploymentAccounts.staging = null;
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
if (change.deploymentAccounts !== undefined) {
|
|
673
|
+
next.deploymentAccounts = {
|
|
674
|
+
...next.deploymentAccounts,
|
|
675
|
+
...change.deploymentAccounts,
|
|
676
|
+
};
|
|
677
|
+
}
|
|
678
|
+
if (change.deploymentRegion !== undefined) {
|
|
679
|
+
next.deploymentRegion = change.deploymentRegion;
|
|
680
|
+
}
|
|
212
681
|
if (change.productionApprovalMode !== undefined) {
|
|
213
682
|
next.productionApproval = { mode: change.productionApprovalMode };
|
|
214
683
|
}
|
|
684
|
+
if (change.deliveryLane !== undefined) {
|
|
685
|
+
if (change.deliveryLane === exports.DEFAULT_DELIVERY_LANE) {
|
|
686
|
+
delete next.deliveryLane;
|
|
687
|
+
}
|
|
688
|
+
else {
|
|
689
|
+
next.deliveryLane = change.deliveryLane;
|
|
690
|
+
}
|
|
691
|
+
}
|
|
215
692
|
if (change.productionFoundationProfile !== undefined) {
|
|
216
693
|
next.productionFoundation = {
|
|
217
694
|
profile: change.productionFoundationProfile,
|
|
@@ -238,6 +715,12 @@ function evaluateRepositoryPolicyRequest(policy, request) {
|
|
|
238
715
|
}
|
|
239
716
|
projectNames.add(project.name);
|
|
240
717
|
}
|
|
718
|
+
if ((request.stage === 'development' ||
|
|
719
|
+
request.stage === 'staging' ||
|
|
720
|
+
request.stage === 'production') &&
|
|
721
|
+
!isActiveDeploymentStage(policy.deploymentProfile, request.stage)) {
|
|
722
|
+
reasons.push(`Stage ${request.stage} is inactive for the ${policy.deploymentProfile} deployment profile.`);
|
|
723
|
+
}
|
|
241
724
|
if (request.stage !== 'production') {
|
|
242
725
|
return { allowed: reasons.length === 0, reasons };
|
|
243
726
|
}
|
|
@@ -269,6 +752,9 @@ function evaluateRepositoryPolicyRequest(policy, request) {
|
|
|
269
752
|
}
|
|
270
753
|
function assertRepositoryPolicyRequest(workspaceRoot, request) {
|
|
271
754
|
const policy = readRepositoryOperatingPolicy(workspaceRoot);
|
|
755
|
+
if (request.action === 'deploy' && request.stage === 'production') {
|
|
756
|
+
(0, capacity_migration_js_1.assertWorkspaceCapacityMigrationChoice)(workspaceRoot, policy.productionFoundation.profile);
|
|
757
|
+
}
|
|
272
758
|
const decision = evaluateRepositoryPolicyRequest(policy, request);
|
|
273
759
|
if (!decision.allowed) {
|
|
274
760
|
throw new Error(`Repository Operating Policy rejected ${request.action} for ${request.stage}:\n${decision.reasons.map((reason) => `- ${reason}`).join('\n')}`);
|
|
@@ -13,15 +13,16 @@
|
|
|
13
13
|
"capabilities": {
|
|
14
14
|
"items": {
|
|
15
15
|
"enum": [
|
|
16
|
-
"
|
|
16
|
+
"key-value",
|
|
17
17
|
"routing",
|
|
18
|
-
"container-compute",
|
|
19
|
-
"postgres",
|
|
20
18
|
"identity",
|
|
21
19
|
"events",
|
|
22
20
|
"observability",
|
|
23
21
|
"configuration",
|
|
24
|
-
"deployment"
|
|
22
|
+
"deployment",
|
|
23
|
+
"network",
|
|
24
|
+
"container-compute",
|
|
25
|
+
"postgres"
|
|
25
26
|
],
|
|
26
27
|
"type": "string"
|
|
27
28
|
},
|
|
@@ -6,15 +6,16 @@
|
|
|
6
6
|
"capabilities": {
|
|
7
7
|
"items": {
|
|
8
8
|
"enum": [
|
|
9
|
-
"
|
|
9
|
+
"key-value",
|
|
10
10
|
"routing",
|
|
11
|
-
"container-compute",
|
|
12
|
-
"postgres",
|
|
13
11
|
"identity",
|
|
14
12
|
"events",
|
|
15
13
|
"observability",
|
|
16
14
|
"configuration",
|
|
17
|
-
"deployment"
|
|
15
|
+
"deployment",
|
|
16
|
+
"network",
|
|
17
|
+
"container-compute",
|
|
18
|
+
"postgres"
|
|
18
19
|
],
|
|
19
20
|
"type": "string"
|
|
20
21
|
},
|