@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
|
@@ -5,6 +5,7 @@ exports.fleetSliceRunnerRequiresCleanup = fleetSliceRunnerRequiresCleanup;
|
|
|
5
5
|
exports.validateFleetSliceRunnerRequest = validateFleetSliceRunnerRequest;
|
|
6
6
|
exports.validateFleetSliceRunnerState = validateFleetSliceRunnerState;
|
|
7
7
|
exports.fleetSliceRunnerPaths = fleetSliceRunnerPaths;
|
|
8
|
+
exports.validateFleetSliceRunnerRestartRequest = validateFleetSliceRunnerRestartRequest;
|
|
8
9
|
exports.requestFleetSliceRunnerRestart = requestFleetSliceRunnerRestart;
|
|
9
10
|
exports.writeFleetSliceRunnerState = writeFleetSliceRunnerState;
|
|
10
11
|
exports.readFleetSliceRunnerState = readFleetSliceRunnerState;
|
|
@@ -24,6 +25,7 @@ const node_path_1 = require("node:path");
|
|
|
24
25
|
const contract_validation_js_1 = require("./contract-validation.js");
|
|
25
26
|
const errors_js_1 = require("./errors.js");
|
|
26
27
|
const fleet_process_js_1 = require("./fleet-process.js");
|
|
28
|
+
const fleet_state_js_1 = require("./fleet-state.js");
|
|
27
29
|
const fleet_startup_js_1 = require("./fleet-startup.js");
|
|
28
30
|
const nx_workspace_js_1 = require("./nx-workspace.js");
|
|
29
31
|
const private_state_js_1 = require("./private-state.js");
|
|
@@ -31,6 +33,7 @@ const process_identity_js_1 = require("./process-identity.js");
|
|
|
31
33
|
const personal_secret_ledger_js_1 = require("./personal-secret-ledger.js");
|
|
32
34
|
const personal_stage_js_1 = require("./personal-stage.js");
|
|
33
35
|
const fleet_lock_js_1 = require("./fleet-lock.js");
|
|
36
|
+
const fleet_web_start_js_1 = require("./fleet-web-start.js");
|
|
34
37
|
exports.FLEET_SLICE_RUNNER_SCHEMA_VERSION = 1;
|
|
35
38
|
exports.FLEET_SLICE_RUNNER_RESTART_SCHEMA_VERSION = 1;
|
|
36
39
|
exports.DEFAULT_RUNNER_PARENT_GRACE_MS = 15_000;
|
|
@@ -266,7 +269,7 @@ function launchFleetSliceRunner(input, effects = {}) {
|
|
|
266
269
|
EBK_FLEET_SLICE_RUNNER_REQUEST: paths.request,
|
|
267
270
|
}),
|
|
268
271
|
shell: false,
|
|
269
|
-
stdio: 'pipe',
|
|
272
|
+
stdio: ['pipe', 'pipe', 'pipe', 'ipc'],
|
|
270
273
|
windowsHide: true,
|
|
271
274
|
});
|
|
272
275
|
return {
|
|
@@ -289,16 +292,49 @@ function childExit(child) {
|
|
|
289
292
|
child.once('exit', (code) => resolvePromise(code));
|
|
290
293
|
});
|
|
291
294
|
}
|
|
292
|
-
async function runDeclaredCleanupTarget(cleanupTarget, runtime, childEnvironment, stage, workspaceRealpath, spawnTarget) {
|
|
295
|
+
async function runDeclaredCleanupTarget(cleanupTarget, runtime, childEnvironment, stage, workspaceRealpath, spawnTarget, observeChild, stopSignal, terminate = fleet_process_js_1.terminateOwnedChild) {
|
|
293
296
|
if (!cleanupTarget)
|
|
294
297
|
return;
|
|
298
|
+
if (stopSignal?.aborted)
|
|
299
|
+
throw new Error('Fleet Slice cleanup was interrupted before execution.');
|
|
295
300
|
const cleanup = spawnTarget(runtime, cleanupTarget, {
|
|
296
301
|
additionalEnvironment: childEnvironment,
|
|
297
302
|
stage,
|
|
298
303
|
stdio: 'inherit',
|
|
299
304
|
workspaceRoot: workspaceRealpath,
|
|
300
305
|
});
|
|
301
|
-
const
|
|
306
|
+
const finished = childExit(cleanup);
|
|
307
|
+
let interruption;
|
|
308
|
+
let rejectInterruption = () => undefined;
|
|
309
|
+
const interruptionFailed = new Promise((_resolve, reject) => {
|
|
310
|
+
rejectInterruption = reject;
|
|
311
|
+
});
|
|
312
|
+
void interruptionFailed.catch(() => undefined);
|
|
313
|
+
const interrupt = () => {
|
|
314
|
+
interruption ??= terminate(cleanup);
|
|
315
|
+
// Observe rejection immediately while the child may still be running;
|
|
316
|
+
// the awaited promise below still makes the eventual cleanup fail.
|
|
317
|
+
void interruption.catch(rejectInterruption);
|
|
318
|
+
};
|
|
319
|
+
stopSignal?.addEventListener('abort', interrupt, { once: true });
|
|
320
|
+
let code;
|
|
321
|
+
try {
|
|
322
|
+
observeChild(cleanup);
|
|
323
|
+
code = await Promise.race([finished, interruptionFailed]);
|
|
324
|
+
await interruption;
|
|
325
|
+
if (!cleanup.pid)
|
|
326
|
+
throw new Error('Cleanup child PID is unavailable.');
|
|
327
|
+
await (0, fleet_process_js_1.assertOwnedGroupAbsent)(cleanup.pid);
|
|
328
|
+
}
|
|
329
|
+
catch (error) {
|
|
330
|
+
await terminate(cleanup);
|
|
331
|
+
throw error;
|
|
332
|
+
}
|
|
333
|
+
finally {
|
|
334
|
+
stopSignal?.removeEventListener('abort', interrupt);
|
|
335
|
+
}
|
|
336
|
+
if (stopSignal?.aborted)
|
|
337
|
+
throw new Error('Fleet Slice cleanup was interrupted; ownership remains retained.');
|
|
302
338
|
if (code !== 0) {
|
|
303
339
|
throw new Error(`${cleanupTarget.project}:${cleanupTarget.target} exited with status ${code ?? 'unknown'}.`);
|
|
304
340
|
}
|
|
@@ -336,7 +372,7 @@ function runnerParentStatus(request, options = {}) {
|
|
|
336
372
|
? 'lost'
|
|
337
373
|
: 'ambiguous';
|
|
338
374
|
}
|
|
339
|
-
async function
|
|
375
|
+
async function runFleetSliceRunnerCore(requestPath, options = {}, stopSignal) {
|
|
340
376
|
const security = options.security ?? {};
|
|
341
377
|
const now = options.now ?? (() => new Date());
|
|
342
378
|
const request = readFleetSliceRunnerRequest(requestPath, security);
|
|
@@ -371,7 +407,18 @@ async function runFleetSliceRunner(requestPath, options = {}) {
|
|
|
371
407
|
EBK_SST_DEV_MODE: startup.sstMode,
|
|
372
408
|
});
|
|
373
409
|
const spawnTarget = options.spawnTarget ?? nx_workspace_js_1.spawnDeclaredNxTarget;
|
|
374
|
-
const
|
|
410
|
+
const ownedChildren = new Map();
|
|
411
|
+
const identifyChild = (child) => {
|
|
412
|
+
if (!child.pid)
|
|
413
|
+
throw new Error('Slice child PID is unavailable.');
|
|
414
|
+
const identity = (options.processIdentity ?? process_identity_js_1.captureProcessIdentity)(child.pid);
|
|
415
|
+
ownedChildren.set(child, identity);
|
|
416
|
+
return identity;
|
|
417
|
+
};
|
|
418
|
+
const terminate = options.terminate ??
|
|
419
|
+
((child) => (0, fleet_process_js_1.terminateOwnedChild)(child, ownedChildren.get(child)));
|
|
420
|
+
if (stopSignal.aborted)
|
|
421
|
+
throw new Error('Fleet Slice runner stopped before child execution.');
|
|
375
422
|
if ((0, node_fs_1.existsSync)(paths.state)) {
|
|
376
423
|
let previous = readFleetSliceRunnerState(paths.state, security);
|
|
377
424
|
if (previous.fleetId !== request.fleetId ||
|
|
@@ -386,12 +433,19 @@ async function runFleetSliceRunner(requestPath, options = {}) {
|
|
|
386
433
|
return runnerError('Fleet Slice cleanup retry requires exact prior runner and child absence.');
|
|
387
434
|
}
|
|
388
435
|
if (previous.cleanup === 'succeeded') {
|
|
436
|
+
(0, fleet_web_start_js_1.retireFleetWebStarted)(requestPath, request, security);
|
|
437
|
+
if (previous.child)
|
|
438
|
+
await (0, fleet_process_js_1.assertOwnedGroupAbsent)(previous.child.pid);
|
|
389
439
|
if ((0, node_fs_1.existsSync)(requestPath))
|
|
390
440
|
(0, node_fs_1.unlinkSync)(requestPath);
|
|
391
441
|
if ((0, node_fs_1.existsSync)(paths.restart))
|
|
392
442
|
(0, node_fs_1.unlinkSync)(paths.restart);
|
|
393
443
|
return 0;
|
|
394
444
|
}
|
|
445
|
+
// The old Nx group must be gone before its only retained child identity
|
|
446
|
+
// can be replaced by this retry's cleanup child.
|
|
447
|
+
if (previous.child)
|
|
448
|
+
await (0, fleet_process_js_1.assertOwnedGroupAbsent)(previous.child.pid);
|
|
395
449
|
previous = writeFleetSliceRunnerState(paths.state, {
|
|
396
450
|
cleanup: 'running',
|
|
397
451
|
fleetId: request.fleetId,
|
|
@@ -403,7 +457,16 @@ async function runFleetSliceRunner(requestPath, options = {}) {
|
|
|
403
457
|
updatedAt: now().toISOString(),
|
|
404
458
|
}, security);
|
|
405
459
|
try {
|
|
406
|
-
await runDeclaredCleanupTarget(cleanupTarget, runtime, childEnvironment, startup.identity.stage, request.workspaceRealpath, spawnTarget)
|
|
460
|
+
await runDeclaredCleanupTarget(cleanupTarget, runtime, childEnvironment, startup.identity.stage, request.workspaceRealpath, spawnTarget, (cleanup) => {
|
|
461
|
+
if (!cleanup.pid)
|
|
462
|
+
throw new Error('Cleanup child did not expose a PID.');
|
|
463
|
+
previous = writeFleetSliceRunnerState(paths.state, {
|
|
464
|
+
...previous,
|
|
465
|
+
child: identifyChild(cleanup),
|
|
466
|
+
updatedAt: now().toISOString(),
|
|
467
|
+
}, security);
|
|
468
|
+
}, stopSignal, terminate);
|
|
469
|
+
(0, fleet_web_start_js_1.retireFleetWebStarted)(requestPath, request, security);
|
|
407
470
|
writeFleetSliceRunnerState(paths.state, {
|
|
408
471
|
...previous,
|
|
409
472
|
cleanup: 'succeeded',
|
|
@@ -447,7 +510,7 @@ async function runFleetSliceRunner(requestPath, options = {}) {
|
|
|
447
510
|
throw new Error('Slice child did not expose a PID.');
|
|
448
511
|
state = writeFleetSliceRunnerState(paths.state, {
|
|
449
512
|
...state,
|
|
450
|
-
child: (
|
|
513
|
+
child: identifyChild(child),
|
|
451
514
|
updatedAt: now().toISOString(),
|
|
452
515
|
}, security);
|
|
453
516
|
}
|
|
@@ -473,6 +536,9 @@ async function runFleetSliceRunner(requestPath, options = {}) {
|
|
|
473
536
|
try {
|
|
474
537
|
if (terminateChild)
|
|
475
538
|
await terminate(child);
|
|
539
|
+
if (!child.pid)
|
|
540
|
+
throw new Error('Slice child PID is unavailable.');
|
|
541
|
+
await (0, fleet_process_js_1.assertOwnedGroupAbsent)(child.pid);
|
|
476
542
|
state = writeFleetSliceRunnerState(paths.state, {
|
|
477
543
|
...state,
|
|
478
544
|
cleanup: 'pending',
|
|
@@ -494,7 +560,19 @@ async function runFleetSliceRunner(requestPath, options = {}) {
|
|
|
494
560
|
try {
|
|
495
561
|
if (terminateChild)
|
|
496
562
|
await terminate(child);
|
|
497
|
-
|
|
563
|
+
if (!child.pid)
|
|
564
|
+
throw new Error('Slice child PID is unavailable.');
|
|
565
|
+
await (0, fleet_process_js_1.assertOwnedGroupAbsent)(child.pid);
|
|
566
|
+
await runDeclaredCleanupTarget(cleanupTarget, runtime, childEnvironment, startup.identity.stage, request.workspaceRealpath, spawnTarget, (cleanup) => {
|
|
567
|
+
if (!cleanup.pid)
|
|
568
|
+
throw new Error('Cleanup child did not expose a PID.');
|
|
569
|
+
state = writeFleetSliceRunnerState(paths.state, {
|
|
570
|
+
...state,
|
|
571
|
+
child: identifyChild(cleanup),
|
|
572
|
+
updatedAt: now().toISOString(),
|
|
573
|
+
}, security);
|
|
574
|
+
}, undefined, terminate);
|
|
575
|
+
(0, fleet_web_start_js_1.retireFleetWebStarted)(requestPath, request, security);
|
|
498
576
|
state = writeFleetSliceRunnerState(paths.state, {
|
|
499
577
|
...state,
|
|
500
578
|
cleanup: 'succeeded',
|
|
@@ -518,15 +596,15 @@ async function runFleetSliceRunner(requestPath, options = {}) {
|
|
|
518
596
|
})();
|
|
519
597
|
return finalizing;
|
|
520
598
|
};
|
|
521
|
-
const interrupt = () => void finalize(true, fleetSliceRunnerRequiresCleanup('termination'));
|
|
522
599
|
const terminateSignal = () => {
|
|
523
600
|
const reason = consumeFleetSliceRunnerRestart(paths.restart, request, security)
|
|
524
601
|
? 'explicit-restart'
|
|
525
602
|
: 'termination';
|
|
526
603
|
void finalize(true, fleetSliceRunnerRequiresCleanup(reason));
|
|
527
604
|
};
|
|
528
|
-
|
|
529
|
-
|
|
605
|
+
stopSignal.addEventListener('abort', terminateSignal, { once: true });
|
|
606
|
+
if (stopSignal.aborted)
|
|
607
|
+
terminateSignal();
|
|
530
608
|
// A child exit is restartable process failure, not consent to destroy local
|
|
531
609
|
// prerequisites. The exact runner request and pending cleanup evidence stay
|
|
532
610
|
// behind so a later explicit down or proved-stale recovery can clean them.
|
|
@@ -545,11 +623,36 @@ async function runFleetSliceRunner(requestPath, options = {}) {
|
|
|
545
623
|
interval.unref();
|
|
546
624
|
});
|
|
547
625
|
const result = await Promise.race([childFinished, parentLost]);
|
|
548
|
-
|
|
549
|
-
process.removeListener('SIGTERM', terminateSignal);
|
|
626
|
+
stopSignal.removeEventListener('abort', terminateSignal);
|
|
550
627
|
return (result ??
|
|
551
628
|
(await finalize(true, fleetSliceRunnerRequiresCleanup('termination'))));
|
|
552
629
|
}
|
|
630
|
+
async function runFleetSliceRunner(requestPath, options = {}) {
|
|
631
|
+
const request = readFleetSliceRunnerRequest(requestPath, options.security);
|
|
632
|
+
const stop = new AbortController();
|
|
633
|
+
const interrupt = () => stop.abort();
|
|
634
|
+
const message = (value) => {
|
|
635
|
+
if (value &&
|
|
636
|
+
typeof value === 'object' &&
|
|
637
|
+
Object.keys(value).sort().join(',') === 'runnerGeneration,type' &&
|
|
638
|
+
'type' in value &&
|
|
639
|
+
value.type === fleet_process_js_1.FLEET_RUNNER_STOP_MESSAGE &&
|
|
640
|
+
'runnerGeneration' in value &&
|
|
641
|
+
value.runnerGeneration === request.runnerGeneration)
|
|
642
|
+
interrupt();
|
|
643
|
+
};
|
|
644
|
+
process.once('SIGINT', interrupt);
|
|
645
|
+
process.once('SIGTERM', interrupt);
|
|
646
|
+
process.on('message', message);
|
|
647
|
+
try {
|
|
648
|
+
return await runFleetSliceRunnerCore(requestPath, options, stop.signal);
|
|
649
|
+
}
|
|
650
|
+
finally {
|
|
651
|
+
process.removeListener('SIGINT', interrupt);
|
|
652
|
+
process.removeListener('SIGTERM', interrupt);
|
|
653
|
+
process.removeListener('message', message);
|
|
654
|
+
}
|
|
655
|
+
}
|
|
553
656
|
function assertFleetSliceRunnerCleanup(statePath, expected, security = {}) {
|
|
554
657
|
const state = readFleetSliceRunnerState(statePath, security);
|
|
555
658
|
if (state.cleanup !== 'succeeded' ||
|
|
@@ -580,6 +683,8 @@ async function retryFleetSliceRunnerCleanup(launched, effects = {}) {
|
|
|
580
683
|
(state.child && probe(state.child) !== 'absent')) {
|
|
581
684
|
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', 'Fleet Slice cleanup retry cannot prove the prior runner and child absent.');
|
|
582
685
|
}
|
|
686
|
+
if (state.child)
|
|
687
|
+
await (0, fleet_process_js_1.assertOwnedGroupAbsent)(state.child.pid);
|
|
583
688
|
if (state.cleanup === 'succeeded') {
|
|
584
689
|
if ((0, node_fs_1.existsSync)(launched.requestPath))
|
|
585
690
|
(0, node_fs_1.unlinkSync)(launched.requestPath);
|
|
@@ -608,28 +713,13 @@ async function retryFleetSliceRunnerCleanup(launched, effects = {}) {
|
|
|
608
713
|
EBK_FLEET_SLICE_RUNNER_REQUEST: launched.requestPath,
|
|
609
714
|
}),
|
|
610
715
|
shell: false,
|
|
611
|
-
stdio: 'ignore',
|
|
716
|
+
stdio: ['ignore', 'inherit', 'inherit', 'ipc'],
|
|
612
717
|
windowsHide: true,
|
|
613
718
|
});
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
}
|
|
619
|
-
let timeout;
|
|
620
|
-
const result = await Promise.race([
|
|
621
|
-
childExit(child).then((code) => ({ code, timedOut: false })),
|
|
622
|
-
new Promise((resolvePromise) => {
|
|
623
|
-
timeout = setTimeout(() => resolvePromise({ timedOut: true }), timeoutMs);
|
|
624
|
-
}),
|
|
625
|
-
]);
|
|
626
|
-
if (timeout)
|
|
627
|
-
clearTimeout(timeout);
|
|
628
|
-
if (!('code' in result)) {
|
|
629
|
-
await (0, fleet_process_js_1.terminateOwnedChild)(child);
|
|
630
|
-
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', `Fleet Slice cleanup retry exceeded ${timeoutMs}ms; its claim remains retained.`);
|
|
631
|
-
}
|
|
632
|
-
const code = result.code;
|
|
719
|
+
// Client observation deadlines do not cancel a native cleanup operation.
|
|
720
|
+
// Explicit signals and generation-bound IPC still stop the coordinator;
|
|
721
|
+
// only its terminal exit and validated receipt can complete this retry.
|
|
722
|
+
const code = await childExit(child);
|
|
633
723
|
if (code !== 0) {
|
|
634
724
|
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', `Fleet Slice cleanup retry exited with status ${code ?? 'unknown'}; its claim remains retained.`);
|
|
635
725
|
}
|
|
@@ -639,14 +729,68 @@ async function retryFleetSliceRunnerCleanup(launched, effects = {}) {
|
|
|
639
729
|
(0, node_fs_1.unlinkSync)(restartPath);
|
|
640
730
|
}
|
|
641
731
|
async function recoverFleetSliceRunnerCleanups(state, paths, effects = {}) {
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
732
|
+
// Inspect the complete retained namespace before starting any cleanup. A
|
|
733
|
+
// supervisor can die after acquisition but before persisting route selection.
|
|
734
|
+
inspectRetainedFleetRunners(state, paths, effects.security ?? {});
|
|
735
|
+
const selected = new Set((0, fleet_state_js_1.fleetOwnedSliceNames)(state));
|
|
736
|
+
if (!(0, node_fs_1.existsSync)(paths.runnersDirectory) &&
|
|
737
|
+
!state.slices.some((slice) => slice.selected))
|
|
738
|
+
return;
|
|
645
739
|
return recoverFleetSliceRunnerCleanupsForSlices({
|
|
646
740
|
fleetId: state.fleetId,
|
|
647
741
|
sessionGeneration: state.sessionGeneration,
|
|
648
742
|
}, selected, paths, effects);
|
|
649
743
|
}
|
|
744
|
+
function inspectRetainedFleetRunners(state, paths, security) {
|
|
745
|
+
const owned = new Set((0, fleet_state_js_1.fleetOwnedSliceNames)(state));
|
|
746
|
+
if (!(0, node_fs_1.existsSync)(paths.runnersDirectory))
|
|
747
|
+
return [];
|
|
748
|
+
const entries = (0, node_fs_1.readdirSync)(paths.runnersDirectory).sort();
|
|
749
|
+
const states = [];
|
|
750
|
+
for (const name of entries) {
|
|
751
|
+
if (!/^[a-z0-9][a-z0-9-]{0,62}-[a-f0-9]{20}\.(state|request|restart|web-start)\.json$/.test(name)) {
|
|
752
|
+
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', 'Unsupported retained runner entry; no cleanup authority can be inferred.');
|
|
753
|
+
}
|
|
754
|
+
const statePath = (0, node_path_1.join)(paths.runnersDirectory, name.replace(/\.(request|restart|web-start)\.json$/, '.state.json'));
|
|
755
|
+
const runner = readFleetSliceRunnerState(statePath, security);
|
|
756
|
+
const slice = state.slices.find((candidate) => candidate.name === runner.slice);
|
|
757
|
+
const settled = slice?.cleanup === 'succeeded' && runner.cleanup === 'succeeded';
|
|
758
|
+
if (runner.fleetId !== state.fleetId ||
|
|
759
|
+
runner.sessionGeneration !== state.sessionGeneration ||
|
|
760
|
+
(!owned.has(runner.slice) && !settled) ||
|
|
761
|
+
fleetSliceRunnerPaths(paths.runnersDirectory, runner.slice, runner.runnerGeneration).state !== statePath ||
|
|
762
|
+
(!settled &&
|
|
763
|
+
!state.slices.some((slice) => slice.name === runner.slice && slice.selected) &&
|
|
764
|
+
!(0, fleet_state_js_1.fleetOwnsStartingSlice)(state, runner.slice, runner.updatedAt))) {
|
|
765
|
+
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', 'Retained runner does not belong to selected or starting state of this exact Fleet generation.');
|
|
766
|
+
}
|
|
767
|
+
if (name.endsWith('.request.json')) {
|
|
768
|
+
const request = readFleetSliceRunnerRequest((0, node_path_1.join)(paths.runnersDirectory, name), security);
|
|
769
|
+
if (request.fleetId !== state.fleetId ||
|
|
770
|
+
request.sessionGeneration !== state.sessionGeneration ||
|
|
771
|
+
request.slice !== runner.slice ||
|
|
772
|
+
request.runnerGeneration !== runner.runnerGeneration ||
|
|
773
|
+
request.parent.pid !== state.supervisor.pid ||
|
|
774
|
+
request.parent.processIdentity !== state.supervisor.processIdentity ||
|
|
775
|
+
request.parent.startedAt !== state.supervisor.startedAt ||
|
|
776
|
+
request.workspaceRealpath !== state.workspaceRealpath ||
|
|
777
|
+
request.startupPath !== paths.startup ||
|
|
778
|
+
request.heartbeatPath !== paths.heartbeat ||
|
|
779
|
+
(!state.slices.some((slice) => slice.name === runner.slice && slice.selected) &&
|
|
780
|
+
!(0, fleet_state_js_1.fleetOwnsStartingSlice)(state, runner.slice, request.createdAt))) {
|
|
781
|
+
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', 'Retained runner request does not prove exact supervisor and workspace ownership.');
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
if (name.endsWith('.state.json'))
|
|
785
|
+
states.push(runner);
|
|
786
|
+
if (name.endsWith('.web-start.json')) {
|
|
787
|
+
const requestPath = statePath.replace(/\.state\.json$/, '.request.json');
|
|
788
|
+
const request = readFleetSliceRunnerRequest(requestPath, security);
|
|
789
|
+
(0, fleet_web_start_js_1.hasFleetWebStarted)(requestPath, request, security);
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
return states;
|
|
793
|
+
}
|
|
650
794
|
async function recoverFleetSliceRunnerCleanupsForSlices(authority, selectedSlices, paths, effects = {}) {
|
|
651
795
|
const selected = new Set([...selectedSlices].map((slice) => (0, fleet_lock_js_1.validateFleetIdentitySlug)(slice, 'Fleet cleanup Slice')));
|
|
652
796
|
if (selected.size === 0)
|
|
@@ -679,36 +823,27 @@ function inspectFleetRunnersAbsent(state, paths, effects = {}) {
|
|
|
679
823
|
const selected = state.slices
|
|
680
824
|
.filter(({ selected: isSelected }) => isSelected)
|
|
681
825
|
.map(({ name }) => name);
|
|
682
|
-
if (selected.length === 0)
|
|
683
|
-
return true;
|
|
684
|
-
if (!(0, node_fs_1.existsSync)(paths.runnersDirectory))
|
|
685
|
-
return 'ambiguous';
|
|
686
826
|
let runnerStates;
|
|
687
827
|
try {
|
|
688
|
-
|
|
689
|
-
if (
|
|
828
|
+
runnerStates = inspectRetainedFleetRunners(state, paths, effects.security ?? {});
|
|
829
|
+
if ((0, node_fs_1.existsSync)(paths.runnersDirectory) &&
|
|
830
|
+
(0, node_fs_1.readdirSync)(paths.runnersDirectory).some((name) => !name.endsWith('.state.json')))
|
|
690
831
|
return 'ambiguous';
|
|
691
|
-
}
|
|
692
|
-
runnerStates = entries
|
|
693
|
-
.map((name) => readFleetSliceRunnerState((0, node_path_1.join)(paths.runnersDirectory, name), effects.security ?? {}))
|
|
694
|
-
.filter((runner) => runner.fleetId === state.fleetId &&
|
|
695
|
-
runner.sessionGeneration === state.sessionGeneration);
|
|
696
832
|
}
|
|
697
833
|
catch {
|
|
698
834
|
return 'ambiguous';
|
|
699
835
|
}
|
|
700
836
|
const probe = effects.processProbe ?? process_identity_js_1.probeProcessIdentity;
|
|
837
|
+
for (const runner of runnerStates) {
|
|
838
|
+
if (runner.cleanup !== 'succeeded' ||
|
|
839
|
+
probe(runner.runner) !== 'absent' ||
|
|
840
|
+
(runner.child && probe(runner.child) !== 'absent'))
|
|
841
|
+
return 'ambiguous';
|
|
842
|
+
}
|
|
701
843
|
for (const slice of selected) {
|
|
702
844
|
const matching = runnerStates.filter((runner) => runner.slice === slice);
|
|
703
845
|
if (matching.length === 0)
|
|
704
846
|
return 'ambiguous';
|
|
705
|
-
for (const runner of matching) {
|
|
706
|
-
if (runner.cleanup !== 'succeeded' ||
|
|
707
|
-
probe(runner.runner) !== 'absent' ||
|
|
708
|
-
(runner.child && probe(runner.child) !== 'absent')) {
|
|
709
|
-
return 'ambiguous';
|
|
710
|
-
}
|
|
711
|
-
}
|
|
712
847
|
}
|
|
713
848
|
return true;
|
|
714
849
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { inventoryFleets, inventorySliceClaims } from './fleet-inventory.js';
|
|
2
|
+
import type { LocalDevContext } from './local-context.js';
|
|
3
|
+
import { verifyTaskEnvironment } from './task-authority.js';
|
|
4
|
+
import { type TaskIdentity } from './task-identity.js';
|
|
5
|
+
export interface TaskAttachmentInput {
|
|
6
|
+
appData: string;
|
|
7
|
+
context: LocalDevContext;
|
|
8
|
+
taskId: string;
|
|
9
|
+
workspaceName: string;
|
|
10
|
+
workspaceRoot: string;
|
|
11
|
+
}
|
|
12
|
+
export interface TaskAttachmentEffects {
|
|
13
|
+
inventory?: typeof inventoryFleets;
|
|
14
|
+
inventoryClaims?: typeof inventorySliceClaims;
|
|
15
|
+
verify?: typeof verifyTaskEnvironment;
|
|
16
|
+
}
|
|
17
|
+
export declare function attachStoppedTask(input: TaskAttachmentInput, effects?: TaskAttachmentEffects): Promise<TaskIdentity>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.attachStoppedTask = attachStoppedTask;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const errors_js_1 = require("./errors.js");
|
|
7
|
+
const fleet_inventory_js_1 = require("./fleet-inventory.js");
|
|
8
|
+
const fleet_lock_js_1 = require("./fleet-lock.js");
|
|
9
|
+
const identity_js_1 = require("./identity.js");
|
|
10
|
+
const process_identity_js_1 = require("./process-identity.js");
|
|
11
|
+
const runtime_paths_js_1 = require("./runtime-paths.js");
|
|
12
|
+
const task_authority_js_1 = require("./task-authority.js");
|
|
13
|
+
const task_identity_js_1 = require("./task-identity.js");
|
|
14
|
+
async function attachStoppedTask(input, effects = {}) {
|
|
15
|
+
const workspaceRoot = (0, node_fs_1.realpathSync)(input.workspaceRoot);
|
|
16
|
+
const stage = (0, task_identity_js_1.taskStage)((0, task_identity_js_1.requireTaskId)(input.taskId));
|
|
17
|
+
const fleetId = (0, identity_js_1.createFleetId)({
|
|
18
|
+
checkoutPath: workspaceRoot,
|
|
19
|
+
stage,
|
|
20
|
+
workspaceName: input.workspaceName,
|
|
21
|
+
});
|
|
22
|
+
const environment = await (effects.verify ?? task_authority_js_1.verifyTaskEnvironment)(workspaceRoot, input.context);
|
|
23
|
+
const currentTask = (0, task_identity_js_1.resolveTaskIdentityForAttachment)(workspaceRoot, input.taskId);
|
|
24
|
+
const currentFleetId = (0, identity_js_1.createFleetId)({
|
|
25
|
+
checkoutPath: workspaceRoot,
|
|
26
|
+
stage: (0, task_identity_js_1.taskStage)(currentTask.taskId),
|
|
27
|
+
workspaceName: input.workspaceName,
|
|
28
|
+
});
|
|
29
|
+
const inventory = await (effects.inventory ?? fleet_inventory_js_1.inventoryFleets)({
|
|
30
|
+
appData: input.appData,
|
|
31
|
+
});
|
|
32
|
+
const blocked = inventory.filter((record) => record.fleetId === fleetId ||
|
|
33
|
+
record.fleetId === currentFleetId ||
|
|
34
|
+
record.checkout === workspaceRoot);
|
|
35
|
+
if (blocked.length > 0) {
|
|
36
|
+
throw new errors_js_1.LocalDevContractError('fleet-in-use', 'Task reattachment requires stopped, fully cleaned fleet ownership in both worktrees. Run ebk dev down --all, then inspect ebk dev ps and use ebk dev prune for its exact stale fleet before attaching.');
|
|
37
|
+
}
|
|
38
|
+
// Lock both task identities: a target-worktree startup must not race the
|
|
39
|
+
// pointer transfer after inventory, even when it is starting a different task.
|
|
40
|
+
const leases = [];
|
|
41
|
+
try {
|
|
42
|
+
for (const lockedId of [...new Set([fleetId, currentFleetId])].sort()) {
|
|
43
|
+
const lockedPaths = (0, runtime_paths_js_1.fleetRuntimePaths)(lockedId, input.appData);
|
|
44
|
+
const lease = (0, fleet_lock_js_1.acquireFleetLock)(lockedPaths.lock, {
|
|
45
|
+
fleetId: lockedId,
|
|
46
|
+
owner: (0, process_identity_js_1.captureProcessIdentity)(),
|
|
47
|
+
sessionGeneration: (0, node_crypto_1.randomUUID)(),
|
|
48
|
+
});
|
|
49
|
+
if (lease.kind !== 'acquired') {
|
|
50
|
+
throw new errors_js_1.LocalDevContractError('fleet-in-use', 'Another process owns this task. Stop its fleet and retry explicit attachment.');
|
|
51
|
+
}
|
|
52
|
+
leases.push({ paths: lockedPaths, record: lease.record });
|
|
53
|
+
if ((0, node_fs_1.existsSync)(lockedPaths.state) || (0, node_fs_1.existsSync)(lockedPaths.capability)) {
|
|
54
|
+
throw new errors_js_1.LocalDevContractError('fleet-ownership-ambiguous', 'Residual fleet state prevents reattachment. Inspect ebk dev ps and recover its exact stale fleet first.');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const claims = await (effects.inventoryClaims ?? fleet_inventory_js_1.inventorySliceClaims)({
|
|
58
|
+
appData: input.appData,
|
|
59
|
+
});
|
|
60
|
+
if (claims.some((claim) => claim.fleetId === fleetId ||
|
|
61
|
+
claim.fleetId === currentFleetId ||
|
|
62
|
+
!claim.fleetId)) {
|
|
63
|
+
throw new errors_js_1.LocalDevContractError('fleet-ownership-ambiguous', 'Retained Slice claims prevent task reattachment. Inspect ebk dev ps and recover their exact Fleet before transferring ownership.');
|
|
64
|
+
}
|
|
65
|
+
return (0, task_identity_js_1.attachTaskIdentity)(workspaceRoot, input.taskId, environment);
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
for (const lease of leases.reverse()) {
|
|
69
|
+
(0, fleet_lock_js_1.releaseFleetLock)(lease.paths.lock, lease.record);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=task-attachment.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { assertWorkspaceStageOwnershipForWorkspace } from '../workspace-deployment/ownership.js';
|
|
2
|
+
import { resolveCurrentAwsAccountId } from './environment-inspector.js';
|
|
3
|
+
import type { LocalDevContext } from './local-context.js';
|
|
4
|
+
import { type TaskEnvironment } from './task-identity.js';
|
|
5
|
+
export interface TaskAuthorityEffects {
|
|
6
|
+
account?: typeof resolveCurrentAwsAccountId;
|
|
7
|
+
ownership?: typeof assertWorkspaceStageOwnershipForWorkspace;
|
|
8
|
+
}
|
|
9
|
+
export declare function verifyTaskEnvironment(workspaceRoot: string, context: LocalDevContext, effects?: TaskAuthorityEffects): Promise<TaskEnvironment>;
|
|
10
|
+
export declare function bindCurrentTaskEnvironment(workspaceRoot: string, context: LocalDevContext): Promise<void>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verifyTaskEnvironment = verifyTaskEnvironment;
|
|
4
|
+
exports.bindCurrentTaskEnvironment = bindCurrentTaskEnvironment;
|
|
5
|
+
const ownership_js_1 = require("../workspace-deployment/ownership.js");
|
|
6
|
+
const environment_inspector_js_1 = require("./environment-inspector.js");
|
|
7
|
+
const errors_js_1 = require("./errors.js");
|
|
8
|
+
const task_identity_js_1 = require("./task-identity.js");
|
|
9
|
+
async function verifyTaskEnvironment(workspaceRoot, context, effects = {}) {
|
|
10
|
+
const [accountId, ownership] = await Promise.all([
|
|
11
|
+
(effects.account ?? environment_inspector_js_1.resolveCurrentAwsAccountId)(context, AbortSignal.timeout(15_000)),
|
|
12
|
+
(effects.ownership ?? ownership_js_1.assertWorkspaceStageOwnershipForWorkspace)(workspaceRoot, 'development', { profile: context.profile }),
|
|
13
|
+
]);
|
|
14
|
+
if (accountId !== ownership.accountId ||
|
|
15
|
+
context.region !== ownership.region) {
|
|
16
|
+
throw new errors_js_1.LocalDevContractError('configuration-mismatch', 'Task development caller must match the workspace-owned development account and Region. Run ebk dev configure with its development profile and Region.');
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
accountId,
|
|
20
|
+
region: ownership.region,
|
|
21
|
+
workspaceDeploymentId: ownership.expectedOwner.workspaceDeploymentId,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
async function bindCurrentTaskEnvironment(workspaceRoot, context) {
|
|
25
|
+
(0, task_identity_js_1.bindTaskEnvironment)(workspaceRoot, await verifyTaskEnvironment(workspaceRoot, context));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=task-authority.js.map
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type PrivateStateSecurity } from './private-state.js';
|
|
2
|
+
export declare const TASK_ID_PATTERN: RegExp;
|
|
3
|
+
export declare const TASK_IDENTITY_SCHEMA_VERSION: 1;
|
|
4
|
+
export interface TaskIdentity {
|
|
5
|
+
schemaVersion: typeof TASK_IDENTITY_SCHEMA_VERSION;
|
|
6
|
+
taskId: string;
|
|
7
|
+
workspaceRealpath: string;
|
|
8
|
+
}
|
|
9
|
+
export interface TaskEnvironment {
|
|
10
|
+
accountId: string;
|
|
11
|
+
region: string;
|
|
12
|
+
workspaceDeploymentId: string;
|
|
13
|
+
}
|
|
14
|
+
/** Only explicit attachment may inspect a moved pointer without changing it. */
|
|
15
|
+
export declare function resolveTaskIdentityForAttachment(workspaceRoot: string, requestedTaskId: string, security?: PrivateStateSecurity): TaskIdentity;
|
|
16
|
+
/** Cleanup requires an already-bound task; it may not establish new authority. */
|
|
17
|
+
export declare function assertCurrentTaskEnvironment(workspaceRoot: string, environment: TaskEnvironment, security?: PrivateStateSecurity): TaskIdentity;
|
|
18
|
+
/** The caller must establish this tuple through current STS and workspace ownership checks. */
|
|
19
|
+
export declare function bindTaskEnvironment(workspaceRoot: string, environment: TaskEnvironment, security?: PrivateStateSecurity): void;
|
|
20
|
+
/** Called while holding the existing task fleet lock, after proving no runner or cleanup remains. */
|
|
21
|
+
export declare function attachTaskIdentity(workspaceRoot: string, taskId: string, environment: TaskEnvironment, security?: PrivateStateSecurity): TaskIdentity;
|
|
22
|
+
export declare function requireTaskId(value: unknown): string;
|
|
23
|
+
export declare function taskStage(taskId: string): string;
|
|
24
|
+
/** Git query budget: hosted Windows runners answer slowly under child contention
|
|
25
|
+
* (eight simultaneous resolvers exceeded 5 s in PR #113 diagnostic 34737069666). */
|
|
26
|
+
export declare const WORKTREE_GIT_QUERY_TIMEOUT_MS: Readonly<{
|
|
27
|
+
default: 5000;
|
|
28
|
+
win32: 30000;
|
|
29
|
+
}>;
|
|
30
|
+
export declare function resolveWorktreeGitDirectory(workspaceRoot: string): string;
|
|
31
|
+
export declare function taskIdentityPath(workspaceRoot: string): string;
|
|
32
|
+
export declare function validateTaskIdentity(value: unknown): TaskIdentity;
|
|
33
|
+
export declare function resolveTaskIdentity(workspaceRoot: string, security?: PrivateStateSecurity): TaskIdentity;
|