@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
|
@@ -63,15 +63,35 @@ function isSensitiveRecordKey(key) {
|
|
|
63
63
|
function logError(message) {
|
|
64
64
|
throw new errors_js_1.LocalDevContractError('log-query-invalid', message);
|
|
65
65
|
}
|
|
66
|
+
function safeLogCharacter(character) {
|
|
67
|
+
const codePoint = character.codePointAt(0);
|
|
68
|
+
return (codePoint === 0x09 ||
|
|
69
|
+
(codePoint >= 0x20 &&
|
|
70
|
+
!(codePoint >= 0x7f && codePoint <= 0x9f) &&
|
|
71
|
+
codePoint !== 0x2028 &&
|
|
72
|
+
codePoint !== 0x2029));
|
|
73
|
+
}
|
|
74
|
+
/** Log text is not an identity token: indentation and tabs are meaningful. */
|
|
75
|
+
function requireLogMessage(value) {
|
|
76
|
+
if (typeof value !== 'string' ||
|
|
77
|
+
value.length === 0 ||
|
|
78
|
+
Buffer.byteLength(value, 'utf8') > exports.LOCAL_LOG_MAX_LINE_BYTES ||
|
|
79
|
+
[...value].some((character) => !safeLogCharacter(character))) {
|
|
80
|
+
return logError('Local log message must be bounded UTF-8 text without unsafe controls.');
|
|
81
|
+
}
|
|
82
|
+
return value;
|
|
83
|
+
}
|
|
84
|
+
function truncateUtf8(value, maximumBytes) {
|
|
85
|
+
const bytes = Buffer.from(value, 'utf8');
|
|
86
|
+
if (bytes.length <= maximumBytes)
|
|
87
|
+
return value;
|
|
88
|
+
let end = maximumBytes;
|
|
89
|
+
while (end > 0 && (bytes[end] & 0xc0) === 0x80)
|
|
90
|
+
end -= 1;
|
|
91
|
+
return bytes.subarray(0, end).toString('utf8');
|
|
92
|
+
}
|
|
66
93
|
function stripUnsafeTerminalText(value) {
|
|
67
|
-
return [...value.replace(ANSI_ESCAPE, '')]
|
|
68
|
-
.filter((character) => {
|
|
69
|
-
const codePoint = character.codePointAt(0);
|
|
70
|
-
return (codePoint === 0x09 ||
|
|
71
|
-
(codePoint >= 0x20 && codePoint !== 0x7f) ||
|
|
72
|
-
codePoint > 0x9f);
|
|
73
|
-
})
|
|
74
|
-
.join('');
|
|
94
|
+
return [...value.replace(ANSI_ESCAPE, '')].filter(safeLogCharacter).join('');
|
|
75
95
|
}
|
|
76
96
|
function replaceCredentialUrl(value) {
|
|
77
97
|
return value.replace(sharedCredentialPattern('credential-url'), (credentialUrl) => {
|
|
@@ -94,7 +114,7 @@ function boundedRecordValue(value, exactValues, depth = 0) {
|
|
|
94
114
|
if (depth > 4)
|
|
95
115
|
return '[TRUNCATED_DEPTH]';
|
|
96
116
|
if (typeof value === 'string') {
|
|
97
|
-
return redactLocalLogText(value, exactValues)
|
|
117
|
+
return truncateUtf8(redactLocalLogText(value, exactValues), 2_048);
|
|
98
118
|
}
|
|
99
119
|
if (value === null ||
|
|
100
120
|
typeof value === 'boolean' ||
|
|
@@ -166,9 +186,7 @@ function validateLocalLogEnvelope(value) {
|
|
|
166
186
|
fleetId: (0, fleet_lock_js_1.validateFleetIdentitySlug)(value.fleetId, 'Local log fleetId'),
|
|
167
187
|
kind: value.kind,
|
|
168
188
|
level: value.level,
|
|
169
|
-
message: (
|
|
170
|
-
maximumLength: exports.LOCAL_LOG_MAX_LINE_BYTES,
|
|
171
|
-
}),
|
|
189
|
+
message: requireLogMessage(value.message),
|
|
172
190
|
schemaVersion: exports.LOCAL_LOG_SCHEMA_VERSION,
|
|
173
191
|
sequence: (0, contract_validation_js_1.requireInteger)(value.sequence, 'Local log sequence', 0, Number.MAX_SAFE_INTEGER),
|
|
174
192
|
sessionGeneration: (0, contract_validation_js_1.requireBoundedString)(value.sessionGeneration, 'Local log sessionGeneration', {
|
|
@@ -338,6 +356,9 @@ class FleetLogStore {
|
|
|
338
356
|
this.#maxAgeMs = options.maxAgeMs ?? exports.LOCAL_LOG_MAX_AGE_MS;
|
|
339
357
|
this.#maxGenerations = options.maxGenerations ?? exports.LOCAL_LOG_MAX_GENERATIONS;
|
|
340
358
|
this.#maxLineBytes = options.maxLineBytes ?? exports.LOCAL_LOG_MAX_LINE_BYTES;
|
|
359
|
+
if (this.#maxLineBytes > exports.LOCAL_LOG_MAX_LINE_BYTES) {
|
|
360
|
+
return logError('Local log line bound cannot exceed the public protocol byte limit.');
|
|
361
|
+
}
|
|
341
362
|
this.#now = options.now ?? (() => new Date());
|
|
342
363
|
this.#security = options.security ?? {};
|
|
343
364
|
for (const [value, label] of [
|
|
@@ -392,11 +413,8 @@ class FleetLogStore {
|
|
|
392
413
|
writeLine(slice, stream, attempt, line) {
|
|
393
414
|
const terminalSafe = stripUnsafeTerminalText(line);
|
|
394
415
|
const bytes = Buffer.byteLength(terminalSafe);
|
|
395
|
-
|
|
416
|
+
let truncated = bytes > this.#maxLineBytes;
|
|
396
417
|
const redacted = redactLocalLogText(terminalSafe, this.#exactValues);
|
|
397
|
-
const boundedPlain = truncated
|
|
398
|
-
? Buffer.from(redacted).subarray(0, this.#maxLineBytes).toString('utf8')
|
|
399
|
-
: redacted;
|
|
400
418
|
let parsed;
|
|
401
419
|
if (!truncated) {
|
|
402
420
|
try {
|
|
@@ -406,22 +424,32 @@ class FleetLogStore {
|
|
|
406
424
|
parsed = undefined;
|
|
407
425
|
}
|
|
408
426
|
}
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
const record = structured
|
|
427
|
+
let structured = parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed);
|
|
428
|
+
let record = structured
|
|
412
429
|
? boundedRecordValue(parsed, this.#exactValues)
|
|
413
430
|
: undefined;
|
|
414
|
-
|
|
431
|
+
let rawMessage = record && typeof record.message === 'string'
|
|
415
432
|
? record.message
|
|
416
433
|
: structured
|
|
417
434
|
? 'Structured log record'
|
|
418
|
-
:
|
|
435
|
+
: redacted || '[empty line]';
|
|
436
|
+
// Redaction can expand short inputs. Bound the sanitized payload, not its
|
|
437
|
+
// pre-redaction length, and never split a multi-byte UTF-8 character.
|
|
438
|
+
if (record &&
|
|
439
|
+
Buffer.byteLength(JSON.stringify(record)) > this.#maxLineBytes) {
|
|
440
|
+
rawMessage = JSON.stringify(record);
|
|
441
|
+
record = undefined;
|
|
442
|
+
structured = false;
|
|
443
|
+
truncated = true;
|
|
444
|
+
}
|
|
445
|
+
truncated ||= Buffer.byteLength(rawMessage) > this.#maxLineBytes;
|
|
446
|
+
const message = truncateUtf8(rawMessage, this.#maxLineBytes) || '.';
|
|
419
447
|
const envelope = {
|
|
420
448
|
attempt,
|
|
421
449
|
fleetId: this.#fleetId,
|
|
422
450
|
kind: structured ? 'structured' : 'plain',
|
|
423
451
|
level: normalizeLevel(record?.level, stream),
|
|
424
|
-
message
|
|
452
|
+
message,
|
|
425
453
|
...(record ? { record } : {}),
|
|
426
454
|
schemaVersion: exports.LOCAL_LOG_SCHEMA_VERSION,
|
|
427
455
|
sequence: this.#sequence,
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { type ChildProcess } from 'node:child_process';
|
|
2
2
|
import type { LocalDevAdapter } from './contracts.js';
|
|
3
3
|
import type { FleetLogStore } from './fleet-logs.js';
|
|
4
|
+
import type { FleetProcessIdentity } from './fleet-lock.js';
|
|
5
|
+
import type { NativeDevelopmentCompletion } from './native-completion.js';
|
|
4
6
|
export type FleetProcessRouteState = 'remote' | 'starting' | 'ready' | 'unavailable';
|
|
5
7
|
export type FleetProcessCleanupState = 'failed' | 'not-declared' | 'pending' | 'succeeded';
|
|
6
8
|
export interface FleetProcessLaunch {
|
|
@@ -8,6 +10,10 @@ export interface FleetProcessLaunch {
|
|
|
8
10
|
child: ChildProcess;
|
|
9
11
|
}
|
|
10
12
|
export interface FleetProcessEffects {
|
|
13
|
+
/** Native provisioning may outlast HTTP readiness. This is an owned launch
|
|
14
|
+
* notification, not an HTTP-health result. Non-native adapters omit it. */
|
|
15
|
+
applicationStarted?: () => boolean;
|
|
16
|
+
nativeDeployment?: (signal: AbortSignal) => Promise<NativeDevelopmentCompletion>;
|
|
11
17
|
cleanup?: () => Promise<void>;
|
|
12
18
|
delay?: (milliseconds: number, signal: AbortSignal) => Promise<void>;
|
|
13
19
|
launch: (attempt: number) => FleetProcessLaunch;
|
|
@@ -19,6 +25,7 @@ export interface FleetProcessEffects {
|
|
|
19
25
|
export interface FleetProcessControllerOptions {
|
|
20
26
|
adapter: LocalDevAdapter;
|
|
21
27
|
healthTimeoutMs?: number;
|
|
28
|
+
provisioningTimeoutMs?: number;
|
|
22
29
|
logStore?: FleetLogStore;
|
|
23
30
|
maxRestartAttempts: number;
|
|
24
31
|
name: string;
|
|
@@ -33,7 +40,15 @@ export declare function planFleetRestart(completedRestartAttempts: number, maxRe
|
|
|
33
40
|
nextAttempt: number;
|
|
34
41
|
restart: true;
|
|
35
42
|
};
|
|
36
|
-
export declare function
|
|
43
|
+
export declare function assertOwnedGroupAbsent(pid: number, deadline?: number): Promise<void>;
|
|
44
|
+
export declare function terminateOwnedChild(child: ChildProcess, ownedIdentity?: FleetProcessIdentity): Promise<void>;
|
|
45
|
+
export declare const FLEET_RUNNER_STOP_MESSAGE = "ebk-fleet-runner-stop";
|
|
46
|
+
/** A runner coordinates detached children and native cleanup. Never force-kill
|
|
47
|
+
* that coordinator on a client observation deadline. An explicit diagnostic
|
|
48
|
+
* deadline retains live ownership and reports failure instead of orphaning a
|
|
49
|
+
* writer (and falsely permitting stale-process recovery).
|
|
50
|
+
*/
|
|
51
|
+
export declare function terminateCoordinatingFleetRunner(child: ChildProcess, runnerGeneration: string, timeoutMs?: number): Promise<void>;
|
|
37
52
|
export declare class FleetProcessController {
|
|
38
53
|
#private;
|
|
39
54
|
constructor(options: FleetProcessControllerOptions, effects: FleetProcessEffects);
|
|
@@ -42,6 +57,10 @@ export declare class FleetProcessController {
|
|
|
42
57
|
get runnerGeneration(): string | undefined;
|
|
43
58
|
get state(): FleetProcessRouteState;
|
|
44
59
|
start(): Promise<void>;
|
|
60
|
+
/** Cancel readiness and pending automatic retries, not controller lifetime.
|
|
61
|
+
* The serialized startup rollback retains
|
|
62
|
+
* responsibility for native termination and exact cleanup before down runs. */
|
|
63
|
+
interruptStartup(): void;
|
|
45
64
|
restart(): Promise<void>;
|
|
46
65
|
stop(options: {
|
|
47
66
|
cleanup: boolean;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FleetProcessController = void 0;
|
|
3
|
+
exports.FleetProcessController = exports.FLEET_RUNNER_STOP_MESSAGE = void 0;
|
|
4
4
|
exports.fleetRestartDelay = fleetRestartDelay;
|
|
5
5
|
exports.planFleetRestart = planFleetRestart;
|
|
6
|
+
exports.assertOwnedGroupAbsent = assertOwnedGroupAbsent;
|
|
6
7
|
exports.terminateOwnedChild = terminateOwnedChild;
|
|
8
|
+
exports.terminateCoordinatingFleetRunner = terminateCoordinatingFleetRunner;
|
|
7
9
|
const node_child_process_1 = require("node:child_process");
|
|
8
10
|
const errors_js_1 = require("./errors.js");
|
|
11
|
+
const process_group_js_1 = require("./process-group.js");
|
|
12
|
+
const process_identity_js_1 = require("./process-identity.js");
|
|
9
13
|
function fleetRestartDelay(attempt) {
|
|
10
14
|
if (!Number.isInteger(attempt) || attempt < 0) {
|
|
11
15
|
throw new errors_js_1.LocalDevContractError('invalid-input', 'Fleet restart attempt must be a non-negative integer.');
|
|
@@ -27,9 +31,40 @@ function planFleetRestart(completedRestartAttempts, maxRestartAttempts) {
|
|
|
27
31
|
restart: true,
|
|
28
32
|
};
|
|
29
33
|
}
|
|
30
|
-
async function
|
|
31
|
-
|
|
34
|
+
async function waitForOwnedExit(exited, timeoutMs) {
|
|
35
|
+
let timer;
|
|
36
|
+
try {
|
|
37
|
+
return await Promise.race([
|
|
38
|
+
exited.then(() => true),
|
|
39
|
+
new Promise((resolvePromise) => {
|
|
40
|
+
timer = setTimeout(() => resolvePromise(false), timeoutMs);
|
|
41
|
+
}),
|
|
42
|
+
]);
|
|
43
|
+
}
|
|
44
|
+
finally {
|
|
45
|
+
if (timer)
|
|
46
|
+
clearTimeout(timer);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async function assertOwnedGroupAbsent(pid, deadline = Date.now() + 1_000) {
|
|
50
|
+
// Native Windows retains its existing taskkill contract. This POSIX proof
|
|
51
|
+
// is not a claim that Windows orphan trees can be inspected after exit.
|
|
52
|
+
if (process.platform === 'win32')
|
|
53
|
+
return;
|
|
54
|
+
while ((0, process_group_js_1.exactOwnedProcessGroupExists)(pid)) {
|
|
55
|
+
if (Date.now() >= deadline)
|
|
56
|
+
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', 'Owned child group remains after leader exit; child ownership is retained.');
|
|
57
|
+
await new Promise((resolve) => setTimeout(resolve, 25));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function terminateOwnedChild(child, ownedIdentity) {
|
|
61
|
+
if (!child.pid)
|
|
62
|
+
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', 'Owned child PID is unavailable.');
|
|
63
|
+
if (child.exitCode !== null || child.signalCode !== null) {
|
|
64
|
+
await assertOwnedGroupAbsent(child.pid);
|
|
32
65
|
return;
|
|
66
|
+
}
|
|
67
|
+
const deadline = Date.now() + process_group_js_1.OWNED_PROCESS_SIGNAL_GRACE_MS + process_group_js_1.OWNED_PROCESS_KILL_WAIT_MS;
|
|
33
68
|
const exited = new Promise((resolvePromise) => child.once('exit', () => resolvePromise()));
|
|
34
69
|
if (process.platform === 'win32' && child.pid) {
|
|
35
70
|
const killer = (0, node_child_process_1.spawn)('taskkill', ['/pid', String(child.pid), '/t', '/f'], {
|
|
@@ -37,36 +72,84 @@ async function terminateOwnedChild(child) {
|
|
|
37
72
|
windowsHide: true,
|
|
38
73
|
});
|
|
39
74
|
await new Promise((resolvePromise) => killer.once('exit', () => resolvePromise()));
|
|
40
|
-
await
|
|
41
|
-
exited,
|
|
42
|
-
new Promise((resolvePromise) => setTimeout(resolvePromise, 2_000)),
|
|
43
|
-
]);
|
|
75
|
+
await waitForOwnedExit(exited, 2_000);
|
|
44
76
|
return;
|
|
45
77
|
}
|
|
46
|
-
|
|
78
|
+
const identity = ownedIdentity ?? (0, process_identity_js_1.captureProcessIdentity)(child.pid);
|
|
79
|
+
const signalOwned = (signal) => {
|
|
80
|
+
if (identity.pid !== child.pid ||
|
|
81
|
+
(0, process_identity_js_1.probeProcessIdentity)(identity) !== 'matching')
|
|
82
|
+
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', 'Owned child identity changed; no process group was signaled.');
|
|
47
83
|
try {
|
|
48
|
-
process.kill(-
|
|
84
|
+
process.kill(-identity.pid, signal);
|
|
49
85
|
}
|
|
50
|
-
catch {
|
|
51
|
-
|
|
86
|
+
catch (error) {
|
|
87
|
+
if (typeof error !== 'object' ||
|
|
88
|
+
error === null ||
|
|
89
|
+
!('code' in error) ||
|
|
90
|
+
error.code !== 'ESRCH')
|
|
91
|
+
throw error;
|
|
92
|
+
if ((0, process_identity_js_1.probeProcessIdentity)(identity) !== 'matching')
|
|
93
|
+
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', 'Owned child identity changed before direct signal.');
|
|
94
|
+
child.kill(signal);
|
|
52
95
|
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
new Promise((resolvePromise) => setTimeout(() => resolvePromise(false), 5_000)),
|
|
57
|
-
]);
|
|
96
|
+
};
|
|
97
|
+
signalOwned('SIGTERM');
|
|
98
|
+
const stopped = await waitForOwnedExit(exited, process_group_js_1.OWNED_PROCESS_SIGNAL_GRACE_MS);
|
|
58
99
|
if (!stopped && child.pid) {
|
|
100
|
+
signalOwned('SIGKILL');
|
|
101
|
+
if (!(await waitForOwnedExit(exited, Math.max(0, deadline - Date.now()))))
|
|
102
|
+
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', 'Owned child did not exit; ownership is retained.');
|
|
103
|
+
}
|
|
104
|
+
await assertOwnedGroupAbsent(child.pid, deadline);
|
|
105
|
+
}
|
|
106
|
+
exports.FLEET_RUNNER_STOP_MESSAGE = 'ebk-fleet-runner-stop';
|
|
107
|
+
/** A runner coordinates detached children and native cleanup. Never force-kill
|
|
108
|
+
* that coordinator on a client observation deadline. An explicit diagnostic
|
|
109
|
+
* deadline retains live ownership and reports failure instead of orphaning a
|
|
110
|
+
* writer (and falsely permitting stale-process recovery).
|
|
111
|
+
*/
|
|
112
|
+
async function terminateCoordinatingFleetRunner(child, runnerGeneration, timeoutMs) {
|
|
113
|
+
if (child.exitCode !== null || child.signalCode !== null)
|
|
114
|
+
return;
|
|
115
|
+
if (!child.connected || !child.send) {
|
|
116
|
+
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', 'Fleet runner control channel is unavailable; live ownership is retained.');
|
|
117
|
+
}
|
|
118
|
+
if (timeoutMs !== undefined &&
|
|
119
|
+
(!Number.isInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 300_000)) {
|
|
120
|
+
throw new errors_js_1.LocalDevContractError('invalid-input', 'Invalid runner stop deadline.');
|
|
121
|
+
}
|
|
122
|
+
await new Promise((resolvePromise, reject) => {
|
|
123
|
+
const settle = (error) => {
|
|
124
|
+
if (timer)
|
|
125
|
+
clearTimeout(timer);
|
|
126
|
+
child.removeListener('exit', exited);
|
|
127
|
+
child.removeListener('error', failed);
|
|
128
|
+
if (error)
|
|
129
|
+
reject(error);
|
|
130
|
+
else
|
|
131
|
+
resolvePromise();
|
|
132
|
+
};
|
|
133
|
+
const exited = () => settle();
|
|
134
|
+
const failed = (error) => settle(error);
|
|
135
|
+
child.once('exit', exited);
|
|
136
|
+
child.once('error', failed);
|
|
137
|
+
// Native SST removal may legitimately outlive a client's observation
|
|
138
|
+
// deadline. The ordinary stop retains ownership until the exact runner
|
|
139
|
+
// exits; an explicit deadline is only for bounded diagnostics/tests.
|
|
140
|
+
const timer = timeoutMs === undefined
|
|
141
|
+
? undefined
|
|
142
|
+
: setTimeout(() => settle(new errors_js_1.LocalDevContractError('cleanup-incomplete', `Fleet runner has not completed coordinated shutdown within ${timeoutMs}ms; its process and claim remain retained.`)), timeoutMs);
|
|
59
143
|
try {
|
|
60
|
-
|
|
144
|
+
child.send?.({ type: exports.FLEET_RUNNER_STOP_MESSAGE, runnerGeneration }, (error) => {
|
|
145
|
+
if (error)
|
|
146
|
+
settle(error);
|
|
147
|
+
});
|
|
61
148
|
}
|
|
62
|
-
catch {
|
|
63
|
-
|
|
149
|
+
catch (error) {
|
|
150
|
+
settle(error instanceof Error ? error : new Error(String(error)));
|
|
64
151
|
}
|
|
65
|
-
|
|
66
|
-
exited,
|
|
67
|
-
new Promise((resolvePromise) => setTimeout(resolvePromise, 1_000)),
|
|
68
|
-
]);
|
|
69
|
-
}
|
|
152
|
+
});
|
|
70
153
|
}
|
|
71
154
|
async function defaultProbe(url, signal) {
|
|
72
155
|
try {
|
|
@@ -86,11 +169,13 @@ function defaultDelay(milliseconds, signal) {
|
|
|
86
169
|
resolvePromise();
|
|
87
170
|
return;
|
|
88
171
|
}
|
|
89
|
-
const
|
|
90
|
-
signal.addEventListener('abort', () => {
|
|
172
|
+
const settle = () => {
|
|
91
173
|
clearTimeout(timer);
|
|
174
|
+
signal.removeEventListener('abort', settle);
|
|
92
175
|
resolvePromise();
|
|
93
|
-
}
|
|
176
|
+
};
|
|
177
|
+
const timer = setTimeout(settle, milliseconds);
|
|
178
|
+
signal.addEventListener('abort', settle, { once: true });
|
|
94
179
|
});
|
|
95
180
|
}
|
|
96
181
|
class FleetProcessController {
|
|
@@ -100,7 +185,9 @@ class FleetProcessController {
|
|
|
100
185
|
#cleanup;
|
|
101
186
|
#effects;
|
|
102
187
|
#healthTimeoutMs;
|
|
188
|
+
#provisioningTimeoutMs;
|
|
103
189
|
#lifetime = new AbortController();
|
|
190
|
+
#startup = new AbortController();
|
|
104
191
|
#logStore;
|
|
105
192
|
#maxRestartAttempts;
|
|
106
193
|
#name;
|
|
@@ -118,16 +205,28 @@ class FleetProcessController {
|
|
|
118
205
|
}
|
|
119
206
|
this.#adapter = options.adapter;
|
|
120
207
|
this.#cleanup =
|
|
121
|
-
options.adapter.adapterVersion
|
|
208
|
+
options.adapter.adapterVersion !== 1 && options.adapter.lifecycle
|
|
122
209
|
? 'pending'
|
|
123
210
|
: 'not-declared';
|
|
124
211
|
this.#healthTimeoutMs = options.healthTimeoutMs ?? 120_000;
|
|
212
|
+
this.#provisioningTimeoutMs = options.provisioningTimeoutMs ?? 30 * 60_000;
|
|
213
|
+
for (const timeout of [
|
|
214
|
+
this.#healthTimeoutMs,
|
|
215
|
+
this.#provisioningTimeoutMs,
|
|
216
|
+
]) {
|
|
217
|
+
if (!Number.isSafeInteger(timeout) ||
|
|
218
|
+
timeout < 1 ||
|
|
219
|
+
timeout > 2_147_483_647)
|
|
220
|
+
throw new errors_js_1.LocalDevContractError('invalid-input', 'Fleet readiness deadline is invalid.');
|
|
221
|
+
}
|
|
125
222
|
this.#logStore = options.logStore;
|
|
126
223
|
this.#maxRestartAttempts = options.maxRestartAttempts;
|
|
127
224
|
this.#name = options.name;
|
|
128
225
|
this.#onStateChange = options.onStateChange;
|
|
129
226
|
this.#upstream = options.upstream;
|
|
130
227
|
this.#effects = {
|
|
228
|
+
applicationStarted: effects.applicationStarted,
|
|
229
|
+
nativeDeployment: effects.nativeDeployment,
|
|
131
230
|
cleanup: effects.cleanup,
|
|
132
231
|
delay: effects.delay ?? defaultDelay,
|
|
133
232
|
launch: effects.launch,
|
|
@@ -158,8 +257,9 @@ class FleetProcessController {
|
|
|
158
257
|
child.stderr?.on('data', (chunk) => this.#logStore?.writeChunk(this.#name, 'stderr', attempt, chunk));
|
|
159
258
|
}
|
|
160
259
|
#launch() {
|
|
260
|
+
this.#startup = new AbortController();
|
|
161
261
|
this.#cleanup =
|
|
162
|
-
this.#adapter.adapterVersion
|
|
262
|
+
this.#adapter.adapterVersion !== 1 && this.#adapter.lifecycle
|
|
163
263
|
? 'pending'
|
|
164
264
|
: 'not-declared';
|
|
165
265
|
const launched = this.#effects.launch(this.#activeAttempt);
|
|
@@ -177,41 +277,80 @@ class FleetProcessController {
|
|
|
177
277
|
this.#logStore?.writeLine(this.#name, 'stderr', launched.attempt, `Local process exited with ${signal ? `signal ${signal}` : `status ${code ?? 'unknown'}`}.`);
|
|
178
278
|
if (signal || code !== 0) {
|
|
179
279
|
this.#cleanup =
|
|
180
|
-
this.#adapter.adapterVersion
|
|
280
|
+
this.#adapter.adapterVersion !== 1 && this.#adapter.lifecycle
|
|
181
281
|
? 'failed'
|
|
182
282
|
: 'not-declared';
|
|
183
283
|
this.#logStore?.writeLine(this.#name, 'stderr', launched.attempt, 'Runner cleanup did not complete cleanly; automatic restart is blocked until declared cleanup succeeds.');
|
|
184
284
|
return;
|
|
185
285
|
}
|
|
186
|
-
|
|
286
|
+
if (!this.#startup.signal.aborted) {
|
|
287
|
+
this.#restartTask = this.#autoRestart();
|
|
288
|
+
}
|
|
187
289
|
});
|
|
188
290
|
}
|
|
189
291
|
async #waitForReadiness() {
|
|
190
|
-
const
|
|
292
|
+
const child = this.#child;
|
|
293
|
+
const signal = AbortSignal.any([
|
|
294
|
+
this.#lifetime.signal,
|
|
295
|
+
this.#startup.signal,
|
|
296
|
+
]);
|
|
297
|
+
const provisioningDeadline = Date.now() + this.#provisioningTimeoutMs;
|
|
298
|
+
let deadline;
|
|
191
299
|
const target = new URL(this.#adapter.healthPath, this.#upstream);
|
|
192
|
-
while (!
|
|
193
|
-
if (!this.#child) {
|
|
300
|
+
while (!signal.aborted && !this.#stopping) {
|
|
301
|
+
if (!child || this.#child !== child) {
|
|
194
302
|
throw new errors_js_1.LocalDevContractError('readiness-timeout', `${this.#name} exited before readiness.`);
|
|
195
303
|
}
|
|
196
|
-
if (
|
|
304
|
+
if (deadline === undefined) {
|
|
305
|
+
const native = await this.#effects.nativeDeployment?.(signal);
|
|
306
|
+
if (native === 'failed') {
|
|
307
|
+
this.#transition('unavailable');
|
|
308
|
+
throw new errors_js_1.LocalDevContractError('prerequisite-unavailable', `${this.#name} native SST deployment failed; web health cannot accept this task. Inspect ebk dev logs ${this.#name}, resolve the native diagnostic, then run ebk dev restart ${this.#name} after owned cleanup settles.`);
|
|
309
|
+
}
|
|
310
|
+
if (native === 'pending' ||
|
|
311
|
+
(this.#effects.applicationStarted &&
|
|
312
|
+
!this.#effects.applicationStarted())) {
|
|
313
|
+
if (Date.now() >= provisioningDeadline) {
|
|
314
|
+
this.#transition('unavailable');
|
|
315
|
+
throw new errors_js_1.LocalDevContractError('provisioning-timeout', `${this.#name} native provisioning did not complete and launch the web application within ${this.#provisioningTimeoutMs}ms. Inspect ebk dev logs before retrying; owned cleanup must settle first.`);
|
|
316
|
+
}
|
|
317
|
+
await this.#effects.delay(500, signal);
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
deadline = Date.now() + this.#healthTimeoutMs;
|
|
321
|
+
}
|
|
322
|
+
if (Date.now() >= deadline)
|
|
323
|
+
break;
|
|
324
|
+
if (await this.#effects.probe(target, signal)) {
|
|
325
|
+
if (this.#child !== child || this.#stopping || signal.aborted)
|
|
326
|
+
continue;
|
|
197
327
|
this.#restartAttempts = 0;
|
|
198
328
|
this.#transition('ready');
|
|
199
329
|
return;
|
|
200
330
|
}
|
|
201
|
-
await this.#effects.delay(500,
|
|
331
|
+
await this.#effects.delay(500, signal);
|
|
202
332
|
}
|
|
203
333
|
this.#transition('unavailable');
|
|
334
|
+
if (signal.aborted || this.#stopping) {
|
|
335
|
+
throw new errors_js_1.LocalDevContractError('startup-interrupted', `${this.#name} startup was interrupted; owned cleanup must settle before retrying.`);
|
|
336
|
+
}
|
|
204
337
|
throw new errors_js_1.LocalDevContractError('readiness-timeout', `${this.#name} did not become ready within ${this.#healthTimeoutMs}ms.`);
|
|
205
338
|
}
|
|
206
339
|
async #autoRestart() {
|
|
340
|
+
const signal = AbortSignal.any([
|
|
341
|
+
this.#lifetime.signal,
|
|
342
|
+
this.#startup.signal,
|
|
343
|
+
]);
|
|
344
|
+
if (this.#stopping || signal.aborted)
|
|
345
|
+
return;
|
|
207
346
|
const restart = planFleetRestart(this.#restartAttempts, this.#maxRestartAttempts);
|
|
208
347
|
if (!restart.restart) {
|
|
209
348
|
this.#logStore?.writeLine(this.#name, 'stderr', this.#activeAttempt, `Automatic restart stopped after ${this.#maxRestartAttempts} attempt(s).`);
|
|
210
349
|
return;
|
|
211
350
|
}
|
|
212
351
|
this.#restartAttempts = restart.nextAttempt;
|
|
213
|
-
await this.#effects.delay(restart.delayMs,
|
|
214
|
-
if (this.#stopping ||
|
|
352
|
+
await this.#effects.delay(restart.delayMs, signal);
|
|
353
|
+
if (this.#stopping || signal.aborted)
|
|
215
354
|
return;
|
|
216
355
|
this.#activeAttempt = restart.nextAttempt;
|
|
217
356
|
this.#launch();
|
|
@@ -222,7 +361,10 @@ class FleetProcessController {
|
|
|
222
361
|
if (this.#child) {
|
|
223
362
|
await this.#effects.terminate(this.#child);
|
|
224
363
|
}
|
|
225
|
-
if (!this.#restartTask &&
|
|
364
|
+
if (!this.#restartTask &&
|
|
365
|
+
!this.#stopping &&
|
|
366
|
+
!this.#lifetime.signal.aborted &&
|
|
367
|
+
!this.#startup.signal.aborted) {
|
|
226
368
|
this.#restartTask = this.#autoRestart();
|
|
227
369
|
}
|
|
228
370
|
this.#logStore?.writeLine(this.#name, 'stderr', this.#activeAttempt, error instanceof Error ? error.message : String(error));
|
|
@@ -236,6 +378,14 @@ class FleetProcessController {
|
|
|
236
378
|
this.#launch();
|
|
237
379
|
await this.#waitForReadiness();
|
|
238
380
|
}
|
|
381
|
+
/** Cancel readiness and pending automatic retries, not controller lifetime.
|
|
382
|
+
* The serialized startup rollback retains
|
|
383
|
+
* responsibility for native termination and exact cleanup before down runs. */
|
|
384
|
+
interruptStartup() {
|
|
385
|
+
if (this.#state === 'starting' ||
|
|
386
|
+
(this.#state === 'unavailable' && this.#restartTask))
|
|
387
|
+
this.#startup.abort();
|
|
388
|
+
}
|
|
239
389
|
async restart() {
|
|
240
390
|
if (this.#state === 'remote') {
|
|
241
391
|
throw new errors_js_1.LocalDevContractError('not-running', `${this.#name} is not selected.`);
|
|
@@ -243,8 +393,13 @@ class FleetProcessController {
|
|
|
243
393
|
this.#stopping = true;
|
|
244
394
|
try {
|
|
245
395
|
if (this.#child) {
|
|
246
|
-
|
|
247
|
-
await this.#effects.
|
|
396
|
+
const stoppedChild = this.#child;
|
|
397
|
+
await this.#effects.prepareRestart?.(stoppedChild);
|
|
398
|
+
await this.#effects.terminate(stoppedChild);
|
|
399
|
+
if (stoppedChild.exitCode !== 0 || stoppedChild.signalCode !== null) {
|
|
400
|
+
this.#cleanup = 'failed';
|
|
401
|
+
throw new errors_js_1.LocalDevContractError('cleanup-incomplete', `${this.#name} runner did not settle successfully for restart; its claim remains retained.`);
|
|
402
|
+
}
|
|
248
403
|
}
|
|
249
404
|
await this.#restartTask;
|
|
250
405
|
this.#restartTask = undefined;
|
|
@@ -263,6 +418,7 @@ class FleetProcessController {
|
|
|
263
418
|
if (this.#state === 'remote')
|
|
264
419
|
return;
|
|
265
420
|
this.#stopping = true;
|
|
421
|
+
this.#startup.abort();
|
|
266
422
|
if (this.#child)
|
|
267
423
|
await this.#effects.terminate(this.#child);
|
|
268
424
|
await this.#restartTask;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FleetStateRecord } from './fleet-state.js';
|
|
2
|
+
import type { FleetRuntimePaths } from './runtime-paths.js';
|
|
3
|
+
import { inspectFleetRunnersAbsent } from './slice-runner.js';
|
|
4
|
+
/** Retire terminal diagnostics only while the supervisor still owns its state. */
|
|
5
|
+
export declare function retireFleetRunnerEvidence(state: FleetStateRecord, paths: FleetRuntimePaths, effects?: Parameters<typeof inspectFleetRunnersAbsent>[2]): void;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.retireFleetRunnerEvidence = retireFleetRunnerEvidence;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
const contract_validation_js_1 = require("./contract-validation.js");
|
|
7
|
+
const errors_js_1 = require("./errors.js");
|
|
8
|
+
const private_state_js_1 = require("./private-state.js");
|
|
9
|
+
const slice_runner_js_1 = require("./slice-runner.js");
|
|
10
|
+
/** Retire terminal diagnostics only while the supervisor still owns its state. */
|
|
11
|
+
function retireFleetRunnerEvidence(state, paths, effects = {}) {
|
|
12
|
+
const security = effects.security ?? {};
|
|
13
|
+
const refuse = () => {
|
|
14
|
+
throw new errors_js_1.LocalDevContractError('fleet-ownership-ambiguous', 'Fleet runner evidence cannot be retired without exact terminal ownership and process absence.');
|
|
15
|
+
};
|
|
16
|
+
if (state.slices.some(({ selected }) => selected))
|
|
17
|
+
refuse();
|
|
18
|
+
if ((0, slice_runner_js_1.inspectFleetRunnersAbsent)(state, paths, effects) !== true)
|
|
19
|
+
refuse();
|
|
20
|
+
if (!(0, node_fs_1.existsSync)(paths.runnersDirectory))
|
|
21
|
+
return;
|
|
22
|
+
(0, private_state_js_1.assertPrivatePath)(paths.runnersDirectory, 'directory', security);
|
|
23
|
+
const archive = (0, node_path_1.join)(paths.logDirectory, 'runner-evidence', (0, contract_validation_js_1.sha256Digest)(state.sessionGeneration));
|
|
24
|
+
(0, private_state_js_1.ensurePrivateDirectory)(paths.logDirectory, security);
|
|
25
|
+
(0, private_state_js_1.ensurePrivateDirectory)((0, node_path_1.join)(paths.logDirectory, 'runner-evidence'), security);
|
|
26
|
+
(0, private_state_js_1.ensurePrivateDirectory)(archive, security);
|
|
27
|
+
// A retry may encounter copies from an interrupted retirement. They must
|
|
28
|
+
// independently belong to this exact terminal generation, never be replaced.
|
|
29
|
+
if ((0, slice_runner_js_1.inspectFleetRunnersAbsent)(state, { ...paths, runnersDirectory: archive }, effects) !== true)
|
|
30
|
+
refuse();
|
|
31
|
+
const entries = (0, node_fs_1.readdirSync)(paths.runnersDirectory).sort();
|
|
32
|
+
const copies = entries.map((name) => ({
|
|
33
|
+
name,
|
|
34
|
+
contents: (0, private_state_js_1.readPrivateFile)((0, node_path_1.join)(paths.runnersDirectory, name), security),
|
|
35
|
+
}));
|
|
36
|
+
for (const { name, contents } of copies) {
|
|
37
|
+
const destination = (0, node_path_1.join)(archive, name);
|
|
38
|
+
(0, private_state_js_1.publishPrivateFileExclusive)(destination, contents, security);
|
|
39
|
+
if (!(0, private_state_js_1.readPrivateFile)(destination, security).equals(contents))
|
|
40
|
+
refuse();
|
|
41
|
+
}
|
|
42
|
+
// No authority is removed until every byte has a verified durable copy.
|
|
43
|
+
if ((0, slice_runner_js_1.inspectFleetRunnersAbsent)(state, paths, effects) !== true)
|
|
44
|
+
refuse();
|
|
45
|
+
if (JSON.stringify((0, node_fs_1.readdirSync)(paths.runnersDirectory).sort()) !==
|
|
46
|
+
JSON.stringify(entries))
|
|
47
|
+
refuse();
|
|
48
|
+
for (const { name, contents } of copies) {
|
|
49
|
+
const source = (0, node_path_1.join)(paths.runnersDirectory, name);
|
|
50
|
+
if (!(0, private_state_js_1.readPrivateFile)(source, security).equals(contents))
|
|
51
|
+
refuse();
|
|
52
|
+
(0, node_fs_1.unlinkSync)(source);
|
|
53
|
+
}
|
|
54
|
+
(0, node_fs_1.rmdirSync)(paths.runnersDirectory);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=fleet-runner-evidence.js.map
|