@empire-builder-kit/nx 1.0.0-rc.37 → 1.0.0-rc.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/README.md +18 -0
  2. package/executors.json +5 -0
  3. package/generators.json +10 -0
  4. package/package.json +20 -3
  5. package/src/aws-authority/index.d.ts +1 -0
  6. package/src/aws-authority/index.js +1 -0
  7. package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
  8. package/src/aws-authority/lambda-policy-ordering.js +56 -0
  9. package/src/aws-authority/stage-authority.d.ts +11 -3
  10. package/src/aws-authority/stage-authority.js +615 -29
  11. package/src/blueprints/external-sandbox.js +21 -9
  12. package/src/blueprints/manifest.d.ts +1 -1
  13. package/src/blueprints/resolver.js +28 -15
  14. package/src/cli/bootstrap.d.ts +1 -1
  15. package/src/cli/deploy-runtime.d.ts +6 -0
  16. package/src/cli/deploy-runtime.js +58 -0
  17. package/src/cli/dev-command.d.ts +16 -4
  18. package/src/cli/dev-command.js +63 -0
  19. package/src/cli/main.d.ts +7 -1
  20. package/src/cli/main.js +128 -20
  21. package/src/cli/output.d.ts +1 -1
  22. package/src/developer-agent/context.js +41 -9
  23. package/src/developer-agent/generator-planning.js +16 -2
  24. package/src/developer-agent/git-inspection.d.ts +6 -2
  25. package/src/developer-agent/git-inspection.js +78 -6
  26. package/src/developer-agent/model.d.ts +4 -2
  27. package/src/developer-agent/operation-registry.d.ts +5 -0
  28. package/src/developer-agent/operation-registry.js +179 -23
  29. package/src/developer-agent/preview-changes.d.ts +2 -0
  30. package/src/developer-agent/preview-changes.js +14 -2
  31. package/src/developer-agent/preview-source.js +3 -0
  32. package/src/developer-agent/validation.js +20 -8
  33. package/src/developer-agent/workspace-inspection.js +37 -3
  34. package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
  35. package/src/executors/deployment-plan/deployment-plan.js +51 -4
  36. package/src/executors/dev-doctor/dev-doctor.js +13 -6
  37. package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
  38. package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
  39. package/src/executors/dev-task-cleanup/schema.json +9 -0
  40. package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
  41. package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
  42. package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
  43. package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
  44. package/src/executors/fleet/fleet.js +1 -1
  45. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +28 -1
  46. package/src/executors/local-deploy/local-deploy.d.ts +8 -1
  47. package/src/executors/local-deploy/local-deploy.js +97 -24
  48. package/src/executors/local-deploy/schema.json +8 -0
  49. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +30 -18
  50. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +2 -0
  51. package/src/executors/sst-lifecycle/governed-native-operation.js +9 -0
  52. package/src/executors/sst-lifecycle/run-sst-command.d.ts +5 -0
  53. package/src/executors/sst-lifecycle/run-sst-command.js +220 -32
  54. package/src/executors/sst-lifecycle/sst-environment-source.d.ts +8 -0
  55. package/src/executors/sst-lifecycle/sst-environment-source.js +54 -0
  56. package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
  57. package/src/executors/sst-lifecycle/task-unlock.js +126 -0
  58. package/src/foundation/capability-plan.d.ts +43 -0
  59. package/src/foundation/capability-plan.js +168 -0
  60. package/src/foundation/discovery.d.ts +14 -11
  61. package/src/foundation/discovery.js +32 -6
  62. package/src/foundation/index.d.ts +1 -0
  63. package/src/foundation/index.js +1 -0
  64. package/src/foundation/local-database-contract.d.ts +20 -0
  65. package/src/foundation/local-database-contract.js +262 -13
  66. package/src/foundation/local-private-smoke-access.d.ts +20 -0
  67. package/src/foundation/local-private-smoke-access.js +197 -0
  68. package/src/foundation/preflight.js +37 -18
  69. package/src/foundation/private-smoke-access.js +10 -2
  70. package/src/foundation/private-smoke-admission.d.ts +3 -1
  71. package/src/foundation/private-smoke-admission.js +29 -8
  72. package/src/foundation/private-smoke-control-plane.js +17 -6
  73. package/src/foundation/provision-database-bindings.d.ts +5 -0
  74. package/src/foundation/provision-database-bindings.js +41 -8
  75. package/src/foundation/provision-logical-database.js +13 -8
  76. package/src/foundation/requirements.d.ts +3 -3
  77. package/src/foundation/requirements.js +24 -12
  78. package/src/foundation/router-waf.d.ts +1 -0
  79. package/src/foundation/router-waf.js +14 -1
  80. package/src/generators/blueprint/blueprint.d.ts +5 -0
  81. package/src/generators/blueprint/blueprint.js +102 -0
  82. package/src/generators/blueprint/files.d.ts +6 -0
  83. package/src/generators/blueprint/files.js +217 -0
  84. package/src/generators/blueprint/schema.d.ts +4 -0
  85. package/src/generators/blueprint/schema.json +18 -0
  86. package/src/generators/formatting.js +24 -1
  87. package/src/generators/logging-registry.d.ts +2 -0
  88. package/src/generators/logging-registry.js +22 -0
  89. package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
  90. package/src/generators/preset/workspace-files-adopter-skills.js +301 -0
  91. package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
  92. package/src/generators/preset/workspace-files-ci-install.js +196 -0
  93. package/src/generators/preset/workspace-files-developer-agent.js +40 -13
  94. package/src/generators/preset/workspace-files-performance-load.js +8 -0
  95. package/src/generators/preset/workspace-files-stage-authority.js +40 -1
  96. package/src/generators/preset/workspace-files-thin-deploy.js +66 -34
  97. package/src/generators/preset/workspace-files-thin-docs.js +64 -18
  98. package/src/generators/preset/workspace-files.d.ts +4 -0
  99. package/src/generators/preset/workspace-files.js +159 -91
  100. package/src/generators/repository-policy/repository-policy.js +37 -0
  101. package/src/generators/slice/built-in-plan-api-contract-files.js +42 -7
  102. package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
  103. package/src/generators/slice/built-in-plan-api-files.js +47 -389
  104. package/src/generators/slice/built-in-plan-async-work-files.js +19 -1912
  105. package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
  106. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +36 -2
  107. package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
  108. package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
  109. package/src/generators/slice/built-in-plan-background-work-files.d.ts +1 -1
  110. package/src/generators/slice/built-in-plan-background-work-files.js +15 -5
  111. package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
  112. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  113. package/src/generators/slice/built-in-plan-data-files.js +61 -1164
  114. package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
  115. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +18 -2
  116. package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2446
  117. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +30 -6
  118. package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
  119. package/src/generators/slice/built-in-plan-database-lifecycle-files.js +4 -15
  120. package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
  121. package/src/generators/slice/built-in-plan-foundation-files.js +34 -10
  122. package/src/generators/slice/built-in-plan-frontend-files.js +2 -2
  123. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  124. package/src/generators/slice/built-in-plan-infrastructure-files.js +180 -522
  125. package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
  126. package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
  127. package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
  128. package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
  129. package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
  130. package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
  131. package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
  132. package/src/generators/slice/built-in-plan-key-value-delivery.js +120 -0
  133. package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
  134. package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
  135. package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
  136. package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
  137. package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
  138. package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
  139. package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
  140. package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
  141. package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
  142. package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
  143. package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
  144. package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
  145. package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
  146. package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
  147. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
  148. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
  149. package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
  150. package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
  151. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
  152. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
  153. package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
  154. package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
  155. package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
  156. package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
  157. package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
  158. package/src/generators/slice/built-in-plan-metadata-files.js +140 -28
  159. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +1 -1
  160. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +36 -19
  161. package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
  162. package/src/generators/slice/built-in-plan-operations-files.js +89 -50
  163. package/src/generators/slice/built-in-plan-performance-files.js +84 -1010
  164. package/src/generators/slice/built-in-plan-project-files.js +116 -67
  165. package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
  166. package/src/generators/slice/built-in-plan-release-files.js +64 -15
  167. package/src/generators/slice/built-in-plan-reliability-files.js +54 -28
  168. package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
  169. package/src/generators/slice/built-in-plan-shared.js +41 -19
  170. package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
  171. package/src/generators/slice/built-in-plan-sql-events.js +257 -0
  172. package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
  173. package/src/generators/slice/built-in-plan-testing-files.js +184 -132
  174. package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
  175. package/src/generators/slice/built-in-plan-testing-persistence-files.js +178 -0
  176. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +1 -1
  177. package/src/generators/slice/built-in-plan-thin-release-files.js +35 -2
  178. package/src/generators/slice/built-in-plan-verification-files.js +70 -0
  179. package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
  180. package/src/generators/slice/built-in-plan-web-files.js +206 -14
  181. package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
  182. package/src/generators/slice/built-in-plan-workload-role-files.js +113 -274
  183. package/src/generators/slice/built-in-plan.d.ts +9 -1
  184. package/src/generators/slice/built-in-plan.js +49 -21
  185. package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
  186. package/src/generators/slice/data-policy-review-seed.js +22 -0
  187. package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
  188. package/src/generators/slice/deployed-smoke-readiness.js +214 -0
  189. package/src/generators/slice/local-source-identity.d.ts +2 -0
  190. package/src/generators/slice/local-source-identity.js +31 -0
  191. package/src/generators/slice/persistence-contract.d.ts +14 -0
  192. package/src/generators/slice/persistence-contract.js +32 -0
  193. package/src/generators/slice/slice.js +29 -24
  194. package/src/generators/sql/schema.d.ts +7 -0
  195. package/src/generators/sql/schema.json +38 -0
  196. package/src/generators/sql/sql.d.ts +6 -0
  197. package/src/generators/sql/sql.js +53 -0
  198. package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
  199. package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
  200. package/src/generators/upgrade/upgrade.d.ts +2 -0
  201. package/src/generators/upgrade/upgrade.js +136 -9
  202. package/src/generators/workload/workload.js +51 -2
  203. package/src/local-dev/browser-verification.d.ts +37 -0
  204. package/src/local-dev/browser-verification.js +281 -0
  205. package/src/local-dev/contracts.d.ts +10 -1
  206. package/src/local-dev/contracts.js +114 -13
  207. package/src/local-dev/dev-command-core.js +24 -5
  208. package/src/local-dev/docker-credential-health.d.ts +14 -0
  209. package/src/local-dev/docker-credential-health.js +94 -0
  210. package/src/local-dev/environment-inspector.d.ts +7 -0
  211. package/src/local-dev/environment-inspector.js +42 -15
  212. package/src/local-dev/environment-state.js +2 -2
  213. package/src/local-dev/errors.d.ts +1 -1
  214. package/src/local-dev/errors.js +2 -0
  215. package/src/local-dev/fleet-client.js +2 -2
  216. package/src/local-dev/fleet-configuration.js +57 -25
  217. package/src/local-dev/fleet-inventory.js +46 -18
  218. package/src/local-dev/fleet-ipc.d.ts +7 -0
  219. package/src/local-dev/fleet-ipc.js +14 -2
  220. package/src/local-dev/fleet-launcher.d.ts +6 -0
  221. package/src/local-dev/fleet-launcher.js +14 -2
  222. package/src/local-dev/fleet-logs.js +50 -22
  223. package/src/local-dev/fleet-process.d.ts +20 -1
  224. package/src/local-dev/fleet-process.js +197 -41
  225. package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
  226. package/src/local-dev/fleet-runner-evidence.js +56 -0
  227. package/src/local-dev/fleet-runtime.js +268 -229
  228. package/src/local-dev/fleet-session.d.ts +2 -0
  229. package/src/local-dev/fleet-session.js +28 -11
  230. package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
  231. package/src/local-dev/fleet-state.d.ts +5 -2
  232. package/src/local-dev/fleet-state.js +25 -4
  233. package/src/local-dev/fleet-supervisor.d.ts +3 -0
  234. package/src/local-dev/fleet-supervisor.js +66 -11
  235. package/src/local-dev/fleet-web-start.d.ts +12 -0
  236. package/src/local-dev/fleet-web-start.js +48 -0
  237. package/src/local-dev/identity.js +3 -14
  238. package/src/local-dev/index.d.ts +1 -0
  239. package/src/local-dev/index.js +1 -0
  240. package/src/local-dev/native-completion.d.ts +9 -0
  241. package/src/local-dev/native-completion.js +130 -0
  242. package/src/local-dev/nx-workspace.d.ts +4 -2
  243. package/src/local-dev/nx-workspace.js +11 -6
  244. package/src/local-dev/personal-stage.d.ts +4 -5
  245. package/src/local-dev/personal-stage.js +6 -54
  246. package/src/local-dev/port-claims.d.ts +13 -0
  247. package/src/local-dev/port-claims.js +46 -0
  248. package/src/local-dev/ports.d.ts +14 -2
  249. package/src/local-dev/ports.js +78 -3
  250. package/src/local-dev/private-state.d.ts +6 -0
  251. package/src/local-dev/private-state.js +126 -34
  252. package/src/local-dev/process-group.d.ts +4 -0
  253. package/src/local-dev/process-group.js +29 -0
  254. package/src/local-dev/process-identity.d.ts +8 -0
  255. package/src/local-dev/process-identity.js +31 -1
  256. package/src/local-dev/proxy.js +11 -12
  257. package/src/local-dev/runtime-paths.js +1 -1
  258. package/src/local-dev/slice-claim.js +1 -1
  259. package/src/local-dev/slice-runner.d.ts +15 -6
  260. package/src/local-dev/slice-runner.js +189 -54
  261. package/src/local-dev/task-attachment.d.ts +17 -0
  262. package/src/local-dev/task-attachment.js +73 -0
  263. package/src/local-dev/task-authority.d.ts +10 -0
  264. package/src/local-dev/task-authority.js +27 -0
  265. package/src/local-dev/task-identity.d.ts +33 -0
  266. package/src/local-dev/task-identity.js +418 -0
  267. package/src/local-dev/task-native-writer.d.ts +18 -0
  268. package/src/local-dev/task-native-writer.js +329 -0
  269. package/src/local-dev/tls.js +3 -1
  270. package/src/local-dev/web-launch.d.ts +9 -0
  271. package/src/local-dev/web-launch.js +130 -0
  272. package/src/ownership/composition.d.ts +2 -1
  273. package/src/ownership/composition.js +1 -0
  274. package/src/performance/scenario.d.ts +22 -0
  275. package/src/performance/scenario.js +100 -92
  276. package/src/repository-policy/deployment-plan.d.ts +2 -2
  277. package/src/repository-policy/deployment-plan.js +2 -1
  278. package/src/repository-policy/policy.js +38 -3
  279. package/src/schemas/blueprint-v1.json +5 -4
  280. package/src/schemas/foundation-requirement-v1.json +5 -4
  281. package/src/schemas/testing-evidence-result-v1.json +1 -1
  282. package/src/secrets/operator.d.ts +3 -1
  283. package/src/secrets/operator.js +22 -3
  284. package/src/sst-environment-source-format.d.ts +3 -0
  285. package/src/sst-environment-source-format.js +20 -0
  286. package/src/supply-chain/blueprint-trust-git.js +13 -3
  287. package/src/supply-chain/build-output.js +15 -0
  288. package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
  289. package/src/testing-evidence/fixture-scope.d.ts +2 -1
  290. package/src/testing-evidence/fixture-scope.js +4 -2
  291. package/src/testing-evidence/result.d.ts +2 -1
  292. package/src/testing-evidence/result.js +18 -4
  293. package/src/workload-roles/standard-slice.js +2 -3
  294. package/src/api-contract/baseline-update.js.map +0 -1
  295. package/src/api-contract/compatibility.js.map +0 -1
  296. package/src/api-contract/contract-graph.js.map +0 -1
  297. package/src/api-contract/evidence.js.map +0 -1
  298. package/src/api-contract/index.js.map +0 -1
  299. package/src/api-contract/model.fixtures.d.ts +0 -2
  300. package/src/api-contract/model.fixtures.js +0 -81
  301. package/src/api-contract/model.fixtures.js.map +0 -1
  302. package/src/api-contract/model.js.map +0 -1
  303. package/src/api-contract/rollout.js.map +0 -1
  304. package/src/authorization/compatibility.js.map +0 -1
  305. package/src/authorization/index.js.map +0 -1
  306. package/src/aws/child-environment.js.map +0 -1
  307. package/src/aws/identity.js.map +0 -1
  308. package/src/aws-authority/index.js.map +0 -1
  309. package/src/aws-authority/stage-authority.js.map +0 -1
  310. package/src/blueprints/execution.js.map +0 -1
  311. package/src/blueprints/external-sandbox.js.map +0 -1
  312. package/src/blueprints/index.js.map +0 -1
  313. package/src/blueprints/inputs.js.map +0 -1
  314. package/src/blueprints/manifest.js.map +0 -1
  315. package/src/blueprints/resolver.js.map +0 -1
  316. package/src/blueprints/transitions.js.map +0 -1
  317. package/src/cli/agent-command.js.map +0 -1
  318. package/src/cli/agent-runtime.js.map +0 -1
  319. package/src/cli/blueprint-authority.js.map +0 -1
  320. package/src/cli/blueprint-command.js.map +0 -1
  321. package/src/cli/bootstrap.js.map +0 -1
  322. package/src/cli/dev-command.js.map +0 -1
  323. package/src/cli/main.js.map +0 -1
  324. package/src/cli/output.js.map +0 -1
  325. package/src/cli/personal-secret-runtime.js.map +0 -1
  326. package/src/cli/secret-terminal.js.map +0 -1
  327. package/src/container-images.js.map +0 -1
  328. package/src/data-lifecycle/index.js.map +0 -1
  329. package/src/data-lifecycle/model.fixtures.d.ts +0 -2
  330. package/src/data-lifecycle/model.fixtures.js +0 -244
  331. package/src/data-lifecycle/model.fixtures.js.map +0 -1
  332. package/src/data-lifecycle/model.js.map +0 -1
  333. package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
  334. package/src/data-lifecycle/validation.js.map +0 -1
  335. package/src/database-retirement/contract.js.map +0 -1
  336. package/src/database-retirement/index.js.map +0 -1
  337. package/src/deterministic-order.js.map +0 -1
  338. package/src/developer-agent/context.js.map +0 -1
  339. package/src/developer-agent/generator-planning.js.map +0 -1
  340. package/src/developer-agent/generator-preview.js.map +0 -1
  341. package/src/developer-agent/git-inspection.js.map +0 -1
  342. package/src/developer-agent/handoff.js.map +0 -1
  343. package/src/developer-agent/index.js.map +0 -1
  344. package/src/developer-agent/model.js.map +0 -1
  345. package/src/developer-agent/operation-registry.js.map +0 -1
  346. package/src/developer-agent/ordering.js.map +0 -1
  347. package/src/developer-agent/planning.js.map +0 -1
  348. package/src/developer-agent/preview-changes.js.map +0 -1
  349. package/src/developer-agent/preview-source.js.map +0 -1
  350. package/src/developer-agent/validation.js.map +0 -1
  351. package/src/developer-agent/workspace-inspection.js.map +0 -1
  352. package/src/developer-agent/workspace-path.js.map +0 -1
  353. package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
  354. package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
  355. package/src/executors/deploy/deploy.js.map +0 -1
  356. package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
  357. package/src/executors/dev/dev.js.map +0 -1
  358. package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
  359. package/src/executors/dev-setup/dev-setup.js.map +0 -1
  360. package/src/executors/developer-context/developer-context.js.map +0 -1
  361. package/src/executors/fleet/fleet.js.map +0 -1
  362. package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
  363. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
  364. package/src/executors/foundation-profile-preflight/production-database-safeguard.js.map +0 -1
  365. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
  366. package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
  367. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
  368. package/src/executors/local-deploy/federated-credential-transport.js.map +0 -1
  369. package/src/executors/local-deploy/fixtures/local-deploy-state-machine.mjs +0 -53
  370. package/src/executors/local-deploy/local-approval.js.map +0 -1
  371. package/src/executors/local-deploy/local-deploy.js.map +0 -1
  372. package/src/executors/refresh/refresh.js.map +0 -1
  373. package/src/executors/remove/remove.js.map +0 -1
  374. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js.map +0 -1
  375. package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
  376. package/src/executors/secret-initialize/secret-initialize.js.map +0 -1
  377. package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
  378. package/src/executors/sst-lifecycle/generated-secret-retirement.js.map +0 -1
  379. package/src/executors/sst-lifecycle/governed-native-operation.js.map +0 -1
  380. package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
  381. package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
  382. package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
  383. package/src/executors/sst-lifecycle/sst-environment-source.js.map +0 -1
  384. package/src/executors/unlock/unlock.js.map +0 -1
  385. package/src/executors/work-markers/work-markers.js.map +0 -1
  386. package/src/foundation/discovery.js.map +0 -1
  387. package/src/foundation/index.js.map +0 -1
  388. package/src/foundation/local-database-contract.js.map +0 -1
  389. package/src/foundation/logging-preflight.js.map +0 -1
  390. package/src/foundation/logging.js.map +0 -1
  391. package/src/foundation/partial-state.js.map +0 -1
  392. package/src/foundation/preflight.js.map +0 -1
  393. package/src/foundation/private-smoke-access.js.map +0 -1
  394. package/src/foundation/private-smoke-admission.js.map +0 -1
  395. package/src/foundation/private-smoke-control-plane.js.map +0 -1
  396. package/src/foundation/provision-database-bindings.js.map +0 -1
  397. package/src/foundation/provision-logical-database.js.map +0 -1
  398. package/src/foundation/requirements.js.map +0 -1
  399. package/src/foundation/router-origin-proof.js.map +0 -1
  400. package/src/foundation/router-waf-rate-rehearsal.js.map +0 -1
  401. package/src/foundation/router-waf.js.map +0 -1
  402. package/src/foundation/stages.js.map +0 -1
  403. package/src/frontend-security/index.js.map +0 -1
  404. package/src/frontend-security/security-headers.js.map +0 -1
  405. package/src/generators/feature-registry.js.map +0 -1
  406. package/src/generators/formatting.js.map +0 -1
  407. package/src/generators/function/function.js.map +0 -1
  408. package/src/generators/job/job.js.map +0 -1
  409. package/src/generators/logging-registry.js.map +0 -1
  410. package/src/generators/post-generation-install.js.map +0 -1
  411. package/src/generators/preset/dependency-overrides.js.map +0 -1
  412. package/src/generators/preset/generator.js.map +0 -1
  413. package/src/generators/preset/tool-versions.js.map +0 -1
  414. package/src/generators/preset/workspace-files-ci-acceptance.js.map +0 -1
  415. package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
  416. package/src/generators/preset/workspace-files-ecr-inspector.js.map +0 -1
  417. package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
  418. package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
  419. package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
  420. package/src/generators/preset/workspace-files-stage-authority.js.map +0 -1
  421. package/src/generators/preset/workspace-files-thin-deploy.js.map +0 -1
  422. package/src/generators/preset/workspace-files-thin-docs.js.map +0 -1
  423. package/src/generators/preset/workspace-files-thin-release.js.map +0 -1
  424. package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
  425. package/src/generators/preset/workspace-files.js.map +0 -1
  426. package/src/generators/repository-policy/repository-policy.js.map +0 -1
  427. package/src/generators/repository-policy/tree-policy.js.map +0 -1
  428. package/src/generators/service/service.js.map +0 -1
  429. package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
  430. package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
  431. package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
  432. package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
  433. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
  434. package/src/generators/slice/built-in-plan-background-work-files.js.map +0 -1
  435. package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
  436. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
  437. package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
  438. package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
  439. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
  440. package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
  441. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
  442. package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
  443. package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
  444. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
  445. package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
  446. package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
  447. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
  448. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
  449. package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
  450. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js.map +0 -1
  451. package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
  452. package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
  453. package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
  454. package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
  455. package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
  456. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
  457. package/src/generators/slice/built-in-plan-shared.js.map +0 -1
  458. package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
  459. package/src/generators/slice/built-in-plan-thin-release-files.js.map +0 -1
  460. package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
  461. package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
  462. package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
  463. package/src/generators/slice/built-in-plan.js.map +0 -1
  464. package/src/generators/slice/slice.js.map +0 -1
  465. package/src/generators/upgrade/upgrade.js.map +0 -1
  466. package/src/generators/workload/frozen-container.js.map +0 -1
  467. package/src/generators/workload/performance-registration.js.map +0 -1
  468. package/src/generators/workload/reliability-registration.js.map +0 -1
  469. package/src/generators/workload/service-performance-files.js.map +0 -1
  470. package/src/generators/workload/workload.js.map +0 -1
  471. package/src/git-policy/action-pins.js.map +0 -1
  472. package/src/git-policy/github-bootstrap.js.map +0 -1
  473. package/src/git-policy/index.js.map +0 -1
  474. package/src/git-policy/routing.js.map +0 -1
  475. package/src/index.js.map +0 -1
  476. package/src/infrastructure-change/convergence.js.map +0 -1
  477. package/src/infrastructure-change/drift.js.map +0 -1
  478. package/src/infrastructure-change/index.js.map +0 -1
  479. package/src/infrastructure-change/local-capability.js.map +0 -1
  480. package/src/infrastructure-change/model.js.map +0 -1
  481. package/src/infrastructure-change/normalize.js.map +0 -1
  482. package/src/infrastructure-change/plan.js.map +0 -1
  483. package/src/infrastructure-change/risk.js.map +0 -1
  484. package/src/infrastructure-change/summary.js.map +0 -1
  485. package/src/local-dev/context-discovery.js.map +0 -1
  486. package/src/local-dev/contract-validation.js.map +0 -1
  487. package/src/local-dev/contracts.js.map +0 -1
  488. package/src/local-dev/control-contract.js.map +0 -1
  489. package/src/local-dev/dev-command-core.js.map +0 -1
  490. package/src/local-dev/effects.js.map +0 -1
  491. package/src/local-dev/environment-inspector.js.map +0 -1
  492. package/src/local-dev/environment-state.js.map +0 -1
  493. package/src/local-dev/errors.js.map +0 -1
  494. package/src/local-dev/fleet-client.js.map +0 -1
  495. package/src/local-dev/fleet-configuration.js.map +0 -1
  496. package/src/local-dev/fleet-inventory.js.map +0 -1
  497. package/src/local-dev/fleet-ipc.js.map +0 -1
  498. package/src/local-dev/fleet-launcher.js.map +0 -1
  499. package/src/local-dev/fleet-lock.js.map +0 -1
  500. package/src/local-dev/fleet-logs.js.map +0 -1
  501. package/src/local-dev/fleet-process.js.map +0 -1
  502. package/src/local-dev/fleet-runtime.js.map +0 -1
  503. package/src/local-dev/fleet-session.js.map +0 -1
  504. package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
  505. package/src/local-dev/fleet-startup.js.map +0 -1
  506. package/src/local-dev/fleet-state.js.map +0 -1
  507. package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
  508. package/src/local-dev/fleet-supervisor.js.map +0 -1
  509. package/src/local-dev/gateway-daemon.js.map +0 -1
  510. package/src/local-dev/gateway.js.map +0 -1
  511. package/src/local-dev/identity.js.map +0 -1
  512. package/src/local-dev/index.js.map +0 -1
  513. package/src/local-dev/local-context.js.map +0 -1
  514. package/src/local-dev/nx-workspace.js.map +0 -1
  515. package/src/local-dev/personal-secret-ledger.js.map +0 -1
  516. package/src/local-dev/personal-stage.js.map +0 -1
  517. package/src/local-dev/portless.js.map +0 -1
  518. package/src/local-dev/ports.js.map +0 -1
  519. package/src/local-dev/private-state.js.map +0 -1
  520. package/src/local-dev/process-identity.js.map +0 -1
  521. package/src/local-dev/proxy.js.map +0 -1
  522. package/src/local-dev/runtime-paths.js.map +0 -1
  523. package/src/local-dev/secret-slice-claim.js.map +0 -1
  524. package/src/local-dev/slice-claim.js.map +0 -1
  525. package/src/local-dev/slice-runner.js.map +0 -1
  526. package/src/local-dev/tls.js.map +0 -1
  527. package/src/ownership/composition.js.map +0 -1
  528. package/src/ownership/foundation-record.js.map +0 -1
  529. package/src/ownership/hash.js.map +0 -1
  530. package/src/ownership/index.js.map +0 -1
  531. package/src/ownership/json-ownership.js.map +0 -1
  532. package/src/ownership/record.js.map +0 -1
  533. package/src/ownership/workspace-record.js.map +0 -1
  534. package/src/performance/cost-collection.js.map +0 -1
  535. package/src/performance/cost-controls.js.map +0 -1
  536. package/src/performance/evidence.js.map +0 -1
  537. package/src/performance/index.js.map +0 -1
  538. package/src/performance/load-safety.js.map +0 -1
  539. package/src/performance/model.js.map +0 -1
  540. package/src/performance/pr-artifact-budget.js.map +0 -1
  541. package/src/performance/runner.js.map +0 -1
  542. package/src/performance/scenario-endpoint.js.map +0 -1
  543. package/src/performance/scenario.js.map +0 -1
  544. package/src/performance/test-fixtures.d.ts +0 -7
  545. package/src/performance/test-fixtures.js +0 -167
  546. package/src/performance/test-fixtures.js.map +0 -1
  547. package/src/performance/unit-cost.js.map +0 -1
  548. package/src/release/index.js.map +0 -1
  549. package/src/release/lifecycle.js.map +0 -1
  550. package/src/release/manifest.js.map +0 -1
  551. package/src/release/rollout.js.map +0 -1
  552. package/src/release/source-authority.js.map +0 -1
  553. package/src/repository-policy/aurora-preflight.js.map +0 -1
  554. package/src/repository-policy/capacity-migration.js.map +0 -1
  555. package/src/repository-policy/deployment-plan.js.map +0 -1
  556. package/src/repository-policy/foundation-profile.js.map +0 -1
  557. package/src/repository-policy/index.js.map +0 -1
  558. package/src/repository-policy/policy.js.map +0 -1
  559. package/src/secrets/adapters.js.map +0 -1
  560. package/src/secrets/aws-control-plane.js.map +0 -1
  561. package/src/secrets/declaration-verification.js.map +0 -1
  562. package/src/secrets/generated-aws-control-plane.js.map +0 -1
  563. package/src/secrets/guardrails.js.map +0 -1
  564. package/src/secrets/index.js.map +0 -1
  565. package/src/secrets/metadata.js.map +0 -1
  566. package/src/secrets/model.js.map +0 -1
  567. package/src/secrets/operator.js.map +0 -1
  568. package/src/secrets/permissions.js.map +0 -1
  569. package/src/secrets/personal-command.js.map +0 -1
  570. package/src/secrets/personal-ledger.js.map +0 -1
  571. package/src/secrets/registry.js.map +0 -1
  572. package/src/secrets/verification.js.map +0 -1
  573. package/src/secrets/workload-access.js.map +0 -1
  574. package/src/sst-environment-source-format.js.map +0 -1
  575. package/src/supply-chain/action-pins.js.map +0 -1
  576. package/src/supply-chain/blueprint-trust-git.js.map +0 -1
  577. package/src/supply-chain/blueprint-trust-process.js.map +0 -1
  578. package/src/supply-chain/blueprint-trust.js.map +0 -1
  579. package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
  580. package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
  581. package/src/supply-chain/build-output-bounds.js.map +0 -1
  582. package/src/supply-chain/build-output.js.map +0 -1
  583. package/src/supply-chain/common.js.map +0 -1
  584. package/src/supply-chain/container-artifact-contract.js.map +0 -1
  585. package/src/supply-chain/container-release.js.map +0 -1
  586. package/src/supply-chain/ecr-applicability.js.map +0 -1
  587. package/src/supply-chain/ecr-scanning.js.map +0 -1
  588. package/src/supply-chain/ecs-deployed-image.js.map +0 -1
  589. package/src/supply-chain/errors.js.map +0 -1
  590. package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
  591. package/src/supply-chain/generated-command.js.map +0 -1
  592. package/src/supply-chain/generated-container-release-command.js.map +0 -1
  593. package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
  594. package/src/supply-chain/generated-files.js.map +0 -1
  595. package/src/supply-chain/generated-scanner-command.js.map +0 -1
  596. package/src/supply-chain/index.js.map +0 -1
  597. package/src/supply-chain/inventory.js.map +0 -1
  598. package/src/supply-chain/license-expression.js.map +0 -1
  599. package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
  600. package/src/supply-chain/policy.js.map +0 -1
  601. package/src/supply-chain/publication.js.map +0 -1
  602. package/src/supply-chain/sbom.js.map +0 -1
  603. package/src/supply-chain/scanner.js.map +0 -1
  604. package/src/supply-chain/vendored-source.js.map +0 -1
  605. package/src/testing-evidence/fixture-scope.js.map +0 -1
  606. package/src/testing-evidence/index.js.map +0 -1
  607. package/src/testing-evidence/quarantine.js.map +0 -1
  608. package/src/testing-evidence/result.js.map +0 -1
  609. package/src/testing-evidence/runner-adapter.js.map +0 -1
  610. package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
  611. package/src/validation.js.map +0 -1
  612. package/src/work-markers/index.js.map +0 -1
  613. package/src/work-markers/work-markers.js.map +0 -1
  614. package/src/workload-roles/account-baseline.js.map +0 -1
  615. package/src/workload-roles/authority.js.map +0 -1
  616. package/src/workload-roles/aws-adapter.js.map +0 -1
  617. package/src/workload-roles/aws-internal-handler.js.map +0 -1
  618. package/src/workload-roles/aws-s3-state.js.map +0 -1
  619. package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
  620. package/src/workload-roles/boundary.js.map +0 -1
  621. package/src/workload-roles/convergence.js.map +0 -1
  622. package/src/workload-roles/effective-policy.js.map +0 -1
  623. package/src/workload-roles/handler.js.map +0 -1
  624. package/src/workload-roles/history.js.map +0 -1
  625. package/src/workload-roles/index.js.map +0 -1
  626. package/src/workload-roles/injection.js.map +0 -1
  627. package/src/workload-roles/manifest.js.map +0 -1
  628. package/src/workload-roles/provisioner.js.map +0 -1
  629. package/src/workload-roles/registration.js.map +0 -1
  630. package/src/workload-roles/stage-boundary.js.map +0 -1
  631. package/src/workload-roles/standard-slice.js.map +0 -1
  632. package/src/workspace-deployment/affected-lifecycle.js.map +0 -1
  633. package/src/workspace-deployment/identity.js.map +0 -1
  634. package/src/workspace-deployment/index.js.map +0 -1
  635. package/src/workspace-deployment/migration-evidence.js.map +0 -1
  636. package/src/workspace-deployment/migration.js.map +0 -1
  637. package/src/workspace-deployment/ownership.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 code = await childExit(cleanup);
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 runFleetSliceRunner(requestPath, options = {}) {
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 terminate = options.terminate ?? fleet_process_js_1.terminateOwnedChild;
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: (options.processIdentity ?? process_identity_js_1.captureProcessIdentity)(child.pid),
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
- await runDeclaredCleanupTarget(cleanupTarget, runtime, childEnvironment, startup.identity.stage, request.workspaceRealpath, spawnTarget);
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
- process.once('SIGINT', interrupt);
529
- process.once('SIGTERM', terminateSignal);
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
- process.removeListener('SIGINT', interrupt);
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
- const timeoutMs = effects.timeoutMs ?? 120_000;
615
- if (!Number.isInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 300_000) {
616
- await (0, fleet_process_js_1.terminateOwnedChild)(child);
617
- throw new errors_js_1.LocalDevContractError('cleanup-incomplete', 'Fleet Slice cleanup retry timeout is invalid.');
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
- const selected = new Set(state.slices
643
- .filter(({ selected: isSelected }) => isSelected)
644
- .map(({ name }) => name));
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
- const entries = (0, node_fs_1.readdirSync)(paths.runnersDirectory);
689
- if (entries.some((name) => !/^[a-z0-9][a-z0-9-]{0,62}-[a-f0-9]{20}\.state\.json$/.test(name))) {
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;