@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
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DOCKER_CREDENTIAL_PROBE_TIMEOUT_MS = void 0;
4
+ exports.inspectDockerCredentialHelpers = inspectDockerCredentialHelpers;
5
+ exports.probeDockerCredentialHelper = probeDockerCredentialHelper;
6
+ const node_child_process_1 = require("node:child_process");
7
+ const node_fs_1 = require("node:fs");
8
+ const node_os_1 = require("node:os");
9
+ const node_path_1 = require("node:path");
10
+ exports.DOCKER_CREDENTIAL_PROBE_TIMEOUT_MS = 5_000;
11
+ const remediation = 'If a required image pull fails, repair or unlock its selected Docker credential helper, then run ebk dev doctor --refresh. The optional list probe is advisory; do not delete host credentials, remove helpers, or prune shared builders.';
12
+ /** Check helper liveness through the optional metadata-only list operation. Never
13
+ * request a password, retain helper output, or modify Docker configuration. */
14
+ async function inspectDockerCredentialHelpers(options = {}) {
15
+ try {
16
+ const directory = options.configDirectory ??
17
+ process.env.DOCKER_CONFIG ??
18
+ (0, node_path_1.join)((0, node_os_1.homedir)(), '.docker');
19
+ if (!(0, node_path_1.isAbsolute)(directory))
20
+ throw new Error('invalid configuration');
21
+ let file;
22
+ try {
23
+ file = (0, node_fs_1.openSync)((0, node_path_1.join)(directory, 'config.json'), 'r');
24
+ }
25
+ catch (error) {
26
+ if (error.code === 'ENOENT')
27
+ return {
28
+ status: 'ready',
29
+ evidence: 'No explicit Docker credential helper is configured.',
30
+ };
31
+ throw error;
32
+ }
33
+ let config;
34
+ try {
35
+ const stat = (0, node_fs_1.fstatSync)(file);
36
+ if (!stat.isFile() || stat.size > 64 * 1024)
37
+ throw new Error('invalid configuration');
38
+ config = JSON.parse((0, node_fs_1.readFileSync)(file, 'utf8'));
39
+ }
40
+ finally {
41
+ (0, node_fs_1.closeSync)(file);
42
+ }
43
+ if (!config || typeof config !== 'object' || Array.isArray(config))
44
+ throw new Error('invalid configuration');
45
+ let registryHelpers = {};
46
+ if (config.credHelpers !== undefined) {
47
+ if (!config.credHelpers ||
48
+ typeof config.credHelpers !== 'object' ||
49
+ Array.isArray(config.credHelpers))
50
+ throw new Error('invalid configuration');
51
+ registryHelpers = config.credHelpers;
52
+ }
53
+ // Fleet dependency images currently use Docker Hub. Exact registry helpers
54
+ // override the global store, as Docker does; unrelated logins are untouched.
55
+ const helpers = (options.registries ?? ['https://index.docker.io/v1/'])
56
+ .map((registry) => registryHelpers[registry] ?? config.credsStore)
57
+ .filter((helper) => helper !== undefined && helper !== '');
58
+ const unique = [...new Set(helpers)];
59
+ if (unique.length > 16 ||
60
+ unique.some((helper) => typeof helper !== 'string' ||
61
+ !/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/.test(helper)))
62
+ throw new Error('invalid configuration');
63
+ const probe = options.probe ?? probeDockerCredentialHelper;
64
+ await Promise.all(unique.map((helper) => probe(`docker-credential-${helper}`)));
65
+ return {
66
+ status: 'ready',
67
+ evidence: `${unique.length} selected Docker credential helper(s) responded to the optional list probe; output discarded. Image authentication is checked by Docker when pulling.`,
68
+ };
69
+ }
70
+ catch {
71
+ return {
72
+ status: 'unavailable',
73
+ evidence: 'Docker credential configuration or optional list liveness is unverified. This does not prove required image pulls will fail.',
74
+ remediation,
75
+ };
76
+ }
77
+ }
78
+ function probeDockerCredentialHelper(executable) {
79
+ return new Promise((resolve, reject) => {
80
+ // list returns registry/username metadata, not passwords. Even that metadata
81
+ // is discarded. Never serialize execFile's error (it carries stdout/stderr).
82
+ const child = (0, node_child_process_1.execFile)(executable, ['list'], {
83
+ timeout: exports.DOCKER_CREDENTIAL_PROBE_TIMEOUT_MS,
84
+ killSignal: 'SIGKILL',
85
+ maxBuffer: 64 * 1024,
86
+ windowsHide: true,
87
+ shell: false,
88
+ }, (error) => error
89
+ ? reject(new Error('Docker credential helper unavailable.'))
90
+ : resolve());
91
+ child.stdin?.end();
92
+ });
93
+ }
94
+ //# sourceMappingURL=docker-credential-health.js.map
@@ -1,3 +1,4 @@
1
+ import { type FoundationPreflightReport } from '../foundation/preflight.js';
1
2
  import type { LocalDevAdapter } from './contracts.js';
2
3
  import { type DevelopmentEnvironmentAssessment, type EnvironmentCheckResult } from './environment-state.js';
3
4
  import { LocalDevContractError } from './errors.js';
@@ -61,6 +62,10 @@ export declare const ENVIRONMENT_INSPECTOR_CHECKS: readonly [{
61
62
  readonly capabilities: readonly ["containers"];
62
63
  readonly id: "docker-compose-v2";
63
64
  readonly volatile: true;
65
+ }, {
66
+ readonly capabilities: readonly ["containers"];
67
+ readonly id: "docker-credential-helpers";
68
+ readonly volatile: true;
64
69
  }, {
65
70
  readonly capabilities: readonly ["aws-foundation"];
66
71
  readonly id: "aws-sdk-credentials";
@@ -122,5 +127,7 @@ export declare class EnvironmentDeficientError extends LocalDevContractError {
122
127
  }
123
128
  export declare function evaluateEnvironmentExecutableVersion(detectedVersion: string, minimumVersion: string, remediation: string): EnvironmentProbeObservation;
124
129
  export declare function evaluateDevelopmentFoundationAccount(accountId: string, eventBusArn: string): EnvironmentProbeObservation;
130
+ export declare function evaluateDevelopmentFoundationReport(report: FoundationPreflightReport, accountId: string, context: LocalDevContext): EnvironmentProbeObservation;
131
+ export declare function resolveCurrentAwsAccountId(context: LocalDevContext, abortSignal: AbortSignal): Promise<string>;
125
132
  export declare function inspectDevelopmentEnvironment(input: InspectEnvironmentInput, dependencies?: EnvironmentInspectorDependencies): Promise<DevelopmentEnvironmentAssessment>;
126
133
  export declare function assertEnvironmentReady(assessment: DevelopmentEnvironmentAssessment): void;
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EnvironmentDeficientError = exports.ENVIRONMENT_INSPECTOR_CHECKS = exports.AWS_ENVIRONMENT_PROBE_TIMEOUT_MS = void 0;
4
4
  exports.evaluateEnvironmentExecutableVersion = evaluateEnvironmentExecutableVersion;
5
5
  exports.evaluateDevelopmentFoundationAccount = evaluateDevelopmentFoundationAccount;
6
+ exports.evaluateDevelopmentFoundationReport = evaluateDevelopmentFoundationReport;
7
+ exports.resolveCurrentAwsAccountId = resolveCurrentAwsAccountId;
6
8
  exports.inspectDevelopmentEnvironment = inspectDevelopmentEnvironment;
7
9
  exports.assertEnvironmentReady = assertEnvironmentReady;
8
10
  const node_child_process_1 = require("node:child_process");
@@ -22,6 +24,7 @@ const errors_js_1 = require("./errors.js");
22
24
  const nx_workspace_js_1 = require("./nx-workspace.js");
23
25
  const personal_stage_js_1 = require("./personal-stage.js");
24
26
  const tls_js_1 = require("./tls.js");
27
+ const docker_credential_health_js_1 = require("./docker-credential-health.js");
25
28
  const execFileAsync = (0, node_util_1.promisify)(node_child_process_1.execFile);
26
29
  exports.AWS_ENVIRONMENT_PROBE_TIMEOUT_MS = 15_000;
27
30
  const MAX_AWS_ENVIRONMENT_PROBE_TIMEOUT_MS = 60_000;
@@ -100,6 +103,11 @@ exports.ENVIRONMENT_INSPECTOR_CHECKS = [
100
103
  id: 'docker-compose-v2',
101
104
  volatile: true,
102
105
  },
106
+ {
107
+ capabilities: ['containers'],
108
+ id: 'docker-credential-helpers',
109
+ volatile: true,
110
+ },
103
111
  {
104
112
  capabilities: ['aws-foundation'],
105
113
  id: 'aws-sdk-credentials',
@@ -257,11 +265,15 @@ function commandRequirements(command, adapters, force = false) {
257
265
  checks['docker-cli'] = 'required';
258
266
  checks['docker-engine'] = 'required';
259
267
  checks['docker-compose-v2'] = 'required';
268
+ // Docker's required credential protocol is get/store/erase, not list.
269
+ // This secret-free liveness probe is diagnostic, never pull authority.
270
+ checks['docker-credential-helpers'] = 'advisory';
260
271
  }
261
272
  else {
262
273
  checks['docker-cli'] = 'not-required';
263
274
  checks['docker-engine'] = 'not-required';
264
275
  checks['docker-compose-v2'] = 'not-required';
276
+ checks['docker-credential-helpers'] = 'not-required';
265
277
  }
266
278
  }
267
279
  else if (command === 'doctor') {
@@ -288,12 +300,14 @@ async function commandVersion(executable, args, timeout = 5_000) {
288
300
  });
289
301
  return `${result.stdout}${result.stderr}`.trim().split(/\r?\n/, 1)[0] ?? '';
290
302
  }
291
- function commandProbe(executable, args, remediation, minimumVersion) {
303
+ function commandProbe(executable, args, remediation, minimumVersion, versionPattern) {
292
304
  return async () => {
293
305
  try {
294
306
  const version = await commandVersion(executable, args);
295
307
  return minimumVersion
296
- ? evaluateEnvironmentExecutableVersion(version, minimumVersion, remediation)
308
+ ? evaluateEnvironmentExecutableVersion(versionPattern
309
+ ? (versionPattern.exec(version)?.[1] ?? version)
310
+ : version, minimumVersion, remediation)
297
311
  : {
298
312
  detectedVersion: (0, environment_state_js_1.sanitizeEnvironmentEvidence)(version).slice(0, 128),
299
313
  status: 'ready',
@@ -335,6 +349,18 @@ function evaluateDevelopmentFoundationAccount(accountId, eventBusArn) {
335
349
  status: 'ready',
336
350
  };
337
351
  }
352
+ function evaluateDevelopmentFoundationReport(report, accountId, context) {
353
+ if (!report.ok || !report.discovery) {
354
+ return {
355
+ evidence: report.issues.join('; '),
356
+ remediation: report.state === 'absent'
357
+ ? `Development Foundation is absent in ${context.region}. Verify workspace ownership and run ebk deploy development --profile=${context.profile} --expectedRoleArn=<approved-development-role>; the governed stage lifecycle deploys Foundation first, then eligible Slices. Retry ebk dev doctor afterward. This is not an IAM denial.`
358
+ : 'Development Foundation discovery is incomplete or incompatible. Inspect the reported contract issues and reconcile Foundation through its governed upgrade/deploy workflow; do not expand IAM permissions to repair discovery data.',
359
+ status: 'unavailable',
360
+ };
361
+ }
362
+ return evaluateDevelopmentFoundationAccount(accountId, report.discovery.eventBusArn);
363
+ }
338
364
  function createAbortableCredentialRequestHandler(context, abortSignal) {
339
365
  const transportClient = new client_sts_1.STSClient({
340
366
  region: context.region,
@@ -356,7 +382,8 @@ async function resolveProfileCredentials(context, abortSignal) {
356
382
  try {
357
383
  return await (0, credential_providers_1.fromIni)({
358
384
  clientConfig: {
359
- region: context.region,
385
+ // Credential sources own their Region (notably the SSO session).
386
+ // Application STS/SSM clients still use the selected deployment Region.
360
387
  requestHandler: transport.requestHandler,
361
388
  },
362
389
  profile: context.profile,
@@ -418,7 +445,7 @@ const defaultProbes = {
418
445
  'personal-stage': async ({ identity }) => (0, personal_stage_js_1.isFrameworkPersonalStage)(identity.stage)
419
446
  ? { evidence: identity.stage, status: 'ready' }
420
447
  : {
421
- remediation: 'Repair operating-system account identity resolution.',
448
+ remediation: 'Inspect the persisted worktree task identity with ebk dev status; use explicit ebk dev attach only after verifying ownership.',
422
449
  status: 'unavailable',
423
450
  },
424
451
  'private-state-location': async ({ appData }) => {
@@ -448,13 +475,14 @@ const defaultProbes = {
448
475
  return required.every(node_fs_1.existsSync)
449
476
  ? { status: 'ready' }
450
477
  : {
451
- remediation: 'Run ebk dev setup, inspect the root, then explicitly run ebk dev setup --trust.',
478
+ remediation: 'Run ebk dev setup. The generated verify-local-browser target uses browser-scoped trust; system trust is optional and must be explicitly reviewed.',
452
479
  status: 'missing',
453
480
  };
454
481
  },
455
482
  'docker-cli': commandProbe('docker', ['--version'], 'Install Docker with the Docker CLI.'),
456
483
  'docker-engine': commandProbe('docker', ['info', '--format', '{{.ServerVersion}}'], 'Start the Docker engine and confirm current-user access.'),
457
484
  'docker-compose-v2': commandProbe('docker', ['compose', 'version', '--short'], 'Install or enable Docker Compose v2.'),
485
+ 'docker-credential-helpers': () => (0, docker_credential_health_js_1.inspectDockerCredentialHelpers)(),
458
486
  'aws-sdk-credentials': async ({ context }, abortSignal) => {
459
487
  try {
460
488
  const credentials = await resolveProfileCredentials(context, abortSignal);
@@ -497,14 +525,7 @@ const defaultProbes = {
497
525
  region: context.region,
498
526
  requirement: discovery_js_1.STANDARD_FOUNDATION_REQUIREMENT,
499
527
  });
500
- if (!report.ok || !report.discovery) {
501
- return {
502
- evidence: report.issues.join('; '),
503
- remediation: `Grant profile ${context.profile} bounded ssm:GetParameters access to the development Foundation contract in ${context.region}.`,
504
- status: 'unavailable',
505
- };
506
- }
507
- return evaluateDevelopmentFoundationAccount(accountId, report.discovery.eventBusArn);
528
+ return evaluateDevelopmentFoundationReport(report, accountId, context);
508
529
  }
509
530
  finally {
510
531
  reader.destroy();
@@ -513,12 +534,18 @@ const defaultProbes = {
513
534
  catch (error) {
514
535
  return {
515
536
  evidence: error instanceof Error ? error.message : String(error),
516
- remediation: `Grant profile ${context.profile} bounded ssm:GetParameters access to /ebk/development/foundation/* in ${context.region}.`,
537
+ remediation: [
538
+ 'AccessDenied',
539
+ 'AccessDeniedException',
540
+ 'UnauthorizedOperation',
541
+ ].includes(error instanceof Error ? error.name : '')
542
+ ? `Reconcile profile ${context.profile}'s bounded ssm:GetParameters authority for /ebk/development/foundation/* in ${context.region}; confirm the exact account and role before changing policy.`
543
+ : `Verify profile ${context.profile}'s temporary credentials and network access in ${context.region}, then retry ebk dev doctor. An unresolved read is not proof of missing IAM permissions.`,
517
544
  status: 'unavailable',
518
545
  };
519
546
  }
520
547
  },
521
- 'aws-cli-remediation': commandProbe('aws', ['--version'], 'Install AWS CLI v2 only when the selected SSO profile requires aws sso login remediation.', '2'),
548
+ 'aws-cli-remediation': commandProbe('aws', ['--version'], 'Install AWS CLI v2 only when the selected SSO profile requires aws sso login remediation.', '2', /^aws-cli\/(\d+\.\d+\.\d+)(?:\s|$)/),
522
549
  };
523
550
  async function resolveCurrentAwsAccountId(context, abortSignal) {
524
551
  const credentials = await resolveProfileCredentials(context, abortSignal);
@@ -392,7 +392,7 @@ function validateDevelopmentEnvironmentAssessment(value) {
392
392
  value.catalogVersion !== exports.ENVIRONMENT_REQUIREMENT_CATALOG_VERSION ||
393
393
  value.localContextSchemaVersion !== local_context_js_1.LOCAL_DEV_CONTEXT_SCHEMA_VERSION ||
394
394
  value.personalStageResolverVersion !== personal_stage_js_1.PERSONAL_STAGE_RESOLVER_VERSION ||
395
- value.identitySource !== 'os-account') {
395
+ value.identitySource !== 'worktree-task') {
396
396
  return assessmentError('Development environment assessment has an unsupported schema, catalog, context, or identity version.');
397
397
  }
398
398
  if (!exports.ENVIRONMENT_ASSESSMENT_STATES.includes(value.state)) {
@@ -413,7 +413,7 @@ function validateDevelopmentEnvironmentAssessment(value) {
413
413
  evaluatedProfiles: validateStringArray(value.evaluatedProfiles, 'Environment evaluatedProfiles'),
414
414
  fingerprint: (0, contract_validation_js_1.requireBoundedString)(value.fingerprint, 'Environment fingerprint', { pattern: contract_validation_js_1.LOCAL_DEV_SHA256_PATTERN }),
415
415
  frameworkVersion: (0, contract_validation_js_1.requireBoundedString)(value.frameworkVersion, 'Environment frameworkVersion', { maximumLength: 128 }),
416
- identitySource: 'os-account',
416
+ identitySource: 'worktree-task',
417
417
  localContextDigest: (0, contract_validation_js_1.requireBoundedString)(value.localContextDigest, 'Environment localContextDigest', { pattern: contract_validation_js_1.LOCAL_DEV_SHA256_PATTERN }),
418
418
  localContextSchemaVersion: local_context_js_1.LOCAL_DEV_CONTEXT_SCHEMA_VERSION,
419
419
  personalStageResolverVersion: personal_stage_js_1.PERSONAL_STAGE_RESOLVER_VERSION,
@@ -1,4 +1,4 @@
1
- export declare const LOCAL_DEV_FAILURE_CLASSIFICATIONS: readonly ["invalid-input", "personal-identity-unavailable", "fleet-in-use", "fleet-ownership-ambiguous", "local-context-missing", "local-context-invalid", "local-context-conflict", "unknown-slice", "invalid-adapter", "slice-active-elsewhere", "slice-claim-ambiguous", "not-running", "invalid-state", "configuration-mismatch", "protocol-mismatch", "environment-deficient", "prerequisite-unavailable", "foundation-unavailable", "operation-conflict", "readiness-timeout", "cleanup-incomplete", "supervisor-unreachable", "stale-state", "stale-state-ambiguous", "log-query-invalid", "internal-error"];
1
+ export declare const LOCAL_DEV_FAILURE_CLASSIFICATIONS: readonly ["invalid-input", "personal-identity-unavailable", "fleet-in-use", "fleet-ownership-ambiguous", "local-context-missing", "local-context-invalid", "local-context-conflict", "unknown-slice", "invalid-adapter", "slice-active-elsewhere", "slice-claim-ambiguous", "not-running", "invalid-state", "configuration-mismatch", "protocol-mismatch", "environment-deficient", "prerequisite-unavailable", "foundation-unavailable", "operation-conflict", "readiness-timeout", "provisioning-timeout", "startup-interrupted", "cleanup-incomplete", "supervisor-unreachable", "stale-state", "stale-state-ambiguous", "log-query-invalid", "internal-error"];
2
2
  export type LocalDevFailureClassification = (typeof LOCAL_DEV_FAILURE_CLASSIFICATIONS)[number];
3
3
  export declare class LocalDevContractError extends Error {
4
4
  readonly classification: LocalDevFailureClassification;
@@ -22,6 +22,8 @@ exports.LOCAL_DEV_FAILURE_CLASSIFICATIONS = [
22
22
  'foundation-unavailable',
23
23
  'operation-conflict',
24
24
  'readiness-timeout',
25
+ 'provisioning-timeout',
26
+ 'startup-interrupted',
25
27
  'cleanup-incomplete',
26
28
  'supervisor-unreachable',
27
29
  'stale-state',
@@ -46,7 +46,7 @@ function validateOperation(value) {
46
46
  ? 'C:\\validation\\.git'
47
47
  : '/validation/.git',
48
48
  heartbeatAt: '1970-01-01T00:00:00.000Z',
49
- identitySource: 'os-account',
49
+ identitySource: 'worktree-task',
50
50
  nxVersion: '23.1.0',
51
51
  operations: [value],
52
52
  origin: 'https://validation.ebk.localhost',
@@ -143,7 +143,7 @@ class FleetClient {
143
143
  setTimeout(resolvePromise, pollMs);
144
144
  });
145
145
  }
146
- throw new errors_js_1.LocalDevContractError('readiness-timeout', `Fleet operation ${operationId} did not finish within ${timeoutMs}ms.`);
146
+ throw new errors_js_1.LocalDevContractError('readiness-timeout', `Fleet operation ${operationId} did not finish within ${timeoutMs}ms. The supervised operation may still be running; check ebk dev status and ebk dev logs before retrying.`);
147
147
  }
148
148
  async shutdown(idempotencyKey = (0, node_crypto_1.randomUUID)()) {
149
149
  await this.#request({
@@ -4,43 +4,75 @@ exports.fleetRouterSource = fleetRouterSource;
4
4
  exports.fleetConfigurationFingerprint = fleetConfigurationFingerprint;
5
5
  const contract_validation_js_1 = require("./contract-validation.js");
6
6
  const deterministic_order_js_1 = require("../deterministic-order.js");
7
+ const create_task_graph_1 = require("nx/src/tasks-runner/create-task-graph");
8
+ const errors_js_1 = require("./errors.js");
7
9
  function localTargetTopology(plan) {
10
+ if (plan.adapters.size === 0)
11
+ return [];
12
+ if (!plan.projectGraph) {
13
+ throw new errors_js_1.LocalDevContractError('prerequisite-unavailable', 'Fleet topology requires the complete inferred Nx project graph. Reload the workspace graph before starting development.');
14
+ }
15
+ // Nx normalizes dependsOn objects in place. Never mutate the shared graph.
16
+ const graph = structuredClone(plan.projectGraph);
17
+ const topologyError = (message) => {
18
+ throw new errors_js_1.LocalDevContractError('invalid-adapter', `Fleet Nx target topology is invalid: ${message}`);
19
+ };
8
20
  return [...plan.adapters]
9
21
  .sort(([left], [right]) => (0, deterministic_order_js_1.compareUtf16)(left, right))
10
22
  .map(([name, adapter]) => {
11
- const project = plan.projects[name];
12
- const targets = project?.targets ?? {};
23
+ const project = graph.nodes[name];
24
+ if (!project)
25
+ return topologyError(`Project ${name} is missing.`);
13
26
  const selected = new Set([adapter.target]);
14
- if (adapter.adapterVersion === 2 && adapter.lifecycle) {
27
+ if (adapter.adapterVersion !== 1 && adapter.lifecycle) {
15
28
  selected.add(adapter.lifecycle.cleanupTarget);
16
29
  }
17
- const pending = [...selected];
18
- while (pending.length > 0) {
19
- const targetName = pending.pop();
20
- const target = targets[targetName];
21
- for (const dependency of target?.dependsOn ?? []) {
22
- const dependencyName = typeof dependency === 'string'
23
- ? dependency
24
- : dependency &&
25
- typeof dependency === 'object' &&
26
- !Array.isArray(dependency) &&
27
- typeof dependency.target ===
28
- 'string'
29
- ? (dependency.target ?? '')
30
- : '';
31
- if (dependencyName && !selected.has(dependencyName)) {
32
- selected.add(dependencyName);
33
- pending.push(dependencyName);
34
- }
30
+ for (const target of selected) {
31
+ if (!project.data.targets?.[target]) {
32
+ return topologyError(`Selected target ${name}:${target} is missing.`);
35
33
  }
36
34
  }
35
+ let tasks;
36
+ try {
37
+ tasks = (0, create_task_graph_1.createTaskGraph)(graph, {}, [name], [...selected].sort(deterministic_order_js_1.compareUtf16), undefined, {});
38
+ }
39
+ catch (error) {
40
+ return topologyError(error instanceof Error ? error.message : String(error));
41
+ }
37
42
  return {
38
43
  adapter,
39
44
  name,
40
- projectRoot: project?.root,
41
- targets: [...selected]
42
- .sort()
43
- .map((targetName) => [targetName, targets[targetName]]),
45
+ projectRoot: project.data.root,
46
+ targets: Object.keys(tasks.tasks)
47
+ .sort(deterministic_order_js_1.compareUtf16)
48
+ .map((id) => {
49
+ const task = tasks.tasks[id];
50
+ const owner = graph.nodes[task.target.project];
51
+ const definition = plan.projectGraph?.nodes[task.target.project]?.data.targets?.[task.target.target];
52
+ if (!definition)
53
+ return topologyError(`Task ${id} is missing.`);
54
+ for (const edge of graph.dependencies[task.target.project] ?? []) {
55
+ if (!graph.nodes[edge.target] &&
56
+ !graph.externalNodes?.[edge.target]) {
57
+ return topologyError(`Project dependency ${edge.target} of ${id} is missing.`);
58
+ }
59
+ }
60
+ // Only stable task coordinates and declarations belong in identity;
61
+ // native task objects also contain execution-time data and undefined
62
+ // configuration values. Optional coordinates have an explicit null.
63
+ return {
64
+ configuration: task.target.configuration ?? null,
65
+ continuousDependencies: [
66
+ ...(tasks.continuousDependencies?.[id] ?? []),
67
+ ].sort(deterministic_order_js_1.compareUtf16),
68
+ definition,
69
+ dependencies: [...(tasks.dependencies[id] ?? [])].sort(deterministic_order_js_1.compareUtf16),
70
+ id,
71
+ project: task.target.project,
72
+ projectRoot: owner.data.root,
73
+ target: task.target.target,
74
+ };
75
+ }),
44
76
  };
45
77
  });
46
78
  }
@@ -129,14 +129,14 @@ async function inspectFleet(fleetId, options, effects, recoverRunnerCleanup = fa
129
129
  state,
130
130
  };
131
131
  }
132
- for (const slice of state.slices.filter(({ selected }) => selected)) {
132
+ for (const name of (0, fleet_state_js_1.fleetOwnedSliceNames)(state)) {
133
133
  let claim;
134
134
  try {
135
- claim = (0, slice_claim_js_1.inspectSliceClaim)(paths.sliceClaimsDirectory, slice.name, security);
135
+ claim = (0, slice_claim_js_1.inspectSliceClaim)(paths.sliceClaimsDirectory, name, security);
136
136
  }
137
137
  catch {
138
138
  return {
139
- inventory: record(fleetId, 'ambiguous', `Slice claim ${slice.name} is malformed; do not prune.`, state),
139
+ inventory: record(fleetId, 'ambiguous', `Slice claim ${name} is malformed; do not prune.`, state),
140
140
  state,
141
141
  };
142
142
  }
@@ -145,9 +145,11 @@ async function inspectFleet(fleetId, options, effects, recoverRunnerCleanup = fa
145
145
  claim.sessionGeneration !== state.sessionGeneration ||
146
146
  claim.owner.pid !== state.supervisor.pid ||
147
147
  claim.owner.processIdentity !== state.supervisor.processIdentity ||
148
- claim.owner.startedAt !== state.supervisor.startedAt) {
148
+ claim.owner.startedAt !== state.supervisor.startedAt ||
149
+ (!state.slices.some((slice) => slice.name === name && slice.selected) &&
150
+ !(0, fleet_state_js_1.fleetOwnsStartingSlice)(state, name, claim.acquiredAt))) {
149
151
  return {
150
- inventory: record(fleetId, 'ambiguous', `Slice claim ${slice.name} does not prove exact generation ownership.`, state),
152
+ inventory: record(fleetId, 'ambiguous', `Slice claim ${name} does not prove exact generation ownership.`, state),
151
153
  state,
152
154
  };
153
155
  }
@@ -217,9 +219,10 @@ function claimInventoryRecord(claim, classification, nextAction) {
217
219
  slice: claim.slice,
218
220
  };
219
221
  }
220
- function ambiguousClaimEntry(slice, message) {
222
+ function ambiguousClaimEntry(slice, message, fleetId) {
221
223
  return {
222
224
  classification: 'ambiguous',
225
+ ...(fleetId ? { fleetId } : {}),
223
226
  nextAction: message,
224
227
  slice: slice.slice(0, 128),
225
228
  };
@@ -278,28 +281,54 @@ async function inventorySliceClaims(options, effects = {}) {
278
281
  return inspected;
279
282
  };
280
283
  const results = [];
281
- for (const entry of entries) {
284
+ const claims = [];
285
+ for (const namespace of entries) {
286
+ if (!/^[a-z0-9][a-z0-9-]{0,62}$/.test(namespace.name) ||
287
+ !namespace.isDirectory() ||
288
+ namespace.isSymbolicLink()) {
289
+ results.push(ambiguousClaimEntry(namespace.name, 'Unsupported Slice-claim namespace; inspect manually and do not prune.', /^[a-z0-9][a-z0-9-]{0,62}$/.test(namespace.name)
290
+ ? namespace.name
291
+ : undefined));
292
+ continue;
293
+ }
294
+ const claimDirectory = (0, runtime_paths_js_1.fleetRuntimePaths)(namespace.name, options.appData).sliceClaimsDirectory;
295
+ try {
296
+ (0, private_state_js_1.assertPrivatePath)(claimDirectory, 'directory', security);
297
+ for (const entry of (0, node_fs_1.readdirSync)(claimDirectory, {
298
+ withFileTypes: true,
299
+ }).sort((left, right) => (0, deterministic_order_js_1.compareUtf16)(left.name, right.name)))
300
+ claims.push({
301
+ entry,
302
+ directory: claimDirectory,
303
+ fleetId: namespace.name,
304
+ });
305
+ }
306
+ catch {
307
+ results.push(ambiguousClaimEntry(namespace.name, 'Slice-claim namespace cannot be read safely; inspect manually and do not prune.', namespace.name));
308
+ }
309
+ }
310
+ for (const { entry, directory: claimDirectory, fleetId } of claims) {
282
311
  const match = SLICE_CLAIM_FILE_PATTERN.exec(entry.name);
283
312
  if (!match || !entry.isFile() || entry.isSymbolicLink()) {
284
- results.push(ambiguousClaimEntry(entry.name, 'Unsupported Slice-claim entry; inspect manually and do not prune.'));
313
+ results.push(ambiguousClaimEntry(entry.name, 'Unsupported Slice-claim entry; inspect manually and do not prune.', fleetId));
285
314
  continue;
286
315
  }
287
316
  const slice = match[1];
288
317
  let claim;
289
318
  try {
290
- const inspected = (0, slice_claim_js_1.inspectSliceClaim)(directory, slice, security);
319
+ const inspected = (0, slice_claim_js_1.inspectSliceClaim)(claimDirectory, slice, security);
291
320
  if (!inspected) {
292
- results.push(ambiguousClaimEntry(slice, 'Slice claim changed during inventory; inspect manually and do not prune.'));
321
+ results.push(ambiguousClaimEntry(slice, 'Slice claim changed during inventory; inspect manually and do not prune.', fleetId));
293
322
  continue;
294
323
  }
295
- if (inspected.slice !== slice) {
296
- results.push(ambiguousClaimEntry(slice, 'Slice-claim filename and record identity disagree; inspect manually and do not prune.'));
324
+ if (inspected.slice !== slice || inspected.fleetId !== fleetId) {
325
+ results.push(ambiguousClaimEntry(slice, 'Slice-claim namespace, filename and record identity disagree; inspect manually and do not prune.', fleetId));
297
326
  continue;
298
327
  }
299
328
  claim = inspected;
300
329
  }
301
330
  catch {
302
- results.push(ambiguousClaimEntry(slice, 'Slice claim is malformed or not current-user private; inspect manually and do not prune.'));
331
+ results.push(ambiguousClaimEntry(slice, 'Slice claim is malformed or not current-user private; inspect manually and do not prune.', fleetId));
303
332
  continue;
304
333
  }
305
334
  const ownerPaths = (0, runtime_paths_js_1.fleetRuntimePaths)(claim.fleetId, options.appData);
@@ -326,8 +355,9 @@ async function inventorySliceClaims(options, effects = {}) {
326
355
  claim.owner.pid !== state.supervisor.pid ||
327
356
  claim.owner.processIdentity !== state.supervisor.processIdentity ||
328
357
  claim.owner.startedAt !== state.supervisor.startedAt ||
329
- !state.slices.some((candidate) => candidate.name === claim.slice && candidate.selected)) {
330
- results.push(claimInventoryRecord(claim, 'ambiguous', 'Slice claim does not match selected state owned by the exact Fleet generation; do not prune.'));
358
+ (!state.slices.some((candidate) => candidate.name === claim.slice && candidate.selected) &&
359
+ !(0, fleet_state_js_1.fleetOwnsStartingSlice)(state, claim.slice, claim.acquiredAt))) {
360
+ results.push(claimInventoryRecord(claim, 'ambiguous', 'Slice claim does not match selected or starting state owned by the exact Fleet generation; do not prune.'));
331
361
  continue;
332
362
  }
333
363
  const processProof = inspected.inventory.classification === 'stale'
@@ -424,9 +454,7 @@ async function pruneStaleFleets(options, effects = {}) {
424
454
  if (!lock || lock.sessionGeneration !== state.sessionGeneration) {
425
455
  return inventoryError(`Fleet ${fleetId} changed during prune revalidation.`);
426
456
  }
427
- const selected = state.slices
428
- .filter(({ selected }) => selected)
429
- .map(({ name }) => name);
457
+ const selected = (0, fleet_state_js_1.fleetOwnedSliceNames)(state);
430
458
  const exactClaims = (await inventorySliceClaims(options, effects)).filter(({ fleetId: ownerFleetId }) => ownerFleetId === fleetId);
431
459
  if (exactClaims.some(({ classification }) => classification !== 'stale') ||
432
460
  selected.some((slice) => !exactClaims.some((claim) => claim.classification === 'stale' && claim.slice === slice))) {
@@ -25,4 +25,11 @@ export declare class FleetControlServer {
25
25
  listen(): Promise<void>;
26
26
  close(): Promise<void>;
27
27
  }
28
+ /** Control request budget: the supervisor answers between synchronous
29
+ * identity captures, which are PowerShell queries on Windows (qualification
30
+ * run 34754338371 timed out at 5 s while the supervisor handled up). */
31
+ export declare const FLEET_CONTROL_REQUEST_TIMEOUT_MS: Readonly<{
32
+ default: 5000;
33
+ win32: 30000;
34
+ }>;
28
35
  export declare function sendFleetControlRequest(path: string, request: FleetControlRequest, timeoutMs?: number): Promise<FleetControlResponse>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FleetControlServer = exports.FLEET_CONTROL_RESPONSE_MAX_BYTES = void 0;
3
+ exports.FLEET_CONTROL_REQUEST_TIMEOUT_MS = exports.FleetControlServer = exports.FLEET_CONTROL_RESPONSE_MAX_BYTES = void 0;
4
4
  exports.validateFleetControlResponse = validateFleetControlResponse;
5
5
  exports.sendFleetControlRequest = sendFleetControlRequest;
6
6
  const node_fs_1 = require("node:fs");
@@ -219,7 +219,19 @@ class FleetControlServer {
219
219
  }
220
220
  }
221
221
  exports.FleetControlServer = FleetControlServer;
222
- async function sendFleetControlRequest(path, request, timeoutMs = 5_000) {
222
+ /** Control request budget: the supervisor answers between synchronous
223
+ * identity captures, which are PowerShell queries on Windows (qualification
224
+ * run 34754338371 timed out at 5 s while the supervisor handled up). */
225
+ exports.FLEET_CONTROL_REQUEST_TIMEOUT_MS = Object.freeze({
226
+ default: 5_000,
227
+ win32: 30_000,
228
+ });
229
+ function controlRequestTimeout() {
230
+ return process.platform === 'win32'
231
+ ? exports.FLEET_CONTROL_REQUEST_TIMEOUT_MS.win32
232
+ : exports.FLEET_CONTROL_REQUEST_TIMEOUT_MS.default;
233
+ }
234
+ async function sendFleetControlRequest(path, request, timeoutMs = controlRequestTimeout()) {
223
235
  const payload = `${(0, contract_validation_js_1.canonicalJson)(request)}\n`;
224
236
  if (Buffer.byteLength(payload) > control_contract_js_1.FLEET_CONTROL_REQUEST_MAX_BYTES) {
225
237
  throw new errors_js_1.LocalDevContractError('invalid-input', 'Fleet control request exceeds its bounded size.');
@@ -50,4 +50,10 @@ export interface FleetLauncherDependencies {
50
50
  export declare function resolveGitCommonDirectory(workspaceRoot: string): string;
51
51
  export declare function prepareFleetLaunch(input: FleetLaunchInput, dependencies?: FleetLauncherDependencies): Promise<PreparedFleetLaunch>;
52
52
  export declare function verifyAttachedState(prepared: PreparedFleetLaunch, client: Pick<FleetClient, 'status'>): Promise<void>;
53
+ /** Supervisor readiness budget: startup captures identities through
54
+ * PowerShell on Windows, several seconds each. */
55
+ export declare const SUPERVISOR_READINESS_TIMEOUT_MS: Readonly<{
56
+ default: 15000;
57
+ win32: 60000;
58
+ }>;
53
59
  export declare function launchOrAttachFleet(input: FleetLaunchInput, dependencies?: FleetLauncherDependencies): Promise<FleetLaunchResult>;