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

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