@empire-builder-kit/nx 1.0.0-rc.4 → 1.0.0-rc.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/executors.json +21 -1
- package/generators.json +10 -0
- package/package.json +31 -7
- package/src/aws/child-environment.d.ts +10 -0
- package/src/aws/child-environment.js +77 -0
- package/src/aws/identity.d.ts +13 -0
- package/src/aws/identity.js +41 -0
- package/src/aws-authority/index.d.ts +2 -0
- package/src/aws-authority/index.js +6 -0
- package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
- package/src/aws-authority/lambda-policy-ordering.js +56 -0
- package/src/aws-authority/stage-authority.d.ts +248 -0
- package/src/aws-authority/stage-authority.js +3558 -0
- package/src/blueprints/external-sandbox.js +21 -9
- package/src/blueprints/manifest.d.ts +1 -1
- package/src/blueprints/resolver.js +28 -15
- package/src/cli/bootstrap.d.ts +1 -1
- package/src/cli/deploy-runtime.d.ts +6 -0
- package/src/cli/deploy-runtime.js +58 -0
- package/src/cli/dev-command.d.ts +16 -4
- package/src/cli/dev-command.js +63 -0
- package/src/cli/main.d.ts +9 -1
- package/src/cli/main.js +139 -20
- package/src/cli/output.d.ts +1 -1
- package/src/cli/output.js +1 -1
- package/src/developer-agent/context.js +41 -9
- package/src/developer-agent/generator-planning.js +20 -6
- package/src/developer-agent/git-inspection.d.ts +6 -2
- package/src/developer-agent/git-inspection.js +78 -6
- package/src/developer-agent/model.d.ts +5 -3
- package/src/developer-agent/model.js +4 -4
- package/src/developer-agent/operation-registry.d.ts +5 -0
- package/src/developer-agent/operation-registry.js +286 -40
- package/src/developer-agent/planning.js +16 -13
- package/src/developer-agent/preview-changes.d.ts +2 -0
- package/src/developer-agent/preview-changes.js +14 -2
- package/src/developer-agent/preview-source.js +3 -0
- package/src/developer-agent/validation.js +25 -9
- package/src/developer-agent/workspace-inspection.js +60 -5
- package/src/executors/blueprint-trust/blueprint-trust.js +6 -0
- package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
- package/src/executors/deployment-plan/deployment-plan.js +57 -2
- package/src/executors/dev-doctor/dev-doctor.js +13 -6
- package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
- package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
- package/src/executors/dev-task-cleanup/schema.json +9 -0
- package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
- package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
- package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
- package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
- package/src/executors/fleet/fleet.js +1 -1
- package/src/executors/foundation-preflight/foundation-preflight.d.ts +1 -0
- package/src/executors/foundation-preflight/foundation-preflight.js +6 -2
- package/src/executors/foundation-preflight/schema.json +5 -0
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +13 -2
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -31
- package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +65 -0
- package/src/executors/foundation-profile-preflight/production-database-safeguard.js +223 -0
- package/src/executors/foundation-profile-preflight/schema.json +15 -4
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +70 -20
- package/src/executors/foundation-remove-preflight/schema.json +6 -1
- package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
- package/src/executors/github-bootstrap/github-bootstrap.js +3 -0
- package/src/executors/github-bootstrap/schema.json +7 -1
- package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +29 -136
- package/src/executors/infrastructure-plan/infrastructure-plan.js +230 -3282
- package/src/executors/infrastructure-plan/schema.json +12 -52
- package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
- package/src/executors/local-deploy/federated-credential-transport.js +252 -0
- package/src/executors/local-deploy/local-approval.d.ts +18 -0
- package/src/executors/local-deploy/local-approval.js +39 -0
- package/src/executors/local-deploy/local-deploy.d.ts +112 -0
- package/src/executors/local-deploy/local-deploy.js +1404 -0
- package/src/executors/local-deploy/schema.json +70 -0
- package/src/executors/refresh/refresh.js +2 -2
- package/src/executors/remove/remove.js +2 -2
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +42 -0
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +1229 -0
- package/src/executors/router-waf-rehearsal/schema.json +29 -0
- package/src/executors/secret-initialize/schema.json +42 -0
- package/src/executors/secret-initialize/secret-initialize.d.ts +34 -0
- package/src/executors/secret-initialize/secret-initialize.js +297 -0
- package/src/executors/secret-metadata/schema.json +5 -0
- package/src/executors/secret-metadata/secret-metadata.d.ts +16 -2
- package/src/executors/secret-metadata/secret-metadata.js +129 -30
- package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
- package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
- package/src/executors/sst-lifecycle/governed-native-operation.d.ts +48 -0
- package/src/executors/sst-lifecycle/governed-native-operation.js +162 -0
- package/src/executors/sst-lifecycle/logging-preflight.d.ts +5 -0
- package/src/executors/sst-lifecycle/logging-preflight.js +23 -13
- package/src/executors/sst-lifecycle/run-sst-command.d.ts +40 -6
- package/src/executors/sst-lifecycle/run-sst-command.js +779 -70
- package/src/executors/sst-lifecycle/schema.json +8 -1
- package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
- package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
- package/src/executors/sst-lifecycle/sst-environment-source.d.ts +33 -0
- package/src/executors/sst-lifecycle/sst-environment-source.js +267 -0
- package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
- package/src/executors/sst-lifecycle/task-unlock.js +126 -0
- package/src/executors/unlock/unlock.js +2 -2
- package/src/foundation/capability-plan.d.ts +43 -0
- package/src/foundation/capability-plan.js +168 -0
- package/src/foundation/discovery.d.ts +14 -11
- package/src/foundation/discovery.js +32 -6
- package/src/foundation/index.d.ts +4 -0
- package/src/foundation/index.js +11 -0
- package/src/foundation/local-database-contract.d.ts +20 -0
- package/src/foundation/local-database-contract.js +262 -13
- package/src/foundation/local-private-smoke-access.d.ts +20 -0
- package/src/foundation/local-private-smoke-access.js +197 -0
- package/src/foundation/logging-preflight.js +1 -1
- package/src/foundation/logging.d.ts +3 -1
- package/src/foundation/logging.js +1 -1
- package/src/foundation/partial-state.d.ts +10 -0
- package/src/foundation/partial-state.js +21 -0
- package/src/foundation/preflight.js +37 -18
- package/src/foundation/private-smoke-access.d.ts +25 -0
- package/src/foundation/private-smoke-access.js +135 -0
- package/src/foundation/private-smoke-admission.d.ts +45 -0
- package/src/foundation/private-smoke-admission.js +180 -0
- package/src/foundation/private-smoke-control-plane.d.ts +18 -0
- package/src/foundation/private-smoke-control-plane.js +184 -0
- package/src/foundation/provision-database-bindings.d.ts +5 -0
- package/src/foundation/provision-database-bindings.js +41 -8
- package/src/foundation/provision-logical-database.js +15 -8
- package/src/foundation/requirements.d.ts +3 -3
- package/src/foundation/requirements.js +24 -12
- package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
- package/src/foundation/router-waf-rate-rehearsal.js +210 -0
- package/src/foundation/router-waf.d.ts +149 -0
- package/src/foundation/router-waf.js +809 -0
- package/src/foundation/stages.d.ts +1 -0
- package/src/foundation/stages.js +11 -0
- package/src/generators/blueprint/blueprint.d.ts +5 -0
- package/src/generators/blueprint/blueprint.js +102 -0
- package/src/generators/blueprint/files.d.ts +6 -0
- package/src/generators/blueprint/files.js +217 -0
- package/src/generators/blueprint/schema.d.ts +4 -0
- package/src/generators/blueprint/schema.json +18 -0
- package/src/generators/formatting.d.ts +8 -0
- package/src/generators/formatting.js +141 -0
- package/src/generators/function/function.js +38 -17
- package/src/generators/logging-registry.d.ts +2 -0
- package/src/generators/logging-registry.js +22 -0
- package/src/generators/post-generation-install.js +2 -2
- package/src/generators/preset/dependency-overrides.d.ts +8 -0
- package/src/generators/preset/dependency-overrides.js +55 -0
- package/src/generators/preset/generator.js +43 -3
- package/src/generators/preset/schema.d.ts +10 -0
- package/src/generators/preset/schema.json +47 -0
- package/src/generators/preset/tool-versions.d.ts +2 -0
- package/src/generators/preset/tool-versions.js +3 -1
- package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
- package/src/generators/preset/workspace-files-adopter-skills.js +303 -0
- package/src/generators/preset/workspace-files-ci-acceptance.d.ts +1 -0
- package/src/generators/preset/workspace-files-ci-acceptance.js +791 -0
- package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
- package/src/generators/preset/workspace-files-ci-install.js +196 -0
- package/src/generators/preset/workspace-files-developer-agent.d.ts +2 -0
- package/src/generators/preset/workspace-files-developer-agent.js +90 -28
- package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
- package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
- package/src/generators/preset/workspace-files-foundation-workload-roles.js +5 -2
- package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
- package/src/generators/preset/workspace-files-performance-cost.js +8 -8
- package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
- package/src/generators/preset/workspace-files-performance-load.js +39 -25
- package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
- package/src/generators/preset/workspace-files-stage-authority.js +518 -0
- package/src/generators/preset/workspace-files-thin-deploy.d.ts +55 -0
- package/src/generators/preset/workspace-files-thin-deploy.js +2473 -0
- package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
- package/src/generators/preset/workspace-files-thin-docs.js +352 -0
- package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
- package/src/generators/preset/workspace-files-thin-release.js +26 -0
- package/src/generators/preset/workspace-files-workload-role-baseline.js +254 -42
- package/src/generators/preset/workspace-files.d.ts +18 -2
- package/src/generators/preset/workspace-files.js +1504 -608
- package/src/generators/repository-policy/repository-policy.js +235 -5
- package/src/generators/repository-policy/schema.d.ts +10 -0
- package/src/generators/repository-policy/schema.json +80 -4
- package/src/generators/repository-policy/tree-policy.d.ts +3 -0
- package/src/generators/repository-policy/tree-policy.js +25 -0
- package/src/generators/slice/built-in-plan-api-contract-files.js +42 -7
- package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-api-files.js +130 -414
- package/src/generators/slice/built-in-plan-async-work-files.js +166 -1969
- package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +60 -2
- package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
- package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
- package/src/generators/slice/built-in-plan-background-work-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-background-work-files.js +99 -0
- package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
- package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
- package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-data-files.js +163 -1196
- package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +37 -2
- package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2443
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +50 -8
- package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js +44 -25
- package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +20 -1
- package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-foundation-files.js +39 -18
- package/src/generators/slice/built-in-plan-frontend-files.js +7 -3
- package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js +933 -729
- package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +67 -11
- package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
- package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
- package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
- package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-delivery.js +137 -0
- package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
- package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
- package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
- package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
- package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
- package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
- package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
- package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
- package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
- package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
- package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
- package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
- package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
- package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
- package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-metadata-files.js +157 -28
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +324 -0
- package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-operations-files.js +585 -97
- package/src/generators/slice/built-in-plan-performance-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-performance-files.js +220 -1074
- package/src/generators/slice/built-in-plan-project-files.js +141 -135
- package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-release-files.js +310 -70
- package/src/generators/slice/built-in-plan-reliability-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-reliability-files.js +279 -43
- package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
- package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
- package/src/generators/slice/built-in-plan-shared.js +41 -19
- package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
- package/src/generators/slice/built-in-plan-sql-events.js +276 -0
- package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-testing-files.js +304 -172
- package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-testing-persistence-files.js +178 -0
- package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
- package/src/generators/slice/built-in-plan-thin-release-files.js +162 -0
- package/src/generators/slice/built-in-plan-verification-files.js +76 -2
- package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-web-files.js +223 -16
- package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js +143 -279
- package/src/generators/slice/built-in-plan.d.ts +11 -1
- package/src/generators/slice/built-in-plan.js +80 -29
- package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
- package/src/generators/slice/data-policy-review-seed.js +22 -0
- package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
- package/src/generators/slice/deployed-smoke-readiness.js +214 -0
- package/src/generators/slice/local-source-identity.d.ts +2 -0
- package/src/generators/slice/local-source-identity.js +31 -0
- package/src/generators/slice/persistence-contract.d.ts +14 -0
- package/src/generators/slice/persistence-contract.js +32 -0
- package/src/generators/slice/slice.js +61 -50
- package/src/generators/sql/schema.d.ts +7 -0
- package/src/generators/sql/schema.json +38 -0
- package/src/generators/sql/sql.d.ts +6 -0
- package/src/generators/sql/sql.js +53 -0
- package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
- package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
- package/src/generators/upgrade/upgrade.d.ts +15 -1
- package/src/generators/upgrade/upgrade.js +435 -44
- package/src/generators/workload/performance-registration.d.ts +1 -0
- package/src/generators/workload/performance-registration.js +9 -11
- package/src/generators/workload/service-performance-files.d.ts +1 -0
- package/src/generators/workload/service-performance-files.js +27 -7
- package/src/generators/workload/workload.d.ts +1 -1
- package/src/generators/workload/workload.js +105 -29
- package/src/git-policy/action-pins.d.ts +5 -0
- package/src/git-policy/action-pins.js +5 -0
- package/src/git-policy/github-bootstrap.d.ts +39 -8
- package/src/git-policy/github-bootstrap.js +329 -175
- package/src/git-policy/routing.d.ts +7 -1
- package/src/git-policy/routing.js +62 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/infrastructure-change/local-capability.d.ts +73 -0
- package/src/infrastructure-change/local-capability.js +114 -0
- package/src/infrastructure-change/model.d.ts +25 -4
- package/src/infrastructure-change/model.js +1 -0
- package/src/infrastructure-change/normalize.d.ts +4 -0
- package/src/infrastructure-change/normalize.js +47 -7
- package/src/infrastructure-change/plan.d.ts +30 -3
- package/src/infrastructure-change/plan.js +323 -13
- package/src/infrastructure-change/risk.d.ts +3 -1
- package/src/infrastructure-change/risk.js +96 -16
- package/src/local-dev/browser-verification.d.ts +37 -0
- package/src/local-dev/browser-verification.js +281 -0
- package/src/local-dev/contracts.d.ts +10 -1
- package/src/local-dev/contracts.js +114 -13
- package/src/local-dev/dev-command-core.js +24 -5
- package/src/local-dev/docker-credential-health.d.ts +14 -0
- package/src/local-dev/docker-credential-health.js +94 -0
- package/src/local-dev/environment-inspector.d.ts +7 -0
- package/src/local-dev/environment-inspector.js +42 -15
- package/src/local-dev/environment-state.js +2 -2
- package/src/local-dev/errors.d.ts +1 -1
- package/src/local-dev/errors.js +2 -0
- package/src/local-dev/fleet-client.js +2 -2
- package/src/local-dev/fleet-configuration.js +57 -25
- package/src/local-dev/fleet-inventory.js +46 -18
- package/src/local-dev/fleet-ipc.d.ts +7 -0
- package/src/local-dev/fleet-ipc.js +14 -2
- package/src/local-dev/fleet-launcher.d.ts +6 -0
- package/src/local-dev/fleet-launcher.js +14 -2
- package/src/local-dev/fleet-logs.js +50 -22
- package/src/local-dev/fleet-process.d.ts +20 -1
- package/src/local-dev/fleet-process.js +197 -41
- package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
- package/src/local-dev/fleet-runner-evidence.js +56 -0
- package/src/local-dev/fleet-runtime.js +268 -229
- package/src/local-dev/fleet-session.d.ts +2 -0
- package/src/local-dev/fleet-session.js +28 -11
- package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
- package/src/local-dev/fleet-state.d.ts +5 -2
- package/src/local-dev/fleet-state.js +25 -4
- package/src/local-dev/fleet-supervisor.d.ts +3 -0
- package/src/local-dev/fleet-supervisor.js +66 -11
- package/src/local-dev/fleet-web-start.d.ts +12 -0
- package/src/local-dev/fleet-web-start.js +48 -0
- package/src/local-dev/identity.js +3 -14
- package/src/local-dev/index.d.ts +1 -0
- package/src/local-dev/index.js +1 -0
- package/src/local-dev/native-completion.d.ts +9 -0
- package/src/local-dev/native-completion.js +130 -0
- package/src/local-dev/nx-workspace.d.ts +4 -2
- package/src/local-dev/nx-workspace.js +11 -6
- package/src/local-dev/personal-stage.d.ts +4 -5
- package/src/local-dev/personal-stage.js +6 -54
- package/src/local-dev/port-claims.d.ts +13 -0
- package/src/local-dev/port-claims.js +46 -0
- package/src/local-dev/ports.d.ts +14 -2
- package/src/local-dev/ports.js +78 -3
- package/src/local-dev/private-state.d.ts +11 -0
- package/src/local-dev/private-state.js +146 -40
- package/src/local-dev/process-group.d.ts +4 -0
- package/src/local-dev/process-group.js +29 -0
- package/src/local-dev/process-identity.d.ts +8 -0
- package/src/local-dev/process-identity.js +31 -1
- package/src/local-dev/proxy.js +11 -12
- package/src/local-dev/runtime-paths.js +1 -1
- package/src/local-dev/slice-claim.js +1 -1
- package/src/local-dev/slice-runner.d.ts +15 -6
- package/src/local-dev/slice-runner.js +189 -54
- package/src/local-dev/task-attachment.d.ts +17 -0
- package/src/local-dev/task-attachment.js +73 -0
- package/src/local-dev/task-authority.d.ts +10 -0
- package/src/local-dev/task-authority.js +27 -0
- package/src/local-dev/task-identity.d.ts +33 -0
- package/src/local-dev/task-identity.js +418 -0
- package/src/local-dev/task-native-writer.d.ts +18 -0
- package/src/local-dev/task-native-writer.js +329 -0
- package/src/local-dev/tls.js +8 -2
- package/src/local-dev/web-launch.d.ts +9 -0
- package/src/local-dev/web-launch.js +130 -0
- package/src/ownership/composition.d.ts +2 -1
- package/src/ownership/composition.js +1 -0
- package/src/performance/cost-collection.d.ts +1 -1
- package/src/performance/cost-collection.js +4 -2
- package/src/performance/cost-controls.d.ts +8 -4
- package/src/performance/cost-controls.js +39 -28
- package/src/performance/evidence.d.ts +1 -1
- package/src/performance/evidence.js +5 -3
- package/src/performance/load-safety.js +5 -3
- package/src/performance/model.d.ts +4 -4
- package/src/performance/model.js +4 -5
- package/src/performance/scenario.d.ts +22 -0
- package/src/performance/scenario.js +100 -92
- package/src/release/index.d.ts +0 -2
- package/src/release/index.js +0 -2
- package/src/release/source-authority.d.ts +5 -5
- package/src/release/source-authority.js +141 -124
- package/src/repository-policy/aurora-preflight.d.ts +1 -1
- package/src/repository-policy/aurora-preflight.js +4 -1
- package/src/repository-policy/capacity-migration.d.ts +3 -0
- package/src/repository-policy/capacity-migration.js +21 -0
- package/src/repository-policy/deployment-plan.d.ts +4 -1
- package/src/repository-policy/deployment-plan.js +9 -0
- package/src/repository-policy/foundation-profile.js +10 -1
- package/src/repository-policy/policy.d.ts +57 -3
- package/src/repository-policy/policy.js +497 -11
- package/src/schemas/blueprint-v1.json +5 -4
- package/src/schemas/foundation-requirement-v1.json +5 -4
- package/src/schemas/performance-policy-v1.json +3 -3
- package/src/schemas/repository-policy-v1.json +130 -6
- package/src/schemas/testing-evidence-result-v1.json +1 -1
- package/src/secrets/adapters.d.ts +7 -2
- package/src/secrets/adapters.js +34 -3
- package/src/secrets/aws-control-plane.d.ts +10 -1
- package/src/secrets/aws-control-plane.js +67 -0
- package/src/secrets/generated-aws-control-plane.d.ts +23 -0
- package/src/secrets/generated-aws-control-plane.js +259 -0
- package/src/secrets/metadata.js +38 -10
- package/src/secrets/model.d.ts +8 -1
- package/src/secrets/model.js +24 -3
- package/src/secrets/operator.d.ts +91 -3
- package/src/secrets/operator.js +463 -13
- package/src/secrets/registry.d.ts +2 -1
- package/src/secrets/registry.js +18 -1
- package/src/secrets/verification.js +9 -1
- package/src/secrets/workload-access.js +10 -2
- package/src/sst-environment-source-format.d.ts +6 -0
- package/src/sst-environment-source-format.js +199 -0
- package/src/supply-chain/action-pins.js +61 -7
- package/src/supply-chain/blueprint-trust-git.js +85 -24
- package/src/supply-chain/blueprint-verification-authority.js +55 -3
- package/src/supply-chain/build-output-bounds.d.ts +2 -0
- package/src/supply-chain/build-output-bounds.js +12 -0
- package/src/supply-chain/build-output.d.ts +7 -1
- package/src/supply-chain/build-output.js +177 -24
- package/src/supply-chain/ecr-scanning.d.ts +5 -3
- package/src/supply-chain/ecr-scanning.js +11 -7
- package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
- package/src/supply-chain/ecs-deployed-image.js +6 -4
- package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
- package/src/supply-chain/generated-command.js +1 -0
- package/src/supply-chain/generated-container-release-command.js +1285 -124
- package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
- package/src/supply-chain/generated-ecr-collector-command.js +200 -93
- package/src/supply-chain/generated-files.js +25 -14
- package/src/supply-chain/generated-scanner-command.js +2 -1
- package/src/supply-chain/index.d.ts +1 -1
- package/src/supply-chain/index.js +2 -1
- package/src/supply-chain/sbom.d.ts +1 -1
- package/src/supply-chain/sbom.js +30 -5
- package/src/supply-chain/scanner.js +3 -0
- package/src/testing-evidence/fixture-scope.d.ts +2 -1
- package/src/testing-evidence/fixture-scope.js +4 -2
- package/src/testing-evidence/result.d.ts +2 -1
- package/src/testing-evidence/result.js +18 -4
- package/src/workload-roles/account-baseline.d.ts +11 -0
- package/src/workload-roles/account-baseline.js +253 -16
- package/src/workload-roles/authority.d.ts +3 -1
- package/src/workload-roles/authority.js +48 -2
- package/src/workload-roles/aws-s3-state.js +27 -0
- package/src/workload-roles/boundary.d.ts +2 -1
- package/src/workload-roles/boundary.js +9 -2
- package/src/workload-roles/handler.js +52 -24
- package/src/workload-roles/index.d.ts +10 -17
- package/src/workload-roles/index.js +5 -18
- package/src/workload-roles/injection.js +1 -1
- package/src/workload-roles/provisioner.js +12 -4
- package/src/workload-roles/registration.d.ts +1 -0
- package/src/workload-roles/registration.js +5 -0
- package/src/workload-roles/stage-boundary.js +1 -1
- package/src/workload-roles/standard-slice.js +3 -3
- package/src/workspace-deployment/affected-lifecycle.d.ts +53 -0
- package/src/workspace-deployment/affected-lifecycle.js +84 -0
- package/src/workspace-deployment/identity.d.ts +3 -0
- package/src/workspace-deployment/identity.js +22 -0
- package/src/workspace-deployment/index.d.ts +4 -0
- package/src/workspace-deployment/index.js +8 -0
- package/src/workspace-deployment/migration-evidence.d.ts +29 -0
- package/src/workspace-deployment/migration-evidence.js +83 -0
- package/src/workspace-deployment/migration.d.ts +27 -0
- package/src/workspace-deployment/migration.js +109 -0
- package/src/workspace-deployment/ownership.d.ts +81 -0
- package/src/workspace-deployment/ownership.js +381 -0
- package/src/api-contract/baseline-update.js.map +0 -1
- package/src/api-contract/compatibility.js.map +0 -1
- package/src/api-contract/contract-graph.js.map +0 -1
- package/src/api-contract/evidence.js.map +0 -1
- package/src/api-contract/index.js.map +0 -1
- package/src/api-contract/model.fixtures.d.ts +0 -2
- package/src/api-contract/model.fixtures.js +0 -81
- package/src/api-contract/model.fixtures.js.map +0 -1
- package/src/api-contract/model.js.map +0 -1
- package/src/api-contract/rollout.js.map +0 -1
- package/src/authorization/compatibility.js.map +0 -1
- package/src/authorization/index.js.map +0 -1
- package/src/blueprints/execution.js.map +0 -1
- package/src/blueprints/external-sandbox.js.map +0 -1
- package/src/blueprints/index.js.map +0 -1
- package/src/blueprints/inputs.js.map +0 -1
- package/src/blueprints/manifest.js.map +0 -1
- package/src/blueprints/resolver.js.map +0 -1
- package/src/blueprints/transitions.js.map +0 -1
- package/src/cli/agent-command.js.map +0 -1
- package/src/cli/agent-runtime.js.map +0 -1
- package/src/cli/blueprint-authority.js.map +0 -1
- package/src/cli/blueprint-command.js.map +0 -1
- package/src/cli/bootstrap.js.map +0 -1
- package/src/cli/dev-command.js.map +0 -1
- package/src/cli/main.js.map +0 -1
- package/src/cli/output.js.map +0 -1
- package/src/cli/personal-secret-runtime.js.map +0 -1
- package/src/cli/secret-terminal.js.map +0 -1
- package/src/container-images.js.map +0 -1
- package/src/data-lifecycle/index.js.map +0 -1
- package/src/data-lifecycle/model.fixtures.d.ts +0 -2
- package/src/data-lifecycle/model.fixtures.js +0 -244
- package/src/data-lifecycle/model.fixtures.js.map +0 -1
- package/src/data-lifecycle/model.js.map +0 -1
- package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
- package/src/data-lifecycle/validation.js.map +0 -1
- package/src/database-retirement/contract.js.map +0 -1
- package/src/database-retirement/index.js.map +0 -1
- package/src/deterministic-order.js.map +0 -1
- package/src/developer-agent/context.js.map +0 -1
- package/src/developer-agent/generator-planning.js.map +0 -1
- package/src/developer-agent/generator-preview.js.map +0 -1
- package/src/developer-agent/git-inspection.js.map +0 -1
- package/src/developer-agent/handoff.js.map +0 -1
- package/src/developer-agent/index.js.map +0 -1
- package/src/developer-agent/model.js.map +0 -1
- package/src/developer-agent/operation-registry.js.map +0 -1
- package/src/developer-agent/ordering.js.map +0 -1
- package/src/developer-agent/planning.js.map +0 -1
- package/src/developer-agent/preview-changes.js.map +0 -1
- package/src/developer-agent/preview-source.js.map +0 -1
- package/src/developer-agent/validation.js.map +0 -1
- package/src/developer-agent/workspace-inspection.js.map +0 -1
- package/src/developer-agent/workspace-path.js.map +0 -1
- package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
- package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
- package/src/executors/deploy/deploy.js.map +0 -1
- package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
- package/src/executors/dev/dev.js.map +0 -1
- package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
- package/src/executors/dev-setup/dev-setup.js.map +0 -1
- package/src/executors/developer-context/developer-context.js.map +0 -1
- package/src/executors/fleet/fleet.js.map +0 -1
- package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
- package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
- package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
- package/src/executors/refresh/refresh.js.map +0 -1
- package/src/executors/remove/remove.js.map +0 -1
- package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
- package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
- package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
- package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
- package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
- package/src/executors/unlock/unlock.js.map +0 -1
- package/src/executors/work-markers/work-markers.js.map +0 -1
- package/src/foundation/discovery.js.map +0 -1
- package/src/foundation/index.js.map +0 -1
- package/src/foundation/local-database-contract.js.map +0 -1
- package/src/foundation/logging-preflight.js.map +0 -1
- package/src/foundation/logging.js.map +0 -1
- package/src/foundation/preflight.js.map +0 -1
- package/src/foundation/provision-database-bindings.js.map +0 -1
- package/src/foundation/provision-logical-database.js.map +0 -1
- package/src/foundation/requirements.js.map +0 -1
- package/src/foundation/router-origin-proof.js.map +0 -1
- package/src/foundation/stages.js.map +0 -1
- package/src/frontend-security/index.js.map +0 -1
- package/src/frontend-security/security-headers.js.map +0 -1
- package/src/generators/feature-registry.js.map +0 -1
- package/src/generators/function/function.js.map +0 -1
- package/src/generators/job/job.js.map +0 -1
- package/src/generators/logging-registry.js.map +0 -1
- package/src/generators/post-generation-install.js.map +0 -1
- package/src/generators/preset/generator.js.map +0 -1
- package/src/generators/preset/tool-versions.js.map +0 -1
- package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
- package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
- package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
- package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
- package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
- package/src/generators/preset/workspace-files.js.map +0 -1
- package/src/generators/repository-policy/repository-policy.js.map +0 -1
- package/src/generators/service/service.js.map +0 -1
- package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-shared.js.map +0 -1
- package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
- package/src/generators/slice/built-in-plan.js.map +0 -1
- package/src/generators/slice/slice.js.map +0 -1
- package/src/generators/upgrade/upgrade.js.map +0 -1
- package/src/generators/workload/frozen-container.js.map +0 -1
- package/src/generators/workload/performance-registration.js.map +0 -1
- package/src/generators/workload/reliability-registration.js.map +0 -1
- package/src/generators/workload/service-performance-files.js.map +0 -1
- package/src/generators/workload/workload.js.map +0 -1
- package/src/git-policy/action-pins.js.map +0 -1
- package/src/git-policy/github-bootstrap.js.map +0 -1
- package/src/git-policy/index.js.map +0 -1
- package/src/git-policy/routing.js.map +0 -1
- package/src/index.js.map +0 -1
- package/src/infrastructure-change/convergence.js.map +0 -1
- package/src/infrastructure-change/drift.js.map +0 -1
- package/src/infrastructure-change/index.js.map +0 -1
- package/src/infrastructure-change/model.js.map +0 -1
- package/src/infrastructure-change/normalize.js.map +0 -1
- package/src/infrastructure-change/plan.js.map +0 -1
- package/src/infrastructure-change/risk.js.map +0 -1
- package/src/infrastructure-change/summary.js.map +0 -1
- package/src/local-dev/context-discovery.js.map +0 -1
- package/src/local-dev/contract-validation.js.map +0 -1
- package/src/local-dev/contracts.js.map +0 -1
- package/src/local-dev/control-contract.js.map +0 -1
- package/src/local-dev/dev-command-core.js.map +0 -1
- package/src/local-dev/effects.js.map +0 -1
- package/src/local-dev/environment-inspector.js.map +0 -1
- package/src/local-dev/environment-state.js.map +0 -1
- package/src/local-dev/errors.js.map +0 -1
- package/src/local-dev/fleet-client.js.map +0 -1
- package/src/local-dev/fleet-configuration.js.map +0 -1
- package/src/local-dev/fleet-inventory.js.map +0 -1
- package/src/local-dev/fleet-ipc.js.map +0 -1
- package/src/local-dev/fleet-launcher.js.map +0 -1
- package/src/local-dev/fleet-lock.js.map +0 -1
- package/src/local-dev/fleet-logs.js.map +0 -1
- package/src/local-dev/fleet-process.js.map +0 -1
- package/src/local-dev/fleet-runtime.js.map +0 -1
- package/src/local-dev/fleet-session.js.map +0 -1
- package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
- package/src/local-dev/fleet-startup.js.map +0 -1
- package/src/local-dev/fleet-state.js.map +0 -1
- package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
- package/src/local-dev/fleet-supervisor.js.map +0 -1
- package/src/local-dev/gateway-daemon.js.map +0 -1
- package/src/local-dev/gateway.js.map +0 -1
- package/src/local-dev/identity.js.map +0 -1
- package/src/local-dev/index.js.map +0 -1
- package/src/local-dev/local-context.js.map +0 -1
- package/src/local-dev/nx-workspace.js.map +0 -1
- package/src/local-dev/personal-secret-ledger.js.map +0 -1
- package/src/local-dev/personal-stage.js.map +0 -1
- package/src/local-dev/portless.js.map +0 -1
- package/src/local-dev/ports.js.map +0 -1
- package/src/local-dev/private-state.js.map +0 -1
- package/src/local-dev/process-identity.js.map +0 -1
- package/src/local-dev/proxy.js.map +0 -1
- package/src/local-dev/runtime-paths.js.map +0 -1
- package/src/local-dev/secret-slice-claim.js.map +0 -1
- package/src/local-dev/slice-claim.js.map +0 -1
- package/src/local-dev/slice-runner.js.map +0 -1
- package/src/local-dev/tls.js.map +0 -1
- package/src/ownership/composition.js.map +0 -1
- package/src/ownership/foundation-record.js.map +0 -1
- package/src/ownership/hash.js.map +0 -1
- package/src/ownership/index.js.map +0 -1
- package/src/ownership/json-ownership.js.map +0 -1
- package/src/ownership/record.js.map +0 -1
- package/src/ownership/workspace-record.js.map +0 -1
- package/src/performance/cost-collection.js.map +0 -1
- package/src/performance/cost-controls.js.map +0 -1
- package/src/performance/evidence.js.map +0 -1
- package/src/performance/index.js.map +0 -1
- package/src/performance/load-safety.js.map +0 -1
- package/src/performance/model.js.map +0 -1
- package/src/performance/pr-artifact-budget.js.map +0 -1
- package/src/performance/runner.js.map +0 -1
- package/src/performance/scenario-endpoint.js.map +0 -1
- package/src/performance/scenario.js.map +0 -1
- package/src/performance/test-fixtures.d.ts +0 -7
- package/src/performance/test-fixtures.js +0 -169
- package/src/performance/test-fixtures.js.map +0 -1
- package/src/performance/unit-cost.js.map +0 -1
- package/src/release/index.js.map +0 -1
- package/src/release/lifecycle.js.map +0 -1
- package/src/release/manifest.js.map +0 -1
- package/src/release/rollout.js.map +0 -1
- package/src/release/source-authority.js.map +0 -1
- package/src/repository-policy/aurora-preflight.js.map +0 -1
- package/src/repository-policy/deployment-plan.js.map +0 -1
- package/src/repository-policy/foundation-profile.js.map +0 -1
- package/src/repository-policy/index.js.map +0 -1
- package/src/repository-policy/policy.js.map +0 -1
- package/src/secrets/adapters.js.map +0 -1
- package/src/secrets/aws-control-plane.js.map +0 -1
- package/src/secrets/declaration-verification.js.map +0 -1
- package/src/secrets/guardrails.js.map +0 -1
- package/src/secrets/index.js.map +0 -1
- package/src/secrets/metadata.js.map +0 -1
- package/src/secrets/model.js.map +0 -1
- package/src/secrets/operator.js.map +0 -1
- package/src/secrets/permissions.js.map +0 -1
- package/src/secrets/personal-command.js.map +0 -1
- package/src/secrets/personal-ledger.js.map +0 -1
- package/src/secrets/registry.js.map +0 -1
- package/src/secrets/verification.js.map +0 -1
- package/src/secrets/workload-access.js.map +0 -1
- package/src/supply-chain/action-pins.js.map +0 -1
- package/src/supply-chain/blueprint-trust-git.js.map +0 -1
- package/src/supply-chain/blueprint-trust-process.js.map +0 -1
- package/src/supply-chain/blueprint-trust.js.map +0 -1
- package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
- package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
- package/src/supply-chain/build-output.js.map +0 -1
- package/src/supply-chain/common.js.map +0 -1
- package/src/supply-chain/container-artifact-contract.js.map +0 -1
- package/src/supply-chain/container-release.js.map +0 -1
- package/src/supply-chain/ecr-applicability.js.map +0 -1
- package/src/supply-chain/ecr-scanning.js.map +0 -1
- package/src/supply-chain/ecs-deployed-image.js.map +0 -1
- package/src/supply-chain/errors.js.map +0 -1
- package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
- package/src/supply-chain/generated-command.js.map +0 -1
- package/src/supply-chain/generated-container-release-command.js.map +0 -1
- package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
- package/src/supply-chain/generated-files.js.map +0 -1
- package/src/supply-chain/generated-scanner-command.js.map +0 -1
- package/src/supply-chain/index.js.map +0 -1
- package/src/supply-chain/inventory.js.map +0 -1
- package/src/supply-chain/license-expression.js.map +0 -1
- package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
- package/src/supply-chain/policy.js.map +0 -1
- package/src/supply-chain/publication.js.map +0 -1
- package/src/supply-chain/sbom.js.map +0 -1
- package/src/supply-chain/scanner.js.map +0 -1
- package/src/supply-chain/vendored-source.js.map +0 -1
- package/src/testing-evidence/fixture-scope.js.map +0 -1
- package/src/testing-evidence/index.js.map +0 -1
- package/src/testing-evidence/quarantine.js.map +0 -1
- package/src/testing-evidence/result.js.map +0 -1
- package/src/testing-evidence/runner-adapter.js.map +0 -1
- package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
- package/src/validation.js.map +0 -1
- package/src/work-markers/index.js.map +0 -1
- package/src/work-markers/work-markers.js.map +0 -1
- package/src/workload-roles/account-baseline.js.map +0 -1
- package/src/workload-roles/authority.js.map +0 -1
- package/src/workload-roles/aws-adapter.js.map +0 -1
- package/src/workload-roles/aws-internal-handler.js.map +0 -1
- package/src/workload-roles/aws-s3-state.js.map +0 -1
- package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
- package/src/workload-roles/boundary.js.map +0 -1
- package/src/workload-roles/convergence.js.map +0 -1
- package/src/workload-roles/effective-policy.js.map +0 -1
- package/src/workload-roles/handler.js.map +0 -1
- package/src/workload-roles/history.js.map +0 -1
- package/src/workload-roles/index.js.map +0 -1
- package/src/workload-roles/injection.js.map +0 -1
- package/src/workload-roles/manifest.js.map +0 -1
- package/src/workload-roles/provisioner.js.map +0 -1
- package/src/workload-roles/registration.js.map +0 -1
- package/src/workload-roles/stage-boundary.js.map +0 -1
- package/src/workload-roles/standard-slice.js.map +0 -1
|
@@ -2,36 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.renderProductTestingFiles = renderProductTestingFiles;
|
|
4
4
|
const built_in_plan_shared_js_1 = require("./built-in-plan-shared.js");
|
|
5
|
+
const local_source_identity_js_1 = require("./local-source-identity.js");
|
|
6
|
+
const built_in_plan_testing_persistence_files_js_1 = require("./built-in-plan-testing-persistence-files.js");
|
|
7
|
+
const deployed_smoke_readiness_js_1 = require("./deployed-smoke-readiness.js");
|
|
5
8
|
/** @internal */
|
|
6
|
-
function renderProductTestingFiles(name, pascalName) {
|
|
9
|
+
function renderProductTestingFiles(name, pascalName, sql = false) {
|
|
7
10
|
return {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
image: postgres:17-alpine
|
|
11
|
-
environment:
|
|
12
|
-
POSTGRES_DB: postgres
|
|
13
|
-
POSTGRES_PASSWORD: ebk_test
|
|
14
|
-
POSTGRES_USER: ebk_test
|
|
15
|
-
healthcheck:
|
|
16
|
-
test: [CMD-SHELL, "pg_isready -U ebk_test -d postgres"]
|
|
17
|
-
interval: 1s
|
|
18
|
-
timeout: 3s
|
|
19
|
-
retries: 30
|
|
20
|
-
labels:
|
|
21
|
-
dev.empirebuilderkit.owner: test-integration
|
|
22
|
-
dev.empirebuilderkit.run: \${EBK_TEST_RUN_ID}
|
|
23
|
-
dev.empirebuilderkit.slice: ${name}
|
|
24
|
-
ports:
|
|
25
|
-
- '127.0.0.1::5432'
|
|
26
|
-
tmpfs:
|
|
27
|
-
- /var/lib/postgresql/data
|
|
28
|
-
`,
|
|
11
|
+
...(0, built_in_plan_testing_persistence_files_js_1.renderTestingPersistenceFiles)(name, pascalName, sql),
|
|
12
|
+
'scripts/deployed-smoke-readiness.mjs': deployed_smoke_readiness_js_1.deployedSmokeReadinessScript,
|
|
29
13
|
'docs/testing.md': `# ${name} testing
|
|
30
14
|
|
|
31
15
|
Use the narrowest proof layer that can establish the behavior. Source tests are
|
|
32
16
|
hermetic and credential-free. The \`test-integration\` target owns a disposable
|
|
33
|
-
|
|
34
|
-
|
|
17
|
+
DynamoDB Local container and one isolated table per worker. Declared SQL adds
|
|
18
|
+
a PostgreSQL container and one migrated database per worker. It runs deterministic
|
|
19
|
+
fixtures and removes every resource it creates.
|
|
35
20
|
It never uses the persistent database started by \`ebk dev\`.
|
|
36
21
|
|
|
37
22
|
Every fixture run records its seed and run scope. Keep fixture data synthetic.
|
|
@@ -45,41 +30,52 @@ those validators enforce cross-field outcome rules and trusted time/workflow
|
|
|
45
30
|
context that JSON Schema cannot establish alone.
|
|
46
31
|
|
|
47
32
|
\`smoke-deployed-check\` only proves that Playwright can discover the suite. It
|
|
48
|
-
does not contact or prove a deployment.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
\`FilterLogEvents\` on each exact
|
|
58
|
-
\`/ebk/<stage>/<slice>/event-consumer\` log group. The workflow creates one
|
|
59
|
-
run-scoped synthetic customer in the Slice's narrow \`<slice>-test-writer\`
|
|
60
|
-
group and one distinct synthetic reviewer in \`<slice>-admin\`. It never grants
|
|
61
|
-
the customer administrator authority, strips AWS credentials from the browser
|
|
62
|
-
child,
|
|
63
|
-
observes the published event only from the credential-bearing parent, removes
|
|
64
|
-
both principals and all raw browser and log state, and retains only allowlisted
|
|
65
|
-
sanitized evidence.
|
|
33
|
+
does not contact or prove a deployment. The root governed lifecycle runs each
|
|
34
|
+
Slice's \`smoke-deployed\` target immediately after its successful native SST
|
|
35
|
+
deployment and migration. Local and GitHub execution use the same stage
|
|
36
|
+
deployment role and exact deployed outputs; no separate smoke role, workflow,
|
|
37
|
+
target registry, or staging-evidence reconciliation graph exists.
|
|
38
|
+
|
|
39
|
+
The generated Next.js component selects native SST invalidation completion
|
|
40
|
+
before deployment returns. This is not a readiness or application guarantee;
|
|
41
|
+
the subsequent readiness and browser gates still apply.
|
|
66
42
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
43
|
+
Before synthetic users or browser assertions, a read-only prerequisite checks
|
|
44
|
+
the exact API and web service, stage and deployed build. Transient gateway or
|
|
45
|
+
network unavailability has one fixed thirty-second readiness bound. The one
|
|
46
|
+
exception is the Router's own CloudFront error page for the web route: the
|
|
47
|
+
pinned SST Router reads routing from an eventually consistent CloudFront
|
|
48
|
+
KeyValueStore, so a newly deployed route can briefly reach the placeholder
|
|
49
|
+
origin at an edge. Only that classified page may extend readiness, to at most
|
|
50
|
+
three hundred seconds; any other failure ends the extension. Readiness then
|
|
51
|
+
requires consecutive healthy rounds on fresh connections spanning thirty
|
|
52
|
+
seconds; any fallthrough restarts that window. Wrong build
|
|
53
|
+
identity, malformed responses, certificate errors, redirects and access denials
|
|
54
|
+
fail immediately. Bounded status, request-start time, duration, valid
|
|
55
|
+
CloudFront request-ID/POP/cache-result observations and the edge-routing
|
|
56
|
+
classification are retained in \`deployed-readiness.json\`; no URLs, response
|
|
57
|
+
bodies, cookies, arbitrary headers or credentials are retained. Duration
|
|
58
|
+
measures the request through response headers (or transport failure), not
|
|
59
|
+
response-body processing.
|
|
60
|
+
This prerequisite is not application acceptance and does not change browser or
|
|
61
|
+
event deadlines. Subsequent failed-then-passed assertions remain flaky/failing.
|
|
77
62
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
63
|
+
Development and staging smoke observe the exact event for at most sixteen
|
|
64
|
+
minutes; production observes it for at most ninety seconds. Ordinary delivery
|
|
65
|
+
uses DynamoDB Streams or SQL post-commit publication/notification, not a wait
|
|
66
|
+
for the recovery schedule. New SQL recovery defaults to hourly; a missed
|
|
67
|
+
notification may therefore leave a bounded smoke unsuccessful while its durable
|
|
68
|
+
intent remains recoverable. These observation limits include CloudWatch Logs
|
|
69
|
+
request latency; the runner aborts an in-flight request when time runs out.
|
|
70
|
+
Do not change maintenance pauses or increase timeouts merely to claim success.
|
|
71
|
+
|
|
72
|
+
The runner creates one run-scoped synthetic customer in the Slice's narrow
|
|
73
|
+
\`<slice>-test-writer\` group and one distinct synthetic reviewer in
|
|
74
|
+
\`<slice>-admin\`. It never grants the customer administrator authority, strips
|
|
75
|
+
AWS credentials from the browser child, observes the published event only from
|
|
76
|
+
the credential-bearing parent, removes both principals and all raw browser and
|
|
77
|
+
log state, and retains only allowlisted sanitized evidence. A failed smoke ends
|
|
78
|
+
the lifecycle immediately and no successful deployment receipt is written.
|
|
83
79
|
|
|
84
80
|
One optional evidence-level retry replays the complete, identical browser or
|
|
85
81
|
live-integration proof. Consequently \`counts.retried\` is always zero or one.
|
|
@@ -94,78 +90,6 @@ Local quarantine uses reviewed date expiry. A run-count record binds an
|
|
|
94
90
|
absolute \`.github/workflows/*.yml\` path and \`expiresAfterRun\`; it is accepted
|
|
95
91
|
only when GitHub supplies a matching \`GITHUB_WORKFLOW_REF\` and positive
|
|
96
92
|
\`GITHUB_RUN_NUMBER\`, and it must expire within 25 trusted workflow runs.
|
|
97
|
-
`,
|
|
98
|
-
'integration/record.spec.ts': `import { Client } from 'pg';
|
|
99
|
-
import { describe, expect, it } from 'vitest';
|
|
100
|
-
import { build${pascalName}RecordFixture } from '../testing/fixtures/records.js';
|
|
101
|
-
|
|
102
|
-
const databaseUrl = process.env.DATABASE_URL;
|
|
103
|
-
if (!databaseUrl) {
|
|
104
|
-
throw new Error('DATABASE_URL is required for ${name} local integration proof.');
|
|
105
|
-
}
|
|
106
|
-
const seed = process.env.EBK_TEST_SEED;
|
|
107
|
-
if (!seed) {
|
|
108
|
-
throw new Error('EBK_TEST_SEED is required for reproducible integration fixtures.');
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
describe('${name} database integration', () => {
|
|
112
|
-
it('writes and reads one deterministic record in its worker database', async () => {
|
|
113
|
-
const fixture = build${pascalName}RecordFixture(seed);
|
|
114
|
-
const client = new Client({ connectionString: databaseUrl });
|
|
115
|
-
await client.connect();
|
|
116
|
-
try {
|
|
117
|
-
await client.query(
|
|
118
|
-
\`INSERT INTO records
|
|
119
|
-
(id, name, owner_id, run_scope, test_expires_at)
|
|
120
|
-
VALUES ($1::uuid, $2, $3, $4, now() + INTERVAL '1 day')\`,
|
|
121
|
-
[fixture.id, fixture.name, 'synthetic-test-owner', seed],
|
|
122
|
-
);
|
|
123
|
-
const result = await client.query(
|
|
124
|
-
'SELECT id::text AS id, name FROM records WHERE id = $1::uuid',
|
|
125
|
-
[fixture.id],
|
|
126
|
-
);
|
|
127
|
-
expect(result.rows).toEqual([fixture]);
|
|
128
|
-
} finally {
|
|
129
|
-
await client.end();
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
`,
|
|
134
|
-
'integration/migrations.spec.ts': `import { Client } from 'pg';
|
|
135
|
-
import { describe, expect, it } from 'vitest';
|
|
136
|
-
|
|
137
|
-
const databaseUrl = process.env.DATABASE_URL;
|
|
138
|
-
if (!databaseUrl) {
|
|
139
|
-
throw new Error('DATABASE_URL is required for ${name} local integration proof.');
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
describe('${name} migration integration', () => {
|
|
143
|
-
it('exposes the committed records table contract', async () => {
|
|
144
|
-
const requiredColumns = [
|
|
145
|
-
{ column_name: 'id', data_type: 'uuid' },
|
|
146
|
-
{ column_name: 'name', data_type: 'text' },
|
|
147
|
-
{ column_name: 'owner_id', data_type: 'text' },
|
|
148
|
-
{ column_name: 'run_scope', data_type: 'text' },
|
|
149
|
-
{ column_name: 'created_at', data_type: 'timestamp with time zone' },
|
|
150
|
-
];
|
|
151
|
-
const client = new Client({ connectionString: databaseUrl });
|
|
152
|
-
await client.connect();
|
|
153
|
-
try {
|
|
154
|
-
const result = await client.query(
|
|
155
|
-
\`SELECT column_name, data_type
|
|
156
|
-
FROM information_schema.columns
|
|
157
|
-
WHERE table_schema = 'public'
|
|
158
|
-
AND table_name = 'records'
|
|
159
|
-
AND column_name = ANY($1::text[])
|
|
160
|
-
ORDER BY ordinal_position\`,
|
|
161
|
-
[requiredColumns.map(({ column_name }) => column_name)],
|
|
162
|
-
);
|
|
163
|
-
expect(result.rows).toEqual(requiredColumns);
|
|
164
|
-
} finally {
|
|
165
|
-
await client.end();
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
93
|
`,
|
|
170
94
|
'testing/fixtures/records.ts': `import { createTypedFixtureBuilder } from '@empire-builder-kit/nx/testing-evidence';
|
|
171
95
|
|
|
@@ -338,7 +262,7 @@ import {
|
|
|
338
262
|
mkdirSync,
|
|
339
263
|
readFileSync,
|
|
340
264
|
realpathSync,
|
|
341
|
-
readdirSync
|
|
265
|
+
${sql ? ' readdirSync,\n' : ''}\
|
|
342
266
|
rmSync,
|
|
343
267
|
statSync,
|
|
344
268
|
writeFileSync,
|
|
@@ -346,7 +270,9 @@ import {
|
|
|
346
270
|
import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
347
271
|
import { createRequire } from 'node:module';
|
|
348
272
|
import { TextDecoder } from 'node:util';
|
|
349
|
-
import pg from 'pg';
|
|
273
|
+
${sql ? "import pg from 'pg';" : ''}
|
|
274
|
+
import { CreateTableCommand, DynamoDBClient, ListTablesCommand } from '@aws-sdk/client-dynamodb';
|
|
275
|
+
import { DYNAMO_PENDING_INDEX } from '@empire-builder-kit/runtime/key-value';
|
|
350
276
|
import {
|
|
351
277
|
githubWorkflowRun,
|
|
352
278
|
reconcileRunnerQuarantine,
|
|
@@ -355,14 +281,14 @@ import {
|
|
|
355
281
|
|
|
356
282
|
const require = createRequire(import.meta.url);
|
|
357
283
|
const {
|
|
358
|
-
createLocalTestScope
|
|
284
|
+
${sql ? ' createLocalTestScope,\n' : ''}\
|
|
359
285
|
createTestingEvidenceFromRunnerAttempts,
|
|
360
286
|
inspectTestingEvidenceArtifact,
|
|
361
287
|
normalizeEbkIntegrationEvidenceAttempt,
|
|
362
288
|
sanitizeTestingEvidenceSummary,
|
|
363
289
|
validateTestingEvidenceQuarantine,
|
|
364
290
|
} = require('@empire-builder-kit/nx/testing-evidence');
|
|
365
|
-
const { Client } = pg;
|
|
291
|
+
${sql ? 'const { Client } = pg;' : ''}
|
|
366
292
|
const fatalUtf8Decoder = new TextDecoder('utf-8', { fatal: true });
|
|
367
293
|
const projectRoot = process.cwd();
|
|
368
294
|
const workspaceRoot = resolve(projectRoot, '../..');
|
|
@@ -398,9 +324,8 @@ const run = (command, args, options = {}) => {
|
|
|
398
324
|
}
|
|
399
325
|
return result.stdout.trim();
|
|
400
326
|
};
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
run('git', ['rev-parse', 'HEAD'], { cwd: workspaceRoot });
|
|
327
|
+
${local_source_identity_js_1.localSourceCommitFunction}
|
|
328
|
+
const gitCommit = localSourceCommit();
|
|
404
329
|
const workspacePackage = readJson(join(workspaceRoot, 'package.json'));
|
|
405
330
|
const ownership = readJson(join(projectRoot, '.ebk', 'ownership.json'));
|
|
406
331
|
const frameworkCandidate =
|
|
@@ -658,7 +583,8 @@ function pruneStaleTestProjects() {
|
|
|
658
583
|
}
|
|
659
584
|
}
|
|
660
585
|
|
|
661
|
-
|
|
586
|
+
${sql
|
|
587
|
+
? `async function prepareDatabase(adminUrl, databaseName) {
|
|
662
588
|
const admin = new Client({ connectionString: adminUrl });
|
|
663
589
|
await admin.connect();
|
|
664
590
|
try {
|
|
@@ -681,9 +607,54 @@ async function prepareDatabase(adminUrl, databaseName) {
|
|
|
681
607
|
await client.end();
|
|
682
608
|
}
|
|
683
609
|
return databaseUrl;
|
|
610
|
+
}`
|
|
611
|
+
: ''}
|
|
612
|
+
|
|
613
|
+
function localDynamoClient(endpoint) {
|
|
614
|
+
const url = new URL(endpoint);
|
|
615
|
+
if (url.protocol !== 'http:' || url.hostname !== '127.0.0.1' || !url.port ||
|
|
616
|
+
url.username || url.password || url.search || url.hash || url.pathname !== '/')
|
|
617
|
+
throw new Error('Integration DynamoDB must use its owned loopback endpoint.');
|
|
618
|
+
return new DynamoDBClient({ endpoint, region: 'us-east-1', maxAttempts: 1,
|
|
619
|
+
credentials: { accessKeyId: 'LOCALFIXTURE', secretAccessKey: 'local-fixture-not-an-aws-credential' } });
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
async function waitForLocalDynamo(endpoint) {
|
|
623
|
+
const client = localDynamoClient(endpoint);
|
|
624
|
+
const deadline = Date.now() + 30_000;
|
|
625
|
+
try {
|
|
626
|
+
for (;;) {
|
|
627
|
+
try { await client.send(new ListTablesCommand({ Limit: 1 })); return; }
|
|
628
|
+
catch (error) {
|
|
629
|
+
if (Date.now() >= deadline) throw error;
|
|
630
|
+
await new Promise((resolveWait) => setTimeout(resolveWait, 200));
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
} finally { client.destroy(); }
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
async function prepareKeyValue(endpoint, attempt, worker) {
|
|
637
|
+
if (!validRunId || ![1, 2].includes(attempt) || !Number.isInteger(worker) || worker < 0 || worker > 7)
|
|
638
|
+
throw new Error('Integration table identity is invalid.');
|
|
639
|
+
const tableName = 'ebk-test-${name}-' + runId + '-a' + attempt + '-w' + worker;
|
|
640
|
+
const client = localDynamoClient(endpoint);
|
|
641
|
+
try {
|
|
642
|
+
await client.send(new CreateTableCommand({ TableName: tableName, BillingMode: 'PAY_PER_REQUEST',
|
|
643
|
+
AttributeDefinitions: [
|
|
644
|
+
{ AttributeName: 'pk', AttributeType: 'S' }, { AttributeName: 'sk', AttributeType: 'S' },
|
|
645
|
+
{ AttributeName: 'pendingPk', AttributeType: 'S' }, { AttributeName: 'pendingAt', AttributeType: 'N' },
|
|
646
|
+
],
|
|
647
|
+
KeySchema: [{ AttributeName: 'pk', KeyType: 'HASH' }, { AttributeName: 'sk', KeyType: 'RANGE' }],
|
|
648
|
+
GlobalSecondaryIndexes: [{ IndexName: DYNAMO_PENDING_INDEX,
|
|
649
|
+
KeySchema: [{ AttributeName: 'pendingPk', KeyType: 'HASH' }, { AttributeName: 'pendingAt', KeyType: 'RANGE' }],
|
|
650
|
+
Projection: { ProjectionType: 'ALL' } }],
|
|
651
|
+
StreamSpecification: { StreamEnabled: true, StreamViewType: 'NEW_AND_OLD_IMAGES' },
|
|
652
|
+
}));
|
|
653
|
+
return tableName;
|
|
654
|
+
} finally { client.destroy(); }
|
|
684
655
|
}
|
|
685
656
|
|
|
686
|
-
function runWorker(worker,
|
|
657
|
+
function runWorker(worker, persistence, reportPath, attempt) {
|
|
687
658
|
const arguments_ = [
|
|
688
659
|
installedVitestCommand.entryPoint,
|
|
689
660
|
'run',
|
|
@@ -724,7 +695,11 @@ function runWorker(worker, databaseUrl, reportPath, attempt) {
|
|
|
724
695
|
cwd: projectRoot,
|
|
725
696
|
env: {
|
|
726
697
|
...childEnvironment,
|
|
727
|
-
DATABASE_URL: databaseUrl,
|
|
698
|
+
...(persistence.databaseUrl ? { DATABASE_URL: persistence.databaseUrl } : {}),
|
|
699
|
+
EBK_TEST_DYNAMODB_ENDPOINT: persistence.endpoint,
|
|
700
|
+
EBK_TEST_DYNAMODB_TABLE: persistence.tableName,
|
|
701
|
+
EBK_STAGE: 'development',
|
|
702
|
+
EVENT_BUS_NAME: 'local-integration-events',
|
|
728
703
|
EBK_TEST_ATTEMPT: String(attempt),
|
|
729
704
|
EBK_TEST_RUN_ID: runId,
|
|
730
705
|
EBK_TEST_SEED: seed,
|
|
@@ -909,16 +884,17 @@ function readBoundedVitestReport(reportPath) {
|
|
|
909
884
|
return { report };
|
|
910
885
|
}
|
|
911
886
|
|
|
912
|
-
async function runAttempt(attempt, adminUrl) {
|
|
887
|
+
async function runAttempt(attempt, endpoint${sql ? ', adminUrl' : ''}) {
|
|
913
888
|
const attemptStartedAt = new Date().toISOString();
|
|
914
889
|
const findings = [];
|
|
915
890
|
const reports = [];
|
|
916
891
|
const reportPaths = [];
|
|
917
892
|
let workerResults = [];
|
|
918
893
|
try {
|
|
919
|
-
const
|
|
894
|
+
const persistenceWorkers = [];
|
|
920
895
|
for (let worker = 0; worker < workers; worker += 1) {
|
|
921
|
-
|
|
896
|
+
${sql
|
|
897
|
+
? `const scope = createLocalTestScope({
|
|
922
898
|
capabilities: {
|
|
923
899
|
canCreateDatabase: true,
|
|
924
900
|
canForceDropDatabase: true,
|
|
@@ -935,18 +911,18 @@ async function runAttempt(attempt, adminUrl) {
|
|
|
935
911
|
},
|
|
936
912
|
sharedDatabaseName: 'postgres',
|
|
937
913
|
});
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
);
|
|
914
|
+
const databaseUrl = await prepareDatabase(adminUrl, scope.databaseName);`
|
|
915
|
+
: ''}
|
|
916
|
+
persistenceWorkers.push({ endpoint, tableName: await prepareKeyValue(endpoint, attempt, worker)${sql ? ', databaseUrl' : ''} });
|
|
941
917
|
}
|
|
942
918
|
workerResults = await Promise.all(
|
|
943
|
-
|
|
919
|
+
persistenceWorkers.map((persistence, worker) => {
|
|
944
920
|
const reportPath = join(
|
|
945
921
|
rawRoot,
|
|
946
922
|
'vitest-attempt-' + attempt + '-worker-' + worker + '.json',
|
|
947
923
|
);
|
|
948
924
|
reportPaths.push(reportPath);
|
|
949
|
-
return runWorker(worker,
|
|
925
|
+
return runWorker(worker, persistence, reportPath, attempt);
|
|
950
926
|
}),
|
|
951
927
|
);
|
|
952
928
|
const workerDiagnostics = [];
|
|
@@ -1164,11 +1140,18 @@ if (process.exitCode === undefined) {
|
|
|
1164
1140
|
const reports = [];
|
|
1165
1141
|
const reportPaths = [];
|
|
1166
1142
|
try {
|
|
1143
|
+
// Even a partially failed compose up can create owned resources.
|
|
1144
|
+
proofStarted = true;
|
|
1167
1145
|
run('docker', [...composeArgs, 'up', '--detach', '--wait'], {
|
|
1168
1146
|
env: { ...process.env, EBK_TEST_RUN_ID: runId },
|
|
1169
1147
|
});
|
|
1170
|
-
|
|
1171
|
-
const
|
|
1148
|
+
const keyValueAddress = run('docker', [...composeArgs, 'port', 'key-value', '8000']);
|
|
1149
|
+
const keyValuePort = /:(\\d+)\\s*$/.exec(keyValueAddress)?.[1];
|
|
1150
|
+
if (!keyValuePort) throw new Error('Docker did not report the integration DynamoDB port.');
|
|
1151
|
+
const endpoint = 'http://127.0.0.1:' + keyValuePort;
|
|
1152
|
+
await waitForLocalDynamo(endpoint);
|
|
1153
|
+
${sql
|
|
1154
|
+
? `const address = run('docker', [
|
|
1172
1155
|
...composeArgs,
|
|
1173
1156
|
'port',
|
|
1174
1157
|
'database',
|
|
@@ -1177,13 +1160,14 @@ if (process.exitCode === undefined) {
|
|
|
1177
1160
|
const port = /:(\\d+)\\s*$/.exec(address)?.[1];
|
|
1178
1161
|
if (!port) throw new Error('Docker did not report the integration port.');
|
|
1179
1162
|
const adminUrl =
|
|
1180
|
-
'postgresql://ebk_test:ebk_test@127.0.0.1:' + port + '/postgres'
|
|
1181
|
-
|
|
1163
|
+
'postgresql://ebk_test:ebk_test@127.0.0.1:' + port + '/postgres';`
|
|
1164
|
+
: ''}
|
|
1165
|
+
const first = await runAttempt(1, endpoint${sql ? ', adminUrl' : ''});
|
|
1182
1166
|
attempts.push(first.normalized);
|
|
1183
1167
|
reports.push(...first.reports);
|
|
1184
1168
|
reportPaths.push(...first.reportPaths);
|
|
1185
1169
|
if (first.normalized.failed > 0) {
|
|
1186
|
-
const second = await runAttempt(2, adminUrl);
|
|
1170
|
+
const second = await runAttempt(2, endpoint${sql ? ', adminUrl' : ''});
|
|
1187
1171
|
attempts.push(second.normalized);
|
|
1188
1172
|
reports.push(...second.reports);
|
|
1189
1173
|
reportPaths.push(...second.reportPaths);
|
|
@@ -1310,7 +1294,9 @@ if (process.exitCode === undefined) {
|
|
|
1310
1294
|
}
|
|
1311
1295
|
}
|
|
1312
1296
|
`,
|
|
1313
|
-
'scripts/run-smoke-deployed.mjs': `import {
|
|
1297
|
+
'scripts/run-smoke-deployed.mjs': `import { sliceAuthorizationGroupNames } from '../authorization/groups.mjs';
|
|
1298
|
+
import { waitForDeployedSmokeReadiness } from './deployed-smoke-readiness.mjs';
|
|
1299
|
+
import {
|
|
1314
1300
|
AdminAddUserToGroupCommand,
|
|
1315
1301
|
AdminCreateUserCommand,
|
|
1316
1302
|
AdminDeleteUserCommand,
|
|
@@ -1333,6 +1319,7 @@ import {
|
|
|
1333
1319
|
writeFileSync,
|
|
1334
1320
|
} from 'node:fs';
|
|
1335
1321
|
import { join, relative, resolve } from 'node:path';
|
|
1322
|
+
import { performance } from 'node:perf_hooks';
|
|
1336
1323
|
import { createRequire } from 'node:module';
|
|
1337
1324
|
import { TextDecoder } from 'node:util';
|
|
1338
1325
|
import {
|
|
@@ -1340,6 +1327,7 @@ import {
|
|
|
1340
1327
|
playwrightSkippedTestIds,
|
|
1341
1328
|
reconcileRunnerQuarantine,
|
|
1342
1329
|
} from '../testing/quarantine-runtime.mjs';
|
|
1330
|
+
import { assertWorkspaceStageOwnershipForWorkspace } from '@empire-builder-kit/nx/workspace-deployment';
|
|
1343
1331
|
|
|
1344
1332
|
const require = createRequire(import.meta.url);
|
|
1345
1333
|
const {
|
|
@@ -1381,6 +1369,15 @@ const run = (command, args, options = {}) => {
|
|
|
1381
1369
|
const gitCommit =
|
|
1382
1370
|
process.env.EBK_SOURCE_COMMIT ??
|
|
1383
1371
|
run('git', ['rev-parse', 'HEAD'], { cwd: workspaceRoot });
|
|
1372
|
+
// The deployed Functions report the build identity the packaged executor
|
|
1373
|
+
// hands over (EBK_DEPLOYED_SOURCE_COMMIT: the release source of promoted
|
|
1374
|
+
// immutable artifacts); evidence keeps binding the source commit this run
|
|
1375
|
+
// executes under.
|
|
1376
|
+
const deployedSourceCommit = /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(
|
|
1377
|
+
process.env.EBK_DEPLOYED_SOURCE_COMMIT ?? '',
|
|
1378
|
+
)
|
|
1379
|
+
? process.env.EBK_DEPLOYED_SOURCE_COMMIT
|
|
1380
|
+
: gitCommit;
|
|
1384
1381
|
const workspacePackage = readJson(join(workspaceRoot, 'package.json'));
|
|
1385
1382
|
const ownership = readJson(join(projectRoot, '.ebk', 'ownership.json'));
|
|
1386
1383
|
const frameworkCandidate =
|
|
@@ -1397,6 +1394,14 @@ const userPoolId = process.env.EBK_SMOKE_USER_POOL_ID ?? '';
|
|
|
1397
1394
|
const clientId = process.env.EBK_SMOKE_CLIENT_ID ?? '';
|
|
1398
1395
|
const smokeAuthority =
|
|
1399
1396
|
process.env.EBK_SMOKE_AUTHORITY_VERSION ?? '';
|
|
1397
|
+
const lifecycleAdapter = process.env.EBK_NX_STAGE_LIFECYCLE ?? '';
|
|
1398
|
+
const deployedEnvironmentClass =
|
|
1399
|
+
lifecycleAdapter === 'local'
|
|
1400
|
+
? 'local-federated'
|
|
1401
|
+
: lifecycleAdapter === 'github'
|
|
1402
|
+
? 'protected-github'
|
|
1403
|
+
: undefined;
|
|
1404
|
+
const unexpectedArguments = process.argv.slice(2);
|
|
1400
1405
|
const requestedRunId = process.env.EBK_TEST_RUN_ID;
|
|
1401
1406
|
const runId = requestedRunId ?? randomUUID().replaceAll('-', '');
|
|
1402
1407
|
const seed = process.env.EBK_TEST_SEED ?? runId;
|
|
@@ -1406,8 +1411,10 @@ const evidenceRunId = validRunId ? runId : 'invalid-run-id';
|
|
|
1406
1411
|
const evidenceSeed = validSeed ? seed : 'invalid-seed';
|
|
1407
1412
|
const resultPath = join(evidenceRoot, 'smoke-deployed.json');
|
|
1408
1413
|
const sanitizedReportPath = join(evidenceRoot, 'playwright-smoke.json');
|
|
1414
|
+
const readinessPath = join(evidenceRoot, 'deployed-readiness.json');
|
|
1409
1415
|
rmSync(resultPath, { force: true });
|
|
1410
1416
|
rmSync(sanitizedReportPath, { force: true });
|
|
1417
|
+
rmSync(readinessPath, { force: true });
|
|
1411
1418
|
const rawPath = (attempt) =>
|
|
1412
1419
|
join(rawRoot, 'playwright-smoke-' + attempt + '.json');
|
|
1413
1420
|
const dataCleanupPath = (attempt) =>
|
|
@@ -1483,7 +1490,7 @@ function failPreflight(
|
|
|
1483
1490
|
attempts: [],
|
|
1484
1491
|
cleanup,
|
|
1485
1492
|
environment: {
|
|
1486
|
-
class: '
|
|
1493
|
+
class: deployedEnvironmentClass ?? 'unresolved-adapter',
|
|
1487
1494
|
deployed: true,
|
|
1488
1495
|
stage: stage || 'unresolved',
|
|
1489
1496
|
},
|
|
@@ -1597,6 +1604,30 @@ function validObservationIntent(value) {
|
|
|
1597
1604
|
);
|
|
1598
1605
|
}
|
|
1599
1606
|
|
|
1607
|
+
// Names the failed specs by their static titles so retained evidence says
|
|
1608
|
+
// which journey failed without carrying runner output.
|
|
1609
|
+
function playwrightFailureDiagnostic(report) {
|
|
1610
|
+
const titles = [];
|
|
1611
|
+
const visit = (suite, parents) => {
|
|
1612
|
+
const nextTitles = suite.title ? [...parents, suite.title] : parents;
|
|
1613
|
+
for (const spec of suite.specs ?? []) {
|
|
1614
|
+
if (spec?.ok === false && titles.length < 8) {
|
|
1615
|
+
titles.push(
|
|
1616
|
+
[...nextTitles, spec.title ?? '']
|
|
1617
|
+
.filter(Boolean)
|
|
1618
|
+
.join(' > ')
|
|
1619
|
+
.slice(0, 160),
|
|
1620
|
+
);
|
|
1621
|
+
}
|
|
1622
|
+
}
|
|
1623
|
+
for (const child of suite.suites ?? []) visit(child, nextTitles);
|
|
1624
|
+
};
|
|
1625
|
+
for (const suite of report?.suites ?? []) visit(suite, []);
|
|
1626
|
+
return titles.length > 0
|
|
1627
|
+
? 'Playwright smoke assertions failed: ' + titles.join('; ')
|
|
1628
|
+
: 'Playwright smoke assertions failed.';
|
|
1629
|
+
}
|
|
1630
|
+
|
|
1600
1631
|
function inspectPlaywrightReportPolicy(report) {
|
|
1601
1632
|
const config = report?.config;
|
|
1602
1633
|
const stats = report?.stats;
|
|
@@ -1690,6 +1721,29 @@ function inspectPlaywrightReportPolicy(report) {
|
|
|
1690
1721
|
};
|
|
1691
1722
|
}
|
|
1692
1723
|
|
|
1724
|
+
function requiresScheduledDeliveryObservation(stage) {
|
|
1725
|
+
return ['development', 'staging', 'production'].includes(stage);
|
|
1726
|
+
}
|
|
1727
|
+
|
|
1728
|
+
// A successful browser journey may have deleted its synthetic record, while
|
|
1729
|
+
// its mutation receipt remains. Replaying that same journey/run scope cannot
|
|
1730
|
+
// recreate the record, even when the first cleanup completed successfully.
|
|
1731
|
+
function shouldRetryDeployedSmoke(execution) {
|
|
1732
|
+
return (
|
|
1733
|
+
execution.failed > 0 &&
|
|
1734
|
+
execution.dataCleanup?.outcome === 'not-required' &&
|
|
1735
|
+
execution.observationFindings.length === 0
|
|
1736
|
+
);
|
|
1737
|
+
}
|
|
1738
|
+
|
|
1739
|
+
function scheduledDeliveryDeadlineFinding() {
|
|
1740
|
+
return {
|
|
1741
|
+
classification: 'assertion-failed',
|
|
1742
|
+
summary:
|
|
1743
|
+
'The exact published event and correlation were not observed in the managed event-consumer log group within the bounded window.',
|
|
1744
|
+
};
|
|
1745
|
+
}
|
|
1746
|
+
|
|
1693
1747
|
async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
|
|
1694
1748
|
let intent;
|
|
1695
1749
|
try {
|
|
@@ -1711,7 +1765,12 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
|
|
|
1711
1765
|
}
|
|
1712
1766
|
const logGroupName = '/ebk/' + stage + '/${name}/event-consumer';
|
|
1713
1767
|
const startTime = Math.max(0, Date.parse(attemptStartedAt) - 5_000);
|
|
1714
|
-
|
|
1768
|
+
const timeoutMilliseconds = stage === 'production' ? 90_000 : 960_000;
|
|
1769
|
+
const deadline = performance.now() + timeoutMilliseconds;
|
|
1770
|
+
let consecutiveUnavailableReads = 0;
|
|
1771
|
+
while (true) {
|
|
1772
|
+
const remainingRequestMilliseconds = deadline - performance.now();
|
|
1773
|
+
if (remainingRequestMilliseconds <= 0) break;
|
|
1715
1774
|
let response;
|
|
1716
1775
|
try {
|
|
1717
1776
|
response = await logs.send(
|
|
@@ -1721,14 +1780,47 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
|
|
|
1721
1780
|
logGroupName,
|
|
1722
1781
|
startTime,
|
|
1723
1782
|
}),
|
|
1783
|
+
{
|
|
1784
|
+
abortSignal: AbortSignal.timeout(
|
|
1785
|
+
Math.max(1, Math.ceil(remainingRequestMilliseconds)),
|
|
1786
|
+
),
|
|
1787
|
+
},
|
|
1724
1788
|
);
|
|
1725
1789
|
} catch (error) {
|
|
1790
|
+
if (error?.name === 'ServiceUnavailableException') {
|
|
1791
|
+
consecutiveUnavailableReads += 1;
|
|
1792
|
+
// Retry the read, not the already-mutating browser journey. Keep this
|
|
1793
|
+
// much shorter than the delivery deadline when Logs is unavailable.
|
|
1794
|
+
const remainingDelayMilliseconds = deadline - performance.now();
|
|
1795
|
+
const retryDelayMilliseconds = 1_000 * consecutiveUnavailableReads;
|
|
1796
|
+
if (
|
|
1797
|
+
consecutiveUnavailableReads >= 3 ||
|
|
1798
|
+
remainingDelayMilliseconds <= retryDelayMilliseconds
|
|
1799
|
+
) {
|
|
1800
|
+
return permissionFailure(
|
|
1801
|
+
error,
|
|
1802
|
+
'event-consumer observation',
|
|
1803
|
+
'CloudWatch Logs',
|
|
1804
|
+
);
|
|
1805
|
+
}
|
|
1806
|
+
await new Promise((resolveDelay) =>
|
|
1807
|
+
setTimeout(resolveDelay, retryDelayMilliseconds),
|
|
1808
|
+
);
|
|
1809
|
+
continue;
|
|
1810
|
+
}
|
|
1811
|
+
if (['AbortError', 'TimeoutError'].includes(error?.name)) {
|
|
1812
|
+
return scheduledDeliveryDeadlineFinding();
|
|
1813
|
+
}
|
|
1726
1814
|
return permissionFailure(
|
|
1727
1815
|
error,
|
|
1728
1816
|
'event-consumer observation',
|
|
1729
1817
|
'CloudWatch Logs',
|
|
1730
1818
|
);
|
|
1731
1819
|
}
|
|
1820
|
+
consecutiveUnavailableReads = 0;
|
|
1821
|
+
if (performance.now() > deadline) {
|
|
1822
|
+
return scheduledDeliveryDeadlineFinding();
|
|
1823
|
+
}
|
|
1732
1824
|
const observed = (response.events ?? []).some(({ message }) => {
|
|
1733
1825
|
const record = structuredLogRecord(message);
|
|
1734
1826
|
return (
|
|
@@ -1744,15 +1836,13 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
|
|
|
1744
1836
|
);
|
|
1745
1837
|
});
|
|
1746
1838
|
if (observed) return undefined;
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1839
|
+
const remainingDelayMilliseconds = deadline - performance.now();
|
|
1840
|
+
if (remainingDelayMilliseconds <= 0) break;
|
|
1841
|
+
await new Promise((resolveDelay) =>
|
|
1842
|
+
setTimeout(resolveDelay, Math.min(3_000, remainingDelayMilliseconds)),
|
|
1843
|
+
);
|
|
1750
1844
|
}
|
|
1751
|
-
return
|
|
1752
|
-
classification: 'assertion-failed',
|
|
1753
|
-
summary:
|
|
1754
|
-
'The exact published event and correlation were not observed in the managed event-consumer log group within the bounded window.',
|
|
1755
|
-
};
|
|
1845
|
+
return scheduledDeliveryDeadlineFinding();
|
|
1756
1846
|
}
|
|
1757
1847
|
|
|
1758
1848
|
const url = credentialFreeHttpsUrl(smokeUrl);
|
|
@@ -1763,7 +1853,7 @@ const validIdentity =
|
|
|
1763
1853
|
/^[A-Za-z0-9_-]{1,128}_[A-Za-z0-9]{1,128}$/.test(userPoolId) &&
|
|
1764
1854
|
/^[a-z0-9]{1,128}$/.test(clientId);
|
|
1765
1855
|
if (
|
|
1766
|
-
!['staging', 'production'].includes(stage) ||
|
|
1856
|
+
!['development', 'staging', 'production'].includes(stage) ||
|
|
1767
1857
|
!url ||
|
|
1768
1858
|
!apiUrl ||
|
|
1769
1859
|
normalizedProductPath !== expectedProductPath ||
|
|
@@ -1772,14 +1862,35 @@ if (
|
|
|
1772
1862
|
!validSourceCommit ||
|
|
1773
1863
|
!validRunId ||
|
|
1774
1864
|
!validSeed ||
|
|
1865
|
+
!deployedEnvironmentClass ||
|
|
1866
|
+
unexpectedArguments.length > 0 ||
|
|
1775
1867
|
smokeAuthority !== 'cognito-admin-cloudwatch-observe-v1' ||
|
|
1776
1868
|
!process.env.AWS_REGION
|
|
1777
1869
|
) {
|
|
1778
1870
|
failPreflight(
|
|
1779
1871
|
'prerequisite-missing',
|
|
1780
|
-
'
|
|
1872
|
+
'Deployed smoke requires development, staging, or production, one exact source commit, native credential-free HTTPS web and API outputs, exact Cognito identity, bounded run/seed identity, AWS region, and cognito-admin-cloudwatch-observe-v1 authority acknowledgement.',
|
|
1781
1873
|
);
|
|
1782
1874
|
}
|
|
1875
|
+
if (process.exitCode === undefined) {
|
|
1876
|
+
try {
|
|
1877
|
+
const ownership = await assertWorkspaceStageOwnershipForWorkspace(workspaceRoot, stage, {
|
|
1878
|
+
...(process.env.AWS_PROFILE ? { profile: process.env.AWS_PROFILE } : {}),
|
|
1879
|
+
...(process.env.AWS_CONFIG_FILE ? { configFilepath: process.env.AWS_CONFIG_FILE } : {}),
|
|
1880
|
+
...(process.env.AWS_SHARED_CREDENTIALS_FILE
|
|
1881
|
+
? { credentialsFilepath: process.env.AWS_SHARED_CREDENTIALS_FILE }
|
|
1882
|
+
: {}),
|
|
1883
|
+
});
|
|
1884
|
+
if (process.env.AWS_REGION !== ownership.region) {
|
|
1885
|
+
throw new Error('Deployed smoke Region differs from its exact workspace owner tuple.');
|
|
1886
|
+
}
|
|
1887
|
+
} catch {
|
|
1888
|
+
failPreflight(
|
|
1889
|
+
'authorization-denied',
|
|
1890
|
+
'Deployed smoke requires this workspace to own the exact account, Region, and canonical stage tuple.',
|
|
1891
|
+
);
|
|
1892
|
+
}
|
|
1893
|
+
}
|
|
1783
1894
|
if (process.exitCode === undefined) {
|
|
1784
1895
|
let quarantine;
|
|
1785
1896
|
try {
|
|
@@ -1809,6 +1920,23 @@ if (process.exitCode === undefined) {
|
|
|
1809
1920
|
}
|
|
1810
1921
|
}
|
|
1811
1922
|
|
|
1923
|
+
if (process.exitCode === undefined) {
|
|
1924
|
+
const readiness = await waitForDeployedSmokeReadiness({
|
|
1925
|
+
apiUrl: smokeApiUrl,
|
|
1926
|
+
webUrl: smokeUrl,
|
|
1927
|
+
service: '${name}',
|
|
1928
|
+
stage,
|
|
1929
|
+
sourceCommit: deployedSourceCommit,
|
|
1930
|
+
});
|
|
1931
|
+
writeFileSync(readinessPath, JSON.stringify({
|
|
1932
|
+
schemaVersion: 1, source, deployedSourceCommit, stage, slice: '${name}',
|
|
1933
|
+
result: readiness,
|
|
1934
|
+
}, null, 2) + '\\n', { encoding: 'utf8', mode: 0o600 });
|
|
1935
|
+
if (readiness.outcome !== 'ready') {
|
|
1936
|
+
failPreflight(readiness.classification, readiness.summary);
|
|
1937
|
+
}
|
|
1938
|
+
}
|
|
1939
|
+
|
|
1812
1940
|
if (process.exitCode === undefined) {
|
|
1813
1941
|
const cognito = new CognitoIdentityProviderClient({
|
|
1814
1942
|
region: process.env.AWS_REGION,
|
|
@@ -1857,7 +1985,7 @@ if (process.exitCode === undefined) {
|
|
|
1857
1985
|
);
|
|
1858
1986
|
await cognito.send(
|
|
1859
1987
|
new AdminAddUserToGroupCommand({
|
|
1860
|
-
GroupName:
|
|
1988
|
+
GroupName: sliceAuthorizationGroupNames(stage).testWriter,
|
|
1861
1989
|
Username: principalEmail,
|
|
1862
1990
|
UserPoolId: userPoolId,
|
|
1863
1991
|
}),
|
|
@@ -1884,7 +2012,7 @@ if (process.exitCode === undefined) {
|
|
|
1884
2012
|
);
|
|
1885
2013
|
await cognito.send(
|
|
1886
2014
|
new AdminAddUserToGroupCommand({
|
|
1887
|
-
GroupName:
|
|
2015
|
+
GroupName: sliceAuthorizationGroupNames(stage).admin,
|
|
1888
2016
|
Username: reviewerEmail,
|
|
1889
2017
|
UserPoolId: userPoolId,
|
|
1890
2018
|
}),
|
|
@@ -2015,11 +2143,12 @@ if (process.exitCode === undefined) {
|
|
|
2015
2143
|
encoding: 'utf8',
|
|
2016
2144
|
env: {
|
|
2017
2145
|
...childEnvironment,
|
|
2018
|
-
EBK_SOURCE_COMMIT:
|
|
2146
|
+
EBK_SOURCE_COMMIT: deployedSourceCommit,
|
|
2019
2147
|
EBK_STAGE: stage,
|
|
2020
2148
|
EBK_SMOKE_API_URL: apiUrl.href,
|
|
2021
2149
|
EBK_SMOKE_DATA_CLEANUP_PATH: cleanupPath,
|
|
2022
2150
|
EBK_SMOKE_EMAIL: principalEmail,
|
|
2151
|
+
EBK_FRONTEND_SECURITY_PROFILE: 'deployed-https',
|
|
2023
2152
|
EBK_SMOKE_PASSWORD: principalPassword,
|
|
2024
2153
|
EBK_SMOKE_REVIEWER_EMAIL: reviewerEmail,
|
|
2025
2154
|
EBK_SMOKE_REVIEWER_PASSWORD: reviewerPassword,
|
|
@@ -2077,7 +2206,10 @@ if (process.exitCode === undefined) {
|
|
|
2077
2206
|
} else {
|
|
2078
2207
|
reportInvalid = true;
|
|
2079
2208
|
}
|
|
2080
|
-
if (
|
|
2209
|
+
if (
|
|
2210
|
+
execution?.status === 0 &&
|
|
2211
|
+
requiresScheduledDeliveryObservation(stage)
|
|
2212
|
+
) {
|
|
2081
2213
|
observationFinding = await observePublishedEvent(
|
|
2082
2214
|
logs,
|
|
2083
2215
|
observationPath,
|
|
@@ -2142,7 +2274,7 @@ if (process.exitCode === undefined) {
|
|
|
2142
2274
|
: undefined) ||
|
|
2143
2275
|
(execution?.error
|
|
2144
2276
|
? 'The Playwright process could not start.'
|
|
2145
|
-
:
|
|
2277
|
+
: playwrightFailureDiagnostic(report)),
|
|
2146
2278
|
failed,
|
|
2147
2279
|
artifactSensitive: reportCredentialLeak,
|
|
2148
2280
|
observationFindings: observationFinding
|
|
@@ -2178,7 +2310,7 @@ if (process.exitCode === undefined) {
|
|
|
2178
2310
|
let cleanup = { outcome: 'passed' };
|
|
2179
2311
|
try {
|
|
2180
2312
|
executions.push(await executeAttempt(1));
|
|
2181
|
-
if (executions[0]
|
|
2313
|
+
if (shouldRetryDeployedSmoke(executions[0])) {
|
|
2182
2314
|
executions.push(await executeAttempt(2));
|
|
2183
2315
|
}
|
|
2184
2316
|
const reports = executions
|
|
@@ -2362,7 +2494,7 @@ if (process.exitCode === undefined) {
|
|
|
2362
2494
|
attempts,
|
|
2363
2495
|
cleanup,
|
|
2364
2496
|
environment: {
|
|
2365
|
-
class:
|
|
2497
|
+
class: deployedEnvironmentClass,
|
|
2366
2498
|
deployed: true,
|
|
2367
2499
|
stage,
|
|
2368
2500
|
},
|