@empire-builder-kit/nx 1.0.0-rc.37 → 1.0.0-rc.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/executors.json +5 -0
- package/generators.json +10 -0
- package/package.json +20 -3
- package/src/aws-authority/index.d.ts +1 -0
- package/src/aws-authority/index.js +1 -0
- package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
- package/src/aws-authority/lambda-policy-ordering.js +56 -0
- package/src/aws-authority/stage-authority.d.ts +11 -3
- package/src/aws-authority/stage-authority.js +615 -29
- package/src/blueprints/external-sandbox.js +21 -9
- package/src/blueprints/manifest.d.ts +1 -1
- package/src/blueprints/resolver.js +28 -15
- package/src/cli/bootstrap.d.ts +1 -1
- package/src/cli/deploy-runtime.d.ts +6 -0
- package/src/cli/deploy-runtime.js +58 -0
- package/src/cli/dev-command.d.ts +16 -4
- package/src/cli/dev-command.js +63 -0
- package/src/cli/main.d.ts +7 -1
- package/src/cli/main.js +128 -20
- package/src/cli/output.d.ts +1 -1
- package/src/developer-agent/context.js +41 -9
- package/src/developer-agent/generator-planning.js +16 -2
- package/src/developer-agent/git-inspection.d.ts +6 -2
- package/src/developer-agent/git-inspection.js +78 -6
- package/src/developer-agent/model.d.ts +4 -2
- package/src/developer-agent/operation-registry.d.ts +5 -0
- package/src/developer-agent/operation-registry.js +179 -23
- package/src/developer-agent/preview-changes.d.ts +2 -0
- package/src/developer-agent/preview-changes.js +14 -2
- package/src/developer-agent/preview-source.js +3 -0
- package/src/developer-agent/validation.js +20 -8
- package/src/developer-agent/workspace-inspection.js +37 -3
- package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
- package/src/executors/deployment-plan/deployment-plan.js +51 -4
- package/src/executors/dev-doctor/dev-doctor.js +13 -6
- package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
- package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
- package/src/executors/dev-task-cleanup/schema.json +9 -0
- package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
- package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
- package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
- package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
- package/src/executors/fleet/fleet.js +1 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +28 -1
- package/src/executors/local-deploy/local-deploy.d.ts +8 -1
- package/src/executors/local-deploy/local-deploy.js +97 -24
- package/src/executors/local-deploy/schema.json +8 -0
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +30 -18
- package/src/executors/sst-lifecycle/governed-native-operation.d.ts +2 -0
- package/src/executors/sst-lifecycle/governed-native-operation.js +9 -0
- package/src/executors/sst-lifecycle/run-sst-command.d.ts +5 -0
- package/src/executors/sst-lifecycle/run-sst-command.js +220 -32
- package/src/executors/sst-lifecycle/sst-environment-source.d.ts +8 -0
- package/src/executors/sst-lifecycle/sst-environment-source.js +54 -0
- package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
- package/src/executors/sst-lifecycle/task-unlock.js +126 -0
- package/src/foundation/capability-plan.d.ts +43 -0
- package/src/foundation/capability-plan.js +168 -0
- package/src/foundation/discovery.d.ts +14 -11
- package/src/foundation/discovery.js +32 -6
- package/src/foundation/index.d.ts +1 -0
- package/src/foundation/index.js +1 -0
- package/src/foundation/local-database-contract.d.ts +20 -0
- package/src/foundation/local-database-contract.js +262 -13
- package/src/foundation/local-private-smoke-access.d.ts +20 -0
- package/src/foundation/local-private-smoke-access.js +197 -0
- package/src/foundation/preflight.js +37 -18
- package/src/foundation/private-smoke-access.js +10 -2
- package/src/foundation/private-smoke-admission.d.ts +3 -1
- package/src/foundation/private-smoke-admission.js +29 -8
- package/src/foundation/private-smoke-control-plane.js +17 -6
- package/src/foundation/provision-database-bindings.d.ts +5 -0
- package/src/foundation/provision-database-bindings.js +41 -8
- package/src/foundation/provision-logical-database.js +13 -8
- package/src/foundation/requirements.d.ts +3 -3
- package/src/foundation/requirements.js +24 -12
- package/src/foundation/router-waf.d.ts +1 -0
- package/src/foundation/router-waf.js +14 -1
- package/src/generators/blueprint/blueprint.d.ts +5 -0
- package/src/generators/blueprint/blueprint.js +102 -0
- package/src/generators/blueprint/files.d.ts +6 -0
- package/src/generators/blueprint/files.js +217 -0
- package/src/generators/blueprint/schema.d.ts +4 -0
- package/src/generators/blueprint/schema.json +18 -0
- package/src/generators/formatting.js +24 -1
- package/src/generators/logging-registry.d.ts +2 -0
- package/src/generators/logging-registry.js +22 -0
- package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
- package/src/generators/preset/workspace-files-adopter-skills.js +301 -0
- package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
- package/src/generators/preset/workspace-files-ci-install.js +196 -0
- package/src/generators/preset/workspace-files-developer-agent.js +40 -13
- package/src/generators/preset/workspace-files-performance-load.js +8 -0
- package/src/generators/preset/workspace-files-stage-authority.js +40 -1
- package/src/generators/preset/workspace-files-thin-deploy.js +66 -34
- package/src/generators/preset/workspace-files-thin-docs.js +64 -18
- package/src/generators/preset/workspace-files.d.ts +4 -0
- package/src/generators/preset/workspace-files.js +159 -91
- package/src/generators/repository-policy/repository-policy.js +37 -0
- package/src/generators/slice/built-in-plan-api-contract-files.js +42 -7
- package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-api-files.js +47 -389
- package/src/generators/slice/built-in-plan-async-work-files.js +19 -1912
- package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +36 -2
- package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
- package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
- package/src/generators/slice/built-in-plan-background-work-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-background-work-files.js +15 -5
- package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
- package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-data-files.js +61 -1164
- package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +18 -2
- package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2446
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +30 -6
- package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js +4 -15
- package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
- package/src/generators/slice/built-in-plan-foundation-files.js +34 -10
- package/src/generators/slice/built-in-plan-frontend-files.js +2 -2
- package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js +180 -522
- package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
- package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
- package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
- package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-delivery.js +120 -0
- package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
- package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
- package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
- package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
- package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
- package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
- package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
- package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
- package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
- package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
- package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
- package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
- package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
- package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
- package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
- package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
- package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-metadata-files.js +140 -28
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +36 -19
- package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-operations-files.js +89 -50
- package/src/generators/slice/built-in-plan-performance-files.js +84 -1010
- package/src/generators/slice/built-in-plan-project-files.js +116 -67
- package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-release-files.js +64 -15
- package/src/generators/slice/built-in-plan-reliability-files.js +54 -28
- package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
- package/src/generators/slice/built-in-plan-shared.js +41 -19
- package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
- package/src/generators/slice/built-in-plan-sql-events.js +257 -0
- package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-testing-files.js +184 -132
- package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
- package/src/generators/slice/built-in-plan-testing-persistence-files.js +178 -0
- package/src/generators/slice/built-in-plan-thin-release-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-thin-release-files.js +35 -2
- package/src/generators/slice/built-in-plan-verification-files.js +70 -0
- package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-web-files.js +206 -14
- package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js +113 -274
- package/src/generators/slice/built-in-plan.d.ts +9 -1
- package/src/generators/slice/built-in-plan.js +49 -21
- package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
- package/src/generators/slice/data-policy-review-seed.js +22 -0
- package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
- package/src/generators/slice/deployed-smoke-readiness.js +214 -0
- package/src/generators/slice/local-source-identity.d.ts +2 -0
- package/src/generators/slice/local-source-identity.js +31 -0
- package/src/generators/slice/persistence-contract.d.ts +14 -0
- package/src/generators/slice/persistence-contract.js +32 -0
- package/src/generators/slice/slice.js +29 -24
- package/src/generators/sql/schema.d.ts +7 -0
- package/src/generators/sql/schema.json +38 -0
- package/src/generators/sql/sql.d.ts +6 -0
- package/src/generators/sql/sql.js +53 -0
- package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
- package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
- package/src/generators/upgrade/upgrade.d.ts +2 -0
- package/src/generators/upgrade/upgrade.js +136 -9
- package/src/generators/workload/workload.js +51 -2
- package/src/local-dev/browser-verification.d.ts +37 -0
- package/src/local-dev/browser-verification.js +281 -0
- package/src/local-dev/contracts.d.ts +10 -1
- package/src/local-dev/contracts.js +114 -13
- package/src/local-dev/dev-command-core.js +24 -5
- package/src/local-dev/docker-credential-health.d.ts +14 -0
- package/src/local-dev/docker-credential-health.js +94 -0
- package/src/local-dev/environment-inspector.d.ts +7 -0
- package/src/local-dev/environment-inspector.js +42 -15
- package/src/local-dev/environment-state.js +2 -2
- package/src/local-dev/errors.d.ts +1 -1
- package/src/local-dev/errors.js +2 -0
- package/src/local-dev/fleet-client.js +2 -2
- package/src/local-dev/fleet-configuration.js +57 -25
- package/src/local-dev/fleet-inventory.js +46 -18
- package/src/local-dev/fleet-ipc.d.ts +7 -0
- package/src/local-dev/fleet-ipc.js +14 -2
- package/src/local-dev/fleet-launcher.d.ts +6 -0
- package/src/local-dev/fleet-launcher.js +14 -2
- package/src/local-dev/fleet-logs.js +50 -22
- package/src/local-dev/fleet-process.d.ts +20 -1
- package/src/local-dev/fleet-process.js +197 -41
- package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
- package/src/local-dev/fleet-runner-evidence.js +56 -0
- package/src/local-dev/fleet-runtime.js +268 -229
- package/src/local-dev/fleet-session.d.ts +2 -0
- package/src/local-dev/fleet-session.js +28 -11
- package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
- package/src/local-dev/fleet-state.d.ts +5 -2
- package/src/local-dev/fleet-state.js +25 -4
- package/src/local-dev/fleet-supervisor.d.ts +3 -0
- package/src/local-dev/fleet-supervisor.js +66 -11
- package/src/local-dev/fleet-web-start.d.ts +12 -0
- package/src/local-dev/fleet-web-start.js +48 -0
- package/src/local-dev/identity.js +3 -14
- package/src/local-dev/index.d.ts +1 -0
- package/src/local-dev/index.js +1 -0
- package/src/local-dev/native-completion.d.ts +9 -0
- package/src/local-dev/native-completion.js +130 -0
- package/src/local-dev/nx-workspace.d.ts +4 -2
- package/src/local-dev/nx-workspace.js +11 -6
- package/src/local-dev/personal-stage.d.ts +4 -5
- package/src/local-dev/personal-stage.js +6 -54
- package/src/local-dev/port-claims.d.ts +13 -0
- package/src/local-dev/port-claims.js +46 -0
- package/src/local-dev/ports.d.ts +14 -2
- package/src/local-dev/ports.js +78 -3
- package/src/local-dev/private-state.d.ts +6 -0
- package/src/local-dev/private-state.js +126 -34
- package/src/local-dev/process-group.d.ts +4 -0
- package/src/local-dev/process-group.js +29 -0
- package/src/local-dev/process-identity.d.ts +8 -0
- package/src/local-dev/process-identity.js +31 -1
- package/src/local-dev/proxy.js +11 -12
- package/src/local-dev/runtime-paths.js +1 -1
- package/src/local-dev/slice-claim.js +1 -1
- package/src/local-dev/slice-runner.d.ts +15 -6
- package/src/local-dev/slice-runner.js +189 -54
- package/src/local-dev/task-attachment.d.ts +17 -0
- package/src/local-dev/task-attachment.js +73 -0
- package/src/local-dev/task-authority.d.ts +10 -0
- package/src/local-dev/task-authority.js +27 -0
- package/src/local-dev/task-identity.d.ts +33 -0
- package/src/local-dev/task-identity.js +418 -0
- package/src/local-dev/task-native-writer.d.ts +18 -0
- package/src/local-dev/task-native-writer.js +329 -0
- package/src/local-dev/tls.js +3 -1
- package/src/local-dev/web-launch.d.ts +9 -0
- package/src/local-dev/web-launch.js +130 -0
- package/src/ownership/composition.d.ts +2 -1
- package/src/ownership/composition.js +1 -0
- package/src/performance/scenario.d.ts +22 -0
- package/src/performance/scenario.js +100 -92
- package/src/repository-policy/deployment-plan.d.ts +2 -2
- package/src/repository-policy/deployment-plan.js +2 -1
- package/src/repository-policy/policy.js +38 -3
- package/src/schemas/blueprint-v1.json +5 -4
- package/src/schemas/foundation-requirement-v1.json +5 -4
- package/src/schemas/testing-evidence-result-v1.json +1 -1
- package/src/secrets/operator.d.ts +3 -1
- package/src/secrets/operator.js +22 -3
- package/src/sst-environment-source-format.d.ts +3 -0
- package/src/sst-environment-source-format.js +20 -0
- package/src/supply-chain/blueprint-trust-git.js +13 -3
- package/src/supply-chain/build-output.js +15 -0
- package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
- package/src/testing-evidence/fixture-scope.d.ts +2 -1
- package/src/testing-evidence/fixture-scope.js +4 -2
- package/src/testing-evidence/result.d.ts +2 -1
- package/src/testing-evidence/result.js +18 -4
- package/src/workload-roles/standard-slice.js +2 -3
- package/src/api-contract/baseline-update.js.map +0 -1
- package/src/api-contract/compatibility.js.map +0 -1
- package/src/api-contract/contract-graph.js.map +0 -1
- package/src/api-contract/evidence.js.map +0 -1
- package/src/api-contract/index.js.map +0 -1
- package/src/api-contract/model.fixtures.d.ts +0 -2
- package/src/api-contract/model.fixtures.js +0 -81
- package/src/api-contract/model.fixtures.js.map +0 -1
- package/src/api-contract/model.js.map +0 -1
- package/src/api-contract/rollout.js.map +0 -1
- package/src/authorization/compatibility.js.map +0 -1
- package/src/authorization/index.js.map +0 -1
- package/src/aws/child-environment.js.map +0 -1
- package/src/aws/identity.js.map +0 -1
- package/src/aws-authority/index.js.map +0 -1
- package/src/aws-authority/stage-authority.js.map +0 -1
- package/src/blueprints/execution.js.map +0 -1
- package/src/blueprints/external-sandbox.js.map +0 -1
- package/src/blueprints/index.js.map +0 -1
- package/src/blueprints/inputs.js.map +0 -1
- package/src/blueprints/manifest.js.map +0 -1
- package/src/blueprints/resolver.js.map +0 -1
- package/src/blueprints/transitions.js.map +0 -1
- package/src/cli/agent-command.js.map +0 -1
- package/src/cli/agent-runtime.js.map +0 -1
- package/src/cli/blueprint-authority.js.map +0 -1
- package/src/cli/blueprint-command.js.map +0 -1
- package/src/cli/bootstrap.js.map +0 -1
- package/src/cli/dev-command.js.map +0 -1
- package/src/cli/main.js.map +0 -1
- package/src/cli/output.js.map +0 -1
- package/src/cli/personal-secret-runtime.js.map +0 -1
- package/src/cli/secret-terminal.js.map +0 -1
- package/src/container-images.js.map +0 -1
- package/src/data-lifecycle/index.js.map +0 -1
- package/src/data-lifecycle/model.fixtures.d.ts +0 -2
- package/src/data-lifecycle/model.fixtures.js +0 -244
- package/src/data-lifecycle/model.fixtures.js.map +0 -1
- package/src/data-lifecycle/model.js.map +0 -1
- package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
- package/src/data-lifecycle/validation.js.map +0 -1
- package/src/database-retirement/contract.js.map +0 -1
- package/src/database-retirement/index.js.map +0 -1
- package/src/deterministic-order.js.map +0 -1
- package/src/developer-agent/context.js.map +0 -1
- package/src/developer-agent/generator-planning.js.map +0 -1
- package/src/developer-agent/generator-preview.js.map +0 -1
- package/src/developer-agent/git-inspection.js.map +0 -1
- package/src/developer-agent/handoff.js.map +0 -1
- package/src/developer-agent/index.js.map +0 -1
- package/src/developer-agent/model.js.map +0 -1
- package/src/developer-agent/operation-registry.js.map +0 -1
- package/src/developer-agent/ordering.js.map +0 -1
- package/src/developer-agent/planning.js.map +0 -1
- package/src/developer-agent/preview-changes.js.map +0 -1
- package/src/developer-agent/preview-source.js.map +0 -1
- package/src/developer-agent/validation.js.map +0 -1
- package/src/developer-agent/workspace-inspection.js.map +0 -1
- package/src/developer-agent/workspace-path.js.map +0 -1
- package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
- package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
- package/src/executors/deploy/deploy.js.map +0 -1
- package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
- package/src/executors/dev/dev.js.map +0 -1
- package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
- package/src/executors/dev-setup/dev-setup.js.map +0 -1
- package/src/executors/developer-context/developer-context.js.map +0 -1
- package/src/executors/fleet/fleet.js.map +0 -1
- package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
- package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
- package/src/executors/foundation-profile-preflight/production-database-safeguard.js.map +0 -1
- package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
- package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
- package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
- package/src/executors/local-deploy/federated-credential-transport.js.map +0 -1
- package/src/executors/local-deploy/fixtures/local-deploy-state-machine.mjs +0 -53
- package/src/executors/local-deploy/local-approval.js.map +0 -1
- package/src/executors/local-deploy/local-deploy.js.map +0 -1
- package/src/executors/refresh/refresh.js.map +0 -1
- package/src/executors/remove/remove.js.map +0 -1
- package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js.map +0 -1
- package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
- package/src/executors/secret-initialize/secret-initialize.js.map +0 -1
- package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
- package/src/executors/sst-lifecycle/generated-secret-retirement.js.map +0 -1
- package/src/executors/sst-lifecycle/governed-native-operation.js.map +0 -1
- package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
- package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
- package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
- package/src/executors/sst-lifecycle/sst-environment-source.js.map +0 -1
- package/src/executors/unlock/unlock.js.map +0 -1
- package/src/executors/work-markers/work-markers.js.map +0 -1
- package/src/foundation/discovery.js.map +0 -1
- package/src/foundation/index.js.map +0 -1
- package/src/foundation/local-database-contract.js.map +0 -1
- package/src/foundation/logging-preflight.js.map +0 -1
- package/src/foundation/logging.js.map +0 -1
- package/src/foundation/partial-state.js.map +0 -1
- package/src/foundation/preflight.js.map +0 -1
- package/src/foundation/private-smoke-access.js.map +0 -1
- package/src/foundation/private-smoke-admission.js.map +0 -1
- package/src/foundation/private-smoke-control-plane.js.map +0 -1
- package/src/foundation/provision-database-bindings.js.map +0 -1
- package/src/foundation/provision-logical-database.js.map +0 -1
- package/src/foundation/requirements.js.map +0 -1
- package/src/foundation/router-origin-proof.js.map +0 -1
- package/src/foundation/router-waf-rate-rehearsal.js.map +0 -1
- package/src/foundation/router-waf.js.map +0 -1
- package/src/foundation/stages.js.map +0 -1
- package/src/frontend-security/index.js.map +0 -1
- package/src/frontend-security/security-headers.js.map +0 -1
- package/src/generators/feature-registry.js.map +0 -1
- package/src/generators/formatting.js.map +0 -1
- package/src/generators/function/function.js.map +0 -1
- package/src/generators/job/job.js.map +0 -1
- package/src/generators/logging-registry.js.map +0 -1
- package/src/generators/post-generation-install.js.map +0 -1
- package/src/generators/preset/dependency-overrides.js.map +0 -1
- package/src/generators/preset/generator.js.map +0 -1
- package/src/generators/preset/tool-versions.js.map +0 -1
- package/src/generators/preset/workspace-files-ci-acceptance.js.map +0 -1
- package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
- package/src/generators/preset/workspace-files-ecr-inspector.js.map +0 -1
- package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
- package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
- package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
- package/src/generators/preset/workspace-files-stage-authority.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-deploy.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-docs.js.map +0 -1
- package/src/generators/preset/workspace-files-thin-release.js.map +0 -1
- package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
- package/src/generators/preset/workspace-files.js.map +0 -1
- package/src/generators/repository-policy/repository-policy.js.map +0 -1
- package/src/generators/repository-policy/tree-policy.js.map +0 -1
- package/src/generators/service/service.js.map +0 -1
- package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-background-work-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-native-runtime-authority-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-shared.js.map +0 -1
- package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-thin-release-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
- package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
- package/src/generators/slice/built-in-plan.js.map +0 -1
- package/src/generators/slice/slice.js.map +0 -1
- package/src/generators/upgrade/upgrade.js.map +0 -1
- package/src/generators/workload/frozen-container.js.map +0 -1
- package/src/generators/workload/performance-registration.js.map +0 -1
- package/src/generators/workload/reliability-registration.js.map +0 -1
- package/src/generators/workload/service-performance-files.js.map +0 -1
- package/src/generators/workload/workload.js.map +0 -1
- package/src/git-policy/action-pins.js.map +0 -1
- package/src/git-policy/github-bootstrap.js.map +0 -1
- package/src/git-policy/index.js.map +0 -1
- package/src/git-policy/routing.js.map +0 -1
- package/src/index.js.map +0 -1
- package/src/infrastructure-change/convergence.js.map +0 -1
- package/src/infrastructure-change/drift.js.map +0 -1
- package/src/infrastructure-change/index.js.map +0 -1
- package/src/infrastructure-change/local-capability.js.map +0 -1
- package/src/infrastructure-change/model.js.map +0 -1
- package/src/infrastructure-change/normalize.js.map +0 -1
- package/src/infrastructure-change/plan.js.map +0 -1
- package/src/infrastructure-change/risk.js.map +0 -1
- package/src/infrastructure-change/summary.js.map +0 -1
- package/src/local-dev/context-discovery.js.map +0 -1
- package/src/local-dev/contract-validation.js.map +0 -1
- package/src/local-dev/contracts.js.map +0 -1
- package/src/local-dev/control-contract.js.map +0 -1
- package/src/local-dev/dev-command-core.js.map +0 -1
- package/src/local-dev/effects.js.map +0 -1
- package/src/local-dev/environment-inspector.js.map +0 -1
- package/src/local-dev/environment-state.js.map +0 -1
- package/src/local-dev/errors.js.map +0 -1
- package/src/local-dev/fleet-client.js.map +0 -1
- package/src/local-dev/fleet-configuration.js.map +0 -1
- package/src/local-dev/fleet-inventory.js.map +0 -1
- package/src/local-dev/fleet-ipc.js.map +0 -1
- package/src/local-dev/fleet-launcher.js.map +0 -1
- package/src/local-dev/fleet-lock.js.map +0 -1
- package/src/local-dev/fleet-logs.js.map +0 -1
- package/src/local-dev/fleet-process.js.map +0 -1
- package/src/local-dev/fleet-runtime.js.map +0 -1
- package/src/local-dev/fleet-session.js.map +0 -1
- package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
- package/src/local-dev/fleet-startup.js.map +0 -1
- package/src/local-dev/fleet-state.js.map +0 -1
- package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
- package/src/local-dev/fleet-supervisor.js.map +0 -1
- package/src/local-dev/gateway-daemon.js.map +0 -1
- package/src/local-dev/gateway.js.map +0 -1
- package/src/local-dev/identity.js.map +0 -1
- package/src/local-dev/index.js.map +0 -1
- package/src/local-dev/local-context.js.map +0 -1
- package/src/local-dev/nx-workspace.js.map +0 -1
- package/src/local-dev/personal-secret-ledger.js.map +0 -1
- package/src/local-dev/personal-stage.js.map +0 -1
- package/src/local-dev/portless.js.map +0 -1
- package/src/local-dev/ports.js.map +0 -1
- package/src/local-dev/private-state.js.map +0 -1
- package/src/local-dev/process-identity.js.map +0 -1
- package/src/local-dev/proxy.js.map +0 -1
- package/src/local-dev/runtime-paths.js.map +0 -1
- package/src/local-dev/secret-slice-claim.js.map +0 -1
- package/src/local-dev/slice-claim.js.map +0 -1
- package/src/local-dev/slice-runner.js.map +0 -1
- package/src/local-dev/tls.js.map +0 -1
- package/src/ownership/composition.js.map +0 -1
- package/src/ownership/foundation-record.js.map +0 -1
- package/src/ownership/hash.js.map +0 -1
- package/src/ownership/index.js.map +0 -1
- package/src/ownership/json-ownership.js.map +0 -1
- package/src/ownership/record.js.map +0 -1
- package/src/ownership/workspace-record.js.map +0 -1
- package/src/performance/cost-collection.js.map +0 -1
- package/src/performance/cost-controls.js.map +0 -1
- package/src/performance/evidence.js.map +0 -1
- package/src/performance/index.js.map +0 -1
- package/src/performance/load-safety.js.map +0 -1
- package/src/performance/model.js.map +0 -1
- package/src/performance/pr-artifact-budget.js.map +0 -1
- package/src/performance/runner.js.map +0 -1
- package/src/performance/scenario-endpoint.js.map +0 -1
- package/src/performance/scenario.js.map +0 -1
- package/src/performance/test-fixtures.d.ts +0 -7
- package/src/performance/test-fixtures.js +0 -167
- package/src/performance/test-fixtures.js.map +0 -1
- package/src/performance/unit-cost.js.map +0 -1
- package/src/release/index.js.map +0 -1
- package/src/release/lifecycle.js.map +0 -1
- package/src/release/manifest.js.map +0 -1
- package/src/release/rollout.js.map +0 -1
- package/src/release/source-authority.js.map +0 -1
- package/src/repository-policy/aurora-preflight.js.map +0 -1
- package/src/repository-policy/capacity-migration.js.map +0 -1
- package/src/repository-policy/deployment-plan.js.map +0 -1
- package/src/repository-policy/foundation-profile.js.map +0 -1
- package/src/repository-policy/index.js.map +0 -1
- package/src/repository-policy/policy.js.map +0 -1
- package/src/secrets/adapters.js.map +0 -1
- package/src/secrets/aws-control-plane.js.map +0 -1
- package/src/secrets/declaration-verification.js.map +0 -1
- package/src/secrets/generated-aws-control-plane.js.map +0 -1
- package/src/secrets/guardrails.js.map +0 -1
- package/src/secrets/index.js.map +0 -1
- package/src/secrets/metadata.js.map +0 -1
- package/src/secrets/model.js.map +0 -1
- package/src/secrets/operator.js.map +0 -1
- package/src/secrets/permissions.js.map +0 -1
- package/src/secrets/personal-command.js.map +0 -1
- package/src/secrets/personal-ledger.js.map +0 -1
- package/src/secrets/registry.js.map +0 -1
- package/src/secrets/verification.js.map +0 -1
- package/src/secrets/workload-access.js.map +0 -1
- package/src/sst-environment-source-format.js.map +0 -1
- package/src/supply-chain/action-pins.js.map +0 -1
- package/src/supply-chain/blueprint-trust-git.js.map +0 -1
- package/src/supply-chain/blueprint-trust-process.js.map +0 -1
- package/src/supply-chain/blueprint-trust.js.map +0 -1
- package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
- package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
- package/src/supply-chain/build-output-bounds.js.map +0 -1
- package/src/supply-chain/build-output.js.map +0 -1
- package/src/supply-chain/common.js.map +0 -1
- package/src/supply-chain/container-artifact-contract.js.map +0 -1
- package/src/supply-chain/container-release.js.map +0 -1
- package/src/supply-chain/ecr-applicability.js.map +0 -1
- package/src/supply-chain/ecr-scanning.js.map +0 -1
- package/src/supply-chain/ecs-deployed-image.js.map +0 -1
- package/src/supply-chain/errors.js.map +0 -1
- package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
- package/src/supply-chain/generated-command.js.map +0 -1
- package/src/supply-chain/generated-container-release-command.js.map +0 -1
- package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
- package/src/supply-chain/generated-files.js.map +0 -1
- package/src/supply-chain/generated-scanner-command.js.map +0 -1
- package/src/supply-chain/index.js.map +0 -1
- package/src/supply-chain/inventory.js.map +0 -1
- package/src/supply-chain/license-expression.js.map +0 -1
- package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
- package/src/supply-chain/policy.js.map +0 -1
- package/src/supply-chain/publication.js.map +0 -1
- package/src/supply-chain/sbom.js.map +0 -1
- package/src/supply-chain/scanner.js.map +0 -1
- package/src/supply-chain/vendored-source.js.map +0 -1
- package/src/testing-evidence/fixture-scope.js.map +0 -1
- package/src/testing-evidence/index.js.map +0 -1
- package/src/testing-evidence/quarantine.js.map +0 -1
- package/src/testing-evidence/result.js.map +0 -1
- package/src/testing-evidence/runner-adapter.js.map +0 -1
- package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
- package/src/validation.js.map +0 -1
- package/src/work-markers/index.js.map +0 -1
- package/src/work-markers/work-markers.js.map +0 -1
- package/src/workload-roles/account-baseline.js.map +0 -1
- package/src/workload-roles/authority.js.map +0 -1
- package/src/workload-roles/aws-adapter.js.map +0 -1
- package/src/workload-roles/aws-internal-handler.js.map +0 -1
- package/src/workload-roles/aws-s3-state.js.map +0 -1
- package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
- package/src/workload-roles/boundary.js.map +0 -1
- package/src/workload-roles/convergence.js.map +0 -1
- package/src/workload-roles/effective-policy.js.map +0 -1
- package/src/workload-roles/handler.js.map +0 -1
- package/src/workload-roles/history.js.map +0 -1
- package/src/workload-roles/index.js.map +0 -1
- package/src/workload-roles/injection.js.map +0 -1
- package/src/workload-roles/manifest.js.map +0 -1
- package/src/workload-roles/provisioner.js.map +0 -1
- package/src/workload-roles/registration.js.map +0 -1
- package/src/workload-roles/stage-boundary.js.map +0 -1
- package/src/workload-roles/standard-slice.js.map +0 -1
- package/src/workspace-deployment/affected-lifecycle.js.map +0 -1
- package/src/workspace-deployment/identity.js.map +0 -1
- package/src/workspace-deployment/index.js.map +0 -1
- package/src/workspace-deployment/migration-evidence.js.map +0 -1
- package/src/workspace-deployment/migration.js.map +0 -1
- package/src/workspace-deployment/ownership.js.map +0 -1
|
@@ -613,101 +613,109 @@ async function cleanupProtectedLoadScenarioEffects(input) {
|
|
|
613
613
|
});
|
|
614
614
|
let remoteCleanup = 'not-required';
|
|
615
615
|
if (adapter.cleanupPath !== null) {
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
const
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
accept: 'application/json',
|
|
645
|
-
'content-type': 'application/json',
|
|
646
|
-
...authorizationHeaders({
|
|
647
|
-
authorization,
|
|
648
|
-
hmacKey: input.hmacKey,
|
|
616
|
+
let removedSoFar = 0;
|
|
617
|
+
for (;;) {
|
|
618
|
+
const controller = new AbortController();
|
|
619
|
+
let timeout;
|
|
620
|
+
try {
|
|
621
|
+
const authorization = requestAuthorization({
|
|
622
|
+
adapter,
|
|
623
|
+
capacity,
|
|
624
|
+
hmacKeyId: input.hmacKey.id,
|
|
625
|
+
operation: 'cleanup',
|
|
626
|
+
plan: input.plan,
|
|
627
|
+
requestOrdinal: 1,
|
|
628
|
+
scenario,
|
|
629
|
+
});
|
|
630
|
+
const remainingRuntime = cleanupDeadline - Date.now();
|
|
631
|
+
if (remainingRuntime <= 0) {
|
|
632
|
+
throw invalid('cleanup/deadline', 'exhausted the bounded cleanup runtime before the request');
|
|
633
|
+
}
|
|
634
|
+
const requestTimeout = Math.min(CLEANUP_MAXIMUM_REQUEST_MILLISECONDS, remainingRuntime);
|
|
635
|
+
const request = (async () => {
|
|
636
|
+
const response = await fetchImplementation(scenarioUrl(input.plan, cleanupPath(adapter)), {
|
|
637
|
+
body: JSON.stringify({
|
|
638
|
+
planMaterialDigest: input.plan.materialDigest,
|
|
639
|
+
release: input.plan.release,
|
|
640
|
+
requestOrdinal: 1,
|
|
641
|
+
runId: input.plan.runId,
|
|
642
|
+
scenarioId: input.plan.scenarioId,
|
|
643
|
+
workload: input.plan.workload,
|
|
649
644
|
}),
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
645
|
+
headers: {
|
|
646
|
+
accept: 'application/json',
|
|
647
|
+
'content-type': 'application/json',
|
|
648
|
+
...authorizationHeaders({
|
|
649
|
+
authorization,
|
|
650
|
+
hmacKey: input.hmacKey,
|
|
651
|
+
}),
|
|
652
|
+
'user-agent': 'empire-builder-kit-protected-load-cleanup/1.0.0',
|
|
653
|
+
},
|
|
654
|
+
method: 'POST',
|
|
655
|
+
redirect: 'manual',
|
|
656
|
+
signal: controller.signal,
|
|
657
|
+
});
|
|
658
|
+
return { body: await response.json(), response };
|
|
659
|
+
})();
|
|
660
|
+
const expired = new Promise((_resolve, reject) => {
|
|
661
|
+
timeout = setTimeout(() => {
|
|
662
|
+
controller.abort();
|
|
663
|
+
reject(invalid('cleanup/deadline', 'exceeded the bounded cleanup request deadline'));
|
|
664
|
+
}, requestTimeout);
|
|
655
665
|
});
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
'
|
|
670
|
-
'
|
|
671
|
-
'
|
|
672
|
-
'
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
666
|
+
const { body, response } = await Promise.race([request, expired]);
|
|
667
|
+
onlyKeys(body, [
|
|
668
|
+
'kind',
|
|
669
|
+
'hmacKeyId',
|
|
670
|
+
'planMaterialDigest',
|
|
671
|
+
'release',
|
|
672
|
+
'remainingEffectCount',
|
|
673
|
+
'removedEffectCount',
|
|
674
|
+
'runId',
|
|
675
|
+
'scenarioId',
|
|
676
|
+
'schemaVersion',
|
|
677
|
+
'status',
|
|
678
|
+
'target',
|
|
679
|
+
], 'cleanup/response');
|
|
680
|
+
validateRelease(body.release, input.plan.release, 'cleanup/response/release');
|
|
681
|
+
onlyKeys(body.target, ['accountFingerprint', 'endpoint', 'region', 'slice'], 'cleanup/response/target');
|
|
682
|
+
const incomplete = body.status === 'cleanup-in-progress' &&
|
|
683
|
+
body.remainingEffectCount === null;
|
|
684
|
+
if (!response.ok ||
|
|
685
|
+
body.kind !== 'ebk-protected-load-cleanup-result' ||
|
|
686
|
+
body.hmacKeyId !== input.hmacKey.id ||
|
|
687
|
+
body.planMaterialDigest !== input.plan.materialDigest ||
|
|
688
|
+
(!incomplete && body.remainingEffectCount !== 0) ||
|
|
689
|
+
typeof body.removedEffectCount !== 'number' ||
|
|
690
|
+
!Number.isSafeInteger(body.removedEffectCount) ||
|
|
691
|
+
body.removedEffectCount < (incomplete ? 1 : 0) ||
|
|
692
|
+
body.removedEffectCount > input.plan.maximumRequests - removedSoFar ||
|
|
693
|
+
body.runId !== input.plan.runId ||
|
|
694
|
+
body.scenarioId !== input.plan.scenarioId ||
|
|
695
|
+
body.schemaVersion !== 1 ||
|
|
696
|
+
(!incomplete && body.status !== 'run-absent') ||
|
|
697
|
+
JSON.stringify(body.target) !==
|
|
698
|
+
JSON.stringify({
|
|
699
|
+
accountFingerprint: input.plan.target.accountFingerprint,
|
|
700
|
+
endpoint: scenarioUrl(input.plan, cleanupPath(adapter)),
|
|
701
|
+
region: input.plan.target.region,
|
|
702
|
+
slice: input.plan.slice,
|
|
703
|
+
})) {
|
|
704
|
+
throw invalid('cleanup/response', 'must prove every protected effect for the exact run is absent');
|
|
705
|
+
}
|
|
706
|
+
removedSoFar += body.removedEffectCount;
|
|
707
|
+
if (incomplete)
|
|
708
|
+
continue;
|
|
709
|
+
remoteCleanup = 'run-proved-absent';
|
|
710
|
+
break;
|
|
711
|
+
}
|
|
712
|
+
catch (error) {
|
|
713
|
+
throw invalid('cleanup', `did not prove the exact protected run absent (${error instanceof Error ? error.message : String(error)})`);
|
|
714
|
+
}
|
|
715
|
+
finally {
|
|
716
|
+
if (timeout !== undefined)
|
|
717
|
+
clearTimeout(timeout);
|
|
702
718
|
}
|
|
703
|
-
remoteCleanup = 'run-proved-absent';
|
|
704
|
-
}
|
|
705
|
-
catch (error) {
|
|
706
|
-
throw invalid('cleanup', `did not prove the exact protected run absent (${error instanceof Error ? error.message : String(error)})`);
|
|
707
|
-
}
|
|
708
|
-
finally {
|
|
709
|
-
if (timeout !== undefined)
|
|
710
|
-
clearTimeout(timeout);
|
|
711
719
|
}
|
|
712
720
|
}
|
|
713
721
|
const unsigned = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ConfiguredDeploymentAccounts, DeploymentProfile, ProductionApprovalMode, ProductionFoundationProfile, RepositoryOperatingPolicy } from './policy.js';
|
|
2
2
|
export declare const PROTECTED_DEPLOYMENT_ACTIONS: readonly ["deploy", "refresh", "remove", "unlock"];
|
|
3
3
|
export declare const PROTECTED_DEPLOYMENT_STAGES: readonly ["staging", "production"];
|
|
4
4
|
export type ProtectedDeploymentAction = (typeof PROTECTED_DEPLOYMENT_ACTIONS)[number];
|
|
@@ -10,7 +10,7 @@ export interface DeploymentPlanProject {
|
|
|
10
10
|
}
|
|
11
11
|
export interface ProtectedDeploymentPlan {
|
|
12
12
|
action: ProtectedDeploymentAction;
|
|
13
|
-
deploymentAccounts:
|
|
13
|
+
deploymentAccounts: ConfiguredDeploymentAccounts;
|
|
14
14
|
deploymentProfile: DeploymentProfile;
|
|
15
15
|
deploymentRegion: string;
|
|
16
16
|
effectiveProductionProfile?: ProductionFoundationProfile;
|
|
@@ -20,7 +20,8 @@ function compareCodePoints(left, right) {
|
|
|
20
20
|
return left.name < right.name ? -1 : left.name > right.name ? 1 : 0;
|
|
21
21
|
}
|
|
22
22
|
function createProtectedDeploymentPlan(policy, options) {
|
|
23
|
-
|
|
23
|
+
(0, policy_js_1.configuredDeploymentAccountForStage)(policy.deploymentProfile, policy.deploymentAccounts, options.stage);
|
|
24
|
+
const deploymentAccounts = { ...policy.deploymentAccounts };
|
|
24
25
|
const deploymentRegion = (0, policy_js_1.configuredDeploymentRegion)(policy.deploymentRegion);
|
|
25
26
|
const foundations = options.projects.filter((project) => hasTag(project, 'scope:foundation') &&
|
|
26
27
|
supportsAction(project, options.action));
|
|
@@ -137,10 +137,35 @@ function configuredDeploymentAccountTopology(profile, accounts) {
|
|
|
137
137
|
staging: accounts.staging,
|
|
138
138
|
});
|
|
139
139
|
}
|
|
140
|
+
function validateConfiguredIsolatedAccounts(accounts) {
|
|
141
|
+
const configured = new Set();
|
|
142
|
+
for (const stage of ['development', 'staging', 'production']) {
|
|
143
|
+
const account = accounts[stage];
|
|
144
|
+
if (account === null)
|
|
145
|
+
continue;
|
|
146
|
+
if (typeof account !== 'string' || !/^\d{12}$/.test(account)) {
|
|
147
|
+
throw new Error(`Deployment account for ${stage} must be null or an exact 12-digit AWS account ID.`);
|
|
148
|
+
}
|
|
149
|
+
if (configured.has(account)) {
|
|
150
|
+
throw new Error('The fully-isolated deployment profile requires distinct configured AWS accounts.');
|
|
151
|
+
}
|
|
152
|
+
configured.add(account);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
140
155
|
function configuredDeploymentAccountForStage(profile, accounts, stage) {
|
|
141
156
|
if (!isActiveDeploymentStage(profile, stage)) {
|
|
142
157
|
throw new Error(`Deployment stage ${stage} is inactive for the ${profile} deployment profile.`);
|
|
143
158
|
}
|
|
159
|
+
// Fresh isolated accounts can be provisioned independently. This does not
|
|
160
|
+
// relax production rehearsal or migrated-workspace tuple requirements.
|
|
161
|
+
if (profile === 'fully-isolated' && stage !== 'production') {
|
|
162
|
+
validateConfiguredIsolatedAccounts(accounts);
|
|
163
|
+
const account = accounts[stage];
|
|
164
|
+
if (account === null) {
|
|
165
|
+
throw new Error(`Deployment account for active stage ${stage} is not configured.`);
|
|
166
|
+
}
|
|
167
|
+
return account;
|
|
168
|
+
}
|
|
144
169
|
const topology = configuredDeploymentAccountTopology(profile, accounts);
|
|
145
170
|
const account = topology[stage];
|
|
146
171
|
if (account === null) {
|
|
@@ -330,6 +355,18 @@ function validateRepositoryOperatingPolicy(value) {
|
|
|
330
355
|
});
|
|
331
356
|
}
|
|
332
357
|
}
|
|
358
|
+
if (value.deploymentProfile === 'fully-isolated' &&
|
|
359
|
+
Object.values(value.deploymentAccounts).some((account) => account === null)) {
|
|
360
|
+
try {
|
|
361
|
+
validateConfiguredIsolatedAccounts(value.deploymentAccounts);
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
issues.push({
|
|
365
|
+
message: error instanceof Error ? error.message : String(error),
|
|
366
|
+
path: 'policy.deploymentAccounts',
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
333
370
|
if (isOneOf(value.deploymentProfile, exports.DEPLOYMENT_PROFILES) &&
|
|
334
371
|
typeof value.deploymentAccounts.development === 'string' &&
|
|
335
372
|
typeof value.deploymentAccounts.production === 'string' &&
|
|
@@ -599,9 +636,7 @@ function createIncubationRepositoryPolicy(deploymentProfile = 'starter', workspa
|
|
|
599
636
|
productionAccess: 'disabled',
|
|
600
637
|
productionApproval: { mode: 'promotion-pr' },
|
|
601
638
|
productionFoundation: {
|
|
602
|
-
profile:
|
|
603
|
-
? 'cost-optimized'
|
|
604
|
-
: exports.DEFAULT_RECOVERY_PRODUCTION_FOUNDATION_PROFILE,
|
|
639
|
+
profile: 'cost-optimized',
|
|
605
640
|
},
|
|
606
641
|
schemaVersion: exports.REPOSITORY_POLICY_SCHEMA_VERSION,
|
|
607
642
|
slices: {},
|
|
@@ -13,15 +13,16 @@
|
|
|
13
13
|
"capabilities": {
|
|
14
14
|
"items": {
|
|
15
15
|
"enum": [
|
|
16
|
-
"
|
|
16
|
+
"key-value",
|
|
17
17
|
"routing",
|
|
18
|
-
"container-compute",
|
|
19
|
-
"postgres",
|
|
20
18
|
"identity",
|
|
21
19
|
"events",
|
|
22
20
|
"observability",
|
|
23
21
|
"configuration",
|
|
24
|
-
"deployment"
|
|
22
|
+
"deployment",
|
|
23
|
+
"network",
|
|
24
|
+
"container-compute",
|
|
25
|
+
"postgres"
|
|
25
26
|
],
|
|
26
27
|
"type": "string"
|
|
27
28
|
},
|
|
@@ -6,15 +6,16 @@
|
|
|
6
6
|
"capabilities": {
|
|
7
7
|
"items": {
|
|
8
8
|
"enum": [
|
|
9
|
-
"
|
|
9
|
+
"key-value",
|
|
10
10
|
"routing",
|
|
11
|
-
"container-compute",
|
|
12
|
-
"postgres",
|
|
13
11
|
"identity",
|
|
14
12
|
"events",
|
|
15
13
|
"observability",
|
|
16
14
|
"configuration",
|
|
17
|
-
"deployment"
|
|
15
|
+
"deployment",
|
|
16
|
+
"network",
|
|
17
|
+
"container-compute",
|
|
18
|
+
"postgres"
|
|
18
19
|
],
|
|
19
20
|
"type": "string"
|
|
20
21
|
},
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AwsGeneratedSecretInitializationError } from './generated-aws-control-plane.js';
|
|
1
2
|
import { type SecretMetadataFinding, type SecretMetadataMutationIntent, type SecretMetadataPreflightResult, type SecretMetadataReconciliationResult } from './metadata.js';
|
|
2
3
|
import { type ObservedSecretMetadata, type SecretManagementScope, type SecretMetadataDeclaration } from './model.js';
|
|
3
4
|
export interface ListedSecretContainer {
|
|
@@ -82,8 +83,9 @@ export interface ProtectedSecretOperatorAuthorization {
|
|
|
82
83
|
export type SecretProtectedLifecycleAction = 'deploy' | 'recover' | 'remove' | 'unlock';
|
|
83
84
|
export declare class SecretOperatorControlPlaneError extends Error {
|
|
84
85
|
readonly operation: 'create-empty' | 'describe' | 'inventory' | 'initialize-generated' | 'list' | 'recover' | 'retire' | 'tag';
|
|
86
|
+
readonly diagnosticCode?: AwsGeneratedSecretInitializationError['code'];
|
|
85
87
|
readonly code: 'secret-control-plane-apply-failed' | 'secret-control-plane-inventory-failed' | 'secret-control-plane-inventory-invalid' | 'secret-control-plane-protected-action-failed';
|
|
86
|
-
constructor(code: SecretOperatorControlPlaneError['code'], operation: 'create-empty' | 'describe' | 'inventory' | 'initialize-generated' | 'list' | 'recover' | 'retire' | 'tag');
|
|
88
|
+
constructor(code: SecretOperatorControlPlaneError['code'], operation: 'create-empty' | 'describe' | 'inventory' | 'initialize-generated' | 'list' | 'recover' | 'retire' | 'tag', diagnosticCode?: AwsGeneratedSecretInitializationError['code']);
|
|
87
89
|
}
|
|
88
90
|
export interface SecretMetadataOperatorResult {
|
|
89
91
|
after?: SecretMetadataReconciliationResult;
|
package/src/secrets/operator.js
CHANGED
|
@@ -7,14 +7,18 @@ exports.runSecretDeployPreflight = runSecretDeployPreflight;
|
|
|
7
7
|
exports.runGeneratedSecretRetirement = runGeneratedSecretRetirement;
|
|
8
8
|
exports.runProtectedSecretLifecycle = runProtectedSecretLifecycle;
|
|
9
9
|
const deterministic_order_js_1 = require("../deterministic-order.js");
|
|
10
|
+
const generated_aws_control_plane_js_1 = require("./generated-aws-control-plane.js");
|
|
10
11
|
const metadata_js_1 = require("./metadata.js");
|
|
11
12
|
const model_js_1 = require("./model.js");
|
|
12
13
|
class SecretOperatorControlPlaneError extends Error {
|
|
13
14
|
operation;
|
|
15
|
+
diagnosticCode;
|
|
14
16
|
code;
|
|
15
|
-
constructor(code, operation) {
|
|
16
|
-
super(`Secret metadata ${operation} failed (${code}).`
|
|
17
|
+
constructor(code, operation, diagnosticCode) {
|
|
18
|
+
super(`Secret metadata ${operation} failed (${code}).` +
|
|
19
|
+
(diagnosticCode ? ` Reason: ${diagnosticCode}.` : ''));
|
|
17
20
|
this.operation = operation;
|
|
21
|
+
this.diagnosticCode = diagnosticCode;
|
|
18
22
|
this.name = 'SecretOperatorControlPlaneError';
|
|
19
23
|
this.code = code;
|
|
20
24
|
}
|
|
@@ -28,6 +32,19 @@ function safeControlPlaneError(error, code, operation) {
|
|
|
28
32
|
if (error instanceof SecretOperatorControlPlaneError) {
|
|
29
33
|
return error;
|
|
30
34
|
}
|
|
35
|
+
// Preserve only our finite, value-blind diagnostic vocabulary. Never attach
|
|
36
|
+
// the raw SDK error, message, stack, request or cause: they may hold values.
|
|
37
|
+
if (error instanceof generated_aws_control_plane_js_1.AwsGeneratedSecretInitializationError) {
|
|
38
|
+
const diagnosticCode = Object.getOwnPropertyDescriptor(error, 'code')?.value;
|
|
39
|
+
switch (diagnosticCode) {
|
|
40
|
+
case 'generated-secret-input-invalid':
|
|
41
|
+
case 'generated-secret-observation-invalid':
|
|
42
|
+
case 'generated-secret-read-failed':
|
|
43
|
+
case 'generated-secret-state-conflicting':
|
|
44
|
+
case 'generated-secret-write-failed':
|
|
45
|
+
return new SecretOperatorControlPlaneError(code, operation, diagnosticCode);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
31
48
|
return new SecretOperatorControlPlaneError(code, operation);
|
|
32
49
|
}
|
|
33
50
|
async function collectSecretMetadata(controlPlane, scope, options = {}) {
|
|
@@ -316,7 +333,9 @@ async function runGeneratedSecretInitializer(input) {
|
|
|
316
333
|
throw safeControlPlaneError(error, 'secret-control-plane-inventory-failed', 'initialize-generated');
|
|
317
334
|
}
|
|
318
335
|
if (finalInspection !== 'current') {
|
|
319
|
-
throw new SecretOperatorControlPlaneError('secret-control-plane-apply-failed', 'initialize-generated'
|
|
336
|
+
throw new SecretOperatorControlPlaneError('secret-control-plane-apply-failed', 'initialize-generated', finalInspection === 'conflicting'
|
|
337
|
+
? 'generated-secret-state-conflicting'
|
|
338
|
+
: 'generated-secret-observation-invalid');
|
|
320
339
|
}
|
|
321
340
|
// The exact-name control-plane inspection above is the postcondition.
|
|
322
341
|
// ListSecrets is eventually consistent and can omit a newly created secret
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/** Exact default declaration emitted by the pinned Next 16.3 toolchain. */
|
|
2
|
+
export declare function generatedNextEnvironmentSource(dev?: boolean): string;
|
|
3
|
+
export declare function isExactGeneratedNextEnvironmentSourceBytes(bytes: Buffer): boolean;
|
|
1
4
|
export declare function isExactGeneratedRootSstEnvironmentSourceBytes(bytes: Buffer): boolean;
|
|
2
5
|
export declare function isExactGeneratedRootSstPythonSourceBytes(bytes: Buffer): boolean;
|
|
3
6
|
export declare function exactGeneratedNestedSstEnvironmentSourceBytes(nestedPath: string, rootSourcePath: string): readonly Buffer[];
|
|
@@ -1,9 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generatedNextEnvironmentSource = generatedNextEnvironmentSource;
|
|
4
|
+
exports.isExactGeneratedNextEnvironmentSourceBytes = isExactGeneratedNextEnvironmentSourceBytes;
|
|
3
5
|
exports.isExactGeneratedRootSstEnvironmentSourceBytes = isExactGeneratedRootSstEnvironmentSourceBytes;
|
|
4
6
|
exports.isExactGeneratedRootSstPythonSourceBytes = isExactGeneratedRootSstPythonSourceBytes;
|
|
5
7
|
exports.exactGeneratedNestedSstEnvironmentSourceBytes = exactGeneratedNestedSstEnvironmentSourceBytes;
|
|
6
8
|
const node_path_1 = require("node:path");
|
|
9
|
+
/** Exact default declaration emitted by the pinned Next 16.3 toolchain. */
|
|
10
|
+
function generatedNextEnvironmentSource(dev = false) {
|
|
11
|
+
const directory = dev ? '.next/dev' : '.next';
|
|
12
|
+
return `/// <reference types="next" />
|
|
13
|
+
/// <reference types="next/image-types/global" />
|
|
14
|
+
import "./${directory}/types/routes.d.ts";
|
|
15
|
+
import "./${directory}/types/root-params.d.ts";
|
|
16
|
+
|
|
17
|
+
// NOTE: This file should not be edited
|
|
18
|
+
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
|
|
19
|
+
`;
|
|
20
|
+
}
|
|
21
|
+
function isExactGeneratedNextEnvironmentSourceBytes(bytes) {
|
|
22
|
+
return [false, true].some((dev) => [
|
|
23
|
+
generatedNextEnvironmentSource(dev),
|
|
24
|
+
generatedNextEnvironmentSource(dev).split('\n').join('\r\n'),
|
|
25
|
+
].some((source) => bytes.equals(Buffer.from(source))));
|
|
26
|
+
}
|
|
7
27
|
const GENERATED_HEADER = [
|
|
8
28
|
'/* This file is auto-generated by SST. Do not edit. */',
|
|
9
29
|
'/* tslint:disable */',
|
|
@@ -898,6 +898,17 @@ function repositoryRootCommit(context, tip) {
|
|
|
898
898
|
}
|
|
899
899
|
function assertCreateOnlyReceiptRetention(context, receiptCommit, executionCommit, paths) {
|
|
900
900
|
const parents = commitParents(context, receiptCommit);
|
|
901
|
+
// Generated repository governance retains proposals through merge commits.
|
|
902
|
+
// Admit that exact shape, not arbitrary ancestry or an updated execution base.
|
|
903
|
+
const proposal = parents.length === 2 ? parents[1] : undefined;
|
|
904
|
+
const proposalParents = proposal ? commitParents(context, proposal) : [];
|
|
905
|
+
const exactRetentionShape = parents[0] === executionCommit &&
|
|
906
|
+
(parents.length === 1 ||
|
|
907
|
+
(proposal !== undefined &&
|
|
908
|
+
proposalParents.length === 1 &&
|
|
909
|
+
proposalParents[0] === executionCommit &&
|
|
910
|
+
treeObjectId(context, receiptCommit) ===
|
|
911
|
+
treeObjectId(context, proposal)));
|
|
901
912
|
const changedPaths = (git(context, [
|
|
902
913
|
'diff-tree',
|
|
903
914
|
'-r',
|
|
@@ -913,15 +924,14 @@ function assertCreateOnlyReceiptRetention(context, receiptCommit, executionCommi
|
|
|
913
924
|
.map((changedPath) => safeTrackedRepositoryPath(changedPath, 'git.blueprintVerificationReceiptRetention.changedPath'))
|
|
914
925
|
.sort();
|
|
915
926
|
const retainedPaths = [...paths].sort();
|
|
916
|
-
if (
|
|
917
|
-
parents[0] !== executionCommit ||
|
|
927
|
+
if (!exactRetentionShape ||
|
|
918
928
|
retainedPaths.length === 0 ||
|
|
919
929
|
retainedPaths.length !== changedPaths.length ||
|
|
920
930
|
retainedPaths.some((path, index) => path !== changedPaths[index]) ||
|
|
921
931
|
retainedPaths.some((path) => !VERIFICATION_RECEIPT_PATH.test(path) ||
|
|
922
932
|
blobObjectId(context, executionCommit, path) !== undefined ||
|
|
923
933
|
blobObjectId(context, receiptCommit, path) === undefined)) {
|
|
924
|
-
throw new errors_js_1.SupplyChainError('supply-chain-blueprint-untrusted', `${receiptCommit}:${VERIFICATION_RECEIPT_DIRECTORY}`, 'protected Blueprint verification receipt retention must be one
|
|
934
|
+
throw new errors_js_1.SupplyChainError('supply-chain-blueprint-untrusted', `${receiptCommit}:${VERIFICATION_RECEIPT_DIRECTORY}`, 'protected Blueprint verification receipt retention must be one receipt-only, create-only commit whose first parent is the exact execution commit shared by the complete final set; a two-parent PR merge must retain the exact tree of a one-parent proposal directly on that same execution commit. The execution tree must lack every retained receipt path and the changed paths must equal the complete set');
|
|
925
935
|
}
|
|
926
936
|
}
|
|
927
937
|
function latestReceiptSetCommit(context, tip, paths, label) {
|
|
@@ -233,6 +233,7 @@ function createNextJsBuildOutputInventory(input) {
|
|
|
233
233
|
const files = new Map();
|
|
234
234
|
const links = new Map();
|
|
235
235
|
const materialFiles = new Map();
|
|
236
|
+
const compilerCacheDirectories = new Set();
|
|
236
237
|
let visitedDirectories = 0;
|
|
237
238
|
let discoveredBytes = 0;
|
|
238
239
|
const addLink = (absoluteInput, pointer) => {
|
|
@@ -347,6 +348,15 @@ function createNextJsBuildOutputInventory(input) {
|
|
|
347
348
|
catch {
|
|
348
349
|
throw new errors_js_1.SupplyChainError('supply-chain-sbom-omission', pointer, 'does not identify an existing build-output material path');
|
|
349
350
|
}
|
|
351
|
+
// Only Next's direct compiler cache is outside emitted build material.
|
|
352
|
+
// Traces are still resolved through addFile, so a runtime reference into
|
|
353
|
+
// this directory cannot escape the normal bounds or content inventory.
|
|
354
|
+
if (compilerCacheDirectories.has(absolute)) {
|
|
355
|
+
if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
|
|
356
|
+
throw new errors_js_1.SupplyChainError('supply-chain-sbom-omission', pointer, 'Next.js compiler cache must be a real directory');
|
|
357
|
+
}
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
350
360
|
if (metadata.isSymbolicLink()) {
|
|
351
361
|
addLink(absolute, pointer);
|
|
352
362
|
return;
|
|
@@ -372,6 +382,11 @@ function createNextJsBuildOutputInventory(input) {
|
|
|
372
382
|
if (materialPaths.some(({ path }, index) => materialPaths.some(({ path: other }, otherIndex) => index !== otherIndex && other.startsWith(`${path}/`)))) {
|
|
373
383
|
throw new errors_js_1.SupplyChainError('supply-chain-input-invalid', 'materialPaths', 'must contain disjoint non-overlapping build-output boundaries');
|
|
374
384
|
}
|
|
385
|
+
for (const { absolute } of materialPaths) {
|
|
386
|
+
if ((0, node_path_1.basename)(absolute) === '.next') {
|
|
387
|
+
compilerCacheDirectories.add((0, node_path_1.join)(absolute, 'cache'));
|
|
388
|
+
}
|
|
389
|
+
}
|
|
375
390
|
materialPaths.forEach(({ absolute }, index) => visitMaterial(absolute, `materialPaths[${index}]`));
|
|
376
391
|
const traces = [...materialFiles.values()].filter(({ path }) => path.endsWith('.nft.json'));
|
|
377
392
|
if (traces.length === 0) {
|
|
@@ -774,9 +774,26 @@ function preflightRetainedReceiptPaths(paths) {
|
|
|
774
774
|
}
|
|
775
775
|
}
|
|
776
776
|
|
|
777
|
+
function serializeRetainedReceipt(receipt) {
|
|
778
|
+
let output = JSON.stringify(receipt, null, 2);
|
|
779
|
+
// These are the receipt schema's only primitive-array fields. Match the
|
|
780
|
+
// generated JSON format without loading mutable workspace formatter code or
|
|
781
|
+
// configuration in this protected execution child. Object arrays stay multiline.
|
|
782
|
+
for (const field of ['containerRegistries', 'verificationRoots']) {
|
|
783
|
+
const values = receipt[field];
|
|
784
|
+
const compact = ' ' + JSON.stringify(field) + ': [' +
|
|
785
|
+
values.map((value) => JSON.stringify(value)).join(', ') + ']';
|
|
786
|
+
if (compact.length + 1 <= 80) {
|
|
787
|
+
const expanded = JSON.stringify({ [field]: values }, null, 2).slice(2, -2);
|
|
788
|
+
output = output.replace(expanded, compact);
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
return output + '\n';
|
|
792
|
+
}
|
|
793
|
+
|
|
777
794
|
function writeRetainedReceipts(receipts) {
|
|
778
795
|
const prepared = receipts.map(({ reference, receipt }) => {
|
|
779
|
-
const output =
|
|
796
|
+
const output = serializeRetainedReceipt(receipt);
|
|
780
797
|
if (Buffer.byteLength(output, 'utf8') > MAX_OUTPUT_BYTES) {
|
|
781
798
|
throw receiptRetentionError(
|
|
782
799
|
'Blueprint verification receipt exceeds 256 KiB.',
|
|
@@ -8,7 +8,8 @@ export interface LocalTestIsolationCapabilities {
|
|
|
8
8
|
}
|
|
9
9
|
export interface LocalTestScopeIdentity {
|
|
10
10
|
attempt: number;
|
|
11
|
-
|
|
11
|
+
/** Null is an unborn local development worktree, not a deployed identity. */
|
|
12
|
+
commit: string | null;
|
|
12
13
|
runId: string;
|
|
13
14
|
seed: string;
|
|
14
15
|
stage: string;
|
|
@@ -30,7 +30,9 @@ function isCanonicalTimestamp(value) {
|
|
|
30
30
|
function requireIdentity(value) {
|
|
31
31
|
if (!slugPattern.test(value.workspace) ||
|
|
32
32
|
!slugPattern.test(value.stage) ||
|
|
33
|
-
|
|
33
|
+
(value.commit === null
|
|
34
|
+
? value.stage !== 'development'
|
|
35
|
+
: !commitPattern.test(value.commit)) ||
|
|
34
36
|
!seedPattern.test(value.runId) ||
|
|
35
37
|
!seedPattern.test(value.seed) ||
|
|
36
38
|
!Number.isSafeInteger(value.attempt) ||
|
|
@@ -59,7 +61,7 @@ function createLocalTestScope(options) {
|
|
|
59
61
|
.update([
|
|
60
62
|
identity.workspace,
|
|
61
63
|
identity.stage,
|
|
62
|
-
identity.commit,
|
|
64
|
+
identity.commit ?? 'unborn-local-worktree',
|
|
63
65
|
identity.runId,
|
|
64
66
|
String(identity.attempt),
|
|
65
67
|
String(identity.worker),
|
|
@@ -18,7 +18,8 @@ export interface TestingEvidenceSource {
|
|
|
18
18
|
* relationship rather than this result contract.
|
|
19
19
|
*/
|
|
20
20
|
blueprintCandidates: readonly string[];
|
|
21
|
-
|
|
21
|
+
/** Null denotes an unborn local worktree, never committed or deployed proof. */
|
|
22
|
+
commit: string | null;
|
|
22
23
|
frameworkCandidate: string;
|
|
23
24
|
}
|
|
24
25
|
export interface TestingEvidenceOperation {
|