@empire-builder-kit/nx 1.0.0-rc.4 → 1.0.0-rc.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (791) hide show
  1. package/README.md +18 -0
  2. package/executors.json +21 -1
  3. package/generators.json +10 -0
  4. package/package.json +31 -7
  5. package/src/aws/child-environment.d.ts +10 -0
  6. package/src/aws/child-environment.js +77 -0
  7. package/src/aws/identity.d.ts +13 -0
  8. package/src/aws/identity.js +41 -0
  9. package/src/aws-authority/index.d.ts +2 -0
  10. package/src/aws-authority/index.js +6 -0
  11. package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
  12. package/src/aws-authority/lambda-policy-ordering.js +56 -0
  13. package/src/aws-authority/stage-authority.d.ts +248 -0
  14. package/src/aws-authority/stage-authority.js +3558 -0
  15. package/src/blueprints/external-sandbox.js +21 -9
  16. package/src/blueprints/manifest.d.ts +1 -1
  17. package/src/blueprints/resolver.js +28 -15
  18. package/src/cli/bootstrap.d.ts +1 -1
  19. package/src/cli/deploy-runtime.d.ts +6 -0
  20. package/src/cli/deploy-runtime.js +58 -0
  21. package/src/cli/dev-command.d.ts +16 -4
  22. package/src/cli/dev-command.js +63 -0
  23. package/src/cli/main.d.ts +9 -1
  24. package/src/cli/main.js +139 -20
  25. package/src/cli/output.d.ts +1 -1
  26. package/src/cli/output.js +1 -1
  27. package/src/developer-agent/context.js +41 -9
  28. package/src/developer-agent/generator-planning.js +20 -6
  29. package/src/developer-agent/git-inspection.d.ts +6 -2
  30. package/src/developer-agent/git-inspection.js +78 -6
  31. package/src/developer-agent/model.d.ts +5 -3
  32. package/src/developer-agent/model.js +4 -4
  33. package/src/developer-agent/operation-registry.d.ts +5 -0
  34. package/src/developer-agent/operation-registry.js +286 -40
  35. package/src/developer-agent/planning.js +16 -13
  36. package/src/developer-agent/preview-changes.d.ts +2 -0
  37. package/src/developer-agent/preview-changes.js +14 -2
  38. package/src/developer-agent/preview-source.js +3 -0
  39. package/src/developer-agent/validation.js +25 -9
  40. package/src/developer-agent/workspace-inspection.js +60 -5
  41. package/src/executors/blueprint-trust/blueprint-trust.js +6 -0
  42. package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
  43. package/src/executors/deployment-plan/deployment-plan.js +57 -2
  44. package/src/executors/dev-doctor/dev-doctor.js +13 -6
  45. package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
  46. package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
  47. package/src/executors/dev-task-cleanup/schema.json +9 -0
  48. package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
  49. package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
  50. package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
  51. package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
  52. package/src/executors/fleet/fleet.js +1 -1
  53. package/src/executors/foundation-preflight/foundation-preflight.d.ts +1 -0
  54. package/src/executors/foundation-preflight/foundation-preflight.js +6 -2
  55. package/src/executors/foundation-preflight/schema.json +5 -0
  56. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +13 -2
  57. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -31
  58. package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +65 -0
  59. package/src/executors/foundation-profile-preflight/production-database-safeguard.js +223 -0
  60. package/src/executors/foundation-profile-preflight/schema.json +15 -4
  61. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
  62. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +70 -20
  63. package/src/executors/foundation-remove-preflight/schema.json +6 -1
  64. package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
  65. package/src/executors/github-bootstrap/github-bootstrap.js +3 -0
  66. package/src/executors/github-bootstrap/schema.json +7 -1
  67. package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +29 -136
  68. package/src/executors/infrastructure-plan/infrastructure-plan.js +230 -3282
  69. package/src/executors/infrastructure-plan/schema.json +12 -52
  70. package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
  71. package/src/executors/local-deploy/federated-credential-transport.js +252 -0
  72. package/src/executors/local-deploy/local-approval.d.ts +18 -0
  73. package/src/executors/local-deploy/local-approval.js +39 -0
  74. package/src/executors/local-deploy/local-deploy.d.ts +112 -0
  75. package/src/executors/local-deploy/local-deploy.js +1404 -0
  76. package/src/executors/local-deploy/schema.json +70 -0
  77. package/src/executors/refresh/refresh.js +2 -2
  78. package/src/executors/remove/remove.js +2 -2
  79. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +42 -0
  80. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +1229 -0
  81. package/src/executors/router-waf-rehearsal/schema.json +29 -0
  82. package/src/executors/secret-initialize/schema.json +42 -0
  83. package/src/executors/secret-initialize/secret-initialize.d.ts +34 -0
  84. package/src/executors/secret-initialize/secret-initialize.js +297 -0
  85. package/src/executors/secret-metadata/schema.json +5 -0
  86. package/src/executors/secret-metadata/secret-metadata.d.ts +16 -2
  87. package/src/executors/secret-metadata/secret-metadata.js +129 -30
  88. package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
  89. package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
  90. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +48 -0
  91. package/src/executors/sst-lifecycle/governed-native-operation.js +162 -0
  92. package/src/executors/sst-lifecycle/logging-preflight.d.ts +5 -0
  93. package/src/executors/sst-lifecycle/logging-preflight.js +23 -13
  94. package/src/executors/sst-lifecycle/run-sst-command.d.ts +40 -6
  95. package/src/executors/sst-lifecycle/run-sst-command.js +779 -70
  96. package/src/executors/sst-lifecycle/schema.json +8 -1
  97. package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
  98. package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
  99. package/src/executors/sst-lifecycle/sst-environment-source.d.ts +33 -0
  100. package/src/executors/sst-lifecycle/sst-environment-source.js +267 -0
  101. package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
  102. package/src/executors/sst-lifecycle/task-unlock.js +126 -0
  103. package/src/executors/unlock/unlock.js +2 -2
  104. package/src/foundation/capability-plan.d.ts +43 -0
  105. package/src/foundation/capability-plan.js +168 -0
  106. package/src/foundation/discovery.d.ts +14 -11
  107. package/src/foundation/discovery.js +32 -6
  108. package/src/foundation/index.d.ts +4 -0
  109. package/src/foundation/index.js +11 -0
  110. package/src/foundation/local-database-contract.d.ts +20 -0
  111. package/src/foundation/local-database-contract.js +262 -13
  112. package/src/foundation/local-private-smoke-access.d.ts +20 -0
  113. package/src/foundation/local-private-smoke-access.js +197 -0
  114. package/src/foundation/logging-preflight.js +1 -1
  115. package/src/foundation/logging.d.ts +3 -1
  116. package/src/foundation/logging.js +1 -1
  117. package/src/foundation/partial-state.d.ts +10 -0
  118. package/src/foundation/partial-state.js +21 -0
  119. package/src/foundation/preflight.js +37 -18
  120. package/src/foundation/private-smoke-access.d.ts +25 -0
  121. package/src/foundation/private-smoke-access.js +135 -0
  122. package/src/foundation/private-smoke-admission.d.ts +45 -0
  123. package/src/foundation/private-smoke-admission.js +180 -0
  124. package/src/foundation/private-smoke-control-plane.d.ts +18 -0
  125. package/src/foundation/private-smoke-control-plane.js +184 -0
  126. package/src/foundation/provision-database-bindings.d.ts +5 -0
  127. package/src/foundation/provision-database-bindings.js +41 -8
  128. package/src/foundation/provision-logical-database.js +15 -8
  129. package/src/foundation/requirements.d.ts +3 -3
  130. package/src/foundation/requirements.js +24 -12
  131. package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
  132. package/src/foundation/router-waf-rate-rehearsal.js +210 -0
  133. package/src/foundation/router-waf.d.ts +149 -0
  134. package/src/foundation/router-waf.js +809 -0
  135. package/src/foundation/stages.d.ts +1 -0
  136. package/src/foundation/stages.js +11 -0
  137. package/src/generators/blueprint/blueprint.d.ts +5 -0
  138. package/src/generators/blueprint/blueprint.js +102 -0
  139. package/src/generators/blueprint/files.d.ts +6 -0
  140. package/src/generators/blueprint/files.js +217 -0
  141. package/src/generators/blueprint/schema.d.ts +4 -0
  142. package/src/generators/blueprint/schema.json +18 -0
  143. package/src/generators/formatting.d.ts +8 -0
  144. package/src/generators/formatting.js +141 -0
  145. package/src/generators/function/function.js +38 -17
  146. package/src/generators/logging-registry.d.ts +2 -0
  147. package/src/generators/logging-registry.js +22 -0
  148. package/src/generators/post-generation-install.js +2 -2
  149. package/src/generators/preset/dependency-overrides.d.ts +8 -0
  150. package/src/generators/preset/dependency-overrides.js +55 -0
  151. package/src/generators/preset/generator.js +43 -3
  152. package/src/generators/preset/schema.d.ts +10 -0
  153. package/src/generators/preset/schema.json +47 -0
  154. package/src/generators/preset/tool-versions.d.ts +2 -0
  155. package/src/generators/preset/tool-versions.js +3 -1
  156. package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
  157. package/src/generators/preset/workspace-files-adopter-skills.js +303 -0
  158. package/src/generators/preset/workspace-files-ci-acceptance.d.ts +1 -0
  159. package/src/generators/preset/workspace-files-ci-acceptance.js +791 -0
  160. package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
  161. package/src/generators/preset/workspace-files-ci-install.js +196 -0
  162. package/src/generators/preset/workspace-files-developer-agent.d.ts +2 -0
  163. package/src/generators/preset/workspace-files-developer-agent.js +90 -28
  164. package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
  165. package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
  166. package/src/generators/preset/workspace-files-foundation-workload-roles.js +5 -2
  167. package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
  168. package/src/generators/preset/workspace-files-performance-cost.js +8 -8
  169. package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
  170. package/src/generators/preset/workspace-files-performance-load.js +39 -25
  171. package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
  172. package/src/generators/preset/workspace-files-stage-authority.js +518 -0
  173. package/src/generators/preset/workspace-files-thin-deploy.d.ts +55 -0
  174. package/src/generators/preset/workspace-files-thin-deploy.js +2473 -0
  175. package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
  176. package/src/generators/preset/workspace-files-thin-docs.js +352 -0
  177. package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
  178. package/src/generators/preset/workspace-files-thin-release.js +26 -0
  179. package/src/generators/preset/workspace-files-workload-role-baseline.js +254 -42
  180. package/src/generators/preset/workspace-files.d.ts +18 -2
  181. package/src/generators/preset/workspace-files.js +1504 -608
  182. package/src/generators/repository-policy/repository-policy.js +235 -5
  183. package/src/generators/repository-policy/schema.d.ts +10 -0
  184. package/src/generators/repository-policy/schema.json +80 -4
  185. package/src/generators/repository-policy/tree-policy.d.ts +3 -0
  186. package/src/generators/repository-policy/tree-policy.js +25 -0
  187. package/src/generators/slice/built-in-plan-api-contract-files.js +42 -7
  188. package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
  189. package/src/generators/slice/built-in-plan-api-files.js +130 -414
  190. package/src/generators/slice/built-in-plan-async-work-files.js +166 -1969
  191. package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
  192. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +60 -2
  193. package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
  194. package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
  195. package/src/generators/slice/built-in-plan-background-work-files.d.ts +2 -0
  196. package/src/generators/slice/built-in-plan-background-work-files.js +99 -0
  197. package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
  198. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
  199. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  200. package/src/generators/slice/built-in-plan-data-files.js +163 -1196
  201. package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
  202. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +37 -2
  203. package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2443
  204. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +50 -8
  205. package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
  206. package/src/generators/slice/built-in-plan-database-lifecycle-files.js +44 -25
  207. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +20 -1
  208. package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
  209. package/src/generators/slice/built-in-plan-foundation-files.js +39 -18
  210. package/src/generators/slice/built-in-plan-frontend-files.js +7 -3
  211. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  212. package/src/generators/slice/built-in-plan-infrastructure-files.js +933 -729
  213. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +67 -11
  214. package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
  215. package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
  216. package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
  217. package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
  218. package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
  219. package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
  220. package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
  221. package/src/generators/slice/built-in-plan-key-value-delivery.js +137 -0
  222. package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
  223. package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
  224. package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
  225. package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
  226. package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
  227. package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
  228. package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
  229. package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
  230. package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
  231. package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
  232. package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
  233. package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
  234. package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
  235. package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
  236. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
  237. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
  238. package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
  239. package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
  240. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
  241. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
  242. package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
  243. package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
  244. package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
  245. package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
  246. package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
  247. package/src/generators/slice/built-in-plan-metadata-files.js +157 -28
  248. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
  249. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +324 -0
  250. package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
  251. package/src/generators/slice/built-in-plan-operations-files.js +585 -97
  252. package/src/generators/slice/built-in-plan-performance-files.d.ts +2 -1
  253. package/src/generators/slice/built-in-plan-performance-files.js +220 -1074
  254. package/src/generators/slice/built-in-plan-project-files.js +141 -135
  255. package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
  256. package/src/generators/slice/built-in-plan-release-files.js +310 -70
  257. package/src/generators/slice/built-in-plan-reliability-files.d.ts +1 -1
  258. package/src/generators/slice/built-in-plan-reliability-files.js +279 -43
  259. package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
  260. package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
  261. package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
  262. package/src/generators/slice/built-in-plan-shared.js +41 -19
  263. package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
  264. package/src/generators/slice/built-in-plan-sql-events.js +276 -0
  265. package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
  266. package/src/generators/slice/built-in-plan-testing-files.js +304 -172
  267. package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
  268. package/src/generators/slice/built-in-plan-testing-persistence-files.js +178 -0
  269. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
  270. package/src/generators/slice/built-in-plan-thin-release-files.js +162 -0
  271. package/src/generators/slice/built-in-plan-verification-files.js +76 -2
  272. package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
  273. package/src/generators/slice/built-in-plan-web-files.js +223 -16
  274. package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
  275. package/src/generators/slice/built-in-plan-workload-role-files.js +143 -279
  276. package/src/generators/slice/built-in-plan.d.ts +11 -1
  277. package/src/generators/slice/built-in-plan.js +80 -29
  278. package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
  279. package/src/generators/slice/data-policy-review-seed.js +22 -0
  280. package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
  281. package/src/generators/slice/deployed-smoke-readiness.js +214 -0
  282. package/src/generators/slice/local-source-identity.d.ts +2 -0
  283. package/src/generators/slice/local-source-identity.js +31 -0
  284. package/src/generators/slice/persistence-contract.d.ts +14 -0
  285. package/src/generators/slice/persistence-contract.js +32 -0
  286. package/src/generators/slice/slice.js +61 -50
  287. package/src/generators/sql/schema.d.ts +7 -0
  288. package/src/generators/sql/schema.json +38 -0
  289. package/src/generators/sql/sql.d.ts +6 -0
  290. package/src/generators/sql/sql.js +53 -0
  291. package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
  292. package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
  293. package/src/generators/upgrade/upgrade.d.ts +15 -1
  294. package/src/generators/upgrade/upgrade.js +435 -44
  295. package/src/generators/workload/performance-registration.d.ts +1 -0
  296. package/src/generators/workload/performance-registration.js +9 -11
  297. package/src/generators/workload/service-performance-files.d.ts +1 -0
  298. package/src/generators/workload/service-performance-files.js +27 -7
  299. package/src/generators/workload/workload.d.ts +1 -1
  300. package/src/generators/workload/workload.js +105 -29
  301. package/src/git-policy/action-pins.d.ts +5 -0
  302. package/src/git-policy/action-pins.js +5 -0
  303. package/src/git-policy/github-bootstrap.d.ts +39 -8
  304. package/src/git-policy/github-bootstrap.js +329 -175
  305. package/src/git-policy/routing.d.ts +7 -1
  306. package/src/git-policy/routing.js +62 -1
  307. package/src/index.d.ts +1 -0
  308. package/src/index.js +1 -0
  309. package/src/infrastructure-change/local-capability.d.ts +73 -0
  310. package/src/infrastructure-change/local-capability.js +114 -0
  311. package/src/infrastructure-change/model.d.ts +25 -4
  312. package/src/infrastructure-change/model.js +1 -0
  313. package/src/infrastructure-change/normalize.d.ts +4 -0
  314. package/src/infrastructure-change/normalize.js +47 -7
  315. package/src/infrastructure-change/plan.d.ts +30 -3
  316. package/src/infrastructure-change/plan.js +323 -13
  317. package/src/infrastructure-change/risk.d.ts +3 -1
  318. package/src/infrastructure-change/risk.js +96 -16
  319. package/src/local-dev/browser-verification.d.ts +37 -0
  320. package/src/local-dev/browser-verification.js +281 -0
  321. package/src/local-dev/contracts.d.ts +10 -1
  322. package/src/local-dev/contracts.js +114 -13
  323. package/src/local-dev/dev-command-core.js +24 -5
  324. package/src/local-dev/docker-credential-health.d.ts +14 -0
  325. package/src/local-dev/docker-credential-health.js +94 -0
  326. package/src/local-dev/environment-inspector.d.ts +7 -0
  327. package/src/local-dev/environment-inspector.js +42 -15
  328. package/src/local-dev/environment-state.js +2 -2
  329. package/src/local-dev/errors.d.ts +1 -1
  330. package/src/local-dev/errors.js +2 -0
  331. package/src/local-dev/fleet-client.js +2 -2
  332. package/src/local-dev/fleet-configuration.js +57 -25
  333. package/src/local-dev/fleet-inventory.js +46 -18
  334. package/src/local-dev/fleet-ipc.d.ts +7 -0
  335. package/src/local-dev/fleet-ipc.js +14 -2
  336. package/src/local-dev/fleet-launcher.d.ts +6 -0
  337. package/src/local-dev/fleet-launcher.js +14 -2
  338. package/src/local-dev/fleet-logs.js +50 -22
  339. package/src/local-dev/fleet-process.d.ts +20 -1
  340. package/src/local-dev/fleet-process.js +197 -41
  341. package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
  342. package/src/local-dev/fleet-runner-evidence.js +56 -0
  343. package/src/local-dev/fleet-runtime.js +268 -229
  344. package/src/local-dev/fleet-session.d.ts +2 -0
  345. package/src/local-dev/fleet-session.js +28 -11
  346. package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
  347. package/src/local-dev/fleet-state.d.ts +5 -2
  348. package/src/local-dev/fleet-state.js +25 -4
  349. package/src/local-dev/fleet-supervisor.d.ts +3 -0
  350. package/src/local-dev/fleet-supervisor.js +66 -11
  351. package/src/local-dev/fleet-web-start.d.ts +12 -0
  352. package/src/local-dev/fleet-web-start.js +48 -0
  353. package/src/local-dev/identity.js +3 -14
  354. package/src/local-dev/index.d.ts +1 -0
  355. package/src/local-dev/index.js +1 -0
  356. package/src/local-dev/native-completion.d.ts +9 -0
  357. package/src/local-dev/native-completion.js +130 -0
  358. package/src/local-dev/nx-workspace.d.ts +4 -2
  359. package/src/local-dev/nx-workspace.js +11 -6
  360. package/src/local-dev/personal-stage.d.ts +4 -5
  361. package/src/local-dev/personal-stage.js +6 -54
  362. package/src/local-dev/port-claims.d.ts +13 -0
  363. package/src/local-dev/port-claims.js +46 -0
  364. package/src/local-dev/ports.d.ts +14 -2
  365. package/src/local-dev/ports.js +78 -3
  366. package/src/local-dev/private-state.d.ts +11 -0
  367. package/src/local-dev/private-state.js +146 -40
  368. package/src/local-dev/process-group.d.ts +4 -0
  369. package/src/local-dev/process-group.js +29 -0
  370. package/src/local-dev/process-identity.d.ts +8 -0
  371. package/src/local-dev/process-identity.js +31 -1
  372. package/src/local-dev/proxy.js +11 -12
  373. package/src/local-dev/runtime-paths.js +1 -1
  374. package/src/local-dev/slice-claim.js +1 -1
  375. package/src/local-dev/slice-runner.d.ts +15 -6
  376. package/src/local-dev/slice-runner.js +189 -54
  377. package/src/local-dev/task-attachment.d.ts +17 -0
  378. package/src/local-dev/task-attachment.js +73 -0
  379. package/src/local-dev/task-authority.d.ts +10 -0
  380. package/src/local-dev/task-authority.js +27 -0
  381. package/src/local-dev/task-identity.d.ts +33 -0
  382. package/src/local-dev/task-identity.js +418 -0
  383. package/src/local-dev/task-native-writer.d.ts +18 -0
  384. package/src/local-dev/task-native-writer.js +329 -0
  385. package/src/local-dev/tls.js +8 -2
  386. package/src/local-dev/web-launch.d.ts +9 -0
  387. package/src/local-dev/web-launch.js +130 -0
  388. package/src/ownership/composition.d.ts +2 -1
  389. package/src/ownership/composition.js +1 -0
  390. package/src/performance/cost-collection.d.ts +1 -1
  391. package/src/performance/cost-collection.js +4 -2
  392. package/src/performance/cost-controls.d.ts +8 -4
  393. package/src/performance/cost-controls.js +39 -28
  394. package/src/performance/evidence.d.ts +1 -1
  395. package/src/performance/evidence.js +5 -3
  396. package/src/performance/load-safety.js +5 -3
  397. package/src/performance/model.d.ts +4 -4
  398. package/src/performance/model.js +4 -5
  399. package/src/performance/scenario.d.ts +22 -0
  400. package/src/performance/scenario.js +100 -92
  401. package/src/release/index.d.ts +0 -2
  402. package/src/release/index.js +0 -2
  403. package/src/release/source-authority.d.ts +5 -5
  404. package/src/release/source-authority.js +141 -124
  405. package/src/repository-policy/aurora-preflight.d.ts +1 -1
  406. package/src/repository-policy/aurora-preflight.js +4 -1
  407. package/src/repository-policy/capacity-migration.d.ts +3 -0
  408. package/src/repository-policy/capacity-migration.js +21 -0
  409. package/src/repository-policy/deployment-plan.d.ts +4 -1
  410. package/src/repository-policy/deployment-plan.js +9 -0
  411. package/src/repository-policy/foundation-profile.js +10 -1
  412. package/src/repository-policy/policy.d.ts +57 -3
  413. package/src/repository-policy/policy.js +497 -11
  414. package/src/schemas/blueprint-v1.json +5 -4
  415. package/src/schemas/foundation-requirement-v1.json +5 -4
  416. package/src/schemas/performance-policy-v1.json +3 -3
  417. package/src/schemas/repository-policy-v1.json +130 -6
  418. package/src/schemas/testing-evidence-result-v1.json +1 -1
  419. package/src/secrets/adapters.d.ts +7 -2
  420. package/src/secrets/adapters.js +34 -3
  421. package/src/secrets/aws-control-plane.d.ts +10 -1
  422. package/src/secrets/aws-control-plane.js +67 -0
  423. package/src/secrets/generated-aws-control-plane.d.ts +23 -0
  424. package/src/secrets/generated-aws-control-plane.js +259 -0
  425. package/src/secrets/metadata.js +38 -10
  426. package/src/secrets/model.d.ts +8 -1
  427. package/src/secrets/model.js +24 -3
  428. package/src/secrets/operator.d.ts +91 -3
  429. package/src/secrets/operator.js +463 -13
  430. package/src/secrets/registry.d.ts +2 -1
  431. package/src/secrets/registry.js +18 -1
  432. package/src/secrets/verification.js +9 -1
  433. package/src/secrets/workload-access.js +10 -2
  434. package/src/sst-environment-source-format.d.ts +6 -0
  435. package/src/sst-environment-source-format.js +199 -0
  436. package/src/supply-chain/action-pins.js +61 -7
  437. package/src/supply-chain/blueprint-trust-git.js +85 -24
  438. package/src/supply-chain/blueprint-verification-authority.js +55 -3
  439. package/src/supply-chain/build-output-bounds.d.ts +2 -0
  440. package/src/supply-chain/build-output-bounds.js +12 -0
  441. package/src/supply-chain/build-output.d.ts +7 -1
  442. package/src/supply-chain/build-output.js +177 -24
  443. package/src/supply-chain/ecr-scanning.d.ts +5 -3
  444. package/src/supply-chain/ecr-scanning.js +11 -7
  445. package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
  446. package/src/supply-chain/ecs-deployed-image.js +6 -4
  447. package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
  448. package/src/supply-chain/generated-command.js +1 -0
  449. package/src/supply-chain/generated-container-release-command.js +1285 -124
  450. package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
  451. package/src/supply-chain/generated-ecr-collector-command.js +200 -93
  452. package/src/supply-chain/generated-files.js +25 -14
  453. package/src/supply-chain/generated-scanner-command.js +2 -1
  454. package/src/supply-chain/index.d.ts +1 -1
  455. package/src/supply-chain/index.js +2 -1
  456. package/src/supply-chain/sbom.d.ts +1 -1
  457. package/src/supply-chain/sbom.js +30 -5
  458. package/src/supply-chain/scanner.js +3 -0
  459. package/src/testing-evidence/fixture-scope.d.ts +2 -1
  460. package/src/testing-evidence/fixture-scope.js +4 -2
  461. package/src/testing-evidence/result.d.ts +2 -1
  462. package/src/testing-evidence/result.js +18 -4
  463. package/src/workload-roles/account-baseline.d.ts +11 -0
  464. package/src/workload-roles/account-baseline.js +253 -16
  465. package/src/workload-roles/authority.d.ts +3 -1
  466. package/src/workload-roles/authority.js +48 -2
  467. package/src/workload-roles/aws-s3-state.js +27 -0
  468. package/src/workload-roles/boundary.d.ts +2 -1
  469. package/src/workload-roles/boundary.js +9 -2
  470. package/src/workload-roles/handler.js +52 -24
  471. package/src/workload-roles/index.d.ts +10 -17
  472. package/src/workload-roles/index.js +5 -18
  473. package/src/workload-roles/injection.js +1 -1
  474. package/src/workload-roles/provisioner.js +12 -4
  475. package/src/workload-roles/registration.d.ts +1 -0
  476. package/src/workload-roles/registration.js +5 -0
  477. package/src/workload-roles/stage-boundary.js +1 -1
  478. package/src/workload-roles/standard-slice.js +3 -3
  479. package/src/workspace-deployment/affected-lifecycle.d.ts +53 -0
  480. package/src/workspace-deployment/affected-lifecycle.js +84 -0
  481. package/src/workspace-deployment/identity.d.ts +3 -0
  482. package/src/workspace-deployment/identity.js +22 -0
  483. package/src/workspace-deployment/index.d.ts +4 -0
  484. package/src/workspace-deployment/index.js +8 -0
  485. package/src/workspace-deployment/migration-evidence.d.ts +29 -0
  486. package/src/workspace-deployment/migration-evidence.js +83 -0
  487. package/src/workspace-deployment/migration.d.ts +27 -0
  488. package/src/workspace-deployment/migration.js +109 -0
  489. package/src/workspace-deployment/ownership.d.ts +81 -0
  490. package/src/workspace-deployment/ownership.js +381 -0
  491. package/src/api-contract/baseline-update.js.map +0 -1
  492. package/src/api-contract/compatibility.js.map +0 -1
  493. package/src/api-contract/contract-graph.js.map +0 -1
  494. package/src/api-contract/evidence.js.map +0 -1
  495. package/src/api-contract/index.js.map +0 -1
  496. package/src/api-contract/model.fixtures.d.ts +0 -2
  497. package/src/api-contract/model.fixtures.js +0 -81
  498. package/src/api-contract/model.fixtures.js.map +0 -1
  499. package/src/api-contract/model.js.map +0 -1
  500. package/src/api-contract/rollout.js.map +0 -1
  501. package/src/authorization/compatibility.js.map +0 -1
  502. package/src/authorization/index.js.map +0 -1
  503. package/src/blueprints/execution.js.map +0 -1
  504. package/src/blueprints/external-sandbox.js.map +0 -1
  505. package/src/blueprints/index.js.map +0 -1
  506. package/src/blueprints/inputs.js.map +0 -1
  507. package/src/blueprints/manifest.js.map +0 -1
  508. package/src/blueprints/resolver.js.map +0 -1
  509. package/src/blueprints/transitions.js.map +0 -1
  510. package/src/cli/agent-command.js.map +0 -1
  511. package/src/cli/agent-runtime.js.map +0 -1
  512. package/src/cli/blueprint-authority.js.map +0 -1
  513. package/src/cli/blueprint-command.js.map +0 -1
  514. package/src/cli/bootstrap.js.map +0 -1
  515. package/src/cli/dev-command.js.map +0 -1
  516. package/src/cli/main.js.map +0 -1
  517. package/src/cli/output.js.map +0 -1
  518. package/src/cli/personal-secret-runtime.js.map +0 -1
  519. package/src/cli/secret-terminal.js.map +0 -1
  520. package/src/container-images.js.map +0 -1
  521. package/src/data-lifecycle/index.js.map +0 -1
  522. package/src/data-lifecycle/model.fixtures.d.ts +0 -2
  523. package/src/data-lifecycle/model.fixtures.js +0 -244
  524. package/src/data-lifecycle/model.fixtures.js.map +0 -1
  525. package/src/data-lifecycle/model.js.map +0 -1
  526. package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
  527. package/src/data-lifecycle/validation.js.map +0 -1
  528. package/src/database-retirement/contract.js.map +0 -1
  529. package/src/database-retirement/index.js.map +0 -1
  530. package/src/deterministic-order.js.map +0 -1
  531. package/src/developer-agent/context.js.map +0 -1
  532. package/src/developer-agent/generator-planning.js.map +0 -1
  533. package/src/developer-agent/generator-preview.js.map +0 -1
  534. package/src/developer-agent/git-inspection.js.map +0 -1
  535. package/src/developer-agent/handoff.js.map +0 -1
  536. package/src/developer-agent/index.js.map +0 -1
  537. package/src/developer-agent/model.js.map +0 -1
  538. package/src/developer-agent/operation-registry.js.map +0 -1
  539. package/src/developer-agent/ordering.js.map +0 -1
  540. package/src/developer-agent/planning.js.map +0 -1
  541. package/src/developer-agent/preview-changes.js.map +0 -1
  542. package/src/developer-agent/preview-source.js.map +0 -1
  543. package/src/developer-agent/validation.js.map +0 -1
  544. package/src/developer-agent/workspace-inspection.js.map +0 -1
  545. package/src/developer-agent/workspace-path.js.map +0 -1
  546. package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
  547. package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
  548. package/src/executors/deploy/deploy.js.map +0 -1
  549. package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
  550. package/src/executors/dev/dev.js.map +0 -1
  551. package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
  552. package/src/executors/dev-setup/dev-setup.js.map +0 -1
  553. package/src/executors/developer-context/developer-context.js.map +0 -1
  554. package/src/executors/fleet/fleet.js.map +0 -1
  555. package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
  556. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
  557. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
  558. package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
  559. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
  560. package/src/executors/refresh/refresh.js.map +0 -1
  561. package/src/executors/remove/remove.js.map +0 -1
  562. package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
  563. package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
  564. package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
  565. package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
  566. package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
  567. package/src/executors/unlock/unlock.js.map +0 -1
  568. package/src/executors/work-markers/work-markers.js.map +0 -1
  569. package/src/foundation/discovery.js.map +0 -1
  570. package/src/foundation/index.js.map +0 -1
  571. package/src/foundation/local-database-contract.js.map +0 -1
  572. package/src/foundation/logging-preflight.js.map +0 -1
  573. package/src/foundation/logging.js.map +0 -1
  574. package/src/foundation/preflight.js.map +0 -1
  575. package/src/foundation/provision-database-bindings.js.map +0 -1
  576. package/src/foundation/provision-logical-database.js.map +0 -1
  577. package/src/foundation/requirements.js.map +0 -1
  578. package/src/foundation/router-origin-proof.js.map +0 -1
  579. package/src/foundation/stages.js.map +0 -1
  580. package/src/frontend-security/index.js.map +0 -1
  581. package/src/frontend-security/security-headers.js.map +0 -1
  582. package/src/generators/feature-registry.js.map +0 -1
  583. package/src/generators/function/function.js.map +0 -1
  584. package/src/generators/job/job.js.map +0 -1
  585. package/src/generators/logging-registry.js.map +0 -1
  586. package/src/generators/post-generation-install.js.map +0 -1
  587. package/src/generators/preset/generator.js.map +0 -1
  588. package/src/generators/preset/tool-versions.js.map +0 -1
  589. package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
  590. package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
  591. package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
  592. package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
  593. package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
  594. package/src/generators/preset/workspace-files.js.map +0 -1
  595. package/src/generators/repository-policy/repository-policy.js.map +0 -1
  596. package/src/generators/service/service.js.map +0 -1
  597. package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
  598. package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
  599. package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
  600. package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
  601. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
  602. package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
  603. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
  604. package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
  605. package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
  606. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
  607. package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
  608. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
  609. package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
  610. package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
  611. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
  612. package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
  613. package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
  614. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
  615. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
  616. package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
  617. package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
  618. package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
  619. package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
  620. package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
  621. package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
  622. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
  623. package/src/generators/slice/built-in-plan-shared.js.map +0 -1
  624. package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
  625. package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
  626. package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
  627. package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
  628. package/src/generators/slice/built-in-plan.js.map +0 -1
  629. package/src/generators/slice/slice.js.map +0 -1
  630. package/src/generators/upgrade/upgrade.js.map +0 -1
  631. package/src/generators/workload/frozen-container.js.map +0 -1
  632. package/src/generators/workload/performance-registration.js.map +0 -1
  633. package/src/generators/workload/reliability-registration.js.map +0 -1
  634. package/src/generators/workload/service-performance-files.js.map +0 -1
  635. package/src/generators/workload/workload.js.map +0 -1
  636. package/src/git-policy/action-pins.js.map +0 -1
  637. package/src/git-policy/github-bootstrap.js.map +0 -1
  638. package/src/git-policy/index.js.map +0 -1
  639. package/src/git-policy/routing.js.map +0 -1
  640. package/src/index.js.map +0 -1
  641. package/src/infrastructure-change/convergence.js.map +0 -1
  642. package/src/infrastructure-change/drift.js.map +0 -1
  643. package/src/infrastructure-change/index.js.map +0 -1
  644. package/src/infrastructure-change/model.js.map +0 -1
  645. package/src/infrastructure-change/normalize.js.map +0 -1
  646. package/src/infrastructure-change/plan.js.map +0 -1
  647. package/src/infrastructure-change/risk.js.map +0 -1
  648. package/src/infrastructure-change/summary.js.map +0 -1
  649. package/src/local-dev/context-discovery.js.map +0 -1
  650. package/src/local-dev/contract-validation.js.map +0 -1
  651. package/src/local-dev/contracts.js.map +0 -1
  652. package/src/local-dev/control-contract.js.map +0 -1
  653. package/src/local-dev/dev-command-core.js.map +0 -1
  654. package/src/local-dev/effects.js.map +0 -1
  655. package/src/local-dev/environment-inspector.js.map +0 -1
  656. package/src/local-dev/environment-state.js.map +0 -1
  657. package/src/local-dev/errors.js.map +0 -1
  658. package/src/local-dev/fleet-client.js.map +0 -1
  659. package/src/local-dev/fleet-configuration.js.map +0 -1
  660. package/src/local-dev/fleet-inventory.js.map +0 -1
  661. package/src/local-dev/fleet-ipc.js.map +0 -1
  662. package/src/local-dev/fleet-launcher.js.map +0 -1
  663. package/src/local-dev/fleet-lock.js.map +0 -1
  664. package/src/local-dev/fleet-logs.js.map +0 -1
  665. package/src/local-dev/fleet-process.js.map +0 -1
  666. package/src/local-dev/fleet-runtime.js.map +0 -1
  667. package/src/local-dev/fleet-session.js.map +0 -1
  668. package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
  669. package/src/local-dev/fleet-startup.js.map +0 -1
  670. package/src/local-dev/fleet-state.js.map +0 -1
  671. package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
  672. package/src/local-dev/fleet-supervisor.js.map +0 -1
  673. package/src/local-dev/gateway-daemon.js.map +0 -1
  674. package/src/local-dev/gateway.js.map +0 -1
  675. package/src/local-dev/identity.js.map +0 -1
  676. package/src/local-dev/index.js.map +0 -1
  677. package/src/local-dev/local-context.js.map +0 -1
  678. package/src/local-dev/nx-workspace.js.map +0 -1
  679. package/src/local-dev/personal-secret-ledger.js.map +0 -1
  680. package/src/local-dev/personal-stage.js.map +0 -1
  681. package/src/local-dev/portless.js.map +0 -1
  682. package/src/local-dev/ports.js.map +0 -1
  683. package/src/local-dev/private-state.js.map +0 -1
  684. package/src/local-dev/process-identity.js.map +0 -1
  685. package/src/local-dev/proxy.js.map +0 -1
  686. package/src/local-dev/runtime-paths.js.map +0 -1
  687. package/src/local-dev/secret-slice-claim.js.map +0 -1
  688. package/src/local-dev/slice-claim.js.map +0 -1
  689. package/src/local-dev/slice-runner.js.map +0 -1
  690. package/src/local-dev/tls.js.map +0 -1
  691. package/src/ownership/composition.js.map +0 -1
  692. package/src/ownership/foundation-record.js.map +0 -1
  693. package/src/ownership/hash.js.map +0 -1
  694. package/src/ownership/index.js.map +0 -1
  695. package/src/ownership/json-ownership.js.map +0 -1
  696. package/src/ownership/record.js.map +0 -1
  697. package/src/ownership/workspace-record.js.map +0 -1
  698. package/src/performance/cost-collection.js.map +0 -1
  699. package/src/performance/cost-controls.js.map +0 -1
  700. package/src/performance/evidence.js.map +0 -1
  701. package/src/performance/index.js.map +0 -1
  702. package/src/performance/load-safety.js.map +0 -1
  703. package/src/performance/model.js.map +0 -1
  704. package/src/performance/pr-artifact-budget.js.map +0 -1
  705. package/src/performance/runner.js.map +0 -1
  706. package/src/performance/scenario-endpoint.js.map +0 -1
  707. package/src/performance/scenario.js.map +0 -1
  708. package/src/performance/test-fixtures.d.ts +0 -7
  709. package/src/performance/test-fixtures.js +0 -169
  710. package/src/performance/test-fixtures.js.map +0 -1
  711. package/src/performance/unit-cost.js.map +0 -1
  712. package/src/release/index.js.map +0 -1
  713. package/src/release/lifecycle.js.map +0 -1
  714. package/src/release/manifest.js.map +0 -1
  715. package/src/release/rollout.js.map +0 -1
  716. package/src/release/source-authority.js.map +0 -1
  717. package/src/repository-policy/aurora-preflight.js.map +0 -1
  718. package/src/repository-policy/deployment-plan.js.map +0 -1
  719. package/src/repository-policy/foundation-profile.js.map +0 -1
  720. package/src/repository-policy/index.js.map +0 -1
  721. package/src/repository-policy/policy.js.map +0 -1
  722. package/src/secrets/adapters.js.map +0 -1
  723. package/src/secrets/aws-control-plane.js.map +0 -1
  724. package/src/secrets/declaration-verification.js.map +0 -1
  725. package/src/secrets/guardrails.js.map +0 -1
  726. package/src/secrets/index.js.map +0 -1
  727. package/src/secrets/metadata.js.map +0 -1
  728. package/src/secrets/model.js.map +0 -1
  729. package/src/secrets/operator.js.map +0 -1
  730. package/src/secrets/permissions.js.map +0 -1
  731. package/src/secrets/personal-command.js.map +0 -1
  732. package/src/secrets/personal-ledger.js.map +0 -1
  733. package/src/secrets/registry.js.map +0 -1
  734. package/src/secrets/verification.js.map +0 -1
  735. package/src/secrets/workload-access.js.map +0 -1
  736. package/src/supply-chain/action-pins.js.map +0 -1
  737. package/src/supply-chain/blueprint-trust-git.js.map +0 -1
  738. package/src/supply-chain/blueprint-trust-process.js.map +0 -1
  739. package/src/supply-chain/blueprint-trust.js.map +0 -1
  740. package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
  741. package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
  742. package/src/supply-chain/build-output.js.map +0 -1
  743. package/src/supply-chain/common.js.map +0 -1
  744. package/src/supply-chain/container-artifact-contract.js.map +0 -1
  745. package/src/supply-chain/container-release.js.map +0 -1
  746. package/src/supply-chain/ecr-applicability.js.map +0 -1
  747. package/src/supply-chain/ecr-scanning.js.map +0 -1
  748. package/src/supply-chain/ecs-deployed-image.js.map +0 -1
  749. package/src/supply-chain/errors.js.map +0 -1
  750. package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
  751. package/src/supply-chain/generated-command.js.map +0 -1
  752. package/src/supply-chain/generated-container-release-command.js.map +0 -1
  753. package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
  754. package/src/supply-chain/generated-files.js.map +0 -1
  755. package/src/supply-chain/generated-scanner-command.js.map +0 -1
  756. package/src/supply-chain/index.js.map +0 -1
  757. package/src/supply-chain/inventory.js.map +0 -1
  758. package/src/supply-chain/license-expression.js.map +0 -1
  759. package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
  760. package/src/supply-chain/policy.js.map +0 -1
  761. package/src/supply-chain/publication.js.map +0 -1
  762. package/src/supply-chain/sbom.js.map +0 -1
  763. package/src/supply-chain/scanner.js.map +0 -1
  764. package/src/supply-chain/vendored-source.js.map +0 -1
  765. package/src/testing-evidence/fixture-scope.js.map +0 -1
  766. package/src/testing-evidence/index.js.map +0 -1
  767. package/src/testing-evidence/quarantine.js.map +0 -1
  768. package/src/testing-evidence/result.js.map +0 -1
  769. package/src/testing-evidence/runner-adapter.js.map +0 -1
  770. package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
  771. package/src/validation.js.map +0 -1
  772. package/src/work-markers/index.js.map +0 -1
  773. package/src/work-markers/work-markers.js.map +0 -1
  774. package/src/workload-roles/account-baseline.js.map +0 -1
  775. package/src/workload-roles/authority.js.map +0 -1
  776. package/src/workload-roles/aws-adapter.js.map +0 -1
  777. package/src/workload-roles/aws-internal-handler.js.map +0 -1
  778. package/src/workload-roles/aws-s3-state.js.map +0 -1
  779. package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
  780. package/src/workload-roles/boundary.js.map +0 -1
  781. package/src/workload-roles/convergence.js.map +0 -1
  782. package/src/workload-roles/effective-policy.js.map +0 -1
  783. package/src/workload-roles/handler.js.map +0 -1
  784. package/src/workload-roles/history.js.map +0 -1
  785. package/src/workload-roles/index.js.map +0 -1
  786. package/src/workload-roles/injection.js.map +0 -1
  787. package/src/workload-roles/manifest.js.map +0 -1
  788. package/src/workload-roles/provisioner.js.map +0 -1
  789. package/src/workload-roles/registration.js.map +0 -1
  790. package/src/workload-roles/stage-boundary.js.map +0 -1
  791. package/src/workload-roles/standard-slice.js.map +0 -1
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertGovernedAwsLifecyclePlatform = assertGovernedAwsLifecyclePlatform;
4
+ exports.runGovernedChildProcess = runGovernedChildProcess;
3
5
  exports.createSstChildEnvironment = createSstChildEnvironment;
4
6
  exports.assertSafeSstForwardedArguments = assertSafeSstForwardedArguments;
5
7
  exports.resolveSstDevMode = resolveSstDevMode;
@@ -10,14 +12,28 @@ exports.runSstLifecyclePreflights = runSstLifecyclePreflights;
10
12
  exports.runSstCommand = runSstCommand;
11
13
  const devkit_1 = require("@nx/devkit");
12
14
  const node_child_process_1 = require("node:child_process");
15
+ const node_fs_1 = require("node:fs");
13
16
  const node_path_1 = require("node:path");
17
+ const index_js_1 = require("../../aws-authority/index.js");
18
+ const child_environment_js_1 = require("../../aws/child-environment.js");
19
+ const identity_js_1 = require("../../aws/identity.js");
14
20
  const stages_js_1 = require("../../foundation/stages.js");
15
21
  const personal_stage_js_1 = require("../../local-dev/personal-stage.js");
16
- const index_js_1 = require("../../repository-policy/index.js");
17
- const index_js_2 = require("../../work-markers/index.js");
18
- const logging_preflight_js_1 = require("./logging-preflight.js");
22
+ const task_identity_js_1 = require("../../local-dev/task-identity.js");
23
+ const federated_credential_transport_js_1 = require("../local-deploy/federated-credential-transport.js");
24
+ const index_js_2 = require("../../repository-policy/index.js");
25
+ const index_js_3 = require("../../workspace-deployment/index.js");
26
+ const index_js_4 = require("../../work-markers/index.js");
19
27
  const secret_preflight_js_1 = require("./secret-preflight.js");
20
- const PROTECTED_STAGES = new Set(['staging', 'production']);
28
+ const task_native_writer_js_1 = require("../../local-dev/task-native-writer.js");
29
+ const local_deploy_js_1 = require("../local-deploy/local-deploy.js");
30
+ const task_stack_absence_js_1 = require("../dev-task-cleanup/task-stack-absence.js");
31
+ const process_group_js_1 = require("../../local-dev/process-group.js");
32
+ const secret_initialize_js_1 = require("../secret-initialize/secret-initialize.js");
33
+ const generated_secret_retirement_js_1 = require("./generated-secret-retirement.js");
34
+ const sst_environment_source_js_1 = require("./sst-environment-source.js");
35
+ const GOVERNED_STAGES = new Set(['development', 'staging', 'production']);
36
+ const DEPLOYMENT_STAGES = new Set(['development', 'staging', 'production']);
21
37
  const RESERVED_FORWARDED_OPTIONS = new Set([
22
38
  '--config',
23
39
  '--profile',
@@ -27,17 +43,349 @@ const RESERVED_FORWARDED_OPTIONS = new Set([
27
43
  ]);
28
44
  const SST_DEV_MODES = new Set(['basic', 'mono']);
29
45
  const AWS_REGION_PATTERN = /^[a-z]{2}(?:-gov)?-[a-z]+-\d$/;
30
- function requiresInfrastructureBinding(command, stage) {
31
- return (PROTECTED_STAGES.has(stage) &&
46
+ const AWS_ROLE_ARN_PATTERN = /^arn:(aws|aws-us-gov|aws-cn):iam::\d{12}:role\/[A-Za-z0-9+=,.@_/-]{1,512}$/;
47
+ const MAX_CALLER_IDENTITY_BYTES = 1024 * 1024;
48
+ const SST_SIGNAL_GRACE_PERIOD_MS = process_group_js_1.OWNED_PROCESS_SIGNAL_GRACE_MS;
49
+ const SST_SIGNAL_KILL_WAIT_MS = process_group_js_1.OWNED_PROCESS_KILL_WAIT_MS;
50
+ const SST_PROCESS_GROUP_POLL_MS = 25;
51
+ const GOVERNED_PROCESS_GROUP_ENV = 'EBK_GOVERNED_PROCESS_GROUP';
52
+ function assertGovernedAwsLifecyclePlatform(platform = process.platform) {
53
+ if (platform === 'win32') {
54
+ throw new Error('Governed AWS infrastructure lifecycle is unavailable on native Windows; use macOS, Linux, or WSL2. Native-Windows task Fleet is not validated in this prerelease either.');
55
+ }
56
+ }
57
+ function isMissingProcessError(error) {
58
+ return (typeof error === 'object' &&
59
+ error !== null &&
60
+ 'code' in error &&
61
+ error.code === 'ESRCH');
62
+ }
63
+ function exactWindowsSystemRoot() {
64
+ const values = new Set(Object.entries(process.env)
65
+ .filter(([name, value]) => name.toLowerCase() === 'systemroot' &&
66
+ typeof value === 'string' &&
67
+ value.length > 0)
68
+ .map(([, value]) => value));
69
+ if (values.size !== 1) {
70
+ throw new Error('Workspace SST tree cleanup requires exact SystemRoot.');
71
+ }
72
+ const systemRoot = values.values().next().value;
73
+ if (typeof systemRoot !== 'string' ||
74
+ !(0, node_path_1.isAbsolute)(systemRoot) ||
75
+ /[\0\r\n"]/u.test(systemRoot)) {
76
+ throw new Error('Workspace SST tree cleanup has an unsafe SystemRoot.');
77
+ }
78
+ return systemRoot;
79
+ }
80
+ function exactWindowsTaskkill() {
81
+ const systemRoot = exactWindowsSystemRoot();
82
+ const requested = (0, node_path_1.join)(systemRoot, 'System32', 'taskkill.exe');
83
+ const metadata = (0, node_fs_1.lstatSync)(requested);
84
+ const canonical = (0, node_fs_1.realpathSync)(requested);
85
+ if (metadata.isSymbolicLink() ||
86
+ !metadata.isFile() ||
87
+ canonical.toLowerCase() !== requested.toLowerCase()) {
88
+ throw new Error('Workspace SST taskkill authority is not exact.');
89
+ }
90
+ return { executable: canonical, systemRoot };
91
+ }
92
+ function signalExactGovernedProcessTree(child, signal) {
93
+ const pid = child.pid;
94
+ if (typeof pid !== 'number' || !Number.isSafeInteger(pid) || pid <= 0) {
95
+ throw new Error('Workspace SST child has no exact process identity.');
96
+ }
97
+ if (process.platform === 'win32') {
98
+ const taskkill = exactWindowsTaskkill();
99
+ const terminated = (0, node_child_process_1.spawnSync)(taskkill.executable, ['/pid', String(pid), '/t', '/f'], {
100
+ env: { SystemRoot: taskkill.systemRoot },
101
+ shell: false,
102
+ stdio: 'ignore',
103
+ timeout: 15_000,
104
+ windowsHide: true,
105
+ });
106
+ if ((terminated.error || terminated.signal || terminated.status !== 0) &&
107
+ child.exitCode === null &&
108
+ child.signalCode === null) {
109
+ throw new Error('Workspace SST process-tree termination failed.');
110
+ }
111
+ return;
112
+ }
113
+ try {
114
+ process.kill(-pid, signal);
115
+ }
116
+ catch (error) {
117
+ if (!isMissingProcessError(error))
118
+ throw error;
119
+ if (child.exitCode === null && child.signalCode === null) {
120
+ child.kill(signal);
121
+ }
122
+ }
123
+ }
124
+ function exactGovernedProcessTreeExists(pid) {
125
+ if (process.platform === 'win32')
126
+ return false;
127
+ return (0, process_group_js_1.exactOwnedProcessGroupExists)(pid);
128
+ }
129
+ async function waitForExactGovernedProcessTreeExit(pid, deadline = Date.now() + SST_SIGNAL_GRACE_PERIOD_MS + SST_SIGNAL_KILL_WAIT_MS) {
130
+ while (exactGovernedProcessTreeExists(pid)) {
131
+ if (Date.now() >= deadline) {
132
+ throw new Error('Workspace SST process tree did not stop within the bounded deadline.');
133
+ }
134
+ await new Promise((resolveWait) => setTimeout(resolveWait, SST_PROCESS_GROUP_POLL_MS));
135
+ }
136
+ }
137
+ async function waitForGovernedChildSettlement(childSettled, deadline) {
138
+ const remaining = deadline - Date.now();
139
+ if (remaining <= 0) {
140
+ throw new Error('Workspace SST child did not stop within the bounded deadline.');
141
+ }
142
+ let timeout;
143
+ try {
144
+ await Promise.race([
145
+ childSettled,
146
+ new Promise((_resolve, reject) => {
147
+ timeout = setTimeout(() => reject(new Error('Workspace SST child did not stop within the bounded deadline.')), remaining);
148
+ }),
149
+ ]);
150
+ }
151
+ finally {
152
+ if (timeout)
153
+ clearTimeout(timeout);
154
+ }
155
+ }
156
+ async function terminateRetainedGovernedProcessGroup(pid) {
157
+ if (process.platform === 'win32' || !exactGovernedProcessTreeExists(pid)) {
158
+ return false;
159
+ }
160
+ const deadline = Date.now() + SST_SIGNAL_GRACE_PERIOD_MS + SST_SIGNAL_KILL_WAIT_MS;
161
+ try {
162
+ process.kill(-pid, 'SIGTERM');
163
+ }
164
+ catch (error) {
165
+ if (!isMissingProcessError(error))
166
+ throw error;
167
+ return false;
168
+ }
169
+ const escalation = setTimeout(() => {
170
+ try {
171
+ process.kill(-pid, 'SIGKILL');
172
+ }
173
+ catch (error) {
174
+ if (!isMissingProcessError(error)) {
175
+ process.stderr.write('Governed descendant process-tree escalation failed.\n');
176
+ }
177
+ }
178
+ }, SST_SIGNAL_GRACE_PERIOD_MS);
179
+ try {
180
+ await waitForExactGovernedProcessTreeExit(pid, deadline);
181
+ }
182
+ finally {
183
+ clearTimeout(escalation);
184
+ }
185
+ return true;
186
+ }
187
+ async function stopExactGovernedProcessTree(child, signal, childSettled, isSettled, ownsProcessGroup = true) {
188
+ const pid = child.pid;
189
+ const deadline = Date.now() + SST_SIGNAL_GRACE_PERIOD_MS + SST_SIGNAL_KILL_WAIT_MS;
190
+ if (process.platform === 'win32' || ownsProcessGroup) {
191
+ signalExactGovernedProcessTree(child, signal);
192
+ }
193
+ else {
194
+ child.kill(signal);
195
+ }
196
+ let escalationError;
197
+ const escalation = setTimeout(() => {
198
+ try {
199
+ if (!isSettled() ||
200
+ (ownsProcessGroup && pid && exactGovernedProcessTreeExists(pid))) {
201
+ if (process.platform === 'win32' || ownsProcessGroup) {
202
+ signalExactGovernedProcessTree(child, 'SIGKILL');
203
+ }
204
+ else {
205
+ child.kill('SIGKILL');
206
+ }
207
+ }
208
+ }
209
+ catch (error) {
210
+ escalationError = error;
211
+ }
212
+ }, SST_SIGNAL_GRACE_PERIOD_MS);
213
+ try {
214
+ await waitForGovernedChildSettlement(childSettled, deadline);
215
+ if (ownsProcessGroup && pid && process.platform !== 'win32') {
216
+ await waitForExactGovernedProcessTreeExit(pid, deadline);
217
+ }
218
+ if (escalationError)
219
+ throw escalationError;
220
+ }
221
+ finally {
222
+ clearTimeout(escalation);
223
+ }
224
+ }
225
+ /** Run one exact shell-free child as an owned process tree. The returned
226
+ * promise settles only after child teardown and the bounded caller-supplied
227
+ * close reconciliation complete. */
228
+ function runGovernedChildProcess(input) {
229
+ return new Promise((resolveChildRun) => {
230
+ const environment = { ...input.environment };
231
+ for (const name of Object.keys(environment)) {
232
+ if (name.toUpperCase() === GOVERNED_PROCESS_GROUP_ENV) {
233
+ delete environment[name];
234
+ }
235
+ }
236
+ if (process.platform !== 'win32') {
237
+ environment[GOVERNED_PROCESS_GROUP_ENV] = '1';
238
+ }
239
+ const child = (input.spawnChild ?? node_child_process_1.spawn)(input.executable, [...input.args], {
240
+ cwd: input.cwd,
241
+ detached: process.platform !== 'win32',
242
+ env: environment,
243
+ shell: false,
244
+ stdio: 'inherit',
245
+ });
246
+ let finishing = false;
247
+ let settled = false;
248
+ let cancellationSignal;
249
+ let spawnError;
250
+ let unregisterSignalCleanup = () => undefined;
251
+ let resolveChildSettled = () => undefined;
252
+ const childSettled = new Promise((resolveChild) => {
253
+ resolveChildSettled = resolveChild;
254
+ });
255
+ const finish = async (status, signal) => {
256
+ if (finishing)
257
+ return;
258
+ finishing = true;
259
+ const result = {
260
+ ...(spawnError ? { error: spawnError } : {}),
261
+ signal,
262
+ status,
263
+ };
264
+ if (!(0, federated_credential_transport_js_1.governedSignalCleanupInProgress)() && child.pid) {
265
+ try {
266
+ if (await terminateRetainedGovernedProcessGroup(child.pid)) {
267
+ result.error ??= new Error('Governed child exited before its exact descendant process tree stopped.');
268
+ }
269
+ }
270
+ catch (error) {
271
+ result.error =
272
+ error instanceof Error
273
+ ? error
274
+ : new Error('Governed child descendant process-tree reconciliation failed.');
275
+ }
276
+ }
277
+ try {
278
+ // A child may acknowledge cancellation with exit zero. Preserve the
279
+ // observed parent signal before callers reconcile a successful close.
280
+ result.signal ??= cancellationSignal ?? null;
281
+ await input.afterClose?.(result);
282
+ }
283
+ catch (error) {
284
+ result.error =
285
+ error instanceof Error
286
+ ? error
287
+ : new Error('Governed child close reconciliation failed.');
288
+ }
289
+ result.signal ??= cancellationSignal ?? null;
290
+ settled = true;
291
+ unregisterSignalCleanup();
292
+ resolveChildSettled();
293
+ resolveChildRun(result);
294
+ };
295
+ unregisterSignalCleanup = (0, federated_credential_transport_js_1.registerGovernedSignalCleanup)((signal) => {
296
+ if (settled)
297
+ return;
298
+ cancellationSignal ??= signal;
299
+ return stopExactGovernedProcessTree(child, signal, childSettled, () => settled);
300
+ }, 100);
301
+ child.once('error', (error) => {
302
+ spawnError = error;
303
+ void finish(null, null);
304
+ });
305
+ child.once('close', (status, signal) => {
306
+ void finish(status, signal);
307
+ });
308
+ });
309
+ }
310
+ function partitionForRegion(region) {
311
+ if (region.startsWith('cn-'))
312
+ return 'aws-cn';
313
+ if (region.startsWith('us-gov-'))
314
+ return 'aws-us-gov';
315
+ return 'aws';
316
+ }
317
+ function captureSstEnvironmentSource(context) {
318
+ const projectName = context.projectName;
319
+ const configured = projectName
320
+ ? context.projectsConfigurations?.projects[projectName]?.root
321
+ : undefined;
322
+ if (!projectName || !configured) {
323
+ throw new Error('SST lifecycle tool-owned source requires one exact Nx project root.');
324
+ }
325
+ return (0, sst_environment_source_js_1.captureSstEnvironmentSourceTree)({
326
+ projectRoot: (0, node_path_1.isAbsolute)(configured)
327
+ ? configured
328
+ : (0, node_path_1.join)(context.root, configured),
329
+ workspaceRoot: context.root,
330
+ });
331
+ }
332
+ function requiresSourceReconciliation(command, stage) {
333
+ return ((GOVERNED_STAGES.has(stage) ||
334
+ (command === 'remove' && /^personal-[a-f0-9]{24}$/.test(stage))) &&
32
335
  (command === 'deploy' || command === 'refresh' || command === 'remove'));
33
336
  }
34
- async function authorizeInfrastructureMutation(command, options, context, invocation) {
35
- const { revalidateInfrastructureMutationAuthorization } = await Promise.resolve().then(() => require('../infrastructure-plan/infrastructure-plan.js'));
36
- await revalidateInfrastructureMutationAuthorization(command, options, context, invocation);
337
+ function isGovernedLocalCommand(command) {
338
+ return (command === 'deploy' ||
339
+ command === 'refresh' ||
340
+ command === 'remove' ||
341
+ command === 'unlock');
37
342
  }
38
- async function retainInfrastructureConvergence(command, options, context, invocation, applySucceeded) {
39
- const { recordInfrastructureMutationConvergence } = await Promise.resolve().then(() => require('../infrastructure-plan/infrastructure-plan.js'));
40
- return recordInfrastructureMutationConvergence(command, options, context, invocation, applySucceeded);
343
+ async function authorizeLocalUnlock(options, invocation, environment = process.env) {
344
+ const expectedAccount = invocation.environment.AWS_EXPECTED_ACCOUNT_ID?.trim() ?? '';
345
+ const expectedRoleArn = invocation.environment.EBK_EXPECTED_DEPLOYMENT_ROLE_ARN?.trim() ?? '';
346
+ if (!/^\d{12}$/.test(expectedAccount) || !expectedRoleArn) {
347
+ throw new Error('Local unlock requires one exact committed account and temporary assumed role.');
348
+ }
349
+ const ambientExpectedAccount = environment.AWS_EXPECTED_ACCOUNT_ID?.trim();
350
+ if (ambientExpectedAccount && ambientExpectedAccount !== expectedAccount) {
351
+ throw new Error('Ambient AWS_EXPECTED_ACCOUNT_ID does not match committed deployment topology.');
352
+ }
353
+ const result = (0, node_child_process_1.spawnSync)('aws', [
354
+ 'sts',
355
+ 'get-caller-identity',
356
+ '--endpoint-url',
357
+ (0, identity_js_1.canonicalStsEndpoint)(invocation.environment.AWS_REGION?.trim() ?? ''),
358
+ '--output',
359
+ 'json',
360
+ ...(options.profile ? ['--profile', options.profile] : []),
361
+ ], {
362
+ cwd: invocation.cwd,
363
+ encoding: 'utf8',
364
+ env: createSstChildEnvironment(environment, invocation.environment),
365
+ maxBuffer: MAX_CALLER_IDENTITY_BYTES,
366
+ shell: false,
367
+ windowsHide: true,
368
+ });
369
+ if (result.error || result.status !== 0 || result.signal) {
370
+ throw new Error('Local unlock AWS caller identity could not be verified.');
371
+ }
372
+ let caller;
373
+ try {
374
+ caller = JSON.parse(result.stdout);
375
+ }
376
+ catch {
377
+ throw new Error('Local unlock AWS caller identity is not valid JSON.');
378
+ }
379
+ if (!caller ||
380
+ typeof caller !== 'object' ||
381
+ Array.isArray(caller) ||
382
+ !('Account' in caller) ||
383
+ !('Arn' in caller) ||
384
+ caller.Account !== expectedAccount ||
385
+ typeof caller.Arn !== 'string' ||
386
+ !(0, identity_js_1.matchesExpectedAssumedRoleArn)(expectedAccount, caller.Arn, expectedRoleArn)) {
387
+ throw new Error('Local unlock AWS caller does not match the committed account and exact temporary assumed role.');
388
+ }
41
389
  }
42
390
  function projectKind(context) {
43
391
  if (!context.projectName) {
@@ -52,11 +400,31 @@ function projectKind(context) {
52
400
  return foundation ? 'foundation' : 'slice';
53
401
  }
54
402
  function createSstChildEnvironment(ambient, invocation) {
55
- const sanitized = (0, personal_stage_js_1.isFrameworkPersonalStage)(invocation.EBK_CONSUMER_STAGE)
403
+ const stageSanitized = (0, personal_stage_js_1.isFrameworkPersonalStage)(invocation.EBK_CONSUMER_STAGE)
56
404
  ? (0, personal_stage_js_1.createPersonalDevelopmentEnvironment)(invocation.EBK_CONSUMER_STAGE, ambient)
57
405
  : (0, personal_stage_js_1.stripAmbientStageAuthority)(ambient);
406
+ const sanitized = (0, child_environment_js_1.sanitizeGovernedAwsChildEnvironment)(stageSanitized, {
407
+ preserveVerifiedGithubCredentials: stageSanitized.GITHUB_ACTIONS === 'true',
408
+ });
58
409
  delete sanitized.EBK_PRODUCTION_FOUNDATION_PROFILE;
59
- return { ...sanitized, ...invocation };
410
+ delete sanitized.EBK_LOCAL_MUTATION_CAPABILITY_NONCE;
411
+ delete sanitized.EBK_LOCAL_MUTATION_CAPABILITY_PATH;
412
+ delete sanitized.EBK_GITHUB_JOB_WORKFLOW_REF;
413
+ delete sanitized.EBK_NX_STAGE_LIFECYCLE;
414
+ delete sanitized.EBK_NX_TASK_CLEANUP;
415
+ delete sanitized.EBK_NX_TASK_UNLOCK;
416
+ // Nx injects task identity, target, hash, terminal, cache, and invocation
417
+ // metadata into every executor process. Those values describe orchestration,
418
+ // not desired infrastructure. Never let them reach SST, where build tools
419
+ // can persist ambient environment values into deployment archives.
420
+ for (const name of Object.keys(sanitized)) {
421
+ if (name.startsWith('NX_') || name === 'LERNA_PACKAGE_NAME') {
422
+ delete sanitized[name];
423
+ }
424
+ }
425
+ const childEnvironment = { ...sanitized, ...invocation };
426
+ delete childEnvironment.EBK_NX_TASK_UNLOCK;
427
+ return childEnvironment;
60
428
  }
61
429
  function assertSafeSstForwardedArguments(args) {
62
430
  const reserved = args.find((argument) => {
@@ -80,21 +448,39 @@ function resolveSstDevMode(environment, forwardedArguments = []) {
80
448
  }
81
449
  return requested;
82
450
  }
83
- function assertSstLifecyclePolicy(command, stage, environment = process.env) {
84
- if (!PROTECTED_STAGES.has(stage))
451
+ function assertSstLifecyclePolicy(command, stage, environment = process.env, deploymentProfile = 'fully-isolated') {
452
+ if (!GOVERNED_STAGES.has(stage))
85
453
  return;
86
454
  if (command === 'dev') {
87
455
  throw new Error(`SST dev is not permitted for protected stage ${stage}.`);
88
456
  }
457
+ if (command === 'remove' &&
458
+ stage === 'production' &&
459
+ environment.EBK_ALLOW_PRODUCTION_REMOVE !== 'true') {
460
+ throw new Error('Production removal requires EBK_ALLOW_PRODUCTION_REMOVE=true in the governed production environment.');
461
+ }
462
+ if (!(0, index_js_2.requiresGithubDeployment)(deploymentProfile, stage) &&
463
+ environment.GITHUB_ACTIONS !== 'true') {
464
+ return;
465
+ }
89
466
  const repository = environment.GITHUB_REPOSITORY;
90
- const expectedBranch = stage === 'staging' ? 'develop' : 'main';
467
+ const expectedBranch = stage === 'production' ? 'main' : 'develop';
91
468
  const expectedRef = `refs/heads/${expectedBranch}`;
92
- const expectedWorkflowRef = repository
469
+ const expectedCalledWorkflowRef = repository
93
470
  ? `${repository}/.github/workflows/deploy.yml@${expectedRef}`
94
471
  : undefined;
95
472
  const eventName = environment.GITHUB_EVENT_NAME;
96
473
  const allowedEvent = eventName === 'workflow_dispatch' ||
97
- (eventName === 'push' && command === 'deploy');
474
+ (eventName === 'push' &&
475
+ command === 'deploy' &&
476
+ deploymentProfile !== 'starter');
477
+ const expectedCallerWorkflowRef = eventName === 'push'
478
+ ? repository
479
+ ? `${repository}/.github/workflows/ci.yml@${expectedRef}`
480
+ : undefined
481
+ : eventName === 'workflow_dispatch'
482
+ ? expectedCalledWorkflowRef
483
+ : undefined;
98
484
  // These GitHub-provided values are a fail-closed provenance consistency
99
485
  // check, not a credential boundary: a local process can spoof them. Actual
100
486
  // protected-stage authority comes from environment-scoped OIDC role access
@@ -104,14 +490,10 @@ function assertSstLifecyclePolicy(command, stage, environment = process.env) {
104
490
  environment.GITHUB_ACTIONS === 'true' &&
105
491
  allowedEvent &&
106
492
  environment.GITHUB_REF === expectedRef &&
107
- environment.GITHUB_WORKFLOW_REF === expectedWorkflowRef;
493
+ environment.GITHUB_WORKFLOW_REF === expectedCallerWorkflowRef &&
494
+ environment.EBK_GITHUB_JOB_WORKFLOW_REF === expectedCalledWorkflowRef;
108
495
  if (!workflowProvenanceMatches) {
109
- throw new Error(`SST ${command} for protected stage ${stage} must run from the ${expectedBranch}-branch deploy workflow; pushes may run only deploy and other lifecycle actions require workflow_dispatch.`);
110
- }
111
- if (command === 'remove' &&
112
- stage === 'production' &&
113
- environment.EBK_ALLOW_PRODUCTION_REMOVE !== 'true') {
114
- throw new Error('Production removal requires EBK_ALLOW_PRODUCTION_REMOVE=true in the protected production environment.');
496
+ throw new Error(`SST ${command} for protected stage ${stage} must run from the exact ${expectedBranch}-branch caller and reusable deploy workflows; isolated-profile pushes may run only deploy and other lifecycle actions require workflow_dispatch.`);
115
497
  }
116
498
  }
117
499
  function resolveSstLifecycleStages(options, environment = process.env) {
@@ -165,7 +547,7 @@ function buildSstCommandInvocation(command, options, context, environment = proc
165
547
  }
166
548
  return {
167
549
  consumerStage: (dependencies.personalStageResolver ??
168
- (0, personal_stage_js_1.createPersonalStageResolver)()).resolve().stage,
550
+ (0, personal_stage_js_1.createPersonalStageResolver)()).resolve(context.root).stage,
169
551
  foundationStage: 'development',
170
552
  mapped: true,
171
553
  };
@@ -180,15 +562,138 @@ function buildSstCommandInvocation(command, options, context, environment = proc
180
562
  stages.mapped) {
181
563
  throw new Error(`Full deploy is not permitted for mapped personal stage ${stages.consumerStage}. Use ebk dev against the ${stages.foundationStage} Foundation.`);
182
564
  }
183
- assertSstLifecyclePolicy(command, stages.consumerStage, environment);
184
- if (PROTECTED_STAGES.has(stages.consumerStage) &&
565
+ const taskCleanup = environment.EBK_NX_TASK_CLEANUP !== undefined;
566
+ const taskUnlock = environment.EBK_NX_TASK_UNLOCK !== undefined;
567
+ if (taskUnlock) {
568
+ if (taskCleanup ||
569
+ command !== 'unlock' ||
570
+ kind !== 'slice' ||
571
+ environment.GITHUB_ACTIONS === 'true' ||
572
+ options.args !== undefined ||
573
+ options.cwd !== undefined ||
574
+ options.target !== undefined ||
575
+ !stages.mapped ||
576
+ stages.foundationStage !== 'development') {
577
+ throw new Error('Task unlock is restricted to the current local Slice task.');
578
+ }
579
+ const task = (0, task_identity_js_1.resolveTaskIdentity)(context.root);
580
+ if (environment.EBK_NX_TASK_UNLOCK !== task.taskId ||
581
+ stages.consumerStage !== `personal-${task.taskId}`) {
582
+ throw new Error('Task unlock cannot select another task or stage.');
583
+ }
584
+ const source = (0, local_deploy_js_1.localWorkingTreeDigest)(context.root);
585
+ if (source.commit !== environment.EBK_SOURCE_COMMIT ||
586
+ source.digest !== environment.EBK_LOCAL_SOURCE_TREE) {
587
+ throw new Error('Task unlock requires the exact authorized source tree.');
588
+ }
589
+ (0, task_stack_absence_js_1.resolveStaticTaskApp)({
590
+ workspaceRoot: context.root,
591
+ projectRoot: cwd,
592
+ projectName: context.projectName ?? '',
593
+ });
594
+ }
595
+ else if (command === 'unlock' && stages.mapped) {
596
+ throw new Error('Personal task unlock requires the current-task governed adapter.');
597
+ }
598
+ if (taskCleanup) {
599
+ if (command !== 'remove' ||
600
+ kind !== 'slice' ||
601
+ environment.GITHUB_ACTIONS === 'true' ||
602
+ options.args !== undefined ||
603
+ options.cwd !== undefined ||
604
+ options.target !== undefined ||
605
+ !stages.mapped ||
606
+ stages.foundationStage !== 'development')
607
+ throw new Error('Task cleanup is restricted to the current local Slice task and native removal.');
608
+ const task = (0, task_identity_js_1.resolveTaskIdentity)(context.root);
609
+ if (environment.EBK_NX_TASK_CLEANUP !== task.taskId ||
610
+ stages.consumerStage !== `personal-${task.taskId}`) {
611
+ throw new Error('Task cleanup cannot select another task or stage.');
612
+ }
613
+ }
614
+ else if (command === 'remove' && stages.mapped) {
615
+ throw new Error('Personal task removal is owned by ebk dev down; canonical remove cannot select a task.');
616
+ }
617
+ const operatingPolicy = command === 'dev' ||
618
+ taskCleanup ||
619
+ taskUnlock ||
620
+ (DEPLOYMENT_STAGES.has(stages.consumerStage) &&
621
+ (command === 'deploy' ||
622
+ command === 'refresh' ||
623
+ command === 'remove' ||
624
+ command === 'unlock'))
625
+ ? (0, index_js_2.readRepositoryOperatingPolicy)(context.root)
626
+ : undefined;
627
+ assertSstLifecyclePolicy(command, stages.consumerStage, environment, operatingPolicy?.deploymentProfile);
628
+ const authorityStage = command === 'dev' || taskCleanup || taskUnlock
629
+ ? 'development'
630
+ : stages.consumerStage;
631
+ const deploymentAccount = operatingPolicy
632
+ ? (0, index_js_2.configuredDeploymentAccountForStage)(operatingPolicy.deploymentProfile, operatingPolicy.deploymentAccounts, authorityStage)
633
+ : undefined;
634
+ const deploymentRegion = operatingPolicy
635
+ ? (0, index_js_2.configuredDeploymentRegion)(operatingPolicy.deploymentRegion)
636
+ : undefined;
637
+ if ((taskCleanup || taskUnlock) && deploymentAccount && deploymentRegion) {
638
+ // This read cannot create or reassign the binding. The executor separately
639
+ // verifies the current caller and Foundation owner before constructing SST.
640
+ const owner = (0, index_js_2.readRepositoryOperatingPolicy)(context.root);
641
+ (0, task_identity_js_1.assertCurrentTaskEnvironment)(context.root, {
642
+ accountId: deploymentAccount,
643
+ region: deploymentRegion,
644
+ workspaceDeploymentId: owner.workspaceDeploymentId,
645
+ });
646
+ }
647
+ if (deploymentRegion &&
648
+ options.region?.trim() &&
649
+ options.region.trim() !== deploymentRegion) {
650
+ throw new Error(`SST lifecycle Region ${options.region.trim()} differs from committed deployment Region ${deploymentRegion}.`);
651
+ }
652
+ if (options.expectedRoleArn !== undefined &&
653
+ !AWS_ROLE_ARN_PATTERN.test(options.expectedRoleArn.trim())) {
654
+ throw new Error('SST lifecycle expectedRoleArn must be one exact IAM role ARN.');
655
+ }
656
+ const committedRoleArn = operatingPolicy &&
657
+ deploymentAccount &&
658
+ deploymentRegion &&
659
+ isGovernedLocalCommand(command)
660
+ ? (0, index_js_1.createStageAuthorityIdentity)({
661
+ accountId: deploymentAccount,
662
+ partition: partitionForRegion(deploymentRegion),
663
+ region: deploymentRegion,
664
+ stage: authorityStage,
665
+ }).deploymentRoleArn
666
+ : undefined;
667
+ if (committedRoleArn &&
668
+ options.expectedRoleArn?.trim() &&
669
+ options.expectedRoleArn.trim() !== committedRoleArn) {
670
+ throw new Error(`SST ${command} requires the exact committed ${authorityStage} stage authority role ${committedRoleArn}.`);
671
+ }
672
+ const profile = options.profile?.trim();
673
+ if (options.profile !== undefined &&
674
+ (!profile || profile !== options.profile || profile.length > 128)) {
675
+ throw new Error('SST lifecycle profile must be one non-empty exact AWS profile name up to 128 characters.');
676
+ }
677
+ if (operatingPolicy &&
678
+ environment.GITHUB_ACTIONS !== 'true' &&
679
+ command === 'deploy' &&
680
+ environment.EBK_NX_STAGE_LIFECYCLE !== 'local') {
681
+ throw new Error(`Local deploy for ${stages.consumerStage} must be invoked by the governed root stage lifecycle (EBK_NX_STAGE_LIFECYCLE=local).`);
682
+ }
683
+ if (operatingPolicy &&
684
+ environment.GITHUB_ACTIONS !== 'true' &&
685
+ isGovernedLocalCommand(command) &&
686
+ !options.expectedRoleArn?.trim()) {
687
+ throw new Error(`Local ${command} for ${stages.consumerStage} requires --expectedRoleArn for one temporary assumed-role session.`);
688
+ }
689
+ if (GOVERNED_STAGES.has(stages.consumerStage) &&
185
690
  (command === 'deploy' || command === 'refresh')) {
186
- (0, index_js_2.assertWorkMarkerReport)((0, index_js_2.scanWorkMarkers)(context.root), {
187
- protectedPromotion: true,
691
+ (0, index_js_4.assertWorkMarkerReport)((0, index_js_4.scanWorkMarkers)(context.root), {
692
+ protectedPromotion: stages.consumerStage !== 'development',
188
693
  });
189
694
  }
190
695
  const policyDecision = stages.consumerStage === 'production'
191
- ? (0, index_js_1.assertRepositoryPolicyRequest)(context.root, {
696
+ ? (0, index_js_2.assertRepositoryPolicyRequest)(context.root, {
192
697
  action: command,
193
698
  projects: [
194
699
  {
@@ -200,9 +705,8 @@ function buildSstCommandInvocation(command, options, context, environment = proc
200
705
  })
201
706
  : undefined;
202
707
  const args = [command, '--stage', stages.consumerStage];
203
- if (options.profile) {
204
- args.push('--profile', options.profile);
205
- }
708
+ if (command === 'refresh')
709
+ args.push('--yes');
206
710
  if (options.target) {
207
711
  args.push('--target', options.target);
208
712
  }
@@ -222,8 +726,29 @@ function buildSstCommandInvocation(command, options, context, environment = proc
222
726
  ],
223
727
  cwd,
224
728
  environment: {
225
- ...(options.region?.trim() ? { AWS_REGION: options.region.trim() } : {}),
729
+ ...(deploymentAccount
730
+ ? {
731
+ AWS_EXPECTED_ACCOUNT_ID: deploymentAccount,
732
+ }
733
+ : {}),
734
+ ...(profile ? { AWS_PROFILE: profile } : {}),
735
+ ...(deploymentRegion
736
+ ? { AWS_REGION: deploymentRegion }
737
+ : options.region?.trim()
738
+ ? { AWS_REGION: options.region.trim() }
739
+ : {}),
226
740
  EBK_CONSUMER_STAGE: stages.consumerStage,
741
+ ...(taskCleanup
742
+ ? { EBK_NX_TASK_CLEANUP: environment.EBK_NX_TASK_CLEANUP }
743
+ : {}),
744
+ ...(taskUnlock
745
+ ? { EBK_NX_TASK_UNLOCK: environment.EBK_NX_TASK_UNLOCK }
746
+ : {}),
747
+ ...((committedRoleArn ?? options.expectedRoleArn?.trim())
748
+ ? {
749
+ EBK_EXPECTED_DEPLOYMENT_ROLE_ARN: committedRoleArn ?? options.expectedRoleArn?.trim(),
750
+ }
751
+ : {}),
227
752
  EBK_FOUNDATION_STAGE: stages.foundationStage,
228
753
  ...(policyDecision?.effectiveProductionProfile
229
754
  ? {
@@ -234,77 +759,261 @@ function buildSstCommandInvocation(command, options, context, environment = proc
234
759
  executable: process.execPath,
235
760
  };
236
761
  }
237
- async function runSstLifecyclePreflights(command, options, context, invocation, dependencies = {}) {
238
- if (command === 'deploy' || command === 'dev') {
239
- await (dependencies.logging ?? logging_preflight_js_1.preflightManagedLogGroups)(command, options, context, invocation);
762
+ async function runSstLifecyclePreflights(command, options, context, invocation, dependencies = {}, environment = process.env) {
763
+ // Standard Slices contain a Python infrastructure provisioner even when
764
+ // their application handlers are TypeScript. Fail before SST can partially
765
+ // create resources; recovery operations must remain available without build
766
+ // tooling. This is a local prerequisite, not a provider-plan gate.
767
+ if ((command === 'dev' || command === 'deploy') &&
768
+ (0, node_fs_1.existsSync)((0, node_path_1.join)(invocation.cwd, 'pyproject.toml'))) {
769
+ const manifest = (0, node_fs_1.lstatSync)((0, node_path_1.join)(invocation.cwd, 'pyproject.toml'));
770
+ if (!manifest.isFile() || manifest.isSymbolicLink()) {
771
+ throw new Error('Python tooling manifest must be a regular project file.');
772
+ }
773
+ const childEnvironment = {};
774
+ for (const key of ['PATH', 'Path', 'PATHEXT', 'SystemRoot', 'SYSTEMROOT']) {
775
+ if (environment[key] !== undefined)
776
+ childEnvironment[key] = environment[key];
777
+ }
778
+ const result = (0, node_child_process_1.spawnSync)('uv', ['--version'], {
779
+ cwd: invocation.cwd,
780
+ env: childEnvironment,
781
+ encoding: 'utf8',
782
+ timeout: 5_000,
783
+ maxBuffer: 4_096,
784
+ windowsHide: true,
785
+ shell: false,
786
+ stdio: ['ignore', 'pipe', 'pipe'],
787
+ });
788
+ if (result.error ||
789
+ result.status !== 0 ||
790
+ !/^uv \d+\.\d+\.\d+\b/.test(result.stdout ?? '')) {
791
+ // Do not surface arbitrary tool stderr or inherited credential material.
792
+ throw new Error(`Python tooling for ${context.projectName ?? 'the selected project'} requires uv on PATH. Install the workspace-documented uv version and retry the same EBK command. No SST child started.`);
793
+ }
240
794
  }
795
+ const stage = command === 'dev' ||
796
+ (command === 'remove' && invocation.environment.EBK_NX_TASK_CLEANUP) ||
797
+ (command === 'unlock' && invocation.environment.EBK_NX_TASK_UNLOCK)
798
+ ? 'development'
799
+ : invocation.environment.EBK_CONSUMER_STAGE;
800
+ await (dependencies.ownership ?? index_js_3.assertWorkspaceStageOwnershipForWorkspace)(context.root, stage, {
801
+ ...(environment.AWS_CONFIG_FILE
802
+ ? { configFilepath: environment.AWS_CONFIG_FILE }
803
+ : {}),
804
+ ...(environment.AWS_SHARED_CREDENTIALS_FILE
805
+ ? { credentialsFilepath: environment.AWS_SHARED_CREDENTIALS_FILE }
806
+ : {}),
807
+ ...(invocation.environment.AWS_PROFILE
808
+ ? { profile: invocation.environment.AWS_PROFILE }
809
+ : {}),
810
+ });
241
811
  if (command === 'deploy') {
812
+ if (environment.GITHUB_ACTIONS === 'true') {
813
+ await (dependencies.initializeSecrets ?? secret_initialize_js_1.initializeProtectedDeploymentSecrets)(stage, context, environment);
814
+ }
242
815
  await (dependencies.secrets ?? secret_preflight_js_1.preflightSliceSecretMetadata)(options, context, invocation);
243
816
  }
244
- if (requiresInfrastructureBinding(command, invocation.environment.EBK_CONSUMER_STAGE)) {
245
- await (dependencies.infrastructureAuthorization ??
246
- authorizeInfrastructureMutation)(command, options, context, invocation);
817
+ if (command === 'unlock' &&
818
+ invocation.environment.EBK_EXPECTED_DEPLOYMENT_ROLE_ARN) {
819
+ await (dependencies.unlockAuthorization ?? authorizeLocalUnlock)(options, invocation, environment);
247
820
  }
248
821
  }
249
822
  async function runSstCommand(command, options, context, dependencies = {}) {
823
+ const environment = dependencies.environment ?? process.env;
824
+ if (command !== 'dev' &&
825
+ !(command === 'remove' && environment.EBK_NX_TASK_CLEANUP !== undefined) &&
826
+ !(command === 'unlock' && environment.EBK_NX_TASK_UNLOCK !== undefined)) {
827
+ assertGovernedAwsLifecyclePlatform(dependencies.platform);
828
+ }
829
+ const joinsGovernedProcessGroup = process.platform !== 'win32' &&
830
+ environment[GOVERNED_PROCESS_GROUP_ENV] === '1';
250
831
  let invocation;
832
+ let environmentSource;
833
+ let taskWriter;
251
834
  try {
252
- invocation = buildSstCommandInvocation(command, options, context);
253
- await runSstLifecyclePreflights(command, options, context, invocation, dependencies);
835
+ invocation = buildSstCommandInvocation(command, options, context, environment);
836
+ if (requiresSourceReconciliation(command, invocation.environment.EBK_CONSUMER_STAGE)) {
837
+ // Native SST can rewrite its generated environment declaration. Capture
838
+ // committed tool-owned source before the child so successful and failed
839
+ // lifecycle commands restore the repository exactly.
840
+ environmentSource = captureSstEnvironmentSource(context);
841
+ }
842
+ await runSstLifecyclePreflights(command, options, context, invocation, dependencies, environment);
843
+ if (environmentSource)
844
+ (0, sst_environment_source_js_1.reconcileSstEnvironmentSourceTree)(environmentSource);
845
+ if (command === 'dev' ||
846
+ invocation.environment.EBK_NX_TASK_CLEANUP ||
847
+ invocation.environment.EBK_NX_TASK_UNLOCK) {
848
+ // Rebuild after asynchronous authorization: source, task owner, and
849
+ // committed account/Region must still agree immediately before spawn.
850
+ const current = buildSstCommandInvocation(command, options, context, environment);
851
+ if (JSON.stringify(current) !== JSON.stringify(invocation))
852
+ throw new Error('Task native invocation changed during preflight.');
853
+ taskWriter = (dependencies.acquireTaskWriter ?? task_native_writer_js_1.acquireTaskNativeWriterLease)(context, invocation.environment.EBK_CONSUMER_STAGE.slice('personal-'.length), command === 'unlock', dependencies.taskNativeWriterEffects);
854
+ taskWriter.assertCurrent();
855
+ }
254
856
  }
255
857
  catch (error) {
858
+ let restorationError;
859
+ try {
860
+ // No native child has been spawned during this preflight phase.
861
+ taskWriter?.release();
862
+ }
863
+ catch (releaseError) {
864
+ devkit_1.logger.error(`Task native writer preflight evidence retained: ${releaseError instanceof Error ? releaseError.message : String(releaseError)}`);
865
+ }
866
+ if (environmentSource) {
867
+ try {
868
+ (0, sst_environment_source_js_1.reconcileSstEnvironmentSourceTree)(environmentSource);
869
+ }
870
+ catch (candidate) {
871
+ restorationError = candidate;
872
+ }
873
+ }
256
874
  devkit_1.logger.error(error instanceof Error ? error.message : String(error));
875
+ if (restorationError !== undefined) {
876
+ devkit_1.logger.error(`Failed to restore SST tool-owned source after preflight: ${restorationError instanceof Error
877
+ ? restorationError.message
878
+ : String(restorationError)}`);
879
+ }
257
880
  return { success: false };
258
881
  }
259
882
  devkit_1.logger.info(`Running workspace SST: ${command} --stage ${invocation.environment.EBK_CONSUMER_STAGE} foundationStage=${invocation.environment.EBK_FOUNDATION_STAGE} (${invocation.cwd})`);
260
883
  return new Promise((resolve) => {
261
- const child = (dependencies.spawnChild ?? node_child_process_1.spawn)(invocation.executable, invocation.args, {
262
- cwd: invocation.cwd,
263
- env: createSstChildEnvironment(process.env, invocation.environment),
264
- shell: false,
265
- stdio: 'inherit',
266
- });
884
+ let child;
885
+ try {
886
+ taskWriter?.assertCurrent();
887
+ child = (dependencies.spawnChild ?? node_child_process_1.spawn)(invocation.executable, invocation.args, {
888
+ cwd: invocation.cwd,
889
+ detached: process.platform !== 'win32' && !joinsGovernedProcessGroup,
890
+ env: createSstChildEnvironment(environment, invocation.environment),
891
+ shell: false,
892
+ stdio: 'inherit',
893
+ });
894
+ }
895
+ catch (error) {
896
+ try {
897
+ taskWriter?.release();
898
+ }
899
+ catch {
900
+ /* Keep ambiguous lease evidence. */
901
+ }
902
+ devkit_1.logger.error(error instanceof Error ? error.message : String(error));
903
+ resolve({ success: false });
904
+ return;
905
+ }
267
906
  let settled = false;
907
+ let cancellationSignal;
908
+ let writerRegistrationFailed = false;
909
+ let unregisterSignalCleanup = () => undefined;
910
+ let resolveChildSettled = () => undefined;
911
+ const childSettled = new Promise((resolveChild) => {
912
+ resolveChildSettled = resolveChild;
913
+ });
268
914
  const settle = (success) => {
269
915
  if (settled)
270
916
  return;
271
917
  settled = true;
272
- resolve({ success });
918
+ unregisterSignalCleanup();
919
+ resolveChildSettled();
920
+ try {
921
+ if (writerRegistrationFailed)
922
+ throw new Error('Native child registration failed.');
923
+ taskWriter?.release();
924
+ }
925
+ catch (error) {
926
+ success = false;
927
+ devkit_1.logger.error(`Task native writer evidence retained: ${error instanceof Error ? error.message : String(error)}`);
928
+ }
929
+ resolve({ success: success && !cancellationSignal });
273
930
  };
931
+ unregisterSignalCleanup = (0, federated_credential_transport_js_1.registerGovernedSignalCleanup)((signal) => {
932
+ if (settled)
933
+ return;
934
+ cancellationSignal ??= signal;
935
+ return stopExactGovernedProcessTree(child, signal, childSettled, () => settled, !joinsGovernedProcessGroup);
936
+ }, 100);
274
937
  child.on('error', (error) => {
275
938
  devkit_1.logger.error(`Failed to start workspace SST: ${error.message}`);
276
939
  settle(false);
277
940
  });
278
941
  child.on('close', async (code, signal) => {
279
- if (code !== 0) {
280
- devkit_1.logger.error(signal
281
- ? `SST ${command} terminated with signal ${signal}.`
282
- : `SST ${command} exited with status ${code ?? 'unknown'}.`);
942
+ if (settled)
943
+ return;
944
+ let retainedProcessTree = false;
945
+ if (!(0, federated_credential_transport_js_1.governedSignalCleanupInProgress)() &&
946
+ !joinsGovernedProcessGroup &&
947
+ child.pid) {
948
+ try {
949
+ retainedProcessTree = await terminateRetainedGovernedProcessGroup(child.pid);
950
+ }
951
+ catch (error) {
952
+ retainedProcessTree = true;
953
+ devkit_1.logger.error(`Failed to stop retained SST descendant process tree: ${error instanceof Error ? error.message : String(error)}`);
954
+ }
955
+ if (retainedProcessTree) {
956
+ // The leader's exit is not evidence that its native writers ended.
957
+ // Keep task lease receipts for explicit, owner-proven recovery.
958
+ if (taskWriter)
959
+ writerRegistrationFailed = true;
960
+ devkit_1.logger.error('SST exited before its exact descendant process tree stopped.');
961
+ }
962
+ }
963
+ if (code !== 0 || cancellationSignal) {
964
+ devkit_1.logger.error(cancellationSignal
965
+ ? `SST ${command} cancelled by ${cancellationSignal}.`
966
+ : signal
967
+ ? `SST ${command} terminated with signal ${signal}.`
968
+ : `SST ${command} exited with status ${code ?? 'unknown'}.`);
283
969
  if (command === 'deploy' || command === 'remove') {
284
970
  devkit_1.logger.error(`If the stack is locked, run pnpm nx run ${context.projectName ?? '<project>'}:unlock --stage=${options.stage}.`);
285
971
  }
286
972
  }
287
- const applySucceeded = code === 0;
288
- if (requiresInfrastructureBinding(command, invocation.environment.EBK_CONSUMER_STAGE)) {
973
+ let sourceRestored = true;
974
+ if (environmentSource) {
289
975
  try {
290
- const mutationEvidenceRetained = await (dependencies.infrastructureConvergence ??
291
- retainInfrastructureConvergence)(command, options, context, invocation, applySucceeded);
292
- if (!mutationEvidenceRetained) {
293
- devkit_1.logger.error(`SST ${command} did not retain valid infrastructure mutation evidence.`);
294
- }
295
- // A deploy retains apply-complete-unverified as a successful handoff
296
- // to deployed smoke. It is not terminal convergence; the protected
297
- // finalizer consumes the exact alarm, data, and journey evidence.
298
- settle(applySucceeded && mutationEvidenceRetained);
976
+ (0, sst_environment_source_js_1.reconcileSstEnvironmentSourceTree)(environmentSource);
299
977
  }
300
978
  catch (error) {
301
- devkit_1.logger.error(`Failed to retain infrastructure convergence: ${error instanceof Error ? error.message : String(error)}`);
302
- settle(false);
979
+ sourceRestored = false;
980
+ devkit_1.logger.error(`Failed to restore SST tool-owned source: ${error instanceof Error ? error.message : String(error)}`);
303
981
  }
304
- return;
305
982
  }
306
- settle(applySucceeded);
983
+ const applySucceeded = code === 0 &&
984
+ !cancellationSignal &&
985
+ sourceRestored &&
986
+ !retainedProcessTree;
987
+ let generatedSecretRetirementSucceeded = true;
988
+ if (applySucceeded &&
989
+ command === 'remove' &&
990
+ !invocation.environment.EBK_NX_TASK_CLEANUP &&
991
+ projectKind(context) === 'slice') {
992
+ try {
993
+ await (dependencies.generatedSecretRetirement ??
994
+ generated_secret_retirement_js_1.retireGeneratedSecretsAfterSliceRemove)(options, context, invocation, { environment });
995
+ }
996
+ catch (error) {
997
+ generatedSecretRetirementSucceeded = false;
998
+ devkit_1.logger.error(`Generated stage-secret retirement failed after native Slice removal: ${error instanceof Error ? error.message : String(error)}`);
999
+ }
1000
+ }
1001
+ settle(applySucceeded && generatedSecretRetirementSucceeded);
307
1002
  });
1003
+ if (taskWriter && child.pid) {
1004
+ try {
1005
+ taskWriter.recordChild(child.pid, !joinsGovernedProcessGroup);
1006
+ }
1007
+ catch (error) {
1008
+ writerRegistrationFailed = true;
1009
+ devkit_1.logger.error(`Task native child identity was not retained: ${error instanceof Error ? error.message : String(error)}`);
1010
+ // Never leave an unrecorded writer running after a failed registration.
1011
+ void stopExactGovernedProcessTree(child, 'SIGTERM', childSettled, () => settled, !joinsGovernedProcessGroup).catch((stopError) => {
1012
+ writerRegistrationFailed = true;
1013
+ devkit_1.logger.error(`Unregistered native child termination failed; writer evidence retained: ${stopError instanceof Error ? stopError.message : String(stopError)}`);
1014
+ });
1015
+ }
1016
+ }
308
1017
  });
309
1018
  }
310
1019
  //# sourceMappingURL=run-sst-command.js.map