@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
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderKeyValueRetentionFiles = renderKeyValueRetentionFiles;
|
|
4
|
+
const built_in_plan_shared_js_1 = require("./built-in-plan-shared.js");
|
|
5
|
+
/** Framework retention control records remain in DynamoDB, including for SQL-enabled Slices. */
|
|
6
|
+
function renderKeyValueRetentionFiles(name, pascalName) {
|
|
7
|
+
const prefix = (0, built_in_plan_shared_js_1.lowerCamelIdentifier)(pascalName);
|
|
8
|
+
return {
|
|
9
|
+
'data/retention-state.ts': `import { digestApprovalRequest, type ApprovalRequest } from '@empire-builder-kit/runtime/authorization';
|
|
10
|
+
import type { KeyValueChange } from '@empire-builder-kit/runtime/key-value';
|
|
11
|
+
import { createDataLifecyclePseudonymousReference } from '@empire-builder-kit/runtime/data-lifecycle';
|
|
12
|
+
import { ${prefix}AuthorizationPolicy } from '../authorization/policy.js';
|
|
13
|
+
import { canonicalDataRightsNow, plusDataRightsDays } from './data-rights-shared.js';
|
|
14
|
+
import { ${pascalName}DataLifecycleRuntimePolicy } from './runtime-policy.cjs';
|
|
15
|
+
import { dataStore } from './key-value.js';
|
|
16
|
+
|
|
17
|
+
export const RETENTION_ACTION = '${name}:retention-apply';
|
|
18
|
+
export const RETENTION_AUTHORIZATION_POLICY = ${prefix}AuthorizationPolicy.version;
|
|
19
|
+
export const RETENTION_POLICY = ${pascalName}DataLifecycleRuntimePolicy.policyVersion;
|
|
20
|
+
export const RETENTION_DAYS = ${pascalName}DataLifecycleRuntimePolicy.retentionDays;
|
|
21
|
+
export const RETENTION_RUNS = 'data-retention-runs';
|
|
22
|
+
const UUID = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;
|
|
23
|
+
|
|
24
|
+
export interface ${pascalName}RetentionPlanV1 {
|
|
25
|
+
asOf: string; candidateDigest: string; categoryId: 'product-record'; due: number;
|
|
26
|
+
locationId: 'primary-database'; maxItems: 10000; pageSize: 100;
|
|
27
|
+
policyVersion: string; retentionDays: number; runId: string;
|
|
28
|
+
}
|
|
29
|
+
export interface RetentionRun {
|
|
30
|
+
kind: 'data-retention-run'; schemaVersion: 1; slice: '${name}'; stage: string;
|
|
31
|
+
plan: ${pascalName}RetentionPlanV1;
|
|
32
|
+
approval: ApprovalRequest<typeof RETENTION_ACTION> | null;
|
|
33
|
+
status: 'reported' | 'approval-pending' | 'approval-approved' | 'approval-rejected' |
|
|
34
|
+
'applying' | 'retry-required' | 'completed' | 'expired';
|
|
35
|
+
createdAt: string; updatedAt: string; expiresAt: string;
|
|
36
|
+
}
|
|
37
|
+
export function retentionStage(): string {
|
|
38
|
+
const stage = process.env.EBK_STAGE;
|
|
39
|
+
if (!stage || !/^[a-z][a-z0-9-]{0,62}$/.test(stage)) throw new Error('Retention requires the exact Slice/task stage.');
|
|
40
|
+
return stage;
|
|
41
|
+
}
|
|
42
|
+
export function retentionRunReference(runId: string): string {
|
|
43
|
+
if (typeof runId !== 'string' || !UUID.test(runId)) throw new Error('Retention run requires an exact UUID.');
|
|
44
|
+
return createDataLifecyclePseudonymousReference({ categoryId: 'lifecycle-control-metadata', slice: '${name}', value: runId });
|
|
45
|
+
}
|
|
46
|
+
/** Retained control metadata is validated against its own policy, never today's deletion authority. */
|
|
47
|
+
export function requireRetainedRetentionPlan(value: ${pascalName}RetentionPlanV1, runId: string): ${pascalName}RetentionPlanV1 {
|
|
48
|
+
retentionRunReference(runId);
|
|
49
|
+
if (!value || value.runId !== runId || typeof value.policyVersion !== 'string' || !value.policyVersion.trim() || value.policyVersion.length > 128 ||
|
|
50
|
+
value.categoryId !== 'product-record' || value.locationId !== 'primary-database' ||
|
|
51
|
+
value.maxItems !== 10000 || value.pageSize !== 100 || !Number.isSafeInteger(value.retentionDays) || value.retentionDays < 1 ||
|
|
52
|
+
!Number.isSafeInteger(value.due) || value.due < 0 || value.due > value.maxItems ||
|
|
53
|
+
typeof value.asOf !== 'string' || typeof value.candidateDigest !== 'string' || !/^sha256:[a-f0-9]{64}$/.test(value.candidateDigest) ||
|
|
54
|
+
Object.keys(value).sort().join(',') !== 'asOf,candidateDigest,categoryId,due,locationId,maxItems,pageSize,policyVersion,retentionDays,runId')
|
|
55
|
+
throw new Error('Retention report plan is invalid.');
|
|
56
|
+
canonicalDataRightsNow(value.asOf);
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
export function requireRetentionPlan(value: ${pascalName}RetentionPlanV1, runId: string): ${pascalName}RetentionPlanV1 {
|
|
60
|
+
requireRetainedRetentionPlan(value, runId);
|
|
61
|
+
if (value.policyVersion !== RETENTION_POLICY || value.retentionDays !== RETENTION_DAYS)
|
|
62
|
+
throw new Error('Retention report policy changed; create and approve a new report.');
|
|
63
|
+
return value;
|
|
64
|
+
}
|
|
65
|
+
export const retentionApprovalInput = (plan: ${pascalName}RetentionPlanV1) => ({
|
|
66
|
+
action: RETENTION_ACTION, command: plan, resource: { id: plan.runId, type: 'retention-run' },
|
|
67
|
+
} as const);
|
|
68
|
+
export function createReportedRetentionRun(plan: ${pascalName}RetentionPlanV1, now: string): RetentionRun {
|
|
69
|
+
if (typeof now !== 'string') throw new Error('Retention report requires an explicit timestamp.');
|
|
70
|
+
requireRetentionPlan(plan, plan.runId); canonicalDataRightsNow(now);
|
|
71
|
+
if (Date.parse(plan.asOf) > Date.parse(now)) throw new Error('Retention report cannot select future records.');
|
|
72
|
+
return { kind: 'data-retention-run', schemaVersion: 1, slice: '${name}', stage: retentionStage(),
|
|
73
|
+
plan, approval: null, status: 'reported', createdAt: now, updatedAt: now, expiresAt: plusDataRightsDays(now, 400) };
|
|
74
|
+
}
|
|
75
|
+
export function retentionRunChange(run: RetentionRun, expectedVersion: number): KeyValueChange {
|
|
76
|
+
return { action: 'put', collection: RETENTION_RUNS, id: run.plan.runId, expectedVersion, value: run };
|
|
77
|
+
}
|
|
78
|
+
export async function loadRetentionRun(runId: string, now: string) {
|
|
79
|
+
if (typeof now !== 'string') throw new Error('Retention operation requires an explicit timestamp.');
|
|
80
|
+
retentionRunReference(runId); canonicalDataRightsNow(now);
|
|
81
|
+
const row = await dataStore().get('application', RETENTION_RUNS, runId);
|
|
82
|
+
const run = row?.value as RetentionRun | undefined;
|
|
83
|
+
if (!row || !run || run.kind !== 'data-retention-run' || run.schemaVersion !== 1 ||
|
|
84
|
+
run.slice !== '${name}' || run.stage !== retentionStage() ||
|
|
85
|
+
!['reported', 'approval-pending', 'approval-approved', 'approval-rejected', 'applying', 'retry-required', 'completed', 'expired'].includes(run.status))
|
|
86
|
+
throw new Error('The exact retention report was not found or is malformed.');
|
|
87
|
+
requireRetentionPlan(run.plan, runId);
|
|
88
|
+
for (const value of [run.createdAt, run.updatedAt, run.expiresAt]) {
|
|
89
|
+
if (typeof value !== 'string') throw new Error('Retention report time bounds are malformed.');
|
|
90
|
+
canonicalDataRightsNow(value);
|
|
91
|
+
}
|
|
92
|
+
if (Date.parse(run.plan.asOf) > Date.parse(run.createdAt) || Date.parse(run.createdAt) > Date.parse(run.updatedAt) ||
|
|
93
|
+
Date.parse(run.updatedAt) > Date.parse(now) || run.expiresAt !== plusDataRightsDays(run.createdAt, 400) ||
|
|
94
|
+
Date.parse(now) >= Date.parse(run.expiresAt))
|
|
95
|
+
throw new Error('Retention report is expired or its retained time bounds are invalid.');
|
|
96
|
+
const approval = run.approval;
|
|
97
|
+
if (approval !== null) {
|
|
98
|
+
if (!approval || !UUID.test(approval.id) || approval.schemaVersion !== 1 || approval.slice !== '${name}' ||
|
|
99
|
+
approval.action !== RETENTION_ACTION || approval.policyVersion !== RETENTION_AUTHORIZATION_POLICY ||
|
|
100
|
+
approval.resource?.id !== runId || approval.resource.type !== 'retention-run' ||
|
|
101
|
+
!Number.isSafeInteger(approval.revision) || approval.revision < 0 ||
|
|
102
|
+
digestApprovalRequest(retentionApprovalInput(run.plan)) !== approval.requestDigest ||
|
|
103
|
+
approval.author?.authorityMode !== 'direct' || approval.author.subjectType !== 'user' ||
|
|
104
|
+
typeof approval.author.actorId !== 'string' || !approval.author.actorId ||
|
|
105
|
+
approval.author.effectiveHumanId !== approval.author.actorId)
|
|
106
|
+
throw new Error('Retention approval is not bound to the exact report and direct author.');
|
|
107
|
+
if (typeof approval.requestedAt !== 'string' || typeof approval.expiresAt !== 'string')
|
|
108
|
+
throw new Error('Retention approval time bounds are malformed.');
|
|
109
|
+
canonicalDataRightsNow(approval.requestedAt); canonicalDataRightsNow(approval.expiresAt);
|
|
110
|
+
if (Date.parse(approval.requestedAt) < Date.parse(run.createdAt) || Date.parse(approval.requestedAt) > Date.parse(run.updatedAt) ||
|
|
111
|
+
Date.parse(approval.expiresAt) > Date.parse(run.expiresAt) ||
|
|
112
|
+
approval.expiresAt !== plusDataRightsDays(approval.requestedAt, 1))
|
|
113
|
+
throw new Error('Retention approval has invalid time bounds.');
|
|
114
|
+
}
|
|
115
|
+
const expected = { reported: null, 'approval-pending': 'pending', 'approval-approved': 'approved',
|
|
116
|
+
'approval-rejected': 'rejected', applying: 'executing', 'retry-required': 'executing', completed: 'executed', expired: 'expired' };
|
|
117
|
+
if ((approval?.status ?? null) !== expected[run.status]) throw new Error('Retention report and approval state disagree.');
|
|
118
|
+
return { run, version: row.version };
|
|
119
|
+
}
|
|
120
|
+
`,
|
|
121
|
+
'data/retention-control.ts': `import {
|
|
122
|
+
assertAuthorizationAllowed, createApprovalRequest, decideApprovalRequest,
|
|
123
|
+
type AuthorizationPrincipal,
|
|
124
|
+
} from '@empire-builder-kit/runtime/authorization';
|
|
125
|
+
import { canonicalDataRightsNow, dataRightsAuditChange, plusDataRightsDays, requireDirectAdmin } from './data-rights-shared.js';
|
|
126
|
+
import { dataStore } from './key-value.js';
|
|
127
|
+
import { loadRetentionRun, retentionApprovalInput, retentionRunChange, retentionRunReference,
|
|
128
|
+
RETENTION_AUTHORIZATION_POLICY, type RetentionRun } from './retention-state.js';
|
|
129
|
+
export type { ${pascalName}RetentionPlanV1 } from './retention-state.js';
|
|
130
|
+
|
|
131
|
+
interface Command { correlationId: string; now: string; principal: AuthorizationPrincipal; runId: string }
|
|
132
|
+
function validate(input: Command) {
|
|
133
|
+
requireDirectAdmin(input.principal);
|
|
134
|
+
if (typeof input.now !== 'string') throw new Error('Retention operation requires an explicit timestamp.');
|
|
135
|
+
canonicalDataRightsNow(input.now); retentionRunReference(input.runId);
|
|
136
|
+
if (typeof input.correlationId !== 'string' || !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(input.correlationId))
|
|
137
|
+
throw new Error('Retention requires a bounded correlation identifier.');
|
|
138
|
+
}
|
|
139
|
+
async function commit(run: RetentionRun, version: number, input: Command, purposeCode: string) {
|
|
140
|
+
if (!run.approval) throw new Error('Retention approval transition requires an approval.');
|
|
141
|
+
// Report, approval and audit share one native transaction; no independently
|
|
142
|
+
// writable approval file/row can authorize another report or a stale version.
|
|
143
|
+
await dataStore().commit({ tenantId: 'application', changes: [
|
|
144
|
+
retentionRunChange(run, version),
|
|
145
|
+
dataRightsAuditChange({ action: 'retention-apply', approvalRequestId: run.approval.id,
|
|
146
|
+
correlationId: input.correlationId, now: input.now, principal: input.principal,
|
|
147
|
+
resourceReference: retentionRunReference(input.runId), purposeCode,
|
|
148
|
+
outcome: run.status === 'approval-rejected' ? 'rejected' : 'succeeded',
|
|
149
|
+
summary: 'A bounded retention approval transition was committed.' }),
|
|
150
|
+
] });
|
|
151
|
+
}
|
|
152
|
+
export async function request${pascalName}RetentionApproval(input: Command) {
|
|
153
|
+
validate(input);
|
|
154
|
+
const { run, version } = await loadRetentionRun(input.runId, input.now);
|
|
155
|
+
if (run.status !== 'reported' || run.approval !== null)
|
|
156
|
+
throw new Error('Retention report already has an approval request or is no longer reviewable.');
|
|
157
|
+
const approval = createApprovalRequest({ ...retentionApprovalInput(run.plan), author: input.principal,
|
|
158
|
+
expiresAt: plusDataRightsDays(input.now, 1), now: input.now,
|
|
159
|
+
policyVersion: RETENTION_AUTHORIZATION_POLICY, slice: '${name}' });
|
|
160
|
+
if (Date.parse(approval.expiresAt) > Date.parse(run.expiresAt))
|
|
161
|
+
throw new Error('Retention report expires before its approval; create a new report.');
|
|
162
|
+
await commit({ ...run, approval, status: 'approval-pending', updatedAt: input.now }, version, input, 'approval-pending');
|
|
163
|
+
return { approvalRequestId: approval.id, expiresAt: approval.expiresAt, requestDigest: approval.requestDigest, status: approval.status };
|
|
164
|
+
}
|
|
165
|
+
export async function decide${pascalName}RetentionApproval(input: Command & {
|
|
166
|
+
approvalRequestId: string; expectedRequestDigest: string; outcome: 'approved' | 'rejected'; reasonReference: string;
|
|
167
|
+
}) {
|
|
168
|
+
validate(input);
|
|
169
|
+
if (input.outcome !== 'approved' && input.outcome !== 'rejected') throw new Error('Retention approval outcome is invalid.');
|
|
170
|
+
const { run, version } = await loadRetentionRun(input.runId, input.now);
|
|
171
|
+
if (run.status !== 'approval-pending' || !run.approval || run.approval.id !== input.approvalRequestId)
|
|
172
|
+
throw new Error('Retention approval does not match the pending report.');
|
|
173
|
+
const decision = decideApprovalRequest(run.approval, { approver: input.principal,
|
|
174
|
+
expectedRequestDigest: input.expectedRequestDigest, now: input.now, outcome: input.outcome,
|
|
175
|
+
reasonReference: input.reasonReference, requiredPolicyVersion: RETENTION_AUTHORIZATION_POLICY });
|
|
176
|
+
assertAuthorizationAllowed(decision.decision);
|
|
177
|
+
await commit({ ...run, approval: decision.request, status: input.outcome === 'approved' ? 'approval-approved' : 'approval-rejected',
|
|
178
|
+
updatedAt: input.now }, version, input, 'approval-' + input.outcome);
|
|
179
|
+
return { approvalRequestId: decision.request.id, status: decision.request.status };
|
|
180
|
+
}
|
|
181
|
+
`,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=built-in-plan-key-value-retention.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { GeneratedOwnershipRecord } from '../../ownership/index.js';
|
|
2
2
|
/** @internal */
|
|
3
|
-
export declare function renderSliceMetadataFiles(name: string, scope: string, pascalName: string, ownership: GeneratedOwnershipRecord): Readonly<Record<string, string>>;
|
|
3
|
+
export declare function renderSliceMetadataFiles(name: string, scope: string, pascalName: string, ownership: GeneratedOwnershipRecord, sql?: boolean): Readonly<Record<string, string>>;
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.renderSliceMetadataFiles = renderSliceMetadataFiles;
|
|
4
4
|
const built_in_plan_shared_js_1 = require("./built-in-plan-shared.js");
|
|
5
5
|
/** @internal */
|
|
6
|
-
function renderSliceMetadataFiles(name, scope, pascalName, ownership) {
|
|
6
|
+
function renderSliceMetadataFiles(name, scope, pascalName, ownership, sql = false) {
|
|
7
7
|
return {
|
|
8
8
|
'.ebk/ownership.json': (0, built_in_plan_shared_js_1.json)(ownership),
|
|
9
9
|
'README.md': `# ${name}
|
|
@@ -18,7 +18,8 @@ files from \`packages/foundation/infra\` or from another slice's internals.
|
|
|
18
18
|
|
|
19
19
|
- Next.js web application with sign-in, refresh, sign-out, callback, and password-reset paths
|
|
20
20
|
- Lambda HTTP API with health and JWT-protected routes
|
|
21
|
-
- stage- and
|
|
21
|
+
- task/stage- and Slice-scoped DynamoDB persistence with durable event intents and inbox handling
|
|
22
|
+
- optional user-feature PostgreSQL/Drizzle backed by Foundation Aurora when SQL is declared
|
|
22
23
|
- typed EventBridge publisher and SQS/DLQ-backed consumer
|
|
23
24
|
- Product Slice dashboard and API/DLQ alarms routed through Foundation alerts
|
|
24
25
|
- Vitest source test and Playwright deployed-smoke path
|
|
@@ -26,11 +27,20 @@ files from \`packages/foundation/infra\` or from another slice's internals.
|
|
|
26
27
|
rendered accessibility checks, and reviewable visual evidence
|
|
27
28
|
- versioned SLO, alarm, diagnostic, incident-remediation, and reliability-exercise contracts
|
|
28
29
|
- performance, capacity, resource-tag, protected-load, and actual-cost evidence contracts
|
|
29
|
-
-
|
|
30
|
+
- supply-chain-checked migration containers only for declared SQL workloads
|
|
30
31
|
|
|
31
32
|
Keep business contracts in \`contracts/\`. Add long-running Services and finite Jobs only when
|
|
32
33
|
the product needs them.
|
|
33
34
|
|
|
35
|
+
Declare a new same-Slice domain event in the seeded \`contracts/events.ts\`
|
|
36
|
+
\`EventContractSchema\` and implement its effect in the seeded \`api/event-consumer.ts\`.
|
|
37
|
+
The existing queue rule subscribes to those declared event types while retaining
|
|
38
|
+
the exact publishing Slice and current stage filters. Keep the built-in event
|
|
39
|
+
declarations; lifecycle events retain their separate declared-source rule.
|
|
40
|
+
Commit domain changes and event intents together through the DynamoDB store,
|
|
41
|
+
and commit consumer effects with the inbox. Do not edit managed routing or
|
|
42
|
+
assume that declaring an event implements its consumer behavior.
|
|
43
|
+
|
|
34
44
|
Run \`pnpm nx run ${name}:verify\` for the non-deployed Slice checks. The policy files under
|
|
35
45
|
\`frontend/\`, \`docs/reliability/\`, \`operations/\`, and \`performance/\` are seeded decisions:
|
|
36
46
|
adopt real owners, journeys, thresholds, targets, and evidence sources before enabling
|
|
@@ -43,19 +53,61 @@ Add product dependencies with \`pnpm --filter ${scope}/${name} add <package>\`.
|
|
|
43
53
|
its recorded framework keys in this package manifest, so health checks and upgrades preserve
|
|
44
54
|
dependencies, scripts, and other keys added by the product team.
|
|
45
55
|
|
|
46
|
-
##
|
|
56
|
+
## Develop the DynamoDB-first application
|
|
47
57
|
|
|
48
|
-
Run \`ebk dev up ${name}\`. The framework
|
|
49
|
-
|
|
50
|
-
SST live mode through the workspace-pinned Nx task.
|
|
51
|
-
|
|
52
|
-
|
|
58
|
+
Run \`ebk dev up ${name}\`. The framework reuses this worktree's persisted opaque
|
|
59
|
+
task identity, starts the selected Slice and declared dependencies, and runs
|
|
60
|
+
SST live mode through the workspace-pinned Nx task. Native persistence uses the
|
|
61
|
+
task's real AWS DynamoDB resources; Docker PostgreSQL starts only for declared
|
|
62
|
+
relational workloads. \`verify\` runs \`test-integration\`, which starts DynamoDB
|
|
63
|
+
Local (and PostgreSQL when declared) in disposable Docker containers, so
|
|
64
|
+
verification needs a running Docker engine. A caller cannot supply or persist a
|
|
65
|
+
stage override. The
|
|
66
|
+
fleet supervisor allocates the internal Next.js port and reports the HTTPS
|
|
67
|
+
readiness URL. Development accepts a dirty tree and requires no production
|
|
68
|
+
confirmation or release artifact.
|
|
53
69
|
|
|
54
70
|
The workspace fleet target discovers this slice through its versioned
|
|
55
71
|
\`metadata.ebk.localDev\` adapter. It supplies the exact HTTPS fleet origin, secure-cookie
|
|
56
72
|
signal, callback/logout URLs, and allocated internal port; do not persist a developer port in
|
|
57
73
|
this project.
|
|
58
74
|
|
|
75
|
+
Functions added with \`nx g @empire-builder-kit/nx:function\` use
|
|
76
|
+
\`/${name}/api/functions/<name>\` on this same browser origin. During fleet
|
|
77
|
+
development, generated Next routing forwards only that namespace to this task's
|
|
78
|
+
SST API; handlers keep native SST live execution. This is not deployed-stage
|
|
79
|
+
fallback. Keep user-owned Next API routes local and do not add a manual proxy.
|
|
80
|
+
|
|
81
|
+
Use \`pnpm nx run ${name}:verify-local-browser\` against that owned fleet origin.
|
|
82
|
+
Before its first run, install the pinned browser from this Slice's directory
|
|
83
|
+
with \`pnpm exec playwright install chromium\`. Repeat after a Playwright upgrade
|
|
84
|
+
only when the required browser revision changes. Verification never downloads
|
|
85
|
+
a browser or changes system trust silently. Inspect local failures under
|
|
86
|
+
\`.ebk/evidence/local-browser-artifacts\` in this Slice; keep these diagnostics
|
|
87
|
+
private because they may contain application test data.
|
|
88
|
+
Run affected feature tests, typecheck and lint for ordinary edits; use the
|
|
89
|
+
complete Slice/workspace verification at milestones, not after every hot edit.
|
|
90
|
+
Local fixture tests do not prove cloud routing, Streams, IAM or browser behavior.
|
|
91
|
+
Run \`ebk dev down ${name}\` when finished; cleanup must target only owned task
|
|
92
|
+
resources, and retained local SQL volumes remain available for the next session.
|
|
93
|
+
|
|
94
|
+
## Add relational storage deliberately
|
|
95
|
+
|
|
96
|
+
SQL is optional for user features that need relational constraints, joins or
|
|
97
|
+
transactions. DynamoDB remains the framework core, including its inbox and
|
|
98
|
+
outbox, when SQL is enabled. Use the Standard Blueprint's \`inputs.sql.reason\`
|
|
99
|
+
at Slice creation, or run
|
|
100
|
+
\`pnpm nx g @empire-builder-kit/nx:sql ${name} --reason="Explain the relational requirement"\`
|
|
101
|
+
to review the later addition, then repeat with \`--apply\`. The generator updates
|
|
102
|
+
the persisted Foundation/Slice declarations and reports resource implications;
|
|
103
|
+
it does not deploy AWS resources. New SQL defaults to \`cost-optimized\` Aurora
|
|
104
|
+
(0–2 ACUs, five-minute auto-pause); an explicit existing capacity choice is
|
|
105
|
+
preserved. Choose \`balanced\` or \`standard\` only when measured latency and
|
|
106
|
+
capacity needs justify a warm floor. Capacity selection does not pause schedules.
|
|
107
|
+
|
|
108
|
+
The commands below apply only after SQL has been declared. No Aurora, Drizzle
|
|
109
|
+
migration target or local PostgreSQL prerequisite is part of the SQL-free path.
|
|
110
|
+
|
|
59
111
|
\`database/bindings.json\` is the adopter-owned database selection contract. Add a candidate
|
|
60
112
|
identifier to \`primary.provisioned\` to provision it without moving workload traffic. Every
|
|
61
113
|
provisioned identifier receives its own AWS-internal bootstrap-and-migration workflow. Run
|
|
@@ -67,10 +119,7 @@ databases with Foundation master credentials.
|
|
|
67
119
|
The readiness route is framework-managed for local orchestration. Put product-specific
|
|
68
120
|
dependency and status checks under \`/${name}/api/status\` rather than editing that route.
|
|
69
121
|
|
|
70
|
-
|
|
71
|
-
data between sessions.
|
|
72
|
-
|
|
73
|
-
For a deployed canonical stage, \`${name}:db-migrate\` does not connect from the
|
|
122
|
+
For a deployed canonical SQL stage, \`${name}:db-migrate\` does not connect from the
|
|
74
123
|
local or GitHub process. It starts the generated Standard Step Functions
|
|
75
124
|
workflow, waits for its one-off Fargate task, and reports the execution ARN.
|
|
76
125
|
The workflow first runs an AWS-internal bootstrap task that converges the
|
|
@@ -79,16 +128,22 @@ IAM-authenticated migration task. Neither password resolves in GitHub, SST, or
|
|
|
79
128
|
Pulumi state. The authenticated \`GET /database-health\` API route uses the
|
|
80
129
|
server-only resolver, linked secret, and runtime-embedded AWS RDS global CA
|
|
81
130
|
bundle to prove the deployed runtime path with hostname-verified TLS.
|
|
82
|
-
Staging and production use the
|
|
83
|
-
\`
|
|
84
|
-
|
|
131
|
+
Staging and production use the canonical stage deployment role
|
|
132
|
+
(\`ebk-<stage>-deploy\`), which the managed Deploy workflow derives from
|
|
133
|
+
committed account, stage and partition policy and exposes to its jobs as
|
|
134
|
+
\`AWS_DEPLOY_ROLE_ARN\`; no GitHub environment role secret, second migration
|
|
135
|
+
OIDC role or database password is configured by the adopter. That role needs only \`ssm:GetParameter\` for the
|
|
85
136
|
exact generated migration-registration path and \`states:StartExecution\` /
|
|
86
137
|
\`states:DescribeExecution\` for the exact generated state machine and its
|
|
87
138
|
execution namespace; it never receives SQL, database-token, or arbitrary ECS
|
|
88
|
-
authority.
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
139
|
+
authority. When a user feature changes SQL data and publishes an event, keep
|
|
140
|
+
the SQL change and SQL intent in one transaction, then notify after commit.
|
|
141
|
+
Missed SQL notifications recover on the next hourly reconciliation by default;
|
|
142
|
+
explicit cadence and maintenance pauses remain independent settings. No
|
|
143
|
+
transaction spans SQL and DynamoDB.
|
|
144
|
+
|
|
145
|
+
Ordinary Slice removal retains declared relational databases and their
|
|
146
|
+
credential containers. The generated SQL retirement rehearsal is the protected
|
|
92
147
|
\`db-retirement-rehearsal\` target for the exact operations-declared
|
|
93
148
|
\`development\` database named \`retirement_rehearsal\`. It accepts no stage,
|
|
94
149
|
Slice, database, task, role, image, network, or workflow selection.
|
|
@@ -110,12 +165,14 @@ export const ${pascalName}ContractVersion = '1.0.0' as const;
|
|
|
110
165
|
|
|
111
166
|
## Boundary
|
|
112
167
|
|
|
113
|
-
This
|
|
114
|
-
|
|
168
|
+
This Slice owns its product behavior, routes, app clients, DynamoDB tables,
|
|
169
|
+
declared relational databases, event rules, queues, alarms, dashboards and
|
|
170
|
+
runbooks. Foundation owns shared capabilities and policy; Aurora is provisioned
|
|
171
|
+
only for declared relational requirements, not for the DynamoDB framework core.
|
|
115
172
|
|
|
116
173
|
## Dependencies
|
|
117
174
|
|
|
118
|
-
- Foundation contract
|
|
175
|
+
- Foundation discovery follows its versioned capability contract
|
|
119
176
|
- Canonical stages map to the same Foundation stage; framework-derived personal stages map
|
|
120
177
|
only to \`development\`
|
|
121
178
|
- Other slices: contracts-only imports
|
|
@@ -146,7 +203,8 @@ before adopting capacity limits, enabling protected load, or collecting actual-c
|
|
|
146
203
|
|
|
147
204
|
## Database migration
|
|
148
205
|
|
|
149
|
-
|
|
206
|
+
${sql
|
|
207
|
+
? `Protected migration runs from generated immutable bootstrap and migration
|
|
150
208
|
Fargate tasks through one Standard Step Functions workflow per provisioned
|
|
151
209
|
database identifier. The bootstrap task owns exact master-secret read,
|
|
152
210
|
runtime-secret read/write, and migrator-connect permissions; it converges the
|
|
@@ -157,10 +215,12 @@ receives only exact migrator-connect permission.
|
|
|
157
215
|
|
|
158
216
|
Retain the workflow execution ARN, both task identities, image identity, source
|
|
159
217
|
commit, migration checksums, sanitized CloudWatch logs, backup reference, and
|
|
160
|
-
verification result. The GitHub job
|
|
161
|
-
\`AWS_DEPLOY_ROLE_ARN\` only to start and describe the exact workflow
|
|
162
|
-
|
|
163
|
-
|
|
218
|
+
verification result. The GitHub job uses the stage deployment role
|
|
219
|
+
(\`AWS_DEPLOY_ROLE_ARN\`) only to start and describe the exact workflow. That
|
|
220
|
+
role has no \`rds-db:connect\` or \`ecs:RunTask\` authority and no secret-value
|
|
221
|
+
access to operator or Slice secret containers; its sole secret-value exception
|
|
222
|
+
is the SST-managed Foundation Aurora credential described in the workspace
|
|
223
|
+
\`docs/stage-deployment-authority.md\`.
|
|
164
224
|
|
|
165
225
|
The default \`db-migrate\` target selects the active \`primary\` database.
|
|
166
226
|
During replacement, first add the candidate to \`primary.provisioned\`, deploy
|
|
@@ -188,10 +248,75 @@ reviewed replacement or forward-compatible design instead of bypassing the
|
|
|
188
248
|
transaction. Apply expand/migrate/contract. Repair failures with a forward
|
|
189
249
|
migration or the documented restore/replacement procedure; do not edit an
|
|
190
250
|
applied SQL file.
|
|
251
|
+
`
|
|
252
|
+
: `This Slice uses DynamoDB and has no SQL migration or retirement targets.
|
|
253
|
+
For a feature requiring relational integrity or joins, review
|
|
254
|
+
\`pnpm nx g @empire-builder-kit/nx:sql ${name} --reason="Explain the relational requirement"\`,
|
|
255
|
+
then repeat with \`--apply\`. Generation declares the capability; deploy through
|
|
256
|
+
the normal lifecycle. DynamoDB remains the framework core after SQL is added.
|
|
257
|
+
`}
|
|
258
|
+
`,
|
|
259
|
+
'docs/runbooks/database-recovery.md': `# ${name} persistence recovery
|
|
260
|
+
|
|
261
|
+
Start with the exact Slice, stage, source and alarm dimensions. Keep unrelated
|
|
262
|
+
stages and production protections unchanged. Record bounded diagnostics; do not
|
|
263
|
+
retain record bodies, credentials or raw provider state.
|
|
264
|
+
|
|
265
|
+
## DynamoDB
|
|
266
|
+
|
|
267
|
+
For \`database-errors\`, inspect both table and PendingEvents index read/write
|
|
268
|
+
throttle metrics. Check hot keys, account/service quotas, retries and backlog;
|
|
269
|
+
do not treat a missing RDS signal as proof that the table is healthy. Check the
|
|
270
|
+
outbox schedule and stream mapping against their deliberate maintenance state.
|
|
271
|
+
Never delete pending intents or completion work to silence an alarm. If delivery
|
|
272
|
+
was interrupted, restore the owning worker's authority/connectivity and allow
|
|
273
|
+
bounded reconciliation to resume. Repeated failures require investigation of
|
|
274
|
+
the retained content-free failure marker and exact original workflow.
|
|
275
|
+
Completion failures retain a bounded attempt counter and exponential retry
|
|
276
|
+
delay (one minute up to one hour). A deferred or earlier-page obligation keeps
|
|
277
|
+
reconciliation partial; it is never expired by TTL. Repair the owning failure,
|
|
278
|
+
then allow the next retry, or retry the original approved deletion command.
|
|
279
|
+
Never invent publication acknowledgement or remove its pending-work binding.
|
|
280
|
+
|
|
281
|
+
Control-metadata holds belong in the seeded \`data/policy.json\` descriptor and
|
|
282
|
+
take effect with its governed deployment. They are checked before every
|
|
283
|
+
maintenance invocation, independent of its retained cursor. Record-hold APIs
|
|
284
|
+
create only product-record holds. Do not insert control holds directly into
|
|
285
|
+
the product hold collection; it is not a global maintenance-authority surface.
|
|
286
|
+
|
|
287
|
+
For restore, use point-in-time recovery into a new, separately identified table.
|
|
288
|
+
Verify record integrity, encryption, access scope and replay/idempotency behavior
|
|
289
|
+
before proposing a reviewed binding change. Do not automatically cut over,
|
|
290
|
+
overwrite the original table, replay expired inbox messages or disable deletion
|
|
291
|
+
protection. Retain measured recovery point/time and the rollback identity.
|
|
292
|
+
|
|
293
|
+
${sql
|
|
294
|
+
? `## Declared PostgreSQL
|
|
295
|
+
|
|
296
|
+
The declared Aurora database additionally requires its migration checksums,
|
|
297
|
+
backup identity, retained resource identity and deletion protection to be checked.
|
|
298
|
+
Use the [database migration procedure](../runbooks.md#database-migration).
|
|
299
|
+
Restore into a new resource and verify authorization and migrations before any
|
|
300
|
+
reviewed traffic change; never edit an applied migration or replace production
|
|
301
|
+
as an incidental repair.
|
|
302
|
+
`
|
|
303
|
+
: `SQL is not declared. No Aurora investigation or SQL migration command is
|
|
304
|
+
required for this Slice's DynamoDB recovery.
|
|
305
|
+
`}
|
|
191
306
|
`,
|
|
192
307
|
'ebk-globals.d.ts': `import 'sst/resource';
|
|
193
308
|
|
|
194
309
|
declare global {
|
|
310
|
+
type EbkSstOutput<T> = {
|
|
311
|
+
apply<U>(operation: (value: T) => U): EbkSstOutput<U>;
|
|
312
|
+
};
|
|
313
|
+
type EbkSstUnwrap<T> = T extends EbkSstOutput<infer U>
|
|
314
|
+
? EbkSstUnwrap<U>
|
|
315
|
+
: T extends readonly (infer U)[]
|
|
316
|
+
? EbkSstUnwrap<U>[]
|
|
317
|
+
: T extends Record<string, unknown>
|
|
318
|
+
? { [K in keyof T]: EbkSstUnwrap<T[K]> }
|
|
319
|
+
: T;
|
|
195
320
|
const sst: any;
|
|
196
321
|
const aws: any;
|
|
197
322
|
const $app: { name: string; stage: string };
|
|
@@ -202,6 +327,10 @@ declare global {
|
|
|
202
327
|
...values: unknown[]
|
|
203
328
|
) => unknown;
|
|
204
329
|
const $jsonStringify: (value: unknown) => unknown;
|
|
330
|
+
const $output: (value: unknown) => any;
|
|
331
|
+
function $resolve<T extends Record<string, any>>(
|
|
332
|
+
value: T,
|
|
333
|
+
): EbkSstOutput<EbkSstUnwrap<T>>;
|
|
205
334
|
const $transform: any;
|
|
206
335
|
const $util: any;
|
|
207
336
|
}
|