@empire-builder-kit/nx 1.0.0-rc.38 → 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 +3 -1
  169. package/src/generators/slice/built-in-plan-shared.js +40 -18
  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 +191 -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.hardenPrivatePath = hardenPrivatePath;
5
5
  exports.assertPrivatePath = assertPrivatePath;
6
6
  exports.ensurePrivateDirectory = ensurePrivateDirectory;
7
7
  exports.createPrivateFileExclusive = createPrivateFileExclusive;
8
+ exports.publishPrivateFileExclusive = publishPrivateFileExclusive;
8
9
  exports.atomicWritePrivateFile = atomicWritePrivateFile;
9
10
  exports.atomicWritePrivateFileWithMaximumBytes = atomicWritePrivateFileWithMaximumBytes;
10
11
  exports.readPrivateFile = readPrivateFile;
@@ -19,34 +20,39 @@ exports.PRIVATE_FILE_MODE = 0o600;
19
20
  exports.PRIVATE_STATE_MAX_BYTES = 64 * 1024;
20
21
  const WINDOWS_HARDEN_ACL = String.raw `
21
22
  $ErrorActionPreference = 'Stop'
22
- $path = $env:EBK_PRIVATE_PATH
23
23
  $kind = $env:EBK_PRIVATE_KIND
24
24
  $identity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
25
- if ($kind -eq 'directory') {
26
- $info = [System.IO.DirectoryInfo]::new($path)
27
- } else {
28
- $info = [System.IO.FileInfo]::new($path)
29
- }
30
- $acl = $info.GetAccessControl()
31
- $acl.SetAccessRuleProtection($true, $false)
32
- foreach ($rule in @($acl.Access)) {
33
- [void]$acl.RemoveAccessRuleSpecific($rule)
34
- }
35
- $rights = [System.Security.AccessControl.FileSystemRights]::FullControl
36
- $type = [System.Security.AccessControl.AccessControlType]::Allow
37
- if ($kind -eq 'directory') {
38
- $inheritance = [System.Security.AccessControl.InheritanceFlags]'ContainerInherit,ObjectInherit'
39
- $propagation = [System.Security.AccessControl.PropagationFlags]::None
40
- $rule = [System.Security.AccessControl.FileSystemAccessRule]::new(
41
- $identity.User, $rights, $inheritance, $propagation, $type
42
- )
43
- } else {
44
- $rule = [System.Security.AccessControl.FileSystemAccessRule]::new(
45
- $identity.User, $rights, $type
46
- )
25
+ # Every path in one invocation: a PowerShell start costs seconds on hosted
26
+ # Windows runners, so the levels a private directory creates are hardened
27
+ # together rather than one process per level.
28
+ foreach ($path in ($env:EBK_PRIVATE_PATHS -split [char]10)) {
29
+ if ($path.Length -eq 0) { continue }
30
+ if ($kind -eq 'directory') {
31
+ $info = [System.IO.DirectoryInfo]::new($path)
32
+ } else {
33
+ $info = [System.IO.FileInfo]::new($path)
34
+ }
35
+ $acl = $info.GetAccessControl()
36
+ $acl.SetAccessRuleProtection($true, $false)
37
+ foreach ($rule in @($acl.Access)) {
38
+ [void]$acl.RemoveAccessRuleSpecific($rule)
39
+ }
40
+ $rights = [System.Security.AccessControl.FileSystemRights]::FullControl
41
+ $type = [System.Security.AccessControl.AccessControlType]::Allow
42
+ if ($kind -eq 'directory') {
43
+ $inheritance = [System.Security.AccessControl.InheritanceFlags]'ContainerInherit,ObjectInherit'
44
+ $propagation = [System.Security.AccessControl.PropagationFlags]::None
45
+ $rule = [System.Security.AccessControl.FileSystemAccessRule]::new(
46
+ $identity.User, $rights, $inheritance, $propagation, $type
47
+ )
48
+ } else {
49
+ $rule = [System.Security.AccessControl.FileSystemAccessRule]::new(
50
+ $identity.User, $rights, $type
51
+ )
52
+ }
53
+ $acl.AddAccessRule($rule)
54
+ $info.SetAccessControl($acl)
47
55
  }
48
- $acl.AddAccessRule($rule)
49
- $info.SetAccessControl($acl)
50
56
  `;
51
57
  const WINDOWS_ASSERT_PRIVATE_ACL = String.raw `
52
58
  $ErrorActionPreference = 'Stop'
@@ -59,8 +65,16 @@ if ($kind -eq 'directory') {
59
65
  $info = [System.IO.FileInfo]::new($path)
60
66
  }
61
67
  $acl = $info.GetAccessControl()
68
+ # A refusal names the descriptor it saw (owner, protection, every rule with
69
+ # its inheritance flag) so a wrong ACL can be attributed to what wrote it.
70
+ $describe = {
71
+ $rules = @($acl.Access | ForEach-Object {
72
+ "$($_.IdentityReference)=$($_.FileSystemRights):$($_.AccessControlType):inherited=$($_.IsInherited)"
73
+ }) -join '; '
74
+ "owner=$($acl.Owner); protected=$($acl.AreAccessRulesProtected); user=$($identity.User.Value); rules=[$rules]"
75
+ }
62
76
  if (-not $acl.AreAccessRulesProtected) {
63
- throw 'ACL inheritance is enabled.'
77
+ throw "ACL inheritance is enabled: $(& $describe)"
64
78
  }
65
79
  $allowRules = @($acl.Access | Where-Object {
66
80
  $_.AccessControlType -eq [System.Security.AccessControl.AccessControlType]::Allow
@@ -72,10 +86,10 @@ $selfRules = @($allowRules | Where-Object {
72
86
  $_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]).Value -eq $identity.User.Value
73
87
  })
74
88
  if ($unsafeRules.Count -ne 0 -or $selfRules.Count -eq 0) {
75
- throw 'ACL grants access beyond the current user or omits the current user.'
89
+ throw "ACL grants access beyond the current user or omits the current user: $(& $describe)"
76
90
  }
77
91
  `;
78
- function runWindowsAclScript(script, path, kind) {
92
+ function runWindowsAclScript(script, paths, kind) {
79
93
  const systemRoot = process.env.SystemRoot;
80
94
  if (!systemRoot) {
81
95
  throw new Error('SystemRoot is unavailable.');
@@ -91,7 +105,8 @@ function runWindowsAclScript(script, path, kind) {
91
105
  env: {
92
106
  ...process.env,
93
107
  EBK_PRIVATE_KIND: kind,
94
- EBK_PRIVATE_PATH: path,
108
+ EBK_PRIVATE_PATH: paths[0],
109
+ EBK_PRIVATE_PATHS: paths.join('\n'),
95
110
  },
96
111
  stdio: 'pipe',
97
112
  timeout: 15_000,
@@ -100,10 +115,13 @@ function runWindowsAclScript(script, path, kind) {
100
115
  }
101
116
  const defaultWindowsAcl = {
102
117
  assert(path, kind) {
103
- runWindowsAclScript(WINDOWS_ASSERT_PRIVATE_ACL, path, kind);
118
+ runWindowsAclScript(WINDOWS_ASSERT_PRIVATE_ACL, [path], kind);
104
119
  },
105
120
  harden(path, kind) {
106
- runWindowsAclScript(WINDOWS_HARDEN_ACL, path, kind);
121
+ runWindowsAclScript(WINDOWS_HARDEN_ACL, [path], kind);
122
+ },
123
+ hardenAll(paths, kind) {
124
+ runWindowsAclScript(WINDOWS_HARDEN_ACL, paths, kind);
107
125
  },
108
126
  };
109
127
  function platformFor(security) {
@@ -136,6 +154,26 @@ function hardenPrivatePath(path, kind, security = {}) {
136
154
  throw new errors_js_1.LocalDevContractError('invalid-state', `Unable to restrict private ${kind} ${path}: ${error instanceof Error ? error.message : String(error)}`);
137
155
  }
138
156
  }
157
+ /** Harden several paths of one kind, in one platform invocation where the
158
+ * platform supports it. */
159
+ function hardenPrivatePaths(paths, kind, security) {
160
+ if (paths.length === 0)
161
+ return;
162
+ if (platformFor(security) === 'win32') {
163
+ const acl = windowsAclFor(security);
164
+ if (acl.hardenAll && paths.length > 1) {
165
+ try {
166
+ acl.hardenAll(paths, kind);
167
+ }
168
+ catch (error) {
169
+ throw new errors_js_1.LocalDevContractError('invalid-state', `Unable to restrict private ${kind} ${paths.join(', ')}: ${error instanceof Error ? error.message : String(error)}`);
170
+ }
171
+ return;
172
+ }
173
+ }
174
+ for (const path of paths)
175
+ hardenPrivatePath(path, kind, security);
176
+ }
139
177
  function assertPrivatePath(path, kind, security = {}) {
140
178
  try {
141
179
  assertNotSymbolicLink(path, kind);
@@ -159,12 +197,43 @@ function assertPrivatePath(path, kind, security = {}) {
159
197
  function ensurePrivateDirectory(path, security = {}) {
160
198
  if ((0, node_fs_1.existsSync)(path)) {
161
199
  assertNotSymbolicLink(path, 'directory');
200
+ hardenPrivatePath(path, 'directory', security);
162
201
  }
163
202
  else {
164
- (0, node_fs_1.mkdirSync)(path, { mode: exports.PRIVATE_DIRECTORY_MODE, recursive: true });
165
- assertNotSymbolicLink(path, 'directory');
203
+ // Create and harden every missing level, not only the leaf: a recursive
204
+ // mkdir applies the POSIX mode to each level it creates, but Windows ACL
205
+ // protection is applied per path, and an ancestor created implicitly
206
+ // (the common `.git/ebk` of a linked worktree's registry) kept inherited
207
+ // access and was refused on the next read (run 34709123641). The levels
208
+ // are hardened in one platform invocation.
209
+ const missing = [];
210
+ let current = path;
211
+ while (!(0, node_fs_1.existsSync)(current)) {
212
+ missing.push(current);
213
+ const parent = (0, node_path_1.dirname)(current);
214
+ if (parent === current)
215
+ break;
216
+ current = parent;
217
+ }
218
+ missing.reverse();
219
+ for (const level of missing) {
220
+ try {
221
+ (0, node_fs_1.mkdirSync)(level, { mode: exports.PRIVATE_DIRECTORY_MODE });
222
+ }
223
+ catch (error) {
224
+ // A concurrent owner may have created this level first; it is
225
+ // hardened and asserted like every other level.
226
+ if (!error ||
227
+ typeof error !== 'object' ||
228
+ !('code' in error) ||
229
+ error.code !== 'EEXIST') {
230
+ throw error;
231
+ }
232
+ }
233
+ assertNotSymbolicLink(level, 'directory');
234
+ }
235
+ hardenPrivatePaths(missing, 'directory', security);
166
236
  }
167
- hardenPrivatePath(path, 'directory', security);
168
237
  assertPrivatePath(path, 'directory', security);
169
238
  }
170
239
  function assertBoundedContents(contents, maximumBytes = exports.PRIVATE_STATE_MAX_BYTES) {
@@ -215,6 +284,29 @@ function createPrivateFileExclusive(path, contents, security = {}) {
215
284
  throw error;
216
285
  }
217
286
  }
287
+ /** Publish complete private bytes without replacing a concurrent winner.
288
+ * Unlike a lock file, a persistent data record must never be readable empty. */
289
+ function publishPrivateFileExclusive(path, contents, security = {}) {
290
+ const temporaryPath = (0, node_path_1.join)((0, node_path_1.dirname)(path), `.${(0, node_path_1.basename)(path)}.${(0, node_crypto_1.randomBytes)(12).toString('hex')}.new`);
291
+ if (!createPrivateFileExclusive(temporaryPath, contents, security)) {
292
+ throw new errors_js_1.LocalDevContractError('invalid-state', 'Unable to allocate private publication file.');
293
+ }
294
+ try {
295
+ (0, node_fs_1.linkSync)(temporaryPath, path);
296
+ return true;
297
+ }
298
+ catch (error) {
299
+ if (error &&
300
+ typeof error === 'object' &&
301
+ 'code' in error &&
302
+ error.code === 'EEXIST')
303
+ return false;
304
+ throw error;
305
+ }
306
+ finally {
307
+ (0, node_fs_1.unlinkSync)(temporaryPath);
308
+ }
309
+ }
218
310
  function atomicWritePrivateFileWithin(path, contents, maximumBytes, security) {
219
311
  assertBoundedContents(contents, maximumBytes);
220
312
  const directory = (0, node_path_1.dirname)(path);
@@ -0,0 +1,4 @@
1
+ export declare const OWNED_PROCESS_SIGNAL_GRACE_MS = 10000;
2
+ export declare const OWNED_PROCESS_KILL_WAIT_MS = 5000;
3
+ /** Read-only existence check for an already-proved owned POSIX group. */
4
+ export declare function exactOwnedProcessGroupExists(pid: number): boolean;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OWNED_PROCESS_KILL_WAIT_MS = exports.OWNED_PROCESS_SIGNAL_GRACE_MS = void 0;
4
+ exports.exactOwnedProcessGroupExists = exactOwnedProcessGroupExists;
5
+ // The fleet owner must allow its SST child the same bounded settlement window.
6
+ exports.OWNED_PROCESS_SIGNAL_GRACE_MS = 10_000;
7
+ exports.OWNED_PROCESS_KILL_WAIT_MS = 5_000;
8
+ /** Read-only existence check for an already-proved owned POSIX group. */
9
+ function exactOwnedProcessGroupExists(pid) {
10
+ if (process.platform === 'win32' || !Number.isSafeInteger(pid) || pid <= 0) {
11
+ throw new Error('Exact owned POSIX process-group absence is unavailable.');
12
+ }
13
+ try {
14
+ process.kill(-pid, 0);
15
+ return true;
16
+ }
17
+ catch (error) {
18
+ if (typeof error === 'object' && error !== null && 'code' in error) {
19
+ if (error.code === 'ESRCH')
20
+ return false;
21
+ // Permission refusal cannot establish absence. Keep polling within the
22
+ // caller's deadline (including transient permission windows on exit).
23
+ if (error.code === 'EPERM')
24
+ return true;
25
+ }
26
+ throw error;
27
+ }
28
+ }
29
+ //# sourceMappingURL=process-group.js.map
@@ -5,5 +5,13 @@ export interface ProcessIdentityEffects {
5
5
  readFile?: (path: string) => string;
6
6
  run?: (executable: string, arguments_: readonly string[]) => string;
7
7
  }
8
+ /** Budget for one platform identity query. Windows answers through a
9
+ * PowerShell CIM query whose cold start alone exceeded three seconds on
10
+ * loaded hosted runners (PR 113, 2026-09-12); the budget bounds a hang, it
11
+ * is not a target, and an exhausted budget still refuses the identity. */
12
+ export declare const PROCESS_IDENTITY_QUERY_TIMEOUT_MS: Readonly<{
13
+ default: 3000;
14
+ win32: 30000;
15
+ }>;
8
16
  export declare function captureProcessIdentity(pid?: number, now?: Date, effects?: ProcessIdentityEffects): FleetProcessIdentity;
9
17
  export declare function probeProcessIdentity(identity: FleetProcessIdentity, effects?: ProcessIdentityEffects): ProcessIdentityProbe;
@@ -1,20 +1,50 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROCESS_IDENTITY_QUERY_TIMEOUT_MS = void 0;
3
4
  exports.captureProcessIdentity = captureProcessIdentity;
4
5
  exports.probeProcessIdentity = probeProcessIdentity;
5
6
  const node_child_process_1 = require("node:child_process");
6
7
  const node_fs_1 = require("node:fs");
7
8
  const node_os_1 = require("node:os");
8
9
  const contract_validation_js_1 = require("./contract-validation.js");
10
+ /** Budget for one platform identity query. Windows answers through a
11
+ * PowerShell CIM query whose cold start alone exceeded three seconds on
12
+ * loaded hosted runners (PR 113, 2026-09-12); the budget bounds a hang, it
13
+ * is not a target, and an exhausted budget still refuses the identity. */
14
+ exports.PROCESS_IDENTITY_QUERY_TIMEOUT_MS = Object.freeze({
15
+ default: 3_000,
16
+ win32: 30_000,
17
+ });
18
+ // The current process's own start marker cannot change while it runs, so it
19
+ // is queried once per process (per platform) instead of once per lease,
20
+ // registration, or binding. Injected effects (tests, controlled probes) are
21
+ // never cached.
22
+ const ownMarkerCache = new Map();
9
23
  function processMarker(pid, effects = {}) {
10
24
  const targetPlatform = effects.platform ?? (0, node_os_1.platform)();
25
+ const injected = effects.exists !== undefined ||
26
+ effects.readFile !== undefined ||
27
+ effects.run !== undefined;
28
+ const cacheKey = `${targetPlatform}:${pid}`;
29
+ if (!injected && pid === process.pid && ownMarkerCache.has(cacheKey)) {
30
+ return ownMarkerCache.get(cacheKey);
31
+ }
32
+ const marker = queryProcessMarker(pid, targetPlatform, effects);
33
+ if (!injected && pid === process.pid && marker !== undefined) {
34
+ ownMarkerCache.set(cacheKey, marker);
35
+ }
36
+ return marker;
37
+ }
38
+ function queryProcessMarker(pid, targetPlatform, effects) {
11
39
  const exists = effects.exists ?? node_fs_1.existsSync;
12
40
  const readFile = effects.readFile ?? ((path) => (0, node_fs_1.readFileSync)(path, 'utf8'));
13
41
  const run = effects.run ??
14
42
  ((executable, arguments_) => (0, node_child_process_1.execFileSync)(executable, [...arguments_], {
15
43
  encoding: 'utf8',
16
44
  stdio: ['ignore', 'pipe', 'pipe'],
17
- timeout: 3_000,
45
+ timeout: targetPlatform === 'win32'
46
+ ? exports.PROCESS_IDENTITY_QUERY_TIMEOUT_MS.win32
47
+ : exports.PROCESS_IDENTITY_QUERY_TIMEOUT_MS.default,
18
48
  windowsHide: true,
19
49
  }).trim());
20
50
  try {
@@ -78,17 +78,20 @@ function responseHeaders(headers, upstream, options) {
78
78
  result['x-ebk-foundation-stage'] = options.foundationStage;
79
79
  return result;
80
80
  }
81
+ function mayUseDevelopment(request, options) {
82
+ return (options.safeMethodFallback === true &&
83
+ SAFE_METHODS.has(request.method?.toUpperCase() ?? 'GET') &&
84
+ request.headers.upgrade === undefined &&
85
+ request.headers['transfer-encoding'] === undefined &&
86
+ Number(request.headers['content-length'] ?? '0') === 0);
87
+ }
81
88
  function selectUpstream(request, options) {
82
89
  const requestUrl = new URL(request.url ?? '/', options.fleetOrigin);
83
90
  const route = routeFor(options.routes, requestUrl.pathname);
84
- if (!route || !route.selected) {
85
- return { route, type: 'development', url: options.remoteOrigin };
86
- }
87
- if (route.state === 'ready' && route.upstream) {
91
+ if (route?.selected && route.state === 'ready' && route.upstream) {
88
92
  return { route, type: 'local', url: route.upstream };
89
93
  }
90
- const method = request.method?.toUpperCase() ?? 'GET';
91
- if (options.safeMethodFallback && SAFE_METHODS.has(method)) {
94
+ if (mayUseDevelopment(request, options)) {
92
95
  return { route, type: 'development', url: options.remoteOrigin };
93
96
  }
94
97
  return undefined;
@@ -176,12 +179,7 @@ class FleetSessionProxy {
176
179
  response.end(`${JSON.stringify({ error: 'selected local slice is unavailable', route: request.url })}\n`);
177
180
  return;
178
181
  }
179
- const method = request.method?.toUpperCase() ?? 'GET';
180
- const mayRetryWithoutBody = selected.type === 'local' &&
181
- this.options.safeMethodFallback === true &&
182
- SAFE_METHODS.has(method) &&
183
- request.headers['transfer-encoding'] === undefined &&
184
- Number(request.headers['content-length'] ?? '0') === 0;
182
+ const mayRetryWithoutBody = selected.type === 'local' && mayUseDevelopment(request, this.options);
185
183
  let retried = false;
186
184
  const dispatch = (upstream, replay) => {
187
185
  const transport = upstream.url.protocol === 'https:' ? node_https_1.request : node_http_1.request;
@@ -231,6 +229,7 @@ class FleetSessionProxy {
231
229
  handleUpgrade(request, socket, head) {
232
230
  const selected = selectUpstream(request, this.options);
233
231
  if (!selected ||
232
+ selected.type !== 'local' ||
234
233
  (selected.type === 'local' && selected.route?.adapter?.websocket !== true)) {
235
234
  socket.end('HTTP/1.1 503 Service Unavailable\r\nConnection: close\r\n\r\n');
236
235
  return;
@@ -24,7 +24,7 @@ function fleetRuntimePaths(fleetId, appData = (0, tls_js_1.defaultLocalDevAppDat
24
24
  runnersDirectory: (0, node_path_1.join)(sessionDirectory, 'runners'),
25
25
  sessionDirectory,
26
26
  sessionsDirectory,
27
- sliceClaimsDirectory: (0, node_path_1.join)(normalizedAppData, 'slice-claims'),
27
+ sliceClaimsDirectory: (0, node_path_1.join)(normalizedAppData, 'slice-claims', normalizedFleetId),
28
28
  startup: (0, node_path_1.join)(sessionDirectory, 'startup.json'),
29
29
  state: (0, node_path_1.join)(sessionDirectory, 'control-state.json'),
30
30
  supervisorPid: (0, node_path_1.join)(sessionDirectory, 'supervisor.pid'),
@@ -138,7 +138,7 @@ function acquireSliceClaims(directory, slices, owner, options = {}) {
138
138
  sessionGeneration: owner.sessionGeneration,
139
139
  slice,
140
140
  });
141
- const created = (0, private_state_js_1.createPrivateFileExclusive)(sliceClaimPath(directory, slice), `${JSON.stringify(record, null, 2)}\n`, security);
141
+ const created = (0, private_state_js_1.publishPrivateFileExclusive)(sliceClaimPath(directory, slice), `${JSON.stringify(record, null, 2)}\n`, security);
142
142
  if (created) {
143
143
  acquired.push(slice);
144
144
  claims.push(record);
@@ -1,7 +1,7 @@
1
1
  import { spawn, type ChildProcess } from 'node:child_process';
2
2
  import type { FleetProcessIdentity, ProcessIdentityProbe } from './fleet-lock.js';
3
3
  import { terminateOwnedChild } from './fleet-process.js';
4
- import type { FleetStateRecord } from './fleet-state.js';
4
+ import { type FleetStateRecord } from './fleet-state.js';
5
5
  import { loadWorkspaceFleetPlan, resolveWorkspaceNxRuntime, spawnDeclaredNxTarget } from './nx-workspace.js';
6
6
  import { type PrivateStateSecurity } from './private-state.js';
7
7
  import { captureProcessIdentity } from './process-identity.js';
@@ -44,6 +44,15 @@ export interface LaunchedFleetSliceRunner {
44
44
  }
45
45
  export type FleetSliceRunnerExitReason = 'child-exit' | 'explicit-restart' | 'parent-lost' | 'termination';
46
46
  export declare function fleetSliceRunnerRequiresCleanup(reason: FleetSliceRunnerExitReason): boolean;
47
+ interface FleetSliceRunnerRestartRequest {
48
+ action: 'restart-without-cleanup';
49
+ createdAt: string;
50
+ fleetId: string;
51
+ runnerGeneration: string;
52
+ schemaVersion: typeof FLEET_SLICE_RUNNER_RESTART_SCHEMA_VERSION;
53
+ sessionGeneration: string;
54
+ slice: string;
55
+ }
47
56
  export declare function validateFleetSliceRunnerRequest(value: unknown): FleetSliceRunnerRequest;
48
57
  export declare function validateFleetSliceRunnerState(value: unknown): FleetSliceRunnerState;
49
58
  export declare function fleetSliceRunnerPaths(runnersDirectory: string, slice: string, runnerGeneration: string): {
@@ -51,6 +60,7 @@ export declare function fleetSliceRunnerPaths(runnersDirectory: string, slice: s
51
60
  restart: string;
52
61
  state: string;
53
62
  };
63
+ export declare function validateFleetSliceRunnerRestartRequest(value: unknown): FleetSliceRunnerRestartRequest;
54
64
  export declare function requestFleetSliceRunnerRestart(launched: Pick<LaunchedFleetSliceRunner, 'request' | 'restartPath' | 'statePath'>, effects?: {
55
65
  now?: () => Date;
56
66
  security?: PrivateStateSecurity;
@@ -81,7 +91,7 @@ export declare function runnerParentStatus(request: FleetSliceRunnerRequest, opt
81
91
  processProbe?: ProcessIdentityProbe;
82
92
  security?: PrivateStateSecurity;
83
93
  }): 'ambiguous' | 'lost' | 'present';
84
- export declare function runFleetSliceRunner(requestPath: string, options?: {
94
+ declare function runFleetSliceRunnerCore(requestPath: string, options: {
85
95
  loadPlan?: typeof loadWorkspaceFleetPlan;
86
96
  monitorIntervalMs?: number;
87
97
  now?: () => Date;
@@ -92,30 +102,29 @@ export declare function runFleetSliceRunner(requestPath: string, options?: {
92
102
  security?: PrivateStateSecurity;
93
103
  spawnTarget?: typeof spawnDeclaredNxTarget;
94
104
  terminate?: typeof terminateOwnedChild;
95
- }): Promise<0 | 1>;
105
+ }, stopSignal: AbortSignal): Promise<0 | 1>;
106
+ export declare function runFleetSliceRunner(requestPath: string, options?: Parameters<typeof runFleetSliceRunnerCore>[1]): Promise<0 | 1>;
96
107
  export declare function assertFleetSliceRunnerCleanup(statePath: string, expected: Pick<FleetSliceRunnerRequest, 'fleetId' | 'runnerGeneration' | 'sessionGeneration' | 'slice'>, security?: PrivateStateSecurity): void;
97
108
  export declare function retryFleetSliceRunnerCleanup(launched: Pick<LaunchedFleetSliceRunner, 'request' | 'requestPath' | 'statePath'>, effects?: {
98
109
  daemonPath?: string;
99
110
  processProbe?: (identity: FleetProcessIdentity) => ProcessIdentityProbe;
100
111
  security?: PrivateStateSecurity;
101
112
  spawn?: typeof spawn;
102
- timeoutMs?: number;
103
113
  }): Promise<void>;
104
114
  export declare function recoverFleetSliceRunnerCleanups(state: FleetStateRecord, paths: FleetRuntimePaths, effects?: {
105
115
  daemonPath?: string;
106
116
  processProbe?: (identity: FleetProcessIdentity) => ProcessIdentityProbe;
107
117
  security?: PrivateStateSecurity;
108
118
  spawn?: typeof spawn;
109
- timeoutMs?: number;
110
119
  }): Promise<void>;
111
120
  export declare function recoverFleetSliceRunnerCleanupsForSlices(authority: Pick<FleetSliceRunnerRequest, 'fleetId' | 'sessionGeneration'>, selectedSlices: ReadonlySet<string> | readonly string[], paths: FleetRuntimePaths, effects?: {
112
121
  daemonPath?: string;
113
122
  processProbe?: (identity: FleetProcessIdentity) => ProcessIdentityProbe;
114
123
  security?: PrivateStateSecurity;
115
124
  spawn?: typeof spawn;
116
- timeoutMs?: number;
117
125
  }): Promise<void>;
118
126
  export declare function inspectFleetRunnersAbsent(state: FleetStateRecord, paths: FleetRuntimePaths, effects?: {
119
127
  processProbe?: (identity: FleetProcessIdentity) => ProcessIdentityProbe;
120
128
  security?: PrivateStateSecurity;
121
129
  }): boolean | 'ambiguous';
130
+ export {};