@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
package/src/cli/main.js CHANGED
@@ -34,7 +34,10 @@ const secret_slice_claim_js_1 = require("../local-dev/secret-slice-claim.js");
34
34
  const tls_js_1 = require("../local-dev/tls.js");
35
35
  const personal_command_js_1 = require("../secrets/personal-command.js");
36
36
  const index_js_1 = require("../workspace-deployment/index.js");
37
+ const task_attachment_js_1 = require("../local-dev/task-attachment.js");
38
+ const task_identity_js_1 = require("../local-dev/task-identity.js");
37
39
  const dev_command_js_1 = require("./dev-command.js");
40
+ const deploy_runtime_js_1 = require("./deploy-runtime.js");
38
41
  const agent_runtime_js_1 = require("./agent-runtime.js");
39
42
  const output_js_1 = require("./output.js");
40
43
  const personal_secret_runtime_js_1 = require("./personal-secret-runtime.js");
@@ -44,11 +47,32 @@ const ROOT_HELP = `Empire Builder Kit
44
47
  Usage:
45
48
  ebk agent <command> [options]
46
49
  ebk blueprint verification-review
50
+ ebk deploy [stage] [slice...] [options]
47
51
  ebk dev <command> [options]
48
52
  ebk secret <command> <slice> <logical-name>
49
53
 
50
- Run "ebk agent --help", "ebk blueprint --help", "ebk dev --help", or
54
+ Run "ebk agent --help", "ebk blueprint --help", "ebk deploy --help", "ebk dev --help", or
51
55
  "ebk secret --help" for namespace help.`;
56
+ const DEPLOY_HELP = `Empire Builder Kit local deployment
57
+
58
+ Usage:
59
+ ebk deploy [development|staging|production] [slice...] --expectedRoleArn=<role-arn> [--profile=<aws-profile>]
60
+
61
+ The stage defaults to development; --stage=<stage> is also supported instead
62
+ of a positional stage. Account and Region come from committed repository policy.
63
+ Uses the workspace-pinned Nx deploy-local target: Foundation, then eligible
64
+ Slices, declared migrations and deployed smoke. Supply billing to deploy only
65
+ that Slice after Foundation; omit Slice names for the complete stage. Other
66
+ Slices are not redeployed and must already exist if the feature needs them.
67
+ Native output and terminal
68
+ interaction are inherited; --json and arbitrary Nx/SST options are not accepted.
69
+ The existing deployment receipt is the structured result, not a CLI success seal.
70
+
71
+ Development allows dirty source without a prompt. Local staging requires a
72
+ clean commit and its TTY acknowledgement. Starter production requires a clean
73
+ commit and the exact deploy:production:<account>:<region>:<source-commit> TTY
74
+ confirmation. Isolated protected stages remain GitHub-only. No authority or
75
+ confirmation is inferred from a hot task; ebk dev up remains the hot edit loop.`;
52
76
  const AGENT_HELP = `Empire Builder Kit Developer-Agent contract
53
77
 
54
78
  Usage:
@@ -76,6 +100,7 @@ Usage:
76
100
  ebk dev configure [<context options>] [--clear-development-router-url] [--json]
77
101
  ebk dev setup [--trust] [--portless] [--upgrade] [--remove] [--json]
78
102
  ebk dev up <slice...>|--all [--foreground] [--sst-mode=mono|multiplexer]
103
+ ebk dev attach <task-id> [--json]
79
104
  [--no-wait] [--timeout=<duration>] [<context options>] [--json]
80
105
  ebk dev status [--json]
81
106
  ebk dev restart <slice...>|--all [--no-wait] [--timeout=<duration>] [--json]
@@ -99,7 +124,8 @@ Configure mutation requires at least one context option or
99
124
  non-router context changes.
100
125
 
101
126
  Use "ebk dev <command> --help" to return this bounded command reference.
102
- Fleet stage is always derived from the current operating-system account.`;
127
+ Fleet stage uses a persisted random task ID per worktree. Use attach explicitly
128
+ to resume a verified inactive task; --stage overrides are not supported.`;
103
129
  const SECRET_HELP = `Empire Builder Kit personal secrets
104
130
 
105
131
  Usage:
@@ -143,13 +169,12 @@ function packageVersion() {
143
169
  }
144
170
  function workspaceRoot(cwd) {
145
171
  try {
146
- const root = (0, node_child_process_1.execFileSync)('git', [
172
+ const git = (args) => (0, node_child_process_1.execFileSync)('git', [
147
173
  '--no-optional-locks',
148
174
  '-c',
149
175
  'core.fsmonitor=false',
150
176
  'rev-parse',
151
- '--path-format=absolute',
152
- '--show-toplevel',
177
+ ...args,
153
178
  ], {
154
179
  cwd,
155
180
  encoding: 'utf8',
@@ -158,9 +183,22 @@ function workspaceRoot(cwd) {
158
183
  timeout: 5_000,
159
184
  windowsHide: true,
160
185
  }).trim();
161
- if (!(0, node_path_1.isAbsolute)(root))
186
+ const toplevel = git(['--path-format=absolute', '--show-toplevel']);
187
+ if (!(0, node_path_1.isAbsolute)(toplevel))
162
188
  throw new Error('Git returned a relative path.');
163
- return (0, node_fs_1.realpathSync)(root);
189
+ // Spell the root the way this process's working directory spells it. Git
190
+ // canonicalizes Windows 8.3 aliases to long names while every in-process
191
+ // resolver, the fleet runtime and the retained task pointer use realpathSync,
192
+ // so a checkout under an aliased directory (a hosted runner's TEMP) would
193
+ // otherwise be seen under two spellings and refused as another checkout.
194
+ let root = (0, node_fs_1.realpathSync)(cwd);
195
+ for (const segment of git(['--show-prefix']).split('/')) {
196
+ if (segment)
197
+ root = (0, node_path_1.dirname)(root);
198
+ }
199
+ if (node_fs_1.realpathSync.native(root) !== node_fs_1.realpathSync.native(toplevel))
200
+ throw new Error('Git toplevel does not match the working directory.');
201
+ return root;
164
202
  }
165
203
  catch {
166
204
  throw new errors_js_1.LocalDevContractError('prerequisite-unavailable', 'Run ebk from a Git workspace with a readable repository root.');
@@ -168,6 +206,8 @@ function workspaceRoot(cwd) {
168
206
  }
169
207
  function defaultDependencies(overrides) {
170
208
  return {
209
+ attachTask: task_attachment_js_1.attachStoppedTask,
210
+ bindTask: task_identity_js_1.bindTaskEnvironment,
171
211
  acquireSecretLedgerLock: personal_secret_ledger_js_1.acquirePersonalSecretLedgerLock,
172
212
  appData: tls_js_1.defaultLocalDevAppData,
173
213
  assertSecretSliceClaim: secret_slice_claim_js_1.assertSecretSliceClaimAuthority,
@@ -176,6 +216,7 @@ function defaultDependencies(overrides) {
176
216
  client: (paths) => new fleet_client_js_1.FleetClient(paths),
177
217
  discoverContext: context_discovery_js_1.discoverLocalDevContext,
178
218
  executeAgent: agent_runtime_js_1.executeDeveloperAgentCommand,
219
+ executeDeploy: deploy_runtime_js_1.executeDeployCommand,
179
220
  followLogs: fleet_logs_js_1.followFleetLogs,
180
221
  frameworkVersion: packageVersion,
181
222
  gitCommonDirectory: fleet_launcher_js_1.resolveGitCommonDirectory,
@@ -226,7 +267,7 @@ function planWorkspaceName(plan) {
226
267
  }
227
268
  async function resolveCurrentFleetCoordinates(workspaceRoot, appData, dependencies) {
228
269
  const plan = await dependencies.loadPlan();
229
- const identity = dependencies.personalStageResolver.resolve();
270
+ const identity = dependencies.personalStageResolver.resolve(workspaceRoot);
230
271
  const workspaceName = planWorkspaceName(plan);
231
272
  const fleetId = (0, identity_js_1.createFleetId)({
232
273
  checkoutPath: workspaceRoot,
@@ -242,7 +283,7 @@ async function resolveCurrentFleetCoordinates(workspaceRoot, appData, dependenci
242
283
  };
243
284
  }
244
285
  async function resolveRecoveryFleetCoordinates(workspaceRoot, appData, dependencies, currentPlatform = process.platform) {
245
- const identity = dependencies.personalStageResolver.resolve();
286
+ const identity = dependencies.personalStageResolver.resolve(workspaceRoot);
246
287
  const inventory = await dependencies.inventory({ appData });
247
288
  const matches = inventory.filter(({ checkout, stage }) => checkout !== undefined &&
248
289
  sameWorkspaceRealpath(checkout, workspaceRoot, currentPlatform) &&
@@ -420,7 +461,7 @@ async function executeSecretCommand(command, dispatch) {
420
461
  : 'Personal secret commands require saved local-development profile and Region context. Run ebk dev configure first.');
421
462
  }
422
463
  const context = saved.resolution.context;
423
- const identity = dispatch.dependencies.personalStageResolver.resolve();
464
+ const identity = dispatch.dependencies.personalStageResolver.resolve(dispatch.workspaceRoot);
424
465
  const environmentAssessment = await dispatch.dependencies.inspectEnvironment({
425
466
  appData: dispatch.appData,
426
467
  command: 'secret',
@@ -466,6 +507,11 @@ async function executeSecretCommand(command, dispatch) {
466
507
  if (ownership.region !== context.region) {
467
508
  throw new Error('Personal secret Region differs from workspace owner.');
468
509
  }
510
+ dispatch.dependencies.bindTask(dispatch.workspaceRoot, {
511
+ accountId,
512
+ region: ownership.region,
513
+ workspaceDeploymentId: ownership.expectedOwner.workspaceDeploymentId,
514
+ });
469
515
  }
470
516
  catch {
471
517
  throw new errors_js_1.LocalDevContractError('prerequisite-unavailable', 'The development AWS tuple is not owned by this workspace. Run the generated workspace ownership doctor before personal secret mutation.');
@@ -574,7 +620,7 @@ async function recordDiagnosticAssessment(command, dispatch) {
574
620
  command,
575
621
  context,
576
622
  frameworkVersion: dispatch.dependencies.frameworkVersion(),
577
- identity: dispatch.dependencies.personalStageResolver.resolve(),
623
+ identity: dispatch.dependencies.personalStageResolver.resolve(dispatch.workspaceRoot),
578
624
  workspaceRoot: dispatch.workspaceRoot,
579
625
  });
580
626
  }
@@ -760,7 +806,26 @@ async function executeDown(command, coordinates, dispatch) {
760
806
  throw new errors_js_1.LocalDevContractError('unknown-slice', `Product Slice ${unknown} is absent from the live Fleet state.`);
761
807
  }
762
808
  }
763
- const submission = await client.submit('down', command.selector, dispatch.dependencies.idempotencyKey());
809
+ let submission;
810
+ try {
811
+ submission = await client.submit('down', command.selector, dispatch.dependencies.idempotencyKey());
812
+ }
813
+ catch (error) {
814
+ if (!command.selector.all ||
815
+ !(error instanceof errors_js_1.LocalDevContractError) ||
816
+ error.classification !== 'not-running')
817
+ throw error;
818
+ // This remains an authenticated shutdown request. The supervisor checks
819
+ // in-flight work, active selections, and owned cleanup independently.
820
+ await client.shutdown(dispatch.dependencies.idempotencyKey());
821
+ return {
822
+ result: success(command.command, {
823
+ fleetId: coordinates.fleetId,
824
+ alreadyEmpty: true,
825
+ shutdown: 'accepted',
826
+ }),
827
+ };
828
+ }
764
829
  if (command.noWait) {
765
830
  return {
766
831
  result: success(command.command, { fleetId: coordinates.fleetId, operation: submission }, submission.operationId),
@@ -885,12 +950,27 @@ async function executeDoctor(command, identity, dispatch) {
885
950
  dispatch.dependencies.inventoryClaims({ appData: dispatch.appData }),
886
951
  ]);
887
952
  const outcome = doctorOutcome(environment, local);
953
+ const diagnostics = [
954
+ ...environment.checks
955
+ .filter(({ status }) => !['ready', 'unverified', 'not-required'].includes(status))
956
+ .map(({ id, status, remediation }) => `${id}=${status}${remediation ? `: ${remediation}` : ''}`),
957
+ ...(local?.issues ?? []),
958
+ ]
959
+ .slice(0, 8)
960
+ .map((message) => message.slice(0, 512));
888
961
  const payload = {
889
962
  context: contextPayload(saved),
890
963
  environmentAssessment: environment,
891
964
  fleetInventory,
892
965
  ...(local ? { localDevelopment: local } : {}),
893
966
  sliceClaims,
967
+ ...(outcome.outcome === 'failed'
968
+ ? {
969
+ message: diagnostics.length > 0
970
+ ? diagnostics.join(' ')
971
+ : 'Development readiness is incomplete. Run ebk dev doctor --refresh --json to inspect the exact prerequisite.',
972
+ }
973
+ : {}),
894
974
  };
895
975
  return {
896
976
  result: outcome.outcome === 'succeeded'
@@ -996,6 +1076,26 @@ async function executeSetup(command, identity, dispatch) {
996
1076
  };
997
1077
  }
998
1078
  async function dispatchDevCommand(command, dispatch) {
1079
+ if (command.command === 'attach') {
1080
+ const saved = dispatch.dependencies.readContext(dispatch.dependencies.gitCommonDirectory(dispatch.workspaceRoot));
1081
+ if (saved.kind !== 'ready')
1082
+ throw new errors_js_1.LocalDevContractError('local-context-missing', 'Task attachment requires saved AWS context. Run ebk dev configure first.');
1083
+ const plan = await dispatch.dependencies.loadPlan();
1084
+ const task = await dispatch.dependencies.attachTask({
1085
+ appData: dispatch.appData,
1086
+ context: saved.resolution.context,
1087
+ taskId: command.taskId,
1088
+ workspaceName: planWorkspaceName(plan),
1089
+ workspaceRoot: dispatch.workspaceRoot,
1090
+ });
1091
+ return {
1092
+ result: success('attach', {
1093
+ taskId: task.taskId,
1094
+ stage: `personal-${task.taskId}`,
1095
+ nextAction: 'ebk dev up <slice...>',
1096
+ }),
1097
+ };
1098
+ }
999
1099
  if (command.command === 'ps') {
1000
1100
  await recordDiagnosticAssessment('ps', dispatch);
1001
1101
  const [fleets, sliceClaims] = await Promise.all([
@@ -1019,13 +1119,13 @@ async function dispatchDevCommand(command, dispatch) {
1019
1119
  await recordDiagnosticAssessment(command.command, dispatch);
1020
1120
  }
1021
1121
  if (command.command === 'configure') {
1022
- return executeConfigure(command, dispatch.dependencies.personalStageResolver.resolve(), dispatch);
1122
+ return executeConfigure(command, dispatch.dependencies.personalStageResolver.resolve(dispatch.workspaceRoot), dispatch);
1023
1123
  }
1024
1124
  if (command.command === 'setup') {
1025
- return executeSetup(command, dispatch.dependencies.personalStageResolver.resolve(), dispatch);
1125
+ return executeSetup(command, dispatch.dependencies.personalStageResolver.resolve(dispatch.workspaceRoot), dispatch);
1026
1126
  }
1027
1127
  if (command.command === 'doctor') {
1028
- return executeDoctor(command, dispatch.dependencies.personalStageResolver.resolve(), dispatch);
1128
+ return executeDoctor(command, dispatch.dependencies.personalStageResolver.resolve(dispatch.workspaceRoot), dispatch);
1029
1129
  }
1030
1130
  if (command.command === 'up' || command.command === 'restart') {
1031
1131
  const coordinates = await resolveCurrentFleetCoordinates(dispatch.workspaceRoot, dispatch.appData, dispatch.dependencies);
@@ -1063,12 +1163,15 @@ function commandJson(command) {
1063
1163
  }
1064
1164
  function commandName(command) {
1065
1165
  return command?.kind === 'agent' ||
1166
+ command?.kind === 'deploy' ||
1066
1167
  command?.kind === 'dev' ||
1067
1168
  command?.kind === 'secret'
1068
1169
  ? command.command
1069
1170
  : 'parse';
1070
1171
  }
1071
1172
  function commandNamespace(command, arguments_) {
1173
+ if (command?.kind === 'deploy' || arguments_[0] === 'deploy')
1174
+ return 'deploy';
1072
1175
  if (command?.kind === 'agent' || arguments_[0] === 'agent')
1073
1176
  return 'agent';
1074
1177
  return command?.kind === 'secret' || arguments_[0] === 'secret'
@@ -1155,11 +1258,13 @@ async function runEbkCli(arguments_, io = {}, overrides = {}) {
1155
1258
  if (parsed.kind === 'help') {
1156
1259
  output.stdout(`${parsed.namespace === 'agent'
1157
1260
  ? AGENT_HELP
1158
- : parsed.namespace === 'dev'
1159
- ? DEV_HELP
1160
- : parsed.namespace === 'secret'
1161
- ? SECRET_HELP
1162
- : ROOT_HELP}\n`);
1261
+ : parsed.namespace === 'deploy'
1262
+ ? DEPLOY_HELP
1263
+ : parsed.namespace === 'dev'
1264
+ ? DEV_HELP
1265
+ : parsed.namespace === 'secret'
1266
+ ? SECRET_HELP
1267
+ : ROOT_HELP}\n`);
1163
1268
  return 0;
1164
1269
  }
1165
1270
  if (parsed.kind === 'version') {
@@ -1174,6 +1279,9 @@ async function runEbkCli(arguments_, io = {}, overrides = {}) {
1174
1279
  }
1175
1280
  const dependencies = defaultDependencies(overrides);
1176
1281
  const root = dependencies.resolveWorkspaceRoot(io.cwd ?? process.cwd());
1282
+ if (parsed.kind === 'deploy') {
1283
+ return await dependencies.executeDeploy(parsed, root, io.environment ?? process.env);
1284
+ }
1177
1285
  dependencies.changeDirectory(root);
1178
1286
  if (!io.abortSignal)
1179
1287
  ownedSignal = processAbortSignal();
@@ -9,7 +9,7 @@ export type CliFailureClassification = DeveloperAgentFailureClassification | Loc
9
9
  export interface CliResultEnvelope<TPayload = unknown> {
10
10
  command: string;
11
11
  failureClassification?: CliFailureClassification;
12
- namespace: 'agent' | 'dev' | 'secret';
12
+ namespace: 'agent' | 'deploy' | 'dev' | 'secret';
13
13
  operationId?: string;
14
14
  outcome: CliResultOutcome;
15
15
  payload?: TPayload;
@@ -213,6 +213,13 @@ function gitContext(inspection) {
213
213
  }
214
214
  function gitWarnings(inspection) {
215
215
  const warnings = [];
216
+ if (inspection.worktree.commit === null ||
217
+ inspection.defaultBase?.commit === null) {
218
+ warnings.push({
219
+ classification: 'stale-base',
220
+ sanitizedSummary: 'Local source is available, but commit-bound planning, handoff, and protected authority require real Git commits and protected refs. No commit or remote ref was created by orientation.',
221
+ });
222
+ }
216
223
  if (inspection.worktree.dirtyPaths.length > 0) {
217
224
  warnings.push({
218
225
  classification: 'dirty-worktree',
@@ -335,6 +342,8 @@ async function inspectDeveloperAgentContext(cwd, query = {}, dependencyOverrides
335
342
  const workspaceRoot = (0, node_fs_1.realpathSync)(cwd);
336
343
  const nxConfiguration = workspaceNxExecutionConfiguration(workspaceRoot);
337
344
  const gitOptions = {
345
+ allowMissingDefaultBase: true,
346
+ allowUnborn: true,
338
347
  ...(query.base ? { base: query.base } : {}),
339
348
  cwd: workspaceRoot,
340
349
  defaultBase: nxConfiguration.defaultBaseRef,
@@ -355,11 +364,21 @@ async function inspectDeveloperAgentContext(cwd, query = {}, dependencyOverrides
355
364
  try {
356
365
  const currentExternalRoots = (0, blueprint_verification_authority_js_1.externalBlueprintOwnershipRoots)(workspaceRoot);
357
366
  (0, blueprint_verification_authority_js_1.assertDeveloperAgentNxProjectConfinement)(workspaceRoot);
367
+ // Orientation can describe an unborn worktree, but it cannot establish
368
+ // protected history. Keep package target authority strict; this is not an
369
+ // alternate path to a protected review or execution receipt.
358
370
  externalOwnershipHistory =
359
- (0, blueprint_trust_git_js_1.inspectProtectedWorkspaceExternalBlueprintHistory)({
360
- builtInName: resolver_js_1.BUILTIN_BLUEPRINT_NAME,
361
- workspaceRoot,
362
- });
371
+ gitInspection.worktree.commit === null
372
+ ? {
373
+ complete: false,
374
+ externalProjectNames: [],
375
+ externalSliceRoots: [],
376
+ requiresStrictNxAuthority: true,
377
+ }
378
+ : (0, blueprint_trust_git_js_1.inspectProtectedWorkspaceExternalBlueprintHistory)({
379
+ builtInName: resolver_js_1.BUILTIN_BLUEPRINT_NAME,
380
+ workspaceRoot,
381
+ });
363
382
  if (currentExternalRoots.length > 0 ||
364
383
  externalOwnershipHistory.requiresStrictNxAuthority) {
365
384
  (0, blueprint_verification_authority_js_1.assertNoMutableBlueprintVerificationConfiguration)(workspaceRoot);
@@ -443,7 +462,7 @@ function formatDeveloperAgentContext(context) {
443
462
  ].sort(ordering_js_1.compareDeveloperAgentStrings);
444
463
  const lines = [
445
464
  `Workspace: ${context.workspace.identity} (${context.workspace.frameworkVersion})`,
446
- `Git: ${branch} @ ${context.git.commit.slice(0, 12)}${context.git.dirty ? ' (dirty)' : ''}`,
465
+ `Git: ${branch} @ ${context.git.commit?.slice(0, 12) ?? '(uncommitted)'}${context.git.dirty ? ' (dirty)' : ''}`,
447
466
  `Selection: ${selection}`,
448
467
  `Nx graph projects: ${context.projectNames.length}`,
449
468
  `Policy stage: ${context.policy.canonicalStage}`,
@@ -458,6 +477,15 @@ function formatDeveloperAgentContext(context) {
458
477
  : ''}`,
459
478
  ];
460
479
  const details = [
480
+ ...context.supportedOperations
481
+ .filter((operation) => operation.command &&
482
+ (operation.id.startsWith('ebk-dev:') ||
483
+ operation.id.endsWith(':verify-local-browser') ||
484
+ operation.id.endsWith(':dev')))
485
+ .map((operation) => ({
486
+ kind: 'operation',
487
+ line: `- [operation] ${operation.id}: ${operation.command.executable} ${operation.command.args.map((argument) => (/^[A-Za-z0-9_./:@=-]+$/.test(argument) ? argument : JSON.stringify(argument))).join(' ')}`,
488
+ })),
461
489
  ...context.warnings.map((finding) => ({
462
490
  kind: 'warning',
463
491
  line: `- [${finding.classification}] ${finding.sanitizedSummary}`,
@@ -469,8 +497,9 @@ function formatDeveloperAgentContext(context) {
469
497
  ];
470
498
  let omittedWarnings = 0;
471
499
  let omittedNonPlannable = 0;
500
+ let omittedOperations = 0;
472
501
  const route = 'Full structured context: ebk agent context --json';
473
- const maximumOmission = `Omitted detail: ${context.warnings.length} warning(s), ${context.nonPlannableTargets.length} non-plannable target(s).`;
502
+ const maximumOmission = `Omitted detail: ${context.warnings.length} warning(s), ${context.nonPlannableTargets.length} non-plannable target(s), ${context.supportedOperations.length} operation(s).`;
474
503
  for (const detail of details) {
475
504
  const candidate = [...lines, detail.line, maximumOmission, route].join('\n');
476
505
  if (Buffer.byteLength(candidate, 'utf8') <=
@@ -480,12 +509,15 @@ function formatDeveloperAgentContext(context) {
480
509
  else if (detail.kind === 'warning') {
481
510
  omittedWarnings += 1;
482
511
  }
483
- else {
512
+ else if (detail.kind === 'non-plannable') {
484
513
  omittedNonPlannable += 1;
485
514
  }
515
+ else {
516
+ omittedOperations += 1;
517
+ }
486
518
  }
487
- if (omittedWarnings > 0 || omittedNonPlannable > 0) {
488
- lines.push(`Omitted detail: ${omittedWarnings} warning(s), ${omittedNonPlannable} non-plannable target(s).`);
519
+ if (omittedWarnings > 0 || omittedNonPlannable > 0 || omittedOperations > 0) {
520
+ lines.push(`Omitted detail: ${omittedWarnings} warning(s), ${omittedNonPlannable} non-plannable target(s), ${omittedOperations} operation(s).`);
489
521
  }
490
522
  lines.push(route);
491
523
  const output = lines.join('\n');
@@ -185,7 +185,9 @@ function generatorContextSelection(input) {
185
185
  input.generator === 'job') {
186
186
  return {
187
187
  selectedFeature: input.feature,
188
- selectedProjects: [input.slice],
188
+ selectedProjects: input.generator === 'function'
189
+ ? [input.slice]
190
+ : [input.slice, 'foundation'].sort(),
189
191
  selectedSlice: input.slice,
190
192
  };
191
193
  }
@@ -425,6 +427,7 @@ function workloadPlan(context, input, mode, rebindCompleted = false) {
425
427
  const generatedSurfaces = sortedSurfaces([
426
428
  ...prefixedSurfaces(input.slice, plan.paths),
427
429
  ...prefixedSurfaces(input.slice, [
430
+ { path: 'infra/foundation.ts' },
428
431
  { path: 'infra/product.ts' },
429
432
  { path: 'infra/native-runtime-authority/effective-intent.ts' },
430
433
  { path: 'infra/native-runtime-authority/topology.ts' },
@@ -447,6 +450,16 @@ function workloadPlan(context, input, mode, rebindCompleted = false) {
447
450
  { mode: 'seeded', path: RELEASE_REGISTRY_PATH },
448
451
  { path: PRODUCT_OWNERSHIP_PATH },
449
452
  ]),
453
+ // The workload generator grows network/container-compute capabilities in
454
+ // the same source operation. These are its paired Foundation surfaces,
455
+ // even when an existing container makes the capability update a no-op.
456
+ ...prefixedSurfaces('foundation', [
457
+ { path: PRODUCT_OWNERSHIP_PATH },
458
+ { path: 'contracts/costs.json' },
459
+ { path: 'contracts/foundation.json' },
460
+ { path: 'infra/foundation.ts' },
461
+ { path: 'scripts/verify-foundation.mjs' },
462
+ ]),
450
463
  surface('pnpm-lock.yaml', 'adopter-owned'),
451
464
  ]);
452
465
  const prospectiveVerification = mode === 'apply' ? [`${plan.project}:verify`] : [];
@@ -469,11 +482,12 @@ function workloadPlan(context, input, mode, rebindCompleted = false) {
469
482
  'supply-chain',
470
483
  ], context.selection.contracts),
471
484
  generatedSurfaces,
472
- projects: [input.slice, plan.project].sort(),
485
+ projects: [input.slice, plan.project, 'foundation'].sort(),
473
486
  prospectiveVerification,
474
487
  verification: [
475
488
  ...new Set([
476
489
  `${input.slice}:verify`,
490
+ 'foundation:verify',
477
491
  ...prospectiveVerification,
478
492
  developerAgentWorkspaceVerificationTarget(context),
479
493
  ]),
@@ -26,6 +26,10 @@ export interface GitInspectionCommandResult {
26
26
  }
27
27
  export type GitInspectionExecFile = (executable: string, args: readonly string[], options: GitInspectionExecFileOptions) => GitInspectionCommandResult | Promise<GitInspectionCommandResult>;
28
28
  export interface InspectDeveloperAgentGitOptions {
29
+ /** Orientation only; strict commit-bound callers leave this disabled. */
30
+ allowUnborn?: boolean;
31
+ /** Only an absent fully qualified implicit ref may have a null binding. */
32
+ allowMissingDefaultBase?: boolean;
29
33
  /**
30
34
  * Base and head are accepted only as a pair. They must be literal safe refs
31
35
  * or full object IDs, never arbitrary revision expressions.
@@ -44,7 +48,7 @@ export interface DeveloperAgentGitUpstream {
44
48
  }
45
49
  export interface DeveloperAgentLinkedWorktree {
46
50
  branch: string | null;
47
- commit: string;
51
+ commit: string | null;
48
52
  detached: boolean;
49
53
  dirtyPaths: readonly string[];
50
54
  locked: boolean;
@@ -84,7 +88,7 @@ export interface DeveloperAgentGitInspection {
84
88
  concurrentChangeInspectionComplete: boolean;
85
89
  concurrentChanges: readonly DeveloperAgentConcurrentPathChange[];
86
90
  defaultBase?: {
87
- commit: string;
91
+ commit: string | null;
88
92
  ref: string;
89
93
  };
90
94
  kind: 'developer-agent-git-inspection';
@@ -126,6 +126,18 @@ function assertDeveloperAgentReadOnlyGitInvocation(args) {
126
126
  '--short',
127
127
  'HEAD',
128
128
  ]) ||
129
+ (args.length === 5 &&
130
+ args[1] === 'symbolic-ref' &&
131
+ args[2] === '--quiet' &&
132
+ args[3] === '--no-recurse' &&
133
+ (args[4] === 'HEAD' ||
134
+ (args[4]?.startsWith('refs/') === true && safeRef(args[4])))) ||
135
+ (args.length === 5 &&
136
+ args[1] === 'show-ref' &&
137
+ args[2] === '--verify' &&
138
+ args[3] === '--quiet' &&
139
+ args[4]?.startsWith('refs/') === true &&
140
+ safeRef(args[4])) ||
129
141
  sameArgs(args, [
130
142
  NO_OPTIONAL_LOCKS,
131
143
  ...DISABLE_FS_MONITOR,
@@ -499,6 +511,41 @@ async function resolveCommit(git, ref, cwd) {
499
511
  ], { cwd });
500
512
  return requireCommit(result.stdout, `Git ref ${ref}`);
501
513
  }
514
+ async function exactRefExists(git, ref, cwd) {
515
+ const result = await git.run([NO_OPTIONAL_LOCKS, 'show-ref', '--verify', '--quiet', ref], {
516
+ allowedExitCodes: [0, 1],
517
+ cwd,
518
+ });
519
+ if (result.stdout !== '' || result.stderr !== '') {
520
+ return fail('git-output-invalid', 'Git ref existence returned unexpected output.');
521
+ }
522
+ if (result.exitCode === 0)
523
+ return true;
524
+ // show-ref also reports a dangling symbolic ref as absent. Check the ref
525
+ // itself without following it before admitting absence. Corrupt object refs
526
+ // fail show-ref above; symbolic refs remain present and must resolve normally.
527
+ const symbolic = await git.run([NO_OPTIONAL_LOCKS, 'symbolic-ref', '--quiet', '--no-recurse', ref], { allowedExitCodes: [0, 1], cwd });
528
+ if (symbolic.stderr !== '' ||
529
+ (symbolic.exitCode === 1 && symbolic.stdout !== '')) {
530
+ return fail('git-output-invalid', 'Git symbolic ref existence returned unexpected output.');
531
+ }
532
+ if (symbolic.exitCode === 0) {
533
+ const target = singleSafeLine(symbolic.stdout, 'Git symbolic ref target');
534
+ if (!target.startsWith('refs/') || !safeRef(target)) {
535
+ return fail('git-output-invalid', 'Git symbolic ref target is invalid.');
536
+ }
537
+ return true;
538
+ }
539
+ return false;
540
+ }
541
+ async function resolveDefaultBase(git, ref, cwd, allowMissing) {
542
+ if (allowMissing &&
543
+ ref.startsWith('refs/') &&
544
+ !(await exactRefExists(git, ref, cwd))) {
545
+ return null;
546
+ }
547
+ return resolveCommit(git, ref, cwd);
548
+ }
502
549
  async function resolveDirectory(git, kind, cwd) {
503
550
  const result = await git.run([NO_OPTIONAL_LOCKS, 'rev-parse', '--path-format=absolute', kind], { cwd });
504
551
  return requireAbsoluteDirectoryOutput(result.stdout, kind === '--show-toplevel' ? 'Git worktree root' : 'Git common directory', kind === '--show-toplevel'
@@ -521,16 +568,32 @@ async function resolveBranch(git, cwd) {
521
568
  }
522
569
  return { branch, detached: false };
523
570
  }
524
- async function verifyWorktree(git, commonDirectory, worktree, budget) {
571
+ async function verifyWorktree(git, commonDirectory, worktree, budget, allowUnborn) {
525
572
  const discoveredRoot = await resolveDirectory(git, '--show-toplevel', worktree.realRoot);
526
573
  const discoveredCommon = await resolveDirectory(git, '--git-common-dir', worktree.realRoot);
527
574
  if (discoveredRoot !== worktree.realRoot ||
528
575
  discoveredCommon !== commonDirectory) {
529
576
  return fail('git-worktree-ambiguous', 'Linked worktree identity does not match the inspected repository.');
530
577
  }
531
- const commit = await resolveCommit(git, 'HEAD', worktree.realRoot);
578
+ let commit;
579
+ if (allowUnborn && /^0{40}(?:0{24})?$/.test(worktree.head)) {
580
+ if (!worktree.branchRef || worktree.detached) {
581
+ return fail('git-output-invalid', 'Unborn worktree must have one symbolic local branch.');
582
+ }
583
+ const symbolic = await git.run([NO_OPTIONAL_LOCKS, 'symbolic-ref', '--quiet', '--no-recurse', 'HEAD'], { cwd: worktree.realRoot });
584
+ if (symbolic.stderr !== '' ||
585
+ singleSafeLine(symbolic.stdout, 'Unborn HEAD branch') !==
586
+ worktree.branchRef ||
587
+ (await exactRefExists(git, worktree.branchRef, worktree.realRoot))) {
588
+ return fail('git-worktree-ambiguous', 'Unborn HEAD does not match an absent exact local branch.');
589
+ }
590
+ commit = null;
591
+ }
592
+ else {
593
+ commit = await resolveCommit(git, 'HEAD', worktree.realRoot);
594
+ }
532
595
  const branchState = await resolveBranch(git, worktree.realRoot);
533
- if (commit !== worktree.head ||
596
+ if ((commit !== null && commit !== worktree.head) ||
534
597
  branchState.branch !== worktree.branch ||
535
598
  branchState.detached !== worktree.detached) {
536
599
  return fail('git-worktree-ambiguous', 'Linked worktree state changed during inspection.');
@@ -555,7 +618,7 @@ async function verifyWorktree(git, commonDirectory, worktree, budget) {
555
618
  };
556
619
  }
557
620
  async function inspectUpstream(git, current) {
558
- if (!current.branch)
621
+ if (!current.branch || current.commit === null)
559
622
  return undefined;
560
623
  const upstreamResult = await git.run([
561
624
  NO_OPTIONAL_LOCKS,
@@ -662,6 +725,10 @@ async function inspectConcurrentChanges(git, current, worktrees, budget) {
662
725
  continue;
663
726
  for (const path of worktree.dirtyPaths)
664
727
  record(path, worktree.root, 'dirty');
728
+ if (worktree.commit === null || current.commit === null) {
729
+ complete = false;
730
+ continue;
731
+ }
665
732
  if (worktree.commit === current.commit)
666
733
  continue;
667
734
  const mergeBase = await git.run([
@@ -723,6 +790,11 @@ function validateInput(options) {
723
790
  if ((options.base === undefined) !== (options.head === undefined)) {
724
791
  return fail('invalid-input', 'Git comparison requires both explicit base and head refs.');
725
792
  }
793
+ for (const value of [options.allowUnborn, options.allowMissingDefaultBase]) {
794
+ if (value !== undefined && typeof value !== 'boolean') {
795
+ return fail('invalid-input', 'Git orientation allowances must be explicit booleans.');
796
+ }
797
+ }
726
798
  if (options.base !== undefined && options.head !== undefined) {
727
799
  return {
728
800
  base: requireSafeRef(options.base, 'Git comparison base'),
@@ -754,7 +826,7 @@ async function inspectDeveloperAgentGit(options) {
754
826
  const budget = { count: 0 };
755
827
  const linkedWorktrees = [];
756
828
  for (const worktree of prepared) {
757
- linkedWorktrees.push(await verifyWorktree(git, commonDirectory, worktree, budget));
829
+ linkedWorktrees.push(await verifyWorktree(git, commonDirectory, worktree, budget, options.allowUnborn === true));
758
830
  }
759
831
  const current = linkedWorktrees.find(({ root }) => root === currentRoot);
760
832
  if (!current) {
@@ -763,7 +835,7 @@ async function inspectDeveloperAgentGit(options) {
763
835
  const upstream = await inspectUpstream(git, current);
764
836
  const defaultBase = comparisonInput.defaultBase !== undefined
765
837
  ? {
766
- commit: await resolveCommit(git, comparisonInput.defaultBase, currentRoot),
838
+ commit: await resolveDefaultBase(git, comparisonInput.defaultBase, currentRoot, options.allowMissingDefaultBase === true),
767
839
  ref: comparisonInput.defaultBase,
768
840
  }
769
841
  : undefined;
@@ -159,10 +159,12 @@ export interface DeveloperAgentGitContext {
159
159
  baseCommit?: string;
160
160
  behind: number;
161
161
  branch?: string;
162
- commit: string;
162
+ /** Null means a verified unborn symbolic branch, never a placeholder SHA. */
163
+ commit: string | null;
163
164
  concurrentChangeInspectionComplete: boolean;
164
165
  concurrentChanges: readonly DeveloperAgentConcurrentChangeContext[];
165
- defaultBaseCommit: string;
166
+ /** An implicit base may be absent during local first-use orientation. */
167
+ defaultBaseCommit: string | null;
166
168
  defaultBaseRef: string;
167
169
  dirty: boolean;
168
170
  headCommit?: string;