@empire-builder-kit/nx 1.0.0-rc.4 → 1.0.0-rc.41
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 +44 -10
- 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.d.ts +1 -1
- 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 +30 -0
- package/src/cli/deploy-runtime.js +174 -0
- package/src/cli/dev-command.d.ts +18 -4
- package/src/cli/dev-command.js +71 -0
- package/src/cli/main.d.ts +9 -1
- package/src/cli/main.js +157 -24
- package/src/cli/output.d.ts +1 -1
- package/src/cli/output.js +1 -1
- package/src/cli/personal-secret-runtime.d.ts +12 -0
- package/src/cli/personal-secret-runtime.js +18 -3
- package/src/cli/secret-terminal.js +1 -1
- package/src/container-images.d.ts +1 -1
- package/src/container-images.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 +15 -0
- package/src/developer-agent/operation-registry.js +342 -49
- package/src/developer-agent/planning.d.ts +8 -1
- package/src/developer-agent/planning.js +39 -16
- 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 +163 -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 +46 -6
- package/src/executors/sst-lifecycle/run-sst-command.js +750 -71
- 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/cost-estimate.d.ts +170 -0
- package/src/foundation/cost-estimate.js +683 -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/workspace-files-adopter-skills.d.ts +7 -0
- package/src/generators/preset/workspace-files-adopter-skills.js +324 -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 +162 -44
- 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-shared-operation-claims.d.ts +10 -0
- package/src/generators/preset/workspace-files-shared-operation-claims.js +59 -0
- package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
- package/src/generators/preset/workspace-files-stage-authority.js +529 -0
- package/src/generators/preset/workspace-files-thin-deploy.d.ts +65 -0
- package/src/generators/preset/workspace-files-thin-deploy.js +2507 -0
- package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
- package/src/generators/preset/workspace-files-thin-docs.js +370 -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 +1525 -609
- 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 +49 -11
- 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 +102 -334
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +975 -233
- 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 +176 -1200
- 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 +25 -2
- 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 +14 -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 -730
- package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +75 -14
- 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 +159 -29
- 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 +283 -44
- 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-event-files.d.ts +7 -0
- package/src/generators/slice/built-in-plan-testing-persistence-event-files.js +487 -0
- 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 +180 -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 +83 -30
- 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/frozen-container.d.ts +1 -1
- 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 +48 -8
- package/src/git-policy/github-bootstrap.js +344 -176
- 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 +58 -22
- 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 +16 -4
- 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/personal-command.d.ts +18 -2
- package/src/secrets/personal-command.js +66 -12
- package/src/secrets/registry.d.ts +2 -1
- package/src/secrets/registry.js +18 -1
- package/src/secrets/verification.js +15 -2
- 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
|
@@ -8,7 +8,7 @@ function snapshotColumn(name, type, options = {}) {
|
|
|
8
8
|
type,
|
|
9
9
|
primaryKey: options.primaryKey ?? false,
|
|
10
10
|
notNull: options.notNull ?? true,
|
|
11
|
-
...(options.default ? { default: options.default }
|
|
11
|
+
...(options.default === undefined ? {} : { default: options.default }),
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
14
|
function snapshotTable(name, columns, uniqueConstraints = {}, compositePrimaryKeys = {}, indexes = {}, foreignKeys = {}) {
|
|
@@ -25,25 +25,12 @@ function snapshotTable(name, columns, uniqueConstraints = {}, compositePrimaryKe
|
|
|
25
25
|
isRLSEnabled: false,
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
function snapshotIndex(name, columns) {
|
|
29
|
-
return {
|
|
30
|
-
columns: columns.map(({ expression, opclass }) => ({
|
|
31
|
-
asc: true,
|
|
32
|
-
expression,
|
|
33
|
-
isExpression: false,
|
|
34
|
-
nulls: 'last',
|
|
35
|
-
opclass,
|
|
36
|
-
})),
|
|
37
|
-
concurrently: false,
|
|
38
|
-
isUnique: false,
|
|
39
|
-
method: 'btree',
|
|
40
|
-
name,
|
|
41
|
-
with: {},
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
28
|
/** @internal */
|
|
45
|
-
function renderProductDataFiles(name, pascalName) {
|
|
46
|
-
|
|
29
|
+
function renderProductDataFiles(name, pascalName, protectedRuntimeStages = ['staging', 'production'], sql = true) {
|
|
30
|
+
const databaseStages = [
|
|
31
|
+
...new Set(['development', ...protectedRuntimeStages]),
|
|
32
|
+
];
|
|
33
|
+
const files = {
|
|
47
34
|
'contracts/events.ts': `import type { DataLifecycleChangeEventV1 } from '@empire-builder-kit/runtime/data-lifecycle';
|
|
48
35
|
|
|
49
36
|
export interface ${pascalName}CreatedData {
|
|
@@ -96,219 +83,13 @@ export const EventContractSchema = {
|
|
|
96
83
|
slice: '${name}',
|
|
97
84
|
} as const;
|
|
98
85
|
`,
|
|
99
|
-
'database/schema.ts': `import {
|
|
100
|
-
|
|
101
|
-
export const records = pgTable(
|
|
102
|
-
'records',
|
|
103
|
-
{
|
|
104
|
-
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
105
|
-
id: uuid('id').defaultRandom().primaryKey(),
|
|
106
|
-
lastActivityAt: timestamp('last_activity_at', { withTimezone: true }).defaultNow().notNull(),
|
|
107
|
-
name: text('name').notNull(),
|
|
108
|
-
ownerId: text('owner_id').notNull(),
|
|
109
|
-
runScope: text('run_scope').notNull(),
|
|
110
|
-
testExpiresAt: timestamp('test_expires_at', { withTimezone: true }),
|
|
111
|
-
},
|
|
112
|
-
(table) => [
|
|
113
|
-
index('records_performance_expiry_idx').on(
|
|
114
|
-
table.ownerId,
|
|
115
|
-
table.name,
|
|
116
|
-
table.testExpiresAt,
|
|
117
|
-
),
|
|
118
|
-
index('records_performance_run_scope_idx').on(
|
|
119
|
-
table.ownerId,
|
|
120
|
-
table.name,
|
|
121
|
-
table.runScope,
|
|
122
|
-
),
|
|
123
|
-
],
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
export const authorizationAudit = pgTable('authorization_audit', {
|
|
127
|
-
action: text('action').notNull(),
|
|
128
|
-
approvalReference: text('approval_reference'),
|
|
129
|
-
authorityMode: text('authority_mode').notNull(),
|
|
130
|
-
correlationId: text('correlation_id').notNull(),
|
|
131
|
-
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
132
|
-
decision: text('decision').notNull(),
|
|
133
|
-
id: uuid('id').defaultRandom().primaryKey(),
|
|
134
|
-
policyVersion: text('policy_version').notNull(),
|
|
135
|
-
principalKind: text('principal_kind').notNull(),
|
|
136
|
-
pseudonymousSubjectId: text('pseudonymous_subject_id').notNull(),
|
|
137
|
-
reasonCategory: text('reason_category').notNull(),
|
|
138
|
-
delegationReference: text('delegation_reference'),
|
|
139
|
-
resourceReference: text('resource_reference'),
|
|
140
|
-
resourceType: text('resource_type').notNull(),
|
|
141
|
-
slice: text('slice').notNull(),
|
|
142
|
-
stage: text('stage').notNull(),
|
|
143
|
-
subjectType: text('subject_type').notNull(),
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
export const delegationGrants = pgTable('delegation_grants', {
|
|
147
|
-
capabilityDigest: text('capability_digest').notNull(),
|
|
148
|
-
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
149
|
-
expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
|
|
150
|
-
grantJson: jsonb('grant_json').notNull(),
|
|
151
|
-
id: uuid('id').primaryKey(),
|
|
152
|
-
issuedAt: timestamp('issued_at', { withTimezone: true }).notNull(),
|
|
153
|
-
policyVersion: text('policy_version').notNull(),
|
|
154
|
-
revision: integer('revision').notNull(),
|
|
155
|
-
status: text('status').notNull(),
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
export const approvalRequests = pgTable('approval_requests', {
|
|
159
|
-
authorReference: text('author_reference').notNull(),
|
|
160
|
-
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
161
|
-
expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
|
|
162
|
-
id: uuid('id').primaryKey(),
|
|
163
|
-
policyVersion: text('policy_version').notNull(),
|
|
164
|
-
requestJson: jsonb('request_json').notNull(),
|
|
165
|
-
requestDigest: text('request_digest').notNull(),
|
|
166
|
-
revision: integer('revision').notNull(),
|
|
167
|
-
status: text('status').notNull(),
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
export const dataLifecycleAudit = pgTable(
|
|
171
|
-
'data_lifecycle_audit',
|
|
172
|
-
{
|
|
173
|
-
action: text('action').notNull(),
|
|
174
|
-
actorRef: text('actor_ref').notNull(),
|
|
175
|
-
approvalReference: text('approval_reference'),
|
|
176
|
-
auditJson: jsonb('audit_json').notNull(),
|
|
177
|
-
authorityCode: text('authority_code').notNull(),
|
|
178
|
-
correlationRef: text('correlation_ref').notNull(),
|
|
179
|
-
expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
|
|
180
|
-
id: uuid('id').defaultRandom().primaryKey(),
|
|
181
|
-
occurredAt: timestamp('occurred_at', { withTimezone: true }).notNull(),
|
|
182
|
-
outcome: text('outcome').notNull(),
|
|
183
|
-
policyVersion: text('policy_version').notNull(),
|
|
184
|
-
principalKind: text('principal_kind').notNull(),
|
|
185
|
-
purposeCode: text('purpose_code').notNull(),
|
|
186
|
-
resourceReference: text('resource_reference'),
|
|
187
|
-
slice: text('slice').notNull(),
|
|
188
|
-
stage: text('stage').notNull(),
|
|
189
|
-
subjectType: text('subject_type').notNull(),
|
|
190
|
-
targetCategoryId: text('target_category_id').notNull(),
|
|
191
|
-
},
|
|
192
|
-
(table) => [
|
|
193
|
-
index('data_lifecycle_audit_expires_at_idx').on(table.expiresAt),
|
|
194
|
-
],
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
export const dataLifecycleExportArtifacts = pgTable(
|
|
198
|
-
'data_lifecycle_export_artifacts',
|
|
199
|
-
{
|
|
200
|
-
approvalRequestId: uuid('approval_request_id')
|
|
201
|
-
.primaryKey()
|
|
202
|
-
.references(() => approvalRequests.id, { onDelete: 'cascade' }),
|
|
203
|
-
artifactRef: text('artifact_ref'),
|
|
204
|
-
cleanupDeadlineAt: timestamp('cleanup_deadline_at', {
|
|
205
|
-
withTimezone: true,
|
|
206
|
-
}),
|
|
207
|
-
cleanupState: text('cleanup_state').notNull(),
|
|
208
|
-
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
209
|
-
currentVersionId: text('current_version_id'),
|
|
210
|
-
expiresAt: timestamp('expires_at', { withTimezone: true }),
|
|
211
|
-
lastErrorCode: text('last_error_code'),
|
|
212
|
-
objectKey: text('object_key').notNull(),
|
|
213
|
-
recordRef: text('record_ref').notNull(),
|
|
214
|
-
subjectRef: text('subject_ref').notNull(),
|
|
215
|
-
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
|
216
|
-
uploadStartedAt: timestamp('upload_started_at', { withTimezone: true }),
|
|
217
|
-
},
|
|
218
|
-
(table) => [
|
|
219
|
-
index('data_lifecycle_export_artifacts_subject_created_idx').on(
|
|
220
|
-
table.subjectRef,
|
|
221
|
-
table.createdAt,
|
|
222
|
-
),
|
|
223
|
-
index('data_lifecycle_export_artifacts_cleanup_expiry_idx').on(
|
|
224
|
-
table.cleanupState,
|
|
225
|
-
table.expiresAt,
|
|
226
|
-
),
|
|
227
|
-
index('data_lifecycle_export_artifacts_cleanup_deadline_idx').on(
|
|
228
|
-
table.cleanupState,
|
|
229
|
-
table.cleanupDeadlineAt,
|
|
230
|
-
),
|
|
231
|
-
],
|
|
232
|
-
);
|
|
233
|
-
|
|
234
|
-
export const dataLifecycleExportVersions = pgTable(
|
|
235
|
-
'data_lifecycle_export_versions',
|
|
236
|
-
{
|
|
237
|
-
approvalRequestId: uuid('approval_request_id')
|
|
238
|
-
.notNull()
|
|
239
|
-
.references(() => approvalRequests.id, { onDelete: 'cascade' }),
|
|
240
|
-
deletedAt: timestamp('deleted_at', { withTimezone: true }),
|
|
241
|
-
isDeleteMarker: boolean('is_delete_marker').notNull(),
|
|
242
|
-
objectKey: text('object_key').notNull(),
|
|
243
|
-
status: text('status').notNull(),
|
|
244
|
-
versionId: text('version_id').notNull(),
|
|
245
|
-
},
|
|
246
|
-
(table) => [
|
|
247
|
-
primaryKey({
|
|
248
|
-
columns: [table.approvalRequestId, table.versionId],
|
|
249
|
-
}),
|
|
250
|
-
index('data_lifecycle_export_versions_status_idx').on(table.status),
|
|
251
|
-
],
|
|
252
|
-
);
|
|
253
|
-
|
|
254
|
-
export const cleanupDeadlineReportCapacity = pgTable(
|
|
255
|
-
'cleanup_deadline_report_capacity',
|
|
256
|
-
{
|
|
257
|
-
feature: text('feature').primaryKey(),
|
|
258
|
-
maximumPending: integer('maximum_pending').notNull(),
|
|
259
|
-
},
|
|
260
|
-
);
|
|
261
|
-
|
|
262
|
-
export const cleanupDeadlineReports = pgTable(
|
|
263
|
-
'cleanup_deadline_reports',
|
|
264
|
-
{
|
|
265
|
-
deadlineAt: timestamp('deadline_at', { withTimezone: true }).notNull(),
|
|
266
|
-
feature: text('feature').notNull(),
|
|
267
|
-
observedAt: timestamp('observed_at', { withTimezone: true })
|
|
268
|
-
.defaultNow()
|
|
269
|
-
.notNull(),
|
|
270
|
-
resourceRef: text('resource_ref').notNull(),
|
|
271
|
-
},
|
|
272
|
-
(table) => [
|
|
273
|
-
primaryKey({ columns: [table.feature, table.resourceRef] }),
|
|
274
|
-
index('cleanup_deadline_reports_feature_observed_idx').on(
|
|
275
|
-
table.feature,
|
|
276
|
-
table.observedAt,
|
|
277
|
-
),
|
|
278
|
-
],
|
|
279
|
-
);
|
|
280
|
-
|
|
281
|
-
export const dataLifecycleLedger = pgTable('data_lifecycle_ledger', {
|
|
282
|
-
action: text('action').notNull(),
|
|
283
|
-
categoryId: text('category_id').notNull(),
|
|
284
|
-
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
285
|
-
effectiveAt: timestamp('effective_at', { withTimezone: true }).notNull(),
|
|
286
|
-
entryId: text('entry_id').primaryKey(),
|
|
287
|
-
expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
|
|
288
|
-
idempotencyKey: text('idempotency_key').notNull().unique(),
|
|
289
|
-
policyVersion: text('policy_version').notNull(),
|
|
290
|
-
pseudonymousKey: text('pseudonymous_key').notNull(),
|
|
291
|
-
});
|
|
292
|
-
|
|
293
|
-
export const dataLifecycleRequests = pgTable('data_lifecycle_requests', {
|
|
294
|
-
approvalRequestId: uuid('approval_request_id').notNull().unique(),
|
|
295
|
-
id: uuid('id').primaryKey(),
|
|
296
|
-
requestJson: jsonb('request_json').notNull(),
|
|
297
|
-
revision: integer('revision').notNull(),
|
|
298
|
-
status: text('status').notNull(),
|
|
299
|
-
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
|
300
|
-
});
|
|
301
|
-
|
|
302
|
-
export const dataLifecycleHolds = pgTable('data_lifecycle_holds', {
|
|
303
|
-
categoryId: text('category_id').notNull(),
|
|
304
|
-
expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
|
|
305
|
-
holdId: text('hold_id').primaryKey(),
|
|
306
|
-
holdJson: jsonb('hold_json').notNull(),
|
|
307
|
-
reviewAt: timestamp('review_at', { withTimezone: true }).notNull(),
|
|
308
|
-
scopeRef: text('scope_ref').notNull(),
|
|
309
|
-
status: text('status').notNull(),
|
|
310
|
-
});
|
|
86
|
+
'database/schema.ts': `import { integer, jsonb, pgTable, text, timestamp } from 'drizzle-orm/pg-core';
|
|
311
87
|
|
|
88
|
+
/**
|
|
89
|
+
* Add user-owned relational feature tables here. Standard records, authorization,
|
|
90
|
+
* inbox, retention and ordinary event intents remain in DynamoDB.
|
|
91
|
+
* This table is only for events committed atomically with an optional SQL feature.
|
|
92
|
+
*/
|
|
312
93
|
export const dataLifecycleOutbox = pgTable('data_lifecycle_outbox', {
|
|
313
94
|
attempts: integer('attempts').default(0).notNull(),
|
|
314
95
|
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
@@ -318,162 +99,8 @@ export const dataLifecycleOutbox = pgTable('data_lifecycle_outbox', {
|
|
|
318
99
|
lastErrorCode: text('last_error_code'),
|
|
319
100
|
publishedAt: timestamp('published_at', { withTimezone: true }),
|
|
320
101
|
});
|
|
321
|
-
|
|
322
|
-
export const performanceLoadRuns = pgTable(
|
|
323
|
-
'performance_load_runs',
|
|
324
|
-
{
|
|
325
|
-
adapterId: text('adapter_id').notNull(),
|
|
326
|
-
cleanupStartedAt: timestamp('cleanup_started_at', {
|
|
327
|
-
withTimezone: true,
|
|
328
|
-
}),
|
|
329
|
-
createdAt: timestamp('created_at', { withTimezone: true }).notNull(),
|
|
330
|
-
expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
|
|
331
|
-
maximumRequests: integer('maximum_requests').notNull(),
|
|
332
|
-
planDigest: text('plan_digest').primaryKey(),
|
|
333
|
-
releaseMaterialDigest: text('release_material_digest').notNull(),
|
|
334
|
-
runId: text('run_id').notNull(),
|
|
335
|
-
scenarioId: text('scenario_id').notNull(),
|
|
336
|
-
sourceCommit: text('source_commit').notNull(),
|
|
337
|
-
stage: text('stage').notNull(),
|
|
338
|
-
},
|
|
339
|
-
(table) => [
|
|
340
|
-
index('performance_load_runs_expires_at_idx').on(table.expiresAt),
|
|
341
|
-
],
|
|
342
|
-
);
|
|
343
|
-
|
|
344
|
-
export const performanceLoadRequests = pgTable(
|
|
345
|
-
'performance_load_requests',
|
|
346
|
-
{
|
|
347
|
-
claimedAt: timestamp('claimed_at', { withTimezone: true })
|
|
348
|
-
.defaultNow()
|
|
349
|
-
.notNull(),
|
|
350
|
-
effectId: text('effect_id'),
|
|
351
|
-
planDigest: text('plan_digest').notNull(),
|
|
352
|
-
requestOrdinal: integer('request_ordinal').notNull(),
|
|
353
|
-
},
|
|
354
|
-
(table) => [
|
|
355
|
-
primaryKey({ columns: [table.planDigest, table.requestOrdinal] }),
|
|
356
|
-
],
|
|
357
|
-
);
|
|
358
|
-
|
|
359
|
-
export const performanceLoadAsyncEffects = pgTable(
|
|
360
|
-
'performance_load_async_effects',
|
|
361
|
-
{
|
|
362
|
-
createdAt: timestamp('created_at', { withTimezone: true })
|
|
363
|
-
.defaultNow()
|
|
364
|
-
.notNull(),
|
|
365
|
-
effectId: text('effect_id').primaryKey(),
|
|
366
|
-
expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
|
|
367
|
-
planDigest: text('plan_digest').notNull(),
|
|
368
|
-
processedAt: timestamp('processed_at', { withTimezone: true }),
|
|
369
|
-
runId: text('run_id').notNull(),
|
|
370
|
-
},
|
|
371
|
-
(table) => [
|
|
372
|
-
index('performance_load_async_effects_expires_at_idx').on(
|
|
373
|
-
table.expiresAt,
|
|
374
|
-
),
|
|
375
|
-
index('performance_load_async_effects_pending_idx').on(
|
|
376
|
-
table.processedAt,
|
|
377
|
-
table.expiresAt,
|
|
378
|
-
),
|
|
379
|
-
index('performance_load_async_effects_run_idx').on(
|
|
380
|
-
table.planDigest,
|
|
381
|
-
table.runId,
|
|
382
|
-
),
|
|
383
|
-
],
|
|
384
|
-
);
|
|
385
|
-
|
|
386
|
-
export const ebkInbox = pgTable(
|
|
387
|
-
'ebk_inbox',
|
|
388
|
-
{
|
|
389
|
-
attempts: integer('attempts').default(0).notNull(),
|
|
390
|
-
completedAt: timestamp('completed_at', { withTimezone: true }),
|
|
391
|
-
expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
|
|
392
|
-
firstSeenAt: timestamp('first_seen_at', { withTimezone: true }).defaultNow().notNull(),
|
|
393
|
-
handlerId: text('handler_id').notNull(),
|
|
394
|
-
handlerVersion: text('handler_version').notNull(),
|
|
395
|
-
lastAttemptAt: timestamp('last_attempt_at', { withTimezone: true }).notNull(),
|
|
396
|
-
messageId: text('message_id').notNull(),
|
|
397
|
-
payloadDigest: text('payload_digest').notNull(),
|
|
398
|
-
resultReference: text('result_reference'),
|
|
399
|
-
status: text('status').notNull(),
|
|
400
|
-
},
|
|
401
|
-
(table) => [
|
|
402
|
-
primaryKey({ columns: [table.handlerId, table.messageId] }),
|
|
403
|
-
index('ebk_inbox_expires_at_idx').on(table.expiresAt),
|
|
404
|
-
],
|
|
405
|
-
);
|
|
406
|
-
|
|
407
|
-
export const dataLifecycleRetentionCandidates = pgTable(
|
|
408
|
-
'data_lifecycle_retention_candidates',
|
|
409
|
-
{
|
|
410
|
-
candidateOrder: text('candidate_order').notNull(),
|
|
411
|
-
dueAt: timestamp('due_at', { withTimezone: true }).notNull(),
|
|
412
|
-
recordId: uuid('record_id').notNull(),
|
|
413
|
-
recordRef: text('record_ref').notNull(),
|
|
414
|
-
runId: uuid('run_id').notNull(),
|
|
415
|
-
},
|
|
416
|
-
(table) => [
|
|
417
|
-
primaryKey({ columns: [table.runId, table.candidateOrder] }),
|
|
418
|
-
],
|
|
419
|
-
);
|
|
420
|
-
|
|
421
|
-
export const dataLifecycleRetentionRuns = pgTable('data_lifecycle_retention_runs', {
|
|
422
|
-
approvalRequestId: uuid('approval_request_id').unique(),
|
|
423
|
-
asOf: timestamp('as_of', { withTimezone: true }).notNull(),
|
|
424
|
-
checkpointJson: jsonb('checkpoint_json').notNull(),
|
|
425
|
-
completedAt: timestamp('completed_at', { withTimezone: true }),
|
|
426
|
-
countsJson: jsonb('counts_json').notNull(),
|
|
427
|
-
expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
|
|
428
|
-
id: uuid('id').primaryKey(),
|
|
429
|
-
planJson: jsonb('plan_json').notNull(),
|
|
430
|
-
policyVersion: text('policy_version').notNull(),
|
|
431
|
-
revision: integer('revision').notNull(),
|
|
432
|
-
status: text('status').notNull(),
|
|
433
|
-
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
|
434
|
-
});
|
|
435
|
-
|
|
436
|
-
export const dataLifecycleReceipts = pgTable('data_lifecycle_receipts', {
|
|
437
|
-
action: text('action').notNull(),
|
|
438
|
-
occurredAt: timestamp('occurred_at', { withTimezone: true }).notNull(),
|
|
439
|
-
policyVersion: text('policy_version').notNull(),
|
|
440
|
-
pseudonymousKey: text('pseudonymous_key').notNull(),
|
|
441
|
-
receivedAt: timestamp('received_at', { withTimezone: true }).defaultNow().notNull(),
|
|
442
|
-
requestRef: text('request_ref').notNull(),
|
|
443
|
-
sourceSlice: text('source_slice').notNull(),
|
|
444
|
-
}, (table) => [
|
|
445
|
-
primaryKey({
|
|
446
|
-
columns: [
|
|
447
|
-
table.sourceSlice,
|
|
448
|
-
table.pseudonymousKey,
|
|
449
|
-
table.action,
|
|
450
|
-
table.requestRef,
|
|
451
|
-
],
|
|
452
|
-
}),
|
|
453
|
-
]);
|
|
454
|
-
|
|
455
|
-
export const dataLifecycleDownstreamCopies = pgTable(
|
|
456
|
-
'data_lifecycle_downstream_copies',
|
|
457
|
-
{
|
|
458
|
-
action: text('action').notNull(),
|
|
459
|
-
copyId: text('copy_id').notNull(),
|
|
460
|
-
expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
|
|
461
|
-
holdRefs: jsonb('hold_refs').notNull(),
|
|
462
|
-
pseudonymousKey: text('pseudonymous_key').notNull(),
|
|
463
|
-
purpose: text('purpose').notNull(),
|
|
464
|
-
recipient: text('recipient').notNull(),
|
|
465
|
-
sourceSlice: text('source_slice').notNull(),
|
|
466
|
-
status: text('status').notNull(),
|
|
467
|
-
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
|
468
|
-
},
|
|
469
|
-
(table) => [
|
|
470
|
-
primaryKey({
|
|
471
|
-
columns: [table.sourceSlice, table.pseudonymousKey, table.copyId],
|
|
472
|
-
}),
|
|
473
|
-
],
|
|
474
|
-
);
|
|
475
102
|
`,
|
|
476
|
-
'secrets/declarations.ts':
|
|
103
|
+
'secrets/declarations.ts': `${sql ? "import { databaseCredentialSecretSchema } from '@empire-builder-kit/runtime/database';\n" : ''}\
|
|
477
104
|
import {
|
|
478
105
|
defineSecrets,
|
|
479
106
|
secret,
|
|
@@ -530,21 +157,23 @@ const performanceLoadHmacKeys = secret.json<{
|
|
|
530
157
|
});
|
|
531
158
|
|
|
532
159
|
const SecretDefinitions = {
|
|
533
|
-
|
|
160
|
+
GeneratedPerformanceLoadHmacKeys: {
|
|
534
161
|
cache: { freshTtlMs: 1_000, staleTtlMs: 0 },
|
|
162
|
+
generation: { kind: 'hmac-key-ring-v1' },
|
|
535
163
|
owner: '${name}',
|
|
536
|
-
requiredStages:
|
|
164
|
+
requiredStages: ${JSON.stringify(protectedRuntimeStages)},
|
|
537
165
|
retention: { mode: 'retain' },
|
|
538
166
|
rotation: {
|
|
539
167
|
mode: 'manual',
|
|
540
168
|
runbook: 'docs/runbooks/performance-capacity-cost.md',
|
|
541
169
|
},
|
|
542
|
-
source: '
|
|
170
|
+
source: 'generated',
|
|
543
171
|
value: performanceLoadHmacKeys,
|
|
544
172
|
},
|
|
545
|
-
|
|
173
|
+
${sql
|
|
174
|
+
? ` ${pascalName}PrimaryDatabaseCredential: {
|
|
546
175
|
owner: '${name}',
|
|
547
|
-
requiredStages:
|
|
176
|
+
requiredStages: ${JSON.stringify(databaseStages)},
|
|
548
177
|
retention: { mode: 'retain' },
|
|
549
178
|
rotation: {
|
|
550
179
|
mode: 'manual',
|
|
@@ -553,6 +182,8 @@ const SecretDefinitions = {
|
|
|
553
182
|
source: 'database-bootstrap',
|
|
554
183
|
value: databaseCredentialSecretSchema,
|
|
555
184
|
},
|
|
185
|
+
`
|
|
186
|
+
: ''}\
|
|
556
187
|
} as const;
|
|
557
188
|
|
|
558
189
|
export const Secrets: DefinedSecrets<typeof SecretDefinitions> =
|
|
@@ -561,23 +192,28 @@ export const Secrets: DefinedSecrets<typeof SecretDefinitions> =
|
|
|
561
192
|
'secrets/metadata.json': (0, built_in_plan_shared_js_1.json)({
|
|
562
193
|
declarations: [
|
|
563
194
|
{
|
|
564
|
-
|
|
195
|
+
generation: { kind: 'hmac-key-ring-v1' },
|
|
196
|
+
logicalName: 'GeneratedPerformanceLoadHmacKeys',
|
|
565
197
|
owner: name,
|
|
566
|
-
requiredStages:
|
|
198
|
+
requiredStages: protectedRuntimeStages,
|
|
567
199
|
rotation: { mode: 'manual' },
|
|
568
|
-
source: '
|
|
569
|
-
valueKind: 'json',
|
|
570
|
-
},
|
|
571
|
-
{
|
|
572
|
-
logicalName: `${pascalName}PrimaryDatabaseCredential`,
|
|
573
|
-
owner: name,
|
|
574
|
-
requiredStages: ['development', 'staging', 'production'],
|
|
575
|
-
rotation: { mode: 'manual' },
|
|
576
|
-
source: 'database-bootstrap',
|
|
200
|
+
source: 'generated',
|
|
577
201
|
valueKind: 'json',
|
|
578
202
|
},
|
|
203
|
+
...(sql
|
|
204
|
+
? [
|
|
205
|
+
{
|
|
206
|
+
logicalName: `${pascalName}PrimaryDatabaseCredential`,
|
|
207
|
+
owner: name,
|
|
208
|
+
requiredStages: databaseStages,
|
|
209
|
+
rotation: { mode: 'manual' },
|
|
210
|
+
source: 'database-bootstrap',
|
|
211
|
+
valueKind: 'json',
|
|
212
|
+
},
|
|
213
|
+
]
|
|
214
|
+
: []),
|
|
579
215
|
],
|
|
580
|
-
schemaVersion:
|
|
216
|
+
schemaVersion: 2,
|
|
581
217
|
}),
|
|
582
218
|
'docs/runbooks/database-credential-rotation.md': `# Database credential rotation
|
|
583
219
|
|
|
@@ -595,7 +231,8 @@ restored before accepting the rotation.
|
|
|
595
231
|
`,
|
|
596
232
|
'docs/runbooks/operator-secret-management.md': `# Operator secret management
|
|
597
233
|
|
|
598
|
-
|
|
234
|
+
Human-supplied and machine-generated deployed secrets use AWS Secrets Manager
|
|
235
|
+
containers named
|
|
599
236
|
\`ebk/<stage>/${name}/<logical-name>\`. The declaration in
|
|
600
237
|
\`secrets/declarations.ts\` owns the typed runtime contract. Its value-free
|
|
601
238
|
control-plane projection in \`secrets/metadata.json\` must carry the same
|
|
@@ -603,10 +240,60 @@ logical name, owner, required stages, rotation mode, source, and value kind.
|
|
|
603
240
|
Neither file may contain a value, placeholder, fallback, value hash, or
|
|
604
241
|
provider credential.
|
|
605
242
|
|
|
606
|
-
##
|
|
243
|
+
## Machine-generated performance key ring
|
|
244
|
+
|
|
245
|
+
The trusted AWS adapter process generates the
|
|
246
|
+
\`GeneratedPerformanceLoadHmacKeys\` value and writes it directly to Secrets
|
|
247
|
+
Manager. Transient plaintext bytes exist only in that adapter process; the
|
|
248
|
+
agent, model, and invoking caller never receive, copy, or log them. The
|
|
249
|
+
initializer atomically creates the container and first version; do not
|
|
250
|
+
pre-create it with \`secret-metadata\`. Report the initialization proposal:
|
|
251
|
+
|
|
252
|
+
\`\`\`bash
|
|
253
|
+
pnpm nx run ${name}:secret-initialize -- --logicalName=GeneratedPerformanceLoadHmacKeys --stage=<required-stage> --profile=<profile> --region=<region> --expectedRoleArn=<role-arn>
|
|
254
|
+
\`\`\`
|
|
255
|
+
|
|
256
|
+
After reviewing the exact declaration and target, apply with the committed
|
|
257
|
+
stage deployment role:
|
|
607
258
|
|
|
608
|
-
|
|
609
|
-
|
|
259
|
+
\`\`\`bash
|
|
260
|
+
pnpm nx run ${name}:secret-initialize -- --logicalName=GeneratedPerformanceLoadHmacKeys --stage=<required-stage> --profile=<profile> --region=<region> --expectedRoleArn=<role-arn> --apply
|
|
261
|
+
\`\`\`
|
|
262
|
+
|
|
263
|
+
For a protected stage, dispatch
|
|
264
|
+
the dedicated **Secret initialize** workflow from its exact protected branch,
|
|
265
|
+
select the Slice and logical name, and choose \`report\` before \`apply\`. The
|
|
266
|
+
executor generates and writes the key ring inside the AWS adapter and returns
|
|
267
|
+
only bounded status; it accepts no value input and cannot read the plaintext
|
|
268
|
+
back through its public contract.
|
|
269
|
+
|
|
270
|
+
The initializer is initial-create only. It never rotates or silently replaces
|
|
271
|
+
an existing version; later rotation remains a separate reviewed manual
|
|
272
|
+
lifecycle under the declaration's rotation runbook.
|
|
273
|
+
|
|
274
|
+
A successful governed Slice \`remove\` targets only the exact
|
|
275
|
+
\`GeneratedPerformanceLoadHmacKeys\` container for deletion. Development and
|
|
276
|
+
staging use immediate deletion and wait up to ten minutes for the asynchronous
|
|
277
|
+
provider operation to reach not-found so the deterministic name can be
|
|
278
|
+
redeployed. Production uses a fixed seven-day recovery window, where an already
|
|
279
|
+
scheduled container is idempotent only when its deletion date is no later than
|
|
280
|
+
seven days plus the bounded five-minute clock-skew allowance; a later date
|
|
281
|
+
fails closed. A lower-stage container with a future recovery date is restored,
|
|
282
|
+
reattested, and converted to immediate deletion; a current, past, or
|
|
283
|
+
five-minute clock-skew-tolerant deletion date denotes an interrupted force
|
|
284
|
+
deletion and is polled to not-found without restore. The post-remove step
|
|
285
|
+
reattests the committed account, Region, stage deployment role, canonical name,
|
|
286
|
+
and complete generated ownership tags without reading the value. An absent
|
|
287
|
+
container is
|
|
288
|
+
idempotent. A failed or interrupted native SST remove does not run this step.
|
|
289
|
+
Imported, externally owned, genuinely shared, database-bootstrap, and authority-history
|
|
290
|
+
containers are never targets. Container ownership—not whether a value was
|
|
291
|
+
human-supplied—controls cleanup.
|
|
292
|
+
|
|
293
|
+
## Personal human-supplied development value
|
|
294
|
+
|
|
295
|
+
Setting a human-supplied operator-declared personal value is a human-only
|
|
296
|
+
step. Removing one carries no value and may be started by an agent:
|
|
610
297
|
|
|
611
298
|
\`\`\`bash
|
|
612
299
|
ebk secret set ${name} <logical-name>
|
|
@@ -616,14 +303,21 @@ ebk secret remove ${name} <logical-name>
|
|
|
616
303
|
The CLI derives the personal stage, reads the profile and Region saved by
|
|
617
304
|
\`ebk dev configure\`, proves the current AWS account is the development
|
|
618
305
|
Foundation account, and invokes the workspace-pinned SST CLI. Set accepts the
|
|
619
|
-
value only through a hidden TTY prompt
|
|
306
|
+
value only through a hidden TTY prompt and refuses agent and CI environments,
|
|
307
|
+
because a hidden prompt does not hide the value from the process that owns the
|
|
308
|
+
terminal: a human runs it in a terminal no agent spawned. An agent prepares
|
|
309
|
+
that step by naming the exact logical name and command, then resumes without
|
|
310
|
+
reading the value. Remove may be started by an agent; the human types the
|
|
311
|
+
hidden \`REMOVE <logical-name>\` confirmation in that interactive terminal.
|
|
620
312
|
Neither command accepts a stage, profile, Region, value argument, environment
|
|
621
|
-
value, file, fallback, or placeholder.
|
|
622
|
-
|
|
313
|
+
value, file, fallback, or placeholder. Never ask an agent or CI job to run
|
|
314
|
+
\`ebk secret set\`.
|
|
623
315
|
|
|
624
316
|
## Development metadata
|
|
625
317
|
|
|
626
|
-
|
|
318
|
+
This target is only for human-supplied operator declarations. It never creates
|
|
319
|
+
or updates a generated declaration. Report first, using the exact development
|
|
320
|
+
account profile and Region:
|
|
627
321
|
|
|
628
322
|
\`\`\`bash
|
|
629
323
|
pnpm nx run ${name}:secret-metadata --stage=development --profile=<profile> --region=<region>
|
|
@@ -635,272 +329,56 @@ write a secret version, change a rotation label, or delete a secret.
|
|
|
635
329
|
|
|
636
330
|
## Protected metadata
|
|
637
331
|
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
332
|
+
This workflow is only for human-supplied operator declarations. Run the
|
|
333
|
+
**Secret metadata** GitHub workflow from \`develop\` for staging or
|
|
334
|
+
\`main\` for production when the deployment profile requires protected GitHub
|
|
335
|
+
authority. Select this exact Slice and choose \`report\` first. After review,
|
|
336
|
+
dispatch \`apply\` from the same protected branch and environment. The workflow
|
|
337
|
+
assumes the protected deploy role through OIDC, verifies the expected AWS
|
|
338
|
+
account, and invokes the same value-blind Nx executor.
|
|
339
|
+
|
|
340
|
+
Profiles that admit local deployment may apply the reviewed empty-container
|
|
341
|
+
metadata with the same temporary federated profile and stage deployment role:
|
|
342
|
+
|
|
343
|
+
\`\`\`bash
|
|
344
|
+
pnpm nx run ${name}:secret-metadata -- --stage=<staging-or-production> --profile=<profile> --region=<region> --expectedRoleArn=<role-arn> --apply
|
|
345
|
+
\`\`\`
|
|
346
|
+
|
|
347
|
+
The local path binds the committed deployment profile, account, Region, and
|
|
348
|
+
exact assumed role. It does not permit a secret value. Never add an application
|
|
349
|
+
value to GitHub secrets, workflow input, argv, or agent-visible material.
|
|
644
350
|
|
|
645
|
-
The protected deploy role needs metadata
|
|
351
|
+
The protected deploy role needs metadata authority for the Slice prefix:
|
|
646
352
|
\`ListSecrets\`, \`DescribeSecret\`, \`CreateSecret\`, and \`TagResource\`.
|
|
647
353
|
It must be denied \`BatchGetSecretValue\`, \`GetSecretValue\`,
|
|
648
|
-
\`PutSecretValue\`, \`
|
|
649
|
-
application deployment outside its separately reviewed deploy policy.
|
|
354
|
+
\`PutSecretValue\`, \`UpdateSecret\`, \`UpdateSecretVersionStage\`,
|
|
355
|
+
and application deployment outside its separately reviewed deploy policy.
|
|
356
|
+
\`DeleteSecret\` is used only by the governed generated-secret retirement path
|
|
357
|
+
after native Slice removal succeeds; the executor binds that call to the exact
|
|
358
|
+
generated HMAC name and ownership tags described above.
|
|
650
359
|
Account-level role materialization remains an adopter responsibility.
|
|
651
360
|
|
|
652
|
-
##
|
|
653
|
-
|
|
654
|
-
After an empty container exists, a human secret operator enters
|
|
655
|
-
value through the approved hidden-input or provider-owned
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
361
|
+
## Human-supplied value ceremony
|
|
362
|
+
|
|
363
|
+
After an empty human-supplied container exists, a human secret operator enters
|
|
364
|
+
or rotates the value through the approved hidden-input or provider-owned
|
|
365
|
+
ceremony. Only the value entry is human-only: an agent may confirm the empty
|
|
366
|
+
container through the value-blind \`secret-metadata\` report, tell the operator
|
|
367
|
+
the exact container name and stage, and verify afterwards with the same report
|
|
368
|
+
and the deployment; it never enters, reads, or relays the value. Do not
|
|
369
|
+
delegate that human-supplied ceremony to an agent and do not pass a value
|
|
370
|
+
through argv, source, a file, a ticket, a work marker, GitHub, logs, or
|
|
371
|
+
evidence. Routine operator authority is write-only for exact approved
|
|
372
|
+
paths and has no application or Foundation deployment authority. Value reads
|
|
373
|
+
require a separate audited break-glass path. Machine-generated declarations
|
|
374
|
+
instead use \`secret-initialize\`; they never accept a human value.
|
|
661
375
|
|
|
662
376
|
Run the report again and then deploy. Deployment performs only a read-only
|
|
663
377
|
metadata preflight and refuses before SST mutation when a required container,
|
|
664
378
|
\`AWSCURRENT\`, ownership tag, or rotation policy is invalid. Remove, unlock,
|
|
665
379
|
retirement, and recovery do not depend on this preflight.
|
|
666
380
|
`,
|
|
667
|
-
'database/migrations/0000_initial.sql': `CREATE TABLE IF NOT EXISTS "
|
|
668
|
-
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
669
|
-
"name" text NOT NULL,
|
|
670
|
-
"owner_id" text NOT NULL,
|
|
671
|
-
"run_scope" text NOT NULL,
|
|
672
|
-
"created_at" timestamptz NOT NULL DEFAULT now(),
|
|
673
|
-
"last_activity_at" timestamptz NOT NULL DEFAULT now(),
|
|
674
|
-
"test_expires_at" timestamptz
|
|
675
|
-
);
|
|
676
|
-
CREATE INDEX IF NOT EXISTS "records_performance_expiry_idx"
|
|
677
|
-
ON "records" ("owner_id", "name", "test_expires_at");
|
|
678
|
-
CREATE INDEX IF NOT EXISTS "records_performance_run_scope_idx"
|
|
679
|
-
ON "records" ("owner_id", "name", "run_scope");
|
|
680
|
-
|
|
681
|
-
CREATE TABLE IF NOT EXISTS "authorization_audit" (
|
|
682
|
-
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
683
|
-
"action" text NOT NULL,
|
|
684
|
-
"approval_reference" text,
|
|
685
|
-
"authority_mode" text NOT NULL,
|
|
686
|
-
"correlation_id" text NOT NULL,
|
|
687
|
-
"decision" text NOT NULL,
|
|
688
|
-
"policy_version" text NOT NULL,
|
|
689
|
-
"principal_kind" text NOT NULL,
|
|
690
|
-
"pseudonymous_subject_id" text NOT NULL,
|
|
691
|
-
"reason_category" text NOT NULL,
|
|
692
|
-
"delegation_reference" text,
|
|
693
|
-
"resource_reference" text,
|
|
694
|
-
"resource_type" text NOT NULL,
|
|
695
|
-
"slice" text NOT NULL,
|
|
696
|
-
"stage" text NOT NULL,
|
|
697
|
-
"subject_type" text NOT NULL,
|
|
698
|
-
"created_at" timestamptz NOT NULL DEFAULT now()
|
|
699
|
-
);
|
|
700
|
-
|
|
701
|
-
CREATE TABLE IF NOT EXISTS "delegation_grants" (
|
|
702
|
-
"id" uuid PRIMARY KEY,
|
|
703
|
-
"capability_digest" text NOT NULL,
|
|
704
|
-
"created_at" timestamptz NOT NULL DEFAULT now(),
|
|
705
|
-
"expires_at" timestamptz NOT NULL,
|
|
706
|
-
"grant_json" jsonb NOT NULL,
|
|
707
|
-
"issued_at" timestamptz NOT NULL,
|
|
708
|
-
"policy_version" text NOT NULL,
|
|
709
|
-
"revision" integer NOT NULL,
|
|
710
|
-
"status" text NOT NULL
|
|
711
|
-
);
|
|
712
|
-
|
|
713
|
-
CREATE TABLE IF NOT EXISTS "approval_requests" (
|
|
714
|
-
"id" uuid PRIMARY KEY,
|
|
715
|
-
"author_reference" text NOT NULL,
|
|
716
|
-
"created_at" timestamptz NOT NULL DEFAULT now(),
|
|
717
|
-
"expires_at" timestamptz NOT NULL,
|
|
718
|
-
"policy_version" text NOT NULL,
|
|
719
|
-
"request_json" jsonb NOT NULL,
|
|
720
|
-
"request_digest" text NOT NULL,
|
|
721
|
-
"revision" integer NOT NULL,
|
|
722
|
-
"status" text NOT NULL
|
|
723
|
-
);
|
|
724
|
-
|
|
725
|
-
CREATE TABLE IF NOT EXISTS "data_lifecycle_audit" (
|
|
726
|
-
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
727
|
-
"action" text NOT NULL,
|
|
728
|
-
"actor_ref" text NOT NULL,
|
|
729
|
-
"approval_reference" text,
|
|
730
|
-
"audit_json" jsonb NOT NULL,
|
|
731
|
-
"authority_code" text NOT NULL,
|
|
732
|
-
"correlation_ref" text NOT NULL,
|
|
733
|
-
"expires_at" timestamptz NOT NULL,
|
|
734
|
-
"outcome" text NOT NULL,
|
|
735
|
-
"policy_version" text NOT NULL,
|
|
736
|
-
"principal_kind" text NOT NULL,
|
|
737
|
-
"purpose_code" text NOT NULL,
|
|
738
|
-
"resource_reference" text,
|
|
739
|
-
"slice" text NOT NULL,
|
|
740
|
-
"stage" text NOT NULL,
|
|
741
|
-
"subject_type" text NOT NULL,
|
|
742
|
-
"target_category_id" text NOT NULL,
|
|
743
|
-
"occurred_at" timestamptz NOT NULL
|
|
744
|
-
);
|
|
745
|
-
|
|
746
|
-
CREATE INDEX IF NOT EXISTS "data_lifecycle_audit_expires_at_idx"
|
|
747
|
-
ON "data_lifecycle_audit" ("expires_at");
|
|
748
|
-
|
|
749
|
-
CREATE OR REPLACE FUNCTION "ebk_prune_data_lifecycle_audit"(
|
|
750
|
-
"cutoff" timestamptz,
|
|
751
|
-
"batch_limit" integer
|
|
752
|
-
) RETURNS integer
|
|
753
|
-
LANGUAGE plpgsql
|
|
754
|
-
SECURITY DEFINER
|
|
755
|
-
SET search_path = pg_catalog, public
|
|
756
|
-
AS $$
|
|
757
|
-
DECLARE
|
|
758
|
-
deleted_count integer;
|
|
759
|
-
effective_cutoff timestamptz;
|
|
760
|
-
BEGIN
|
|
761
|
-
IF batch_limit < 1 OR batch_limit > 1000 THEN
|
|
762
|
-
RAISE EXCEPTION 'audit prune batch is outside the reviewed bound';
|
|
763
|
-
END IF;
|
|
764
|
-
effective_cutoff := LEAST(cutoff, clock_timestamp());
|
|
765
|
-
WITH expired AS (
|
|
766
|
-
SELECT ctid FROM public.data_lifecycle_audit
|
|
767
|
-
WHERE expires_at <= effective_cutoff
|
|
768
|
-
ORDER BY expires_at, id
|
|
769
|
-
LIMIT batch_limit
|
|
770
|
-
FOR UPDATE SKIP LOCKED
|
|
771
|
-
)
|
|
772
|
-
DELETE FROM public.data_lifecycle_audit
|
|
773
|
-
WHERE ctid IN (SELECT ctid FROM expired);
|
|
774
|
-
GET DIAGNOSTICS deleted_count = ROW_COUNT;
|
|
775
|
-
RETURN deleted_count;
|
|
776
|
-
END;
|
|
777
|
-
$$;
|
|
778
|
-
|
|
779
|
-
CREATE OR REPLACE FUNCTION "ebk_prune_authorization_audit"(
|
|
780
|
-
"cutoff" timestamptz,
|
|
781
|
-
"batch_limit" integer
|
|
782
|
-
) RETURNS integer
|
|
783
|
-
LANGUAGE plpgsql
|
|
784
|
-
SECURITY DEFINER
|
|
785
|
-
SET search_path = pg_catalog, public
|
|
786
|
-
AS $$
|
|
787
|
-
DECLARE
|
|
788
|
-
deleted_count integer;
|
|
789
|
-
effective_cutoff timestamptz;
|
|
790
|
-
BEGIN
|
|
791
|
-
IF batch_limit < 1 OR batch_limit > 1000 THEN
|
|
792
|
-
RAISE EXCEPTION 'audit prune batch is outside the reviewed bound';
|
|
793
|
-
END IF;
|
|
794
|
-
effective_cutoff := LEAST(cutoff, clock_timestamp());
|
|
795
|
-
WITH expired AS (
|
|
796
|
-
SELECT ctid FROM public.authorization_audit
|
|
797
|
-
WHERE created_at <= effective_cutoff - INTERVAL '400 days'
|
|
798
|
-
ORDER BY created_at, id
|
|
799
|
-
LIMIT batch_limit
|
|
800
|
-
FOR UPDATE SKIP LOCKED
|
|
801
|
-
)
|
|
802
|
-
DELETE FROM public.authorization_audit
|
|
803
|
-
WHERE ctid IN (SELECT ctid FROM expired);
|
|
804
|
-
GET DIAGNOSTICS deleted_count = ROW_COUNT;
|
|
805
|
-
RETURN deleted_count;
|
|
806
|
-
END;
|
|
807
|
-
$$;
|
|
808
|
-
|
|
809
|
-
REVOKE ALL ON FUNCTION "ebk_prune_data_lifecycle_audit"(
|
|
810
|
-
timestamptz, integer
|
|
811
|
-
) FROM PUBLIC;
|
|
812
|
-
REVOKE ALL ON FUNCTION "ebk_prune_authorization_audit"(
|
|
813
|
-
timestamptz, integer
|
|
814
|
-
) FROM PUBLIC;
|
|
815
|
-
|
|
816
|
-
CREATE TABLE IF NOT EXISTS "data_lifecycle_export_artifacts" (
|
|
817
|
-
"approval_request_id" uuid PRIMARY KEY
|
|
818
|
-
REFERENCES "approval_requests" ("id") ON DELETE CASCADE,
|
|
819
|
-
"artifact_ref" text,
|
|
820
|
-
"cleanup_deadline_at" timestamptz,
|
|
821
|
-
"cleanup_state" text NOT NULL,
|
|
822
|
-
"current_version_id" text,
|
|
823
|
-
"expires_at" timestamptz,
|
|
824
|
-
"last_error_code" text,
|
|
825
|
-
"object_key" text NOT NULL,
|
|
826
|
-
"record_ref" text NOT NULL,
|
|
827
|
-
"subject_ref" text NOT NULL,
|
|
828
|
-
"upload_started_at" timestamptz,
|
|
829
|
-
"created_at" timestamptz NOT NULL DEFAULT now(),
|
|
830
|
-
"updated_at" timestamptz NOT NULL DEFAULT now()
|
|
831
|
-
);
|
|
832
|
-
|
|
833
|
-
CREATE INDEX IF NOT EXISTS "data_lifecycle_export_artifacts_subject_created_idx"
|
|
834
|
-
ON "data_lifecycle_export_artifacts" ("subject_ref", "created_at");
|
|
835
|
-
CREATE INDEX IF NOT EXISTS "data_lifecycle_export_artifacts_cleanup_expiry_idx"
|
|
836
|
-
ON "data_lifecycle_export_artifacts" ("cleanup_state", "expires_at");
|
|
837
|
-
CREATE INDEX IF NOT EXISTS "data_lifecycle_export_artifacts_cleanup_deadline_idx"
|
|
838
|
-
ON "data_lifecycle_export_artifacts" ("cleanup_state", "cleanup_deadline_at");
|
|
839
|
-
|
|
840
|
-
CREATE TABLE IF NOT EXISTS "data_lifecycle_export_versions" (
|
|
841
|
-
"approval_request_id" uuid NOT NULL
|
|
842
|
-
REFERENCES "approval_requests" ("id") ON DELETE CASCADE,
|
|
843
|
-
"version_id" text NOT NULL,
|
|
844
|
-
"object_key" text NOT NULL,
|
|
845
|
-
"is_delete_marker" boolean NOT NULL,
|
|
846
|
-
"status" text NOT NULL,
|
|
847
|
-
"deleted_at" timestamptz,
|
|
848
|
-
PRIMARY KEY ("approval_request_id", "version_id")
|
|
849
|
-
);
|
|
850
|
-
|
|
851
|
-
CREATE TABLE IF NOT EXISTS "cleanup_deadline_reports" (
|
|
852
|
-
"feature" text NOT NULL,
|
|
853
|
-
"resource_ref" text NOT NULL,
|
|
854
|
-
"deadline_at" timestamptz NOT NULL,
|
|
855
|
-
"observed_at" timestamptz NOT NULL DEFAULT now(),
|
|
856
|
-
PRIMARY KEY ("feature", "resource_ref")
|
|
857
|
-
);
|
|
858
|
-
CREATE INDEX IF NOT EXISTS "cleanup_deadline_reports_feature_observed_idx"
|
|
859
|
-
ON "cleanup_deadline_reports" ("feature", "observed_at");
|
|
860
|
-
|
|
861
|
-
CREATE TABLE IF NOT EXISTS "cleanup_deadline_report_capacity" (
|
|
862
|
-
"feature" text PRIMARY KEY,
|
|
863
|
-
"maximum_pending" integer NOT NULL
|
|
864
|
-
);
|
|
865
|
-
INSERT INTO "cleanup_deadline_report_capacity" ("feature", "maximum_pending")
|
|
866
|
-
VALUES ('confidential-export', 1000)
|
|
867
|
-
ON CONFLICT ("feature") DO NOTHING;
|
|
868
|
-
|
|
869
|
-
CREATE INDEX IF NOT EXISTS "data_lifecycle_export_versions_status_idx"
|
|
870
|
-
ON "data_lifecycle_export_versions" ("status");
|
|
871
|
-
|
|
872
|
-
CREATE TABLE IF NOT EXISTS "data_lifecycle_ledger" (
|
|
873
|
-
"entry_id" text PRIMARY KEY,
|
|
874
|
-
"action" text NOT NULL,
|
|
875
|
-
"category_id" text NOT NULL,
|
|
876
|
-
"effective_at" timestamptz NOT NULL,
|
|
877
|
-
"expires_at" timestamptz NOT NULL,
|
|
878
|
-
"idempotency_key" text NOT NULL UNIQUE,
|
|
879
|
-
"policy_version" text NOT NULL,
|
|
880
|
-
"pseudonymous_key" text NOT NULL,
|
|
881
|
-
"created_at" timestamptz NOT NULL DEFAULT now()
|
|
882
|
-
);
|
|
883
|
-
|
|
884
|
-
CREATE TABLE IF NOT EXISTS "data_lifecycle_requests" (
|
|
885
|
-
"id" uuid PRIMARY KEY,
|
|
886
|
-
"approval_request_id" uuid NOT NULL UNIQUE,
|
|
887
|
-
"request_json" jsonb NOT NULL,
|
|
888
|
-
"revision" integer NOT NULL,
|
|
889
|
-
"status" text NOT NULL,
|
|
890
|
-
"updated_at" timestamptz NOT NULL DEFAULT now()
|
|
891
|
-
);
|
|
892
|
-
|
|
893
|
-
CREATE TABLE IF NOT EXISTS "data_lifecycle_holds" (
|
|
894
|
-
"hold_id" text PRIMARY KEY,
|
|
895
|
-
"scope_ref" text NOT NULL,
|
|
896
|
-
"category_id" text NOT NULL,
|
|
897
|
-
"hold_json" jsonb NOT NULL,
|
|
898
|
-
"status" text NOT NULL,
|
|
899
|
-
"expires_at" timestamptz NOT NULL,
|
|
900
|
-
"review_at" timestamptz NOT NULL
|
|
901
|
-
);
|
|
902
|
-
|
|
903
|
-
CREATE TABLE IF NOT EXISTS "data_lifecycle_outbox" (
|
|
381
|
+
'database/migrations/0000_initial.sql': `CREATE TABLE IF NOT EXISTS "data_lifecycle_outbox" (
|
|
904
382
|
"idempotency_key" text PRIMARY KEY,
|
|
905
383
|
"event_json" jsonb NOT NULL,
|
|
906
384
|
"published_at" timestamptz,
|
|
@@ -909,113 +387,6 @@ CREATE TABLE IF NOT EXISTS "data_lifecycle_outbox" (
|
|
|
909
387
|
"expires_at" timestamptz NOT NULL,
|
|
910
388
|
"created_at" timestamptz NOT NULL DEFAULT now()
|
|
911
389
|
);
|
|
912
|
-
|
|
913
|
-
CREATE TABLE IF NOT EXISTS "performance_load_runs" (
|
|
914
|
-
"plan_digest" text PRIMARY KEY,
|
|
915
|
-
"run_id" text NOT NULL,
|
|
916
|
-
"adapter_id" text NOT NULL,
|
|
917
|
-
"cleanup_started_at" timestamptz,
|
|
918
|
-
"scenario_id" text NOT NULL,
|
|
919
|
-
"stage" text NOT NULL,
|
|
920
|
-
"source_commit" text NOT NULL,
|
|
921
|
-
"release_material_digest" text NOT NULL,
|
|
922
|
-
"maximum_requests" integer NOT NULL,
|
|
923
|
-
"created_at" timestamptz NOT NULL,
|
|
924
|
-
"expires_at" timestamptz NOT NULL
|
|
925
|
-
);
|
|
926
|
-
CREATE INDEX IF NOT EXISTS "performance_load_runs_expires_at_idx"
|
|
927
|
-
ON "performance_load_runs" ("expires_at");
|
|
928
|
-
|
|
929
|
-
CREATE TABLE IF NOT EXISTS "performance_load_requests" (
|
|
930
|
-
"plan_digest" text NOT NULL,
|
|
931
|
-
"request_ordinal" integer NOT NULL,
|
|
932
|
-
"effect_id" text,
|
|
933
|
-
"claimed_at" timestamptz NOT NULL DEFAULT now(),
|
|
934
|
-
PRIMARY KEY ("plan_digest", "request_ordinal")
|
|
935
|
-
);
|
|
936
|
-
|
|
937
|
-
CREATE TABLE IF NOT EXISTS "performance_load_async_effects" (
|
|
938
|
-
"effect_id" text PRIMARY KEY,
|
|
939
|
-
"plan_digest" text NOT NULL,
|
|
940
|
-
"run_id" text NOT NULL,
|
|
941
|
-
"processed_at" timestamptz,
|
|
942
|
-
"expires_at" timestamptz NOT NULL,
|
|
943
|
-
"created_at" timestamptz NOT NULL DEFAULT now()
|
|
944
|
-
);
|
|
945
|
-
CREATE INDEX IF NOT EXISTS "performance_load_async_effects_expires_at_idx"
|
|
946
|
-
ON "performance_load_async_effects" USING btree ("expires_at");
|
|
947
|
-
CREATE INDEX "performance_load_async_effects_pending_idx"
|
|
948
|
-
ON "performance_load_async_effects" USING btree
|
|
949
|
-
("processed_at", "expires_at");
|
|
950
|
-
CREATE INDEX IF NOT EXISTS "performance_load_async_effects_run_idx"
|
|
951
|
-
ON "performance_load_async_effects" USING btree
|
|
952
|
-
("plan_digest", "run_id");
|
|
953
|
-
|
|
954
|
-
CREATE TABLE IF NOT EXISTS "ebk_inbox" (
|
|
955
|
-
"handler_id" text NOT NULL,
|
|
956
|
-
"handler_version" text NOT NULL,
|
|
957
|
-
"message_id" text NOT NULL,
|
|
958
|
-
"payload_digest" text NOT NULL,
|
|
959
|
-
"status" text NOT NULL,
|
|
960
|
-
"attempts" integer NOT NULL DEFAULT 0,
|
|
961
|
-
"result_reference" text,
|
|
962
|
-
"first_seen_at" timestamptz NOT NULL DEFAULT now(),
|
|
963
|
-
"last_attempt_at" timestamptz NOT NULL,
|
|
964
|
-
"completed_at" timestamptz,
|
|
965
|
-
"expires_at" timestamptz NOT NULL,
|
|
966
|
-
PRIMARY KEY ("handler_id", "message_id")
|
|
967
|
-
);
|
|
968
|
-
CREATE INDEX "ebk_inbox_expires_at_idx"
|
|
969
|
-
ON "ebk_inbox" USING btree ("expires_at");
|
|
970
|
-
|
|
971
|
-
CREATE TABLE IF NOT EXISTS "data_lifecycle_retention_runs" (
|
|
972
|
-
"id" uuid PRIMARY KEY,
|
|
973
|
-
"approval_request_id" uuid UNIQUE,
|
|
974
|
-
"as_of" timestamptz NOT NULL,
|
|
975
|
-
"checkpoint_json" jsonb NOT NULL,
|
|
976
|
-
"completed_at" timestamptz,
|
|
977
|
-
"counts_json" jsonb NOT NULL,
|
|
978
|
-
"expires_at" timestamptz NOT NULL,
|
|
979
|
-
"plan_json" jsonb NOT NULL,
|
|
980
|
-
"policy_version" text NOT NULL,
|
|
981
|
-
"revision" integer NOT NULL,
|
|
982
|
-
"status" text NOT NULL,
|
|
983
|
-
"updated_at" timestamptz NOT NULL DEFAULT now()
|
|
984
|
-
);
|
|
985
|
-
|
|
986
|
-
CREATE TABLE IF NOT EXISTS "data_lifecycle_retention_candidates" (
|
|
987
|
-
"run_id" uuid NOT NULL,
|
|
988
|
-
"candidate_order" text NOT NULL,
|
|
989
|
-
"record_id" uuid NOT NULL,
|
|
990
|
-
"record_ref" text NOT NULL,
|
|
991
|
-
"due_at" timestamptz NOT NULL,
|
|
992
|
-
PRIMARY KEY ("run_id", "candidate_order")
|
|
993
|
-
);
|
|
994
|
-
|
|
995
|
-
CREATE TABLE IF NOT EXISTS "data_lifecycle_receipts" (
|
|
996
|
-
"source_slice" text NOT NULL,
|
|
997
|
-
"pseudonymous_key" text NOT NULL,
|
|
998
|
-
"action" text NOT NULL,
|
|
999
|
-
"request_ref" text NOT NULL,
|
|
1000
|
-
"policy_version" text NOT NULL,
|
|
1001
|
-
"occurred_at" timestamptz NOT NULL,
|
|
1002
|
-
"received_at" timestamptz NOT NULL DEFAULT now(),
|
|
1003
|
-
PRIMARY KEY ("source_slice", "pseudonymous_key", "action", "request_ref")
|
|
1004
|
-
);
|
|
1005
|
-
|
|
1006
|
-
CREATE TABLE IF NOT EXISTS "data_lifecycle_downstream_copies" (
|
|
1007
|
-
"source_slice" text NOT NULL,
|
|
1008
|
-
"pseudonymous_key" text NOT NULL,
|
|
1009
|
-
"copy_id" text NOT NULL,
|
|
1010
|
-
"recipient" text NOT NULL,
|
|
1011
|
-
"purpose" text NOT NULL,
|
|
1012
|
-
"expires_at" timestamptz NOT NULL,
|
|
1013
|
-
"action" text NOT NULL,
|
|
1014
|
-
"hold_refs" jsonb NOT NULL,
|
|
1015
|
-
"status" text NOT NULL,
|
|
1016
|
-
"updated_at" timestamptz NOT NULL DEFAULT now(),
|
|
1017
|
-
PRIMARY KEY ("source_slice", "pseudonymous_key", "copy_id")
|
|
1018
|
-
);
|
|
1019
390
|
`,
|
|
1020
391
|
'database/migrations/meta/_journal.json': (0, built_in_plan_shared_js_1.json)({
|
|
1021
392
|
dialect: 'postgresql',
|
|
@@ -1036,222 +407,8 @@ CREATE TABLE IF NOT EXISTS "data_lifecycle_downstream_copies" (
|
|
|
1036
407
|
version: '7',
|
|
1037
408
|
dialect: 'postgresql',
|
|
1038
409
|
tables: {
|
|
1039
|
-
'public.approval_requests': snapshotTable('approval_requests', {
|
|
1040
|
-
author_reference: snapshotColumn('author_reference', 'text'),
|
|
1041
|
-
created_at: snapshotColumn('created_at', 'timestamp with time zone', {
|
|
1042
|
-
default: 'now()',
|
|
1043
|
-
}),
|
|
1044
|
-
expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
|
|
1045
|
-
id: snapshotColumn('id', 'uuid', { primaryKey: true }),
|
|
1046
|
-
policy_version: snapshotColumn('policy_version', 'text'),
|
|
1047
|
-
request_digest: snapshotColumn('request_digest', 'text'),
|
|
1048
|
-
request_json: snapshotColumn('request_json', 'jsonb'),
|
|
1049
|
-
revision: snapshotColumn('revision', 'integer'),
|
|
1050
|
-
status: snapshotColumn('status', 'text'),
|
|
1051
|
-
}),
|
|
1052
|
-
'public.authorization_audit': snapshotTable('authorization_audit', {
|
|
1053
|
-
action: snapshotColumn('action', 'text'),
|
|
1054
|
-
approval_reference: snapshotColumn('approval_reference', 'text', {
|
|
1055
|
-
notNull: false,
|
|
1056
|
-
}),
|
|
1057
|
-
authority_mode: snapshotColumn('authority_mode', 'text'),
|
|
1058
|
-
correlation_id: snapshotColumn('correlation_id', 'text'),
|
|
1059
|
-
created_at: snapshotColumn('created_at', 'timestamp with time zone', {
|
|
1060
|
-
default: 'now()',
|
|
1061
|
-
}),
|
|
1062
|
-
decision: snapshotColumn('decision', 'text'),
|
|
1063
|
-
id: snapshotColumn('id', 'uuid', {
|
|
1064
|
-
default: 'gen_random_uuid()',
|
|
1065
|
-
primaryKey: true,
|
|
1066
|
-
}),
|
|
1067
|
-
policy_version: snapshotColumn('policy_version', 'text'),
|
|
1068
|
-
principal_kind: snapshotColumn('principal_kind', 'text'),
|
|
1069
|
-
pseudonymous_subject_id: snapshotColumn('pseudonymous_subject_id', 'text'),
|
|
1070
|
-
reason_category: snapshotColumn('reason_category', 'text'),
|
|
1071
|
-
delegation_reference: snapshotColumn('delegation_reference', 'text', {
|
|
1072
|
-
notNull: false,
|
|
1073
|
-
}),
|
|
1074
|
-
resource_reference: snapshotColumn('resource_reference', 'text', {
|
|
1075
|
-
notNull: false,
|
|
1076
|
-
}),
|
|
1077
|
-
resource_type: snapshotColumn('resource_type', 'text'),
|
|
1078
|
-
slice: snapshotColumn('slice', 'text'),
|
|
1079
|
-
stage: snapshotColumn('stage', 'text'),
|
|
1080
|
-
subject_type: snapshotColumn('subject_type', 'text'),
|
|
1081
|
-
}),
|
|
1082
|
-
'public.data_lifecycle_audit': snapshotTable('data_lifecycle_audit', {
|
|
1083
|
-
action: snapshotColumn('action', 'text'),
|
|
1084
|
-
actor_ref: snapshotColumn('actor_ref', 'text'),
|
|
1085
|
-
approval_reference: snapshotColumn('approval_reference', 'text', {
|
|
1086
|
-
notNull: false,
|
|
1087
|
-
}),
|
|
1088
|
-
audit_json: snapshotColumn('audit_json', 'jsonb'),
|
|
1089
|
-
authority_code: snapshotColumn('authority_code', 'text'),
|
|
1090
|
-
correlation_ref: snapshotColumn('correlation_ref', 'text'),
|
|
1091
|
-
expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
|
|
1092
|
-
id: snapshotColumn('id', 'uuid', {
|
|
1093
|
-
default: 'gen_random_uuid()',
|
|
1094
|
-
primaryKey: true,
|
|
1095
|
-
}),
|
|
1096
|
-
occurred_at: snapshotColumn('occurred_at', 'timestamp with time zone'),
|
|
1097
|
-
outcome: snapshotColumn('outcome', 'text'),
|
|
1098
|
-
policy_version: snapshotColumn('policy_version', 'text'),
|
|
1099
|
-
principal_kind: snapshotColumn('principal_kind', 'text'),
|
|
1100
|
-
purpose_code: snapshotColumn('purpose_code', 'text'),
|
|
1101
|
-
resource_reference: snapshotColumn('resource_reference', 'text', {
|
|
1102
|
-
notNull: false,
|
|
1103
|
-
}),
|
|
1104
|
-
slice: snapshotColumn('slice', 'text'),
|
|
1105
|
-
stage: snapshotColumn('stage', 'text'),
|
|
1106
|
-
subject_type: snapshotColumn('subject_type', 'text'),
|
|
1107
|
-
target_category_id: snapshotColumn('target_category_id', 'text'),
|
|
1108
|
-
}, {}, {}, {
|
|
1109
|
-
data_lifecycle_audit_expires_at_idx: snapshotIndex('data_lifecycle_audit_expires_at_idx', [{ expression: 'expires_at', opclass: 'timestamptz_ops' }]),
|
|
1110
|
-
}),
|
|
1111
|
-
'public.data_lifecycle_export_artifacts': snapshotTable('data_lifecycle_export_artifacts', {
|
|
1112
|
-
approval_request_id: snapshotColumn('approval_request_id', 'uuid', {
|
|
1113
|
-
primaryKey: true,
|
|
1114
|
-
}),
|
|
1115
|
-
artifact_ref: snapshotColumn('artifact_ref', 'text', {
|
|
1116
|
-
notNull: false,
|
|
1117
|
-
}),
|
|
1118
|
-
cleanup_deadline_at: snapshotColumn('cleanup_deadline_at', 'timestamp with time zone', { notNull: false }),
|
|
1119
|
-
cleanup_state: snapshotColumn('cleanup_state', 'text'),
|
|
1120
|
-
created_at: snapshotColumn('created_at', 'timestamp with time zone', { default: 'now()' }),
|
|
1121
|
-
current_version_id: snapshotColumn('current_version_id', 'text', {
|
|
1122
|
-
notNull: false,
|
|
1123
|
-
}),
|
|
1124
|
-
expires_at: snapshotColumn('expires_at', 'timestamp with time zone', { notNull: false }),
|
|
1125
|
-
last_error_code: snapshotColumn('last_error_code', 'text', {
|
|
1126
|
-
notNull: false,
|
|
1127
|
-
}),
|
|
1128
|
-
object_key: snapshotColumn('object_key', 'text'),
|
|
1129
|
-
record_ref: snapshotColumn('record_ref', 'text'),
|
|
1130
|
-
subject_ref: snapshotColumn('subject_ref', 'text'),
|
|
1131
|
-
updated_at: snapshotColumn('updated_at', 'timestamp with time zone', { default: 'now()' }),
|
|
1132
|
-
upload_started_at: snapshotColumn('upload_started_at', 'timestamp with time zone', { notNull: false }),
|
|
1133
|
-
}, {}, {}, {
|
|
1134
|
-
data_lifecycle_export_artifacts_cleanup_deadline_idx: snapshotIndex('data_lifecycle_export_artifacts_cleanup_deadline_idx', [
|
|
1135
|
-
{ expression: 'cleanup_state', opclass: 'text_ops' },
|
|
1136
|
-
{
|
|
1137
|
-
expression: 'cleanup_deadline_at',
|
|
1138
|
-
opclass: 'timestamptz_ops',
|
|
1139
|
-
},
|
|
1140
|
-
]),
|
|
1141
|
-
data_lifecycle_export_artifacts_cleanup_expiry_idx: snapshotIndex('data_lifecycle_export_artifacts_cleanup_expiry_idx', [
|
|
1142
|
-
{ expression: 'cleanup_state', opclass: 'text_ops' },
|
|
1143
|
-
{ expression: 'expires_at', opclass: 'timestamptz_ops' },
|
|
1144
|
-
]),
|
|
1145
|
-
data_lifecycle_export_artifacts_subject_created_idx: snapshotIndex('data_lifecycle_export_artifacts_subject_created_idx', [
|
|
1146
|
-
{ expression: 'subject_ref', opclass: 'text_ops' },
|
|
1147
|
-
{ expression: 'created_at', opclass: 'timestamptz_ops' },
|
|
1148
|
-
]),
|
|
1149
|
-
}, {
|
|
1150
|
-
data_lifecycle_export_artifacts_approval_request_id_approval_requests_id_fk: {
|
|
1151
|
-
columnsFrom: ['approval_request_id'],
|
|
1152
|
-
columnsTo: ['id'],
|
|
1153
|
-
name: 'data_lifecycle_export_artifacts_approval_request_id_approval_requests_id_fk',
|
|
1154
|
-
onDelete: 'cascade',
|
|
1155
|
-
onUpdate: 'no action',
|
|
1156
|
-
tableFrom: 'data_lifecycle_export_artifacts',
|
|
1157
|
-
tableTo: 'approval_requests',
|
|
1158
|
-
},
|
|
1159
|
-
}),
|
|
1160
|
-
'public.cleanup_deadline_report_capacity': snapshotTable('cleanup_deadline_report_capacity', {
|
|
1161
|
-
feature: snapshotColumn('feature', 'text', { primaryKey: true }),
|
|
1162
|
-
maximum_pending: snapshotColumn('maximum_pending', 'integer'),
|
|
1163
|
-
}),
|
|
1164
|
-
'public.cleanup_deadline_reports': snapshotTable('cleanup_deadline_reports', {
|
|
1165
|
-
deadline_at: snapshotColumn('deadline_at', 'timestamp with time zone'),
|
|
1166
|
-
feature: snapshotColumn('feature', 'text'),
|
|
1167
|
-
observed_at: snapshotColumn('observed_at', 'timestamp with time zone', { default: 'now()' }),
|
|
1168
|
-
resource_ref: snapshotColumn('resource_ref', 'text'),
|
|
1169
|
-
}, {}, {
|
|
1170
|
-
cleanup_deadline_reports_feature_resource_ref_pk: {
|
|
1171
|
-
columns: ['feature', 'resource_ref'],
|
|
1172
|
-
name: 'cleanup_deadline_reports_feature_resource_ref_pk',
|
|
1173
|
-
},
|
|
1174
|
-
}, {
|
|
1175
|
-
cleanup_deadline_reports_feature_observed_idx: snapshotIndex('cleanup_deadline_reports_feature_observed_idx', [
|
|
1176
|
-
{ expression: 'feature', opclass: 'text_ops' },
|
|
1177
|
-
{
|
|
1178
|
-
expression: 'observed_at',
|
|
1179
|
-
opclass: 'timestamptz_ops',
|
|
1180
|
-
},
|
|
1181
|
-
]),
|
|
1182
|
-
}),
|
|
1183
|
-
'public.data_lifecycle_export_versions': snapshotTable('data_lifecycle_export_versions', {
|
|
1184
|
-
approval_request_id: snapshotColumn('approval_request_id', 'uuid'),
|
|
1185
|
-
deleted_at: snapshotColumn('deleted_at', 'timestamp with time zone', { notNull: false }),
|
|
1186
|
-
is_delete_marker: snapshotColumn('is_delete_marker', 'boolean'),
|
|
1187
|
-
object_key: snapshotColumn('object_key', 'text'),
|
|
1188
|
-
status: snapshotColumn('status', 'text'),
|
|
1189
|
-
version_id: snapshotColumn('version_id', 'text'),
|
|
1190
|
-
}, {}, {
|
|
1191
|
-
data_lifecycle_export_versions_approval_request_id_version_id_pk: {
|
|
1192
|
-
columns: ['approval_request_id', 'version_id'],
|
|
1193
|
-
name: 'data_lifecycle_export_versions_approval_request_id_version_id_pk',
|
|
1194
|
-
},
|
|
1195
|
-
}, {
|
|
1196
|
-
data_lifecycle_export_versions_status_idx: snapshotIndex('data_lifecycle_export_versions_status_idx', [{ expression: 'status', opclass: 'text_ops' }]),
|
|
1197
|
-
}, {
|
|
1198
|
-
data_lifecycle_export_versions_approval_request_id_approval_requests_id_fk: {
|
|
1199
|
-
columnsFrom: ['approval_request_id'],
|
|
1200
|
-
columnsTo: ['id'],
|
|
1201
|
-
name: 'data_lifecycle_export_versions_approval_request_id_approval_requests_id_fk',
|
|
1202
|
-
onDelete: 'cascade',
|
|
1203
|
-
onUpdate: 'no action',
|
|
1204
|
-
tableFrom: 'data_lifecycle_export_versions',
|
|
1205
|
-
tableTo: 'approval_requests',
|
|
1206
|
-
},
|
|
1207
|
-
}),
|
|
1208
|
-
'public.data_lifecycle_ledger': snapshotTable('data_lifecycle_ledger', {
|
|
1209
|
-
action: snapshotColumn('action', 'text'),
|
|
1210
|
-
category_id: snapshotColumn('category_id', 'text'),
|
|
1211
|
-
created_at: snapshotColumn('created_at', 'timestamp with time zone', { default: 'now()' }),
|
|
1212
|
-
effective_at: snapshotColumn('effective_at', 'timestamp with time zone'),
|
|
1213
|
-
entry_id: snapshotColumn('entry_id', 'text', {
|
|
1214
|
-
primaryKey: true,
|
|
1215
|
-
}),
|
|
1216
|
-
expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
|
|
1217
|
-
idempotency_key: snapshotColumn('idempotency_key', 'text'),
|
|
1218
|
-
policy_version: snapshotColumn('policy_version', 'text'),
|
|
1219
|
-
pseudonymous_key: snapshotColumn('pseudonymous_key', 'text'),
|
|
1220
|
-
}, {
|
|
1221
|
-
data_lifecycle_ledger_idempotency_key_unique: {
|
|
1222
|
-
columns: ['idempotency_key'],
|
|
1223
|
-
name: 'data_lifecycle_ledger_idempotency_key_unique',
|
|
1224
|
-
nullsNotDistinct: false,
|
|
1225
|
-
},
|
|
1226
|
-
}),
|
|
1227
|
-
'public.data_lifecycle_downstream_copies': snapshotTable('data_lifecycle_downstream_copies', {
|
|
1228
|
-
action: snapshotColumn('action', 'text'),
|
|
1229
|
-
copy_id: snapshotColumn('copy_id', 'text'),
|
|
1230
|
-
expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
|
|
1231
|
-
hold_refs: snapshotColumn('hold_refs', 'jsonb'),
|
|
1232
|
-
pseudonymous_key: snapshotColumn('pseudonymous_key', 'text'),
|
|
1233
|
-
purpose: snapshotColumn('purpose', 'text'),
|
|
1234
|
-
recipient: snapshotColumn('recipient', 'text'),
|
|
1235
|
-
source_slice: snapshotColumn('source_slice', 'text'),
|
|
1236
|
-
status: snapshotColumn('status', 'text'),
|
|
1237
|
-
updated_at: snapshotColumn('updated_at', 'timestamp with time zone', { default: 'now()' }),
|
|
1238
|
-
}, {}, {
|
|
1239
|
-
data_lifecycle_downstream_copies_source_slice_pseudonymous_key_copy_id_pk: {
|
|
1240
|
-
columns: ['source_slice', 'pseudonymous_key', 'copy_id'],
|
|
1241
|
-
name: 'data_lifecycle_downstream_copies_source_slice_pseudonymous_key_copy_id_pk',
|
|
1242
|
-
},
|
|
1243
|
-
}),
|
|
1244
|
-
'public.data_lifecycle_holds': snapshotTable('data_lifecycle_holds', {
|
|
1245
|
-
category_id: snapshotColumn('category_id', 'text'),
|
|
1246
|
-
expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
|
|
1247
|
-
hold_id: snapshotColumn('hold_id', 'text', { primaryKey: true }),
|
|
1248
|
-
hold_json: snapshotColumn('hold_json', 'jsonb'),
|
|
1249
|
-
review_at: snapshotColumn('review_at', 'timestamp with time zone'),
|
|
1250
|
-
scope_ref: snapshotColumn('scope_ref', 'text'),
|
|
1251
|
-
status: snapshotColumn('status', 'text'),
|
|
1252
|
-
}),
|
|
1253
410
|
'public.data_lifecycle_outbox': snapshotTable('data_lifecycle_outbox', {
|
|
1254
|
-
attempts: snapshotColumn('attempts', 'integer', { default:
|
|
411
|
+
attempts: snapshotColumn('attempts', 'integer', { default: 0 }),
|
|
1255
412
|
created_at: snapshotColumn('created_at', 'timestamp with time zone', {
|
|
1256
413
|
default: 'now()',
|
|
1257
414
|
}),
|
|
@@ -1265,213 +422,6 @@ CREATE TABLE IF NOT EXISTS "data_lifecycle_downstream_copies" (
|
|
|
1265
422
|
}),
|
|
1266
423
|
published_at: snapshotColumn('published_at', 'timestamp with time zone', { notNull: false }),
|
|
1267
424
|
}),
|
|
1268
|
-
'public.performance_load_runs': snapshotTable('performance_load_runs', {
|
|
1269
|
-
adapter_id: snapshotColumn('adapter_id', 'text'),
|
|
1270
|
-
cleanup_started_at: snapshotColumn('cleanup_started_at', 'timestamp with time zone', { notNull: false }),
|
|
1271
|
-
created_at: snapshotColumn('created_at', 'timestamp with time zone'),
|
|
1272
|
-
expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
|
|
1273
|
-
maximum_requests: snapshotColumn('maximum_requests', 'integer'),
|
|
1274
|
-
plan_digest: snapshotColumn('plan_digest', 'text', {
|
|
1275
|
-
primaryKey: true,
|
|
1276
|
-
}),
|
|
1277
|
-
release_material_digest: snapshotColumn('release_material_digest', 'text'),
|
|
1278
|
-
run_id: snapshotColumn('run_id', 'text'),
|
|
1279
|
-
scenario_id: snapshotColumn('scenario_id', 'text'),
|
|
1280
|
-
source_commit: snapshotColumn('source_commit', 'text'),
|
|
1281
|
-
stage: snapshotColumn('stage', 'text'),
|
|
1282
|
-
}, {}, {}, {
|
|
1283
|
-
performance_load_runs_expires_at_idx: snapshotIndex('performance_load_runs_expires_at_idx', [
|
|
1284
|
-
{
|
|
1285
|
-
expression: 'expires_at',
|
|
1286
|
-
opclass: 'timestamptz_ops',
|
|
1287
|
-
},
|
|
1288
|
-
]),
|
|
1289
|
-
}),
|
|
1290
|
-
'public.performance_load_requests': snapshotTable('performance_load_requests', {
|
|
1291
|
-
claimed_at: snapshotColumn('claimed_at', 'timestamp with time zone', { default: 'now()' }),
|
|
1292
|
-
effect_id: snapshotColumn('effect_id', 'text', {
|
|
1293
|
-
notNull: false,
|
|
1294
|
-
}),
|
|
1295
|
-
plan_digest: snapshotColumn('plan_digest', 'text'),
|
|
1296
|
-
request_ordinal: snapshotColumn('request_ordinal', 'integer'),
|
|
1297
|
-
}, {}, {
|
|
1298
|
-
performance_load_requests_plan_digest_request_ordinal_pk: {
|
|
1299
|
-
columns: ['plan_digest', 'request_ordinal'],
|
|
1300
|
-
name: 'performance_load_requests_plan_digest_request_ordinal_pk',
|
|
1301
|
-
},
|
|
1302
|
-
}),
|
|
1303
|
-
'public.performance_load_async_effects': snapshotTable('performance_load_async_effects', {
|
|
1304
|
-
created_at: snapshotColumn('created_at', 'timestamp with time zone', { default: 'now()' }),
|
|
1305
|
-
effect_id: snapshotColumn('effect_id', 'text', {
|
|
1306
|
-
primaryKey: true,
|
|
1307
|
-
}),
|
|
1308
|
-
expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
|
|
1309
|
-
plan_digest: snapshotColumn('plan_digest', 'text'),
|
|
1310
|
-
processed_at: snapshotColumn('processed_at', 'timestamp with time zone', { notNull: false }),
|
|
1311
|
-
run_id: snapshotColumn('run_id', 'text'),
|
|
1312
|
-
}, {}, {}, {
|
|
1313
|
-
performance_load_async_effects_expires_at_idx: snapshotIndex('performance_load_async_effects_expires_at_idx', [
|
|
1314
|
-
{
|
|
1315
|
-
expression: 'expires_at',
|
|
1316
|
-
opclass: 'timestamptz_ops',
|
|
1317
|
-
},
|
|
1318
|
-
]),
|
|
1319
|
-
performance_load_async_effects_pending_idx: snapshotIndex('performance_load_async_effects_pending_idx', [
|
|
1320
|
-
{
|
|
1321
|
-
expression: 'processed_at',
|
|
1322
|
-
opclass: 'timestamptz_ops',
|
|
1323
|
-
},
|
|
1324
|
-
{
|
|
1325
|
-
expression: 'expires_at',
|
|
1326
|
-
opclass: 'timestamptz_ops',
|
|
1327
|
-
},
|
|
1328
|
-
]),
|
|
1329
|
-
performance_load_async_effects_run_idx: snapshotIndex('performance_load_async_effects_run_idx', [
|
|
1330
|
-
{
|
|
1331
|
-
expression: 'plan_digest',
|
|
1332
|
-
opclass: 'text_ops',
|
|
1333
|
-
},
|
|
1334
|
-
{
|
|
1335
|
-
expression: 'run_id',
|
|
1336
|
-
opclass: 'text_ops',
|
|
1337
|
-
},
|
|
1338
|
-
]),
|
|
1339
|
-
}),
|
|
1340
|
-
'public.ebk_inbox': snapshotTable('ebk_inbox', {
|
|
1341
|
-
attempts: snapshotColumn('attempts', 'integer', { default: '0' }),
|
|
1342
|
-
completed_at: snapshotColumn('completed_at', 'timestamp with time zone', { notNull: false }),
|
|
1343
|
-
expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
|
|
1344
|
-
first_seen_at: snapshotColumn('first_seen_at', 'timestamp with time zone', { default: 'now()' }),
|
|
1345
|
-
handler_id: snapshotColumn('handler_id', 'text'),
|
|
1346
|
-
handler_version: snapshotColumn('handler_version', 'text'),
|
|
1347
|
-
last_attempt_at: snapshotColumn('last_attempt_at', 'timestamp with time zone'),
|
|
1348
|
-
message_id: snapshotColumn('message_id', 'text'),
|
|
1349
|
-
payload_digest: snapshotColumn('payload_digest', 'text'),
|
|
1350
|
-
result_reference: snapshotColumn('result_reference', 'text', {
|
|
1351
|
-
notNull: false,
|
|
1352
|
-
}),
|
|
1353
|
-
status: snapshotColumn('status', 'text'),
|
|
1354
|
-
}, {}, {
|
|
1355
|
-
ebk_inbox_handler_id_message_id_pk: {
|
|
1356
|
-
columns: ['handler_id', 'message_id'],
|
|
1357
|
-
name: 'ebk_inbox_handler_id_message_id_pk',
|
|
1358
|
-
},
|
|
1359
|
-
}, {
|
|
1360
|
-
ebk_inbox_expires_at_idx: snapshotIndex('ebk_inbox_expires_at_idx', [
|
|
1361
|
-
{
|
|
1362
|
-
expression: 'expires_at',
|
|
1363
|
-
opclass: 'timestamptz_ops',
|
|
1364
|
-
},
|
|
1365
|
-
]),
|
|
1366
|
-
}),
|
|
1367
|
-
'public.data_lifecycle_requests': snapshotTable('data_lifecycle_requests', {
|
|
1368
|
-
approval_request_id: snapshotColumn('approval_request_id', 'uuid'),
|
|
1369
|
-
id: snapshotColumn('id', 'uuid', { primaryKey: true }),
|
|
1370
|
-
request_json: snapshotColumn('request_json', 'jsonb'),
|
|
1371
|
-
revision: snapshotColumn('revision', 'integer'),
|
|
1372
|
-
status: snapshotColumn('status', 'text'),
|
|
1373
|
-
updated_at: snapshotColumn('updated_at', 'timestamp with time zone', { default: 'now()' }),
|
|
1374
|
-
}, {
|
|
1375
|
-
data_lifecycle_requests_approval_request_id_unique: {
|
|
1376
|
-
columns: ['approval_request_id'],
|
|
1377
|
-
name: 'data_lifecycle_requests_approval_request_id_unique',
|
|
1378
|
-
nullsNotDistinct: false,
|
|
1379
|
-
},
|
|
1380
|
-
}),
|
|
1381
|
-
'public.data_lifecycle_receipts': snapshotTable('data_lifecycle_receipts', {
|
|
1382
|
-
action: snapshotColumn('action', 'text'),
|
|
1383
|
-
occurred_at: snapshotColumn('occurred_at', 'timestamp with time zone'),
|
|
1384
|
-
policy_version: snapshotColumn('policy_version', 'text'),
|
|
1385
|
-
pseudonymous_key: snapshotColumn('pseudonymous_key', 'text'),
|
|
1386
|
-
received_at: snapshotColumn('received_at', 'timestamp with time zone', { default: 'now()' }),
|
|
1387
|
-
request_ref: snapshotColumn('request_ref', 'text'),
|
|
1388
|
-
source_slice: snapshotColumn('source_slice', 'text'),
|
|
1389
|
-
}, {}, {
|
|
1390
|
-
data_lifecycle_receipts_source_slice_pseudonymous_key_action_request_ref_pk: {
|
|
1391
|
-
columns: [
|
|
1392
|
-
'source_slice',
|
|
1393
|
-
'pseudonymous_key',
|
|
1394
|
-
'action',
|
|
1395
|
-
'request_ref',
|
|
1396
|
-
],
|
|
1397
|
-
name: 'data_lifecycle_receipts_source_slice_pseudonymous_key_action_request_ref_pk',
|
|
1398
|
-
},
|
|
1399
|
-
}),
|
|
1400
|
-
'public.data_lifecycle_retention_runs': snapshotTable('data_lifecycle_retention_runs', {
|
|
1401
|
-
approval_request_id: snapshotColumn('approval_request_id', 'uuid', {
|
|
1402
|
-
notNull: false,
|
|
1403
|
-
}),
|
|
1404
|
-
as_of: snapshotColumn('as_of', 'timestamp with time zone'),
|
|
1405
|
-
checkpoint_json: snapshotColumn('checkpoint_json', 'jsonb'),
|
|
1406
|
-
completed_at: snapshotColumn('completed_at', 'timestamp with time zone', { notNull: false }),
|
|
1407
|
-
counts_json: snapshotColumn('counts_json', 'jsonb'),
|
|
1408
|
-
expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
|
|
1409
|
-
id: snapshotColumn('id', 'uuid', { primaryKey: true }),
|
|
1410
|
-
plan_json: snapshotColumn('plan_json', 'jsonb'),
|
|
1411
|
-
policy_version: snapshotColumn('policy_version', 'text'),
|
|
1412
|
-
revision: snapshotColumn('revision', 'integer'),
|
|
1413
|
-
status: snapshotColumn('status', 'text'),
|
|
1414
|
-
updated_at: snapshotColumn('updated_at', 'timestamp with time zone', { default: 'now()' }),
|
|
1415
|
-
}, {
|
|
1416
|
-
data_lifecycle_retention_runs_approval_request_id_unique: {
|
|
1417
|
-
columns: ['approval_request_id'],
|
|
1418
|
-
name: 'data_lifecycle_retention_runs_approval_request_id_unique',
|
|
1419
|
-
nullsNotDistinct: false,
|
|
1420
|
-
},
|
|
1421
|
-
}),
|
|
1422
|
-
'public.data_lifecycle_retention_candidates': snapshotTable('data_lifecycle_retention_candidates', {
|
|
1423
|
-
candidate_order: snapshotColumn('candidate_order', 'text'),
|
|
1424
|
-
due_at: snapshotColumn('due_at', 'timestamp with time zone'),
|
|
1425
|
-
record_id: snapshotColumn('record_id', 'uuid'),
|
|
1426
|
-
record_ref: snapshotColumn('record_ref', 'text'),
|
|
1427
|
-
run_id: snapshotColumn('run_id', 'uuid'),
|
|
1428
|
-
}, {}, {
|
|
1429
|
-
data_lifecycle_retention_candidates_run_id_candidate_order_pk: {
|
|
1430
|
-
columns: ['run_id', 'candidate_order'],
|
|
1431
|
-
name: 'data_lifecycle_retention_candidates_run_id_candidate_order_pk',
|
|
1432
|
-
},
|
|
1433
|
-
}),
|
|
1434
|
-
'public.delegation_grants': snapshotTable('delegation_grants', {
|
|
1435
|
-
capability_digest: snapshotColumn('capability_digest', 'text'),
|
|
1436
|
-
created_at: snapshotColumn('created_at', 'timestamp with time zone', {
|
|
1437
|
-
default: 'now()',
|
|
1438
|
-
}),
|
|
1439
|
-
expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
|
|
1440
|
-
grant_json: snapshotColumn('grant_json', 'jsonb'),
|
|
1441
|
-
id: snapshotColumn('id', 'uuid', { primaryKey: true }),
|
|
1442
|
-
issued_at: snapshotColumn('issued_at', 'timestamp with time zone'),
|
|
1443
|
-
policy_version: snapshotColumn('policy_version', 'text'),
|
|
1444
|
-
revision: snapshotColumn('revision', 'integer'),
|
|
1445
|
-
status: snapshotColumn('status', 'text'),
|
|
1446
|
-
}),
|
|
1447
|
-
'public.records': snapshotTable('records', {
|
|
1448
|
-
created_at: snapshotColumn('created_at', 'timestamp with time zone', {
|
|
1449
|
-
default: 'now()',
|
|
1450
|
-
}),
|
|
1451
|
-
id: snapshotColumn('id', 'uuid', {
|
|
1452
|
-
default: 'gen_random_uuid()',
|
|
1453
|
-
primaryKey: true,
|
|
1454
|
-
}),
|
|
1455
|
-
last_activity_at: snapshotColumn('last_activity_at', 'timestamp with time zone', { default: 'now()' }),
|
|
1456
|
-
name: snapshotColumn('name', 'text'),
|
|
1457
|
-
owner_id: snapshotColumn('owner_id', 'text'),
|
|
1458
|
-
run_scope: snapshotColumn('run_scope', 'text'),
|
|
1459
|
-
test_expires_at: snapshotColumn('test_expires_at', 'timestamp with time zone', { notNull: false }),
|
|
1460
|
-
}, {}, {}, {
|
|
1461
|
-
records_performance_expiry_idx: snapshotIndex('records_performance_expiry_idx', [
|
|
1462
|
-
{ expression: 'owner_id', opclass: 'text_ops' },
|
|
1463
|
-
{ expression: 'name', opclass: 'text_ops' },
|
|
1464
|
-
{
|
|
1465
|
-
expression: 'test_expires_at',
|
|
1466
|
-
opclass: 'timestamptz_ops',
|
|
1467
|
-
},
|
|
1468
|
-
]),
|
|
1469
|
-
records_performance_run_scope_idx: snapshotIndex('records_performance_run_scope_idx', [
|
|
1470
|
-
{ expression: 'owner_id', opclass: 'text_ops' },
|
|
1471
|
-
{ expression: 'name', opclass: 'text_ops' },
|
|
1472
|
-
{ expression: 'run_scope', opclass: 'text_ops' },
|
|
1473
|
-
]),
|
|
1474
|
-
}),
|
|
1475
425
|
},
|
|
1476
426
|
enums: {},
|
|
1477
427
|
schemas: {},
|
|
@@ -1491,15 +441,20 @@ const plan = createDatabaseBindingPlan(databaseBindings, {
|
|
|
1491
441
|
});
|
|
1492
442
|
const activeDatabase = plan.active.primary;
|
|
1493
443
|
if (!activeDatabase) throw new Error('Database binding "primary" is required.');
|
|
1494
|
-
|
|
444
|
+
// Schema-only commands stay offline; connection commands require the owned allocation.
|
|
445
|
+
const schemaOnly = process.argv[2] === 'generate' || process.argv[2] === 'check';
|
|
446
|
+
const localDatabase = schemaOnly || process.env.DATABASE_URL ? undefined : resolveLocalDatabaseContract({
|
|
1495
447
|
database: activeDatabase,
|
|
1496
448
|
slice: '${name}',
|
|
1497
449
|
});
|
|
450
|
+
const databaseUrl = process.env.DATABASE_URL ?? (localDatabase
|
|
451
|
+
? \`postgresql://\${encodeURIComponent(localDatabase.username)}:\${encodeURIComponent(localDatabase.password)}@\${localDatabase.host}:\${localDatabase.port}/\${localDatabase.database}\`
|
|
452
|
+
: undefined);
|
|
1498
453
|
|
|
1499
454
|
export default defineConfig({
|
|
1500
|
-
|
|
1501
|
-
url:
|
|
1502
|
-
},
|
|
455
|
+
...(!schemaOnly && databaseUrl ? {
|
|
456
|
+
dbCredentials: { url: databaseUrl },
|
|
457
|
+
} : {}),
|
|
1503
458
|
dialect: 'postgresql',
|
|
1504
459
|
out: './database/migrations',
|
|
1505
460
|
schema: './database/schema.ts',
|
|
@@ -1508,6 +463,11 @@ export default defineConfig({
|
|
|
1508
463
|
'database/docker-compose.yml': `services:
|
|
1509
464
|
database:
|
|
1510
465
|
image: postgres:17-alpine
|
|
466
|
+
container_name: \${EBK_LOCAL_DATABASE_PROJECT}-database
|
|
467
|
+
labels:
|
|
468
|
+
dev.ebk.task: \${EBK_LOCAL_DATABASE_TASK}
|
|
469
|
+
dev.ebk.slice: \${EBK_LOCAL_DATABASE_SLICE}
|
|
470
|
+
dev.ebk.database: \${EBK_LOCAL_DATABASE_LOGICAL}
|
|
1511
471
|
environment:
|
|
1512
472
|
POSTGRES_DB: \${EBK_LOCAL_DATABASE}
|
|
1513
473
|
POSTGRES_PASSWORD: \${EBK_LOCAL_DATABASE_PASSWORD}
|
|
@@ -1518,13 +478,29 @@ export default defineConfig({
|
|
|
1518
478
|
timeout: 3s
|
|
1519
479
|
retries: 15
|
|
1520
480
|
ports:
|
|
1521
|
-
- '
|
|
481
|
+
- '127.0.0.1:\${EBK_LOCAL_DATABASE_PORT}:5432'
|
|
1522
482
|
volumes:
|
|
1523
483
|
- database-data:/var/lib/postgresql/data
|
|
1524
484
|
|
|
1525
485
|
volumes:
|
|
1526
486
|
database-data:
|
|
487
|
+
name: \${EBK_LOCAL_DATABASE_PROJECT}-data
|
|
488
|
+
labels:
|
|
489
|
+
dev.ebk.task: \${EBK_LOCAL_DATABASE_TASK}
|
|
490
|
+
dev.ebk.slice: \${EBK_LOCAL_DATABASE_SLICE}
|
|
491
|
+
dev.ebk.database: \${EBK_LOCAL_DATABASE_LOGICAL}
|
|
492
|
+
|
|
493
|
+
networks:
|
|
494
|
+
default:
|
|
495
|
+
name: \${EBK_LOCAL_DATABASE_PROJECT}-network
|
|
496
|
+
labels:
|
|
497
|
+
dev.ebk.task: \${EBK_LOCAL_DATABASE_TASK}
|
|
498
|
+
dev.ebk.slice: \${EBK_LOCAL_DATABASE_SLICE}
|
|
499
|
+
dev.ebk.database: \${EBK_LOCAL_DATABASE_LOGICAL}
|
|
1527
500
|
`,
|
|
1528
501
|
};
|
|
502
|
+
return Object.fromEntries(Object.entries(files).filter(([path]) => sql ||
|
|
503
|
+
(!path.startsWith('database/') &&
|
|
504
|
+
path !== 'docs/runbooks/database-credential-rotation.md')));
|
|
1529
505
|
}
|
|
1530
506
|
//# sourceMappingURL=built-in-plan-data-files.js.map
|