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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (791) hide show
  1. package/README.md +18 -0
  2. package/executors.json +21 -1
  3. package/generators.json +10 -0
  4. package/package.json +31 -7
  5. package/src/aws/child-environment.d.ts +10 -0
  6. package/src/aws/child-environment.js +77 -0
  7. package/src/aws/identity.d.ts +13 -0
  8. package/src/aws/identity.js +41 -0
  9. package/src/aws-authority/index.d.ts +2 -0
  10. package/src/aws-authority/index.js +6 -0
  11. package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
  12. package/src/aws-authority/lambda-policy-ordering.js +56 -0
  13. package/src/aws-authority/stage-authority.d.ts +248 -0
  14. package/src/aws-authority/stage-authority.js +3558 -0
  15. package/src/blueprints/external-sandbox.js +21 -9
  16. package/src/blueprints/manifest.d.ts +1 -1
  17. package/src/blueprints/resolver.js +28 -15
  18. package/src/cli/bootstrap.d.ts +1 -1
  19. package/src/cli/deploy-runtime.d.ts +6 -0
  20. package/src/cli/deploy-runtime.js +58 -0
  21. package/src/cli/dev-command.d.ts +16 -4
  22. package/src/cli/dev-command.js +63 -0
  23. package/src/cli/main.d.ts +9 -1
  24. package/src/cli/main.js +139 -20
  25. package/src/cli/output.d.ts +1 -1
  26. package/src/cli/output.js +1 -1
  27. package/src/developer-agent/context.js +41 -9
  28. package/src/developer-agent/generator-planning.js +20 -6
  29. package/src/developer-agent/git-inspection.d.ts +6 -2
  30. package/src/developer-agent/git-inspection.js +78 -6
  31. package/src/developer-agent/model.d.ts +5 -3
  32. package/src/developer-agent/model.js +4 -4
  33. package/src/developer-agent/operation-registry.d.ts +5 -0
  34. package/src/developer-agent/operation-registry.js +286 -40
  35. package/src/developer-agent/planning.js +16 -13
  36. package/src/developer-agent/preview-changes.d.ts +2 -0
  37. package/src/developer-agent/preview-changes.js +14 -2
  38. package/src/developer-agent/preview-source.js +3 -0
  39. package/src/developer-agent/validation.js +25 -9
  40. package/src/developer-agent/workspace-inspection.js +60 -5
  41. package/src/executors/blueprint-trust/blueprint-trust.js +6 -0
  42. package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
  43. package/src/executors/deployment-plan/deployment-plan.js +57 -2
  44. package/src/executors/dev-doctor/dev-doctor.js +13 -6
  45. package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
  46. package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
  47. package/src/executors/dev-task-cleanup/schema.json +9 -0
  48. package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
  49. package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
  50. package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
  51. package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
  52. package/src/executors/fleet/fleet.js +1 -1
  53. package/src/executors/foundation-preflight/foundation-preflight.d.ts +1 -0
  54. package/src/executors/foundation-preflight/foundation-preflight.js +6 -2
  55. package/src/executors/foundation-preflight/schema.json +5 -0
  56. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +13 -2
  57. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -31
  58. package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +65 -0
  59. package/src/executors/foundation-profile-preflight/production-database-safeguard.js +223 -0
  60. package/src/executors/foundation-profile-preflight/schema.json +15 -4
  61. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
  62. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +70 -20
  63. package/src/executors/foundation-remove-preflight/schema.json +6 -1
  64. package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
  65. package/src/executors/github-bootstrap/github-bootstrap.js +3 -0
  66. package/src/executors/github-bootstrap/schema.json +7 -1
  67. package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +29 -136
  68. package/src/executors/infrastructure-plan/infrastructure-plan.js +230 -3282
  69. package/src/executors/infrastructure-plan/schema.json +12 -52
  70. package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
  71. package/src/executors/local-deploy/federated-credential-transport.js +252 -0
  72. package/src/executors/local-deploy/local-approval.d.ts +18 -0
  73. package/src/executors/local-deploy/local-approval.js +39 -0
  74. package/src/executors/local-deploy/local-deploy.d.ts +112 -0
  75. package/src/executors/local-deploy/local-deploy.js +1404 -0
  76. package/src/executors/local-deploy/schema.json +70 -0
  77. package/src/executors/refresh/refresh.js +2 -2
  78. package/src/executors/remove/remove.js +2 -2
  79. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +42 -0
  80. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +1229 -0
  81. package/src/executors/router-waf-rehearsal/schema.json +29 -0
  82. package/src/executors/secret-initialize/schema.json +42 -0
  83. package/src/executors/secret-initialize/secret-initialize.d.ts +34 -0
  84. package/src/executors/secret-initialize/secret-initialize.js +297 -0
  85. package/src/executors/secret-metadata/schema.json +5 -0
  86. package/src/executors/secret-metadata/secret-metadata.d.ts +16 -2
  87. package/src/executors/secret-metadata/secret-metadata.js +129 -30
  88. package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
  89. package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
  90. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +48 -0
  91. package/src/executors/sst-lifecycle/governed-native-operation.js +162 -0
  92. package/src/executors/sst-lifecycle/logging-preflight.d.ts +5 -0
  93. package/src/executors/sst-lifecycle/logging-preflight.js +23 -13
  94. package/src/executors/sst-lifecycle/run-sst-command.d.ts +40 -6
  95. package/src/executors/sst-lifecycle/run-sst-command.js +779 -70
  96. package/src/executors/sst-lifecycle/schema.json +8 -1
  97. package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
  98. package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
  99. package/src/executors/sst-lifecycle/sst-environment-source.d.ts +33 -0
  100. package/src/executors/sst-lifecycle/sst-environment-source.js +267 -0
  101. package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
  102. package/src/executors/sst-lifecycle/task-unlock.js +126 -0
  103. package/src/executors/unlock/unlock.js +2 -2
  104. package/src/foundation/capability-plan.d.ts +43 -0
  105. package/src/foundation/capability-plan.js +168 -0
  106. package/src/foundation/discovery.d.ts +14 -11
  107. package/src/foundation/discovery.js +32 -6
  108. package/src/foundation/index.d.ts +4 -0
  109. package/src/foundation/index.js +11 -0
  110. package/src/foundation/local-database-contract.d.ts +20 -0
  111. package/src/foundation/local-database-contract.js +262 -13
  112. package/src/foundation/local-private-smoke-access.d.ts +20 -0
  113. package/src/foundation/local-private-smoke-access.js +197 -0
  114. package/src/foundation/logging-preflight.js +1 -1
  115. package/src/foundation/logging.d.ts +3 -1
  116. package/src/foundation/logging.js +1 -1
  117. package/src/foundation/partial-state.d.ts +10 -0
  118. package/src/foundation/partial-state.js +21 -0
  119. package/src/foundation/preflight.js +37 -18
  120. package/src/foundation/private-smoke-access.d.ts +25 -0
  121. package/src/foundation/private-smoke-access.js +135 -0
  122. package/src/foundation/private-smoke-admission.d.ts +45 -0
  123. package/src/foundation/private-smoke-admission.js +180 -0
  124. package/src/foundation/private-smoke-control-plane.d.ts +18 -0
  125. package/src/foundation/private-smoke-control-plane.js +184 -0
  126. package/src/foundation/provision-database-bindings.d.ts +5 -0
  127. package/src/foundation/provision-database-bindings.js +41 -8
  128. package/src/foundation/provision-logical-database.js +15 -8
  129. package/src/foundation/requirements.d.ts +3 -3
  130. package/src/foundation/requirements.js +24 -12
  131. package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
  132. package/src/foundation/router-waf-rate-rehearsal.js +210 -0
  133. package/src/foundation/router-waf.d.ts +149 -0
  134. package/src/foundation/router-waf.js +809 -0
  135. package/src/foundation/stages.d.ts +1 -0
  136. package/src/foundation/stages.js +11 -0
  137. package/src/generators/blueprint/blueprint.d.ts +5 -0
  138. package/src/generators/blueprint/blueprint.js +102 -0
  139. package/src/generators/blueprint/files.d.ts +6 -0
  140. package/src/generators/blueprint/files.js +217 -0
  141. package/src/generators/blueprint/schema.d.ts +4 -0
  142. package/src/generators/blueprint/schema.json +18 -0
  143. package/src/generators/formatting.d.ts +8 -0
  144. package/src/generators/formatting.js +141 -0
  145. package/src/generators/function/function.js +38 -17
  146. package/src/generators/logging-registry.d.ts +2 -0
  147. package/src/generators/logging-registry.js +22 -0
  148. package/src/generators/post-generation-install.js +2 -2
  149. package/src/generators/preset/dependency-overrides.d.ts +8 -0
  150. package/src/generators/preset/dependency-overrides.js +55 -0
  151. package/src/generators/preset/generator.js +43 -3
  152. package/src/generators/preset/schema.d.ts +10 -0
  153. package/src/generators/preset/schema.json +47 -0
  154. package/src/generators/preset/tool-versions.d.ts +2 -0
  155. package/src/generators/preset/tool-versions.js +3 -1
  156. package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
  157. package/src/generators/preset/workspace-files-adopter-skills.js +303 -0
  158. package/src/generators/preset/workspace-files-ci-acceptance.d.ts +1 -0
  159. package/src/generators/preset/workspace-files-ci-acceptance.js +791 -0
  160. package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
  161. package/src/generators/preset/workspace-files-ci-install.js +196 -0
  162. package/src/generators/preset/workspace-files-developer-agent.d.ts +2 -0
  163. package/src/generators/preset/workspace-files-developer-agent.js +90 -28
  164. package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
  165. package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
  166. package/src/generators/preset/workspace-files-foundation-workload-roles.js +5 -2
  167. package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
  168. package/src/generators/preset/workspace-files-performance-cost.js +8 -8
  169. package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
  170. package/src/generators/preset/workspace-files-performance-load.js +39 -25
  171. package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
  172. package/src/generators/preset/workspace-files-stage-authority.js +518 -0
  173. package/src/generators/preset/workspace-files-thin-deploy.d.ts +55 -0
  174. package/src/generators/preset/workspace-files-thin-deploy.js +2473 -0
  175. package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
  176. package/src/generators/preset/workspace-files-thin-docs.js +352 -0
  177. package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
  178. package/src/generators/preset/workspace-files-thin-release.js +26 -0
  179. package/src/generators/preset/workspace-files-workload-role-baseline.js +254 -42
  180. package/src/generators/preset/workspace-files.d.ts +18 -2
  181. package/src/generators/preset/workspace-files.js +1504 -608
  182. package/src/generators/repository-policy/repository-policy.js +235 -5
  183. package/src/generators/repository-policy/schema.d.ts +10 -0
  184. package/src/generators/repository-policy/schema.json +80 -4
  185. package/src/generators/repository-policy/tree-policy.d.ts +3 -0
  186. package/src/generators/repository-policy/tree-policy.js +25 -0
  187. package/src/generators/slice/built-in-plan-api-contract-files.js +42 -7
  188. package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
  189. package/src/generators/slice/built-in-plan-api-files.js +130 -414
  190. package/src/generators/slice/built-in-plan-async-work-files.js +166 -1969
  191. package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
  192. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +60 -2
  193. package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
  194. package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
  195. package/src/generators/slice/built-in-plan-background-work-files.d.ts +2 -0
  196. package/src/generators/slice/built-in-plan-background-work-files.js +99 -0
  197. package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
  198. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
  199. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  200. package/src/generators/slice/built-in-plan-data-files.js +163 -1196
  201. package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
  202. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +37 -2
  203. package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2443
  204. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +50 -8
  205. package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
  206. package/src/generators/slice/built-in-plan-database-lifecycle-files.js +44 -25
  207. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +20 -1
  208. package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
  209. package/src/generators/slice/built-in-plan-foundation-files.js +39 -18
  210. package/src/generators/slice/built-in-plan-frontend-files.js +7 -3
  211. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  212. package/src/generators/slice/built-in-plan-infrastructure-files.js +933 -729
  213. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +67 -11
  214. package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
  215. package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
  216. package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
  217. package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
  218. package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
  219. package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
  220. package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
  221. package/src/generators/slice/built-in-plan-key-value-delivery.js +137 -0
  222. package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
  223. package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
  224. package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
  225. package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
  226. package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
  227. package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
  228. package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
  229. package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
  230. package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
  231. package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
  232. package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
  233. package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
  234. package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
  235. package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
  236. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
  237. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
  238. package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
  239. package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
  240. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
  241. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
  242. package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
  243. package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
  244. package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
  245. package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
  246. package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
  247. package/src/generators/slice/built-in-plan-metadata-files.js +157 -28
  248. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
  249. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +324 -0
  250. package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
  251. package/src/generators/slice/built-in-plan-operations-files.js +585 -97
  252. package/src/generators/slice/built-in-plan-performance-files.d.ts +2 -1
  253. package/src/generators/slice/built-in-plan-performance-files.js +220 -1074
  254. package/src/generators/slice/built-in-plan-project-files.js +141 -135
  255. package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
  256. package/src/generators/slice/built-in-plan-release-files.js +310 -70
  257. package/src/generators/slice/built-in-plan-reliability-files.d.ts +1 -1
  258. package/src/generators/slice/built-in-plan-reliability-files.js +279 -43
  259. package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
  260. package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
  261. package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
  262. package/src/generators/slice/built-in-plan-shared.js +41 -19
  263. package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
  264. package/src/generators/slice/built-in-plan-sql-events.js +276 -0
  265. package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
  266. package/src/generators/slice/built-in-plan-testing-files.js +304 -172
  267. package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
  268. package/src/generators/slice/built-in-plan-testing-persistence-files.js +178 -0
  269. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
  270. package/src/generators/slice/built-in-plan-thin-release-files.js +162 -0
  271. package/src/generators/slice/built-in-plan-verification-files.js +76 -2
  272. package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
  273. package/src/generators/slice/built-in-plan-web-files.js +223 -16
  274. package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
  275. package/src/generators/slice/built-in-plan-workload-role-files.js +143 -279
  276. package/src/generators/slice/built-in-plan.d.ts +11 -1
  277. package/src/generators/slice/built-in-plan.js +80 -29
  278. package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
  279. package/src/generators/slice/data-policy-review-seed.js +22 -0
  280. package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
  281. package/src/generators/slice/deployed-smoke-readiness.js +214 -0
  282. package/src/generators/slice/local-source-identity.d.ts +2 -0
  283. package/src/generators/slice/local-source-identity.js +31 -0
  284. package/src/generators/slice/persistence-contract.d.ts +14 -0
  285. package/src/generators/slice/persistence-contract.js +32 -0
  286. package/src/generators/slice/slice.js +61 -50
  287. package/src/generators/sql/schema.d.ts +7 -0
  288. package/src/generators/sql/schema.json +38 -0
  289. package/src/generators/sql/sql.d.ts +6 -0
  290. package/src/generators/sql/sql.js +53 -0
  291. package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
  292. package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
  293. package/src/generators/upgrade/upgrade.d.ts +15 -1
  294. package/src/generators/upgrade/upgrade.js +435 -44
  295. package/src/generators/workload/performance-registration.d.ts +1 -0
  296. package/src/generators/workload/performance-registration.js +9 -11
  297. package/src/generators/workload/service-performance-files.d.ts +1 -0
  298. package/src/generators/workload/service-performance-files.js +27 -7
  299. package/src/generators/workload/workload.d.ts +1 -1
  300. package/src/generators/workload/workload.js +105 -29
  301. package/src/git-policy/action-pins.d.ts +5 -0
  302. package/src/git-policy/action-pins.js +5 -0
  303. package/src/git-policy/github-bootstrap.d.ts +39 -8
  304. package/src/git-policy/github-bootstrap.js +329 -175
  305. package/src/git-policy/routing.d.ts +7 -1
  306. package/src/git-policy/routing.js +62 -1
  307. package/src/index.d.ts +1 -0
  308. package/src/index.js +1 -0
  309. package/src/infrastructure-change/local-capability.d.ts +73 -0
  310. package/src/infrastructure-change/local-capability.js +114 -0
  311. package/src/infrastructure-change/model.d.ts +25 -4
  312. package/src/infrastructure-change/model.js +1 -0
  313. package/src/infrastructure-change/normalize.d.ts +4 -0
  314. package/src/infrastructure-change/normalize.js +47 -7
  315. package/src/infrastructure-change/plan.d.ts +30 -3
  316. package/src/infrastructure-change/plan.js +323 -13
  317. package/src/infrastructure-change/risk.d.ts +3 -1
  318. package/src/infrastructure-change/risk.js +96 -16
  319. package/src/local-dev/browser-verification.d.ts +37 -0
  320. package/src/local-dev/browser-verification.js +281 -0
  321. package/src/local-dev/contracts.d.ts +10 -1
  322. package/src/local-dev/contracts.js +114 -13
  323. package/src/local-dev/dev-command-core.js +24 -5
  324. package/src/local-dev/docker-credential-health.d.ts +14 -0
  325. package/src/local-dev/docker-credential-health.js +94 -0
  326. package/src/local-dev/environment-inspector.d.ts +7 -0
  327. package/src/local-dev/environment-inspector.js +42 -15
  328. package/src/local-dev/environment-state.js +2 -2
  329. package/src/local-dev/errors.d.ts +1 -1
  330. package/src/local-dev/errors.js +2 -0
  331. package/src/local-dev/fleet-client.js +2 -2
  332. package/src/local-dev/fleet-configuration.js +57 -25
  333. package/src/local-dev/fleet-inventory.js +46 -18
  334. package/src/local-dev/fleet-ipc.d.ts +7 -0
  335. package/src/local-dev/fleet-ipc.js +14 -2
  336. package/src/local-dev/fleet-launcher.d.ts +6 -0
  337. package/src/local-dev/fleet-launcher.js +14 -2
  338. package/src/local-dev/fleet-logs.js +50 -22
  339. package/src/local-dev/fleet-process.d.ts +20 -1
  340. package/src/local-dev/fleet-process.js +197 -41
  341. package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
  342. package/src/local-dev/fleet-runner-evidence.js +56 -0
  343. package/src/local-dev/fleet-runtime.js +268 -229
  344. package/src/local-dev/fleet-session.d.ts +2 -0
  345. package/src/local-dev/fleet-session.js +28 -11
  346. package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
  347. package/src/local-dev/fleet-state.d.ts +5 -2
  348. package/src/local-dev/fleet-state.js +25 -4
  349. package/src/local-dev/fleet-supervisor.d.ts +3 -0
  350. package/src/local-dev/fleet-supervisor.js +66 -11
  351. package/src/local-dev/fleet-web-start.d.ts +12 -0
  352. package/src/local-dev/fleet-web-start.js +48 -0
  353. package/src/local-dev/identity.js +3 -14
  354. package/src/local-dev/index.d.ts +1 -0
  355. package/src/local-dev/index.js +1 -0
  356. package/src/local-dev/native-completion.d.ts +9 -0
  357. package/src/local-dev/native-completion.js +130 -0
  358. package/src/local-dev/nx-workspace.d.ts +4 -2
  359. package/src/local-dev/nx-workspace.js +11 -6
  360. package/src/local-dev/personal-stage.d.ts +4 -5
  361. package/src/local-dev/personal-stage.js +6 -54
  362. package/src/local-dev/port-claims.d.ts +13 -0
  363. package/src/local-dev/port-claims.js +46 -0
  364. package/src/local-dev/ports.d.ts +14 -2
  365. package/src/local-dev/ports.js +78 -3
  366. package/src/local-dev/private-state.d.ts +11 -0
  367. package/src/local-dev/private-state.js +146 -40
  368. package/src/local-dev/process-group.d.ts +4 -0
  369. package/src/local-dev/process-group.js +29 -0
  370. package/src/local-dev/process-identity.d.ts +8 -0
  371. package/src/local-dev/process-identity.js +31 -1
  372. package/src/local-dev/proxy.js +11 -12
  373. package/src/local-dev/runtime-paths.js +1 -1
  374. package/src/local-dev/slice-claim.js +1 -1
  375. package/src/local-dev/slice-runner.d.ts +15 -6
  376. package/src/local-dev/slice-runner.js +189 -54
  377. package/src/local-dev/task-attachment.d.ts +17 -0
  378. package/src/local-dev/task-attachment.js +73 -0
  379. package/src/local-dev/task-authority.d.ts +10 -0
  380. package/src/local-dev/task-authority.js +27 -0
  381. package/src/local-dev/task-identity.d.ts +33 -0
  382. package/src/local-dev/task-identity.js +418 -0
  383. package/src/local-dev/task-native-writer.d.ts +18 -0
  384. package/src/local-dev/task-native-writer.js +329 -0
  385. package/src/local-dev/tls.js +8 -2
  386. package/src/local-dev/web-launch.d.ts +9 -0
  387. package/src/local-dev/web-launch.js +130 -0
  388. package/src/ownership/composition.d.ts +2 -1
  389. package/src/ownership/composition.js +1 -0
  390. package/src/performance/cost-collection.d.ts +1 -1
  391. package/src/performance/cost-collection.js +4 -2
  392. package/src/performance/cost-controls.d.ts +8 -4
  393. package/src/performance/cost-controls.js +39 -28
  394. package/src/performance/evidence.d.ts +1 -1
  395. package/src/performance/evidence.js +5 -3
  396. package/src/performance/load-safety.js +5 -3
  397. package/src/performance/model.d.ts +4 -4
  398. package/src/performance/model.js +4 -5
  399. package/src/performance/scenario.d.ts +22 -0
  400. package/src/performance/scenario.js +100 -92
  401. package/src/release/index.d.ts +0 -2
  402. package/src/release/index.js +0 -2
  403. package/src/release/source-authority.d.ts +5 -5
  404. package/src/release/source-authority.js +141 -124
  405. package/src/repository-policy/aurora-preflight.d.ts +1 -1
  406. package/src/repository-policy/aurora-preflight.js +4 -1
  407. package/src/repository-policy/capacity-migration.d.ts +3 -0
  408. package/src/repository-policy/capacity-migration.js +21 -0
  409. package/src/repository-policy/deployment-plan.d.ts +4 -1
  410. package/src/repository-policy/deployment-plan.js +9 -0
  411. package/src/repository-policy/foundation-profile.js +10 -1
  412. package/src/repository-policy/policy.d.ts +57 -3
  413. package/src/repository-policy/policy.js +497 -11
  414. package/src/schemas/blueprint-v1.json +5 -4
  415. package/src/schemas/foundation-requirement-v1.json +5 -4
  416. package/src/schemas/performance-policy-v1.json +3 -3
  417. package/src/schemas/repository-policy-v1.json +130 -6
  418. package/src/schemas/testing-evidence-result-v1.json +1 -1
  419. package/src/secrets/adapters.d.ts +7 -2
  420. package/src/secrets/adapters.js +34 -3
  421. package/src/secrets/aws-control-plane.d.ts +10 -1
  422. package/src/secrets/aws-control-plane.js +67 -0
  423. package/src/secrets/generated-aws-control-plane.d.ts +23 -0
  424. package/src/secrets/generated-aws-control-plane.js +259 -0
  425. package/src/secrets/metadata.js +38 -10
  426. package/src/secrets/model.d.ts +8 -1
  427. package/src/secrets/model.js +24 -3
  428. package/src/secrets/operator.d.ts +91 -3
  429. package/src/secrets/operator.js +463 -13
  430. package/src/secrets/registry.d.ts +2 -1
  431. package/src/secrets/registry.js +18 -1
  432. package/src/secrets/verification.js +9 -1
  433. package/src/secrets/workload-access.js +10 -2
  434. package/src/sst-environment-source-format.d.ts +6 -0
  435. package/src/sst-environment-source-format.js +199 -0
  436. package/src/supply-chain/action-pins.js +61 -7
  437. package/src/supply-chain/blueprint-trust-git.js +85 -24
  438. package/src/supply-chain/blueprint-verification-authority.js +55 -3
  439. package/src/supply-chain/build-output-bounds.d.ts +2 -0
  440. package/src/supply-chain/build-output-bounds.js +12 -0
  441. package/src/supply-chain/build-output.d.ts +7 -1
  442. package/src/supply-chain/build-output.js +177 -24
  443. package/src/supply-chain/ecr-scanning.d.ts +5 -3
  444. package/src/supply-chain/ecr-scanning.js +11 -7
  445. package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
  446. package/src/supply-chain/ecs-deployed-image.js +6 -4
  447. package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
  448. package/src/supply-chain/generated-command.js +1 -0
  449. package/src/supply-chain/generated-container-release-command.js +1285 -124
  450. package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
  451. package/src/supply-chain/generated-ecr-collector-command.js +200 -93
  452. package/src/supply-chain/generated-files.js +25 -14
  453. package/src/supply-chain/generated-scanner-command.js +2 -1
  454. package/src/supply-chain/index.d.ts +1 -1
  455. package/src/supply-chain/index.js +2 -1
  456. package/src/supply-chain/sbom.d.ts +1 -1
  457. package/src/supply-chain/sbom.js +30 -5
  458. package/src/supply-chain/scanner.js +3 -0
  459. package/src/testing-evidence/fixture-scope.d.ts +2 -1
  460. package/src/testing-evidence/fixture-scope.js +4 -2
  461. package/src/testing-evidence/result.d.ts +2 -1
  462. package/src/testing-evidence/result.js +18 -4
  463. package/src/workload-roles/account-baseline.d.ts +11 -0
  464. package/src/workload-roles/account-baseline.js +253 -16
  465. package/src/workload-roles/authority.d.ts +3 -1
  466. package/src/workload-roles/authority.js +48 -2
  467. package/src/workload-roles/aws-s3-state.js +27 -0
  468. package/src/workload-roles/boundary.d.ts +2 -1
  469. package/src/workload-roles/boundary.js +9 -2
  470. package/src/workload-roles/handler.js +52 -24
  471. package/src/workload-roles/index.d.ts +10 -17
  472. package/src/workload-roles/index.js +5 -18
  473. package/src/workload-roles/injection.js +1 -1
  474. package/src/workload-roles/provisioner.js +12 -4
  475. package/src/workload-roles/registration.d.ts +1 -0
  476. package/src/workload-roles/registration.js +5 -0
  477. package/src/workload-roles/stage-boundary.js +1 -1
  478. package/src/workload-roles/standard-slice.js +3 -3
  479. package/src/workspace-deployment/affected-lifecycle.d.ts +53 -0
  480. package/src/workspace-deployment/affected-lifecycle.js +84 -0
  481. package/src/workspace-deployment/identity.d.ts +3 -0
  482. package/src/workspace-deployment/identity.js +22 -0
  483. package/src/workspace-deployment/index.d.ts +4 -0
  484. package/src/workspace-deployment/index.js +8 -0
  485. package/src/workspace-deployment/migration-evidence.d.ts +29 -0
  486. package/src/workspace-deployment/migration-evidence.js +83 -0
  487. package/src/workspace-deployment/migration.d.ts +27 -0
  488. package/src/workspace-deployment/migration.js +109 -0
  489. package/src/workspace-deployment/ownership.d.ts +81 -0
  490. package/src/workspace-deployment/ownership.js +381 -0
  491. package/src/api-contract/baseline-update.js.map +0 -1
  492. package/src/api-contract/compatibility.js.map +0 -1
  493. package/src/api-contract/contract-graph.js.map +0 -1
  494. package/src/api-contract/evidence.js.map +0 -1
  495. package/src/api-contract/index.js.map +0 -1
  496. package/src/api-contract/model.fixtures.d.ts +0 -2
  497. package/src/api-contract/model.fixtures.js +0 -81
  498. package/src/api-contract/model.fixtures.js.map +0 -1
  499. package/src/api-contract/model.js.map +0 -1
  500. package/src/api-contract/rollout.js.map +0 -1
  501. package/src/authorization/compatibility.js.map +0 -1
  502. package/src/authorization/index.js.map +0 -1
  503. package/src/blueprints/execution.js.map +0 -1
  504. package/src/blueprints/external-sandbox.js.map +0 -1
  505. package/src/blueprints/index.js.map +0 -1
  506. package/src/blueprints/inputs.js.map +0 -1
  507. package/src/blueprints/manifest.js.map +0 -1
  508. package/src/blueprints/resolver.js.map +0 -1
  509. package/src/blueprints/transitions.js.map +0 -1
  510. package/src/cli/agent-command.js.map +0 -1
  511. package/src/cli/agent-runtime.js.map +0 -1
  512. package/src/cli/blueprint-authority.js.map +0 -1
  513. package/src/cli/blueprint-command.js.map +0 -1
  514. package/src/cli/bootstrap.js.map +0 -1
  515. package/src/cli/dev-command.js.map +0 -1
  516. package/src/cli/main.js.map +0 -1
  517. package/src/cli/output.js.map +0 -1
  518. package/src/cli/personal-secret-runtime.js.map +0 -1
  519. package/src/cli/secret-terminal.js.map +0 -1
  520. package/src/container-images.js.map +0 -1
  521. package/src/data-lifecycle/index.js.map +0 -1
  522. package/src/data-lifecycle/model.fixtures.d.ts +0 -2
  523. package/src/data-lifecycle/model.fixtures.js +0 -244
  524. package/src/data-lifecycle/model.fixtures.js.map +0 -1
  525. package/src/data-lifecycle/model.js.map +0 -1
  526. package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
  527. package/src/data-lifecycle/validation.js.map +0 -1
  528. package/src/database-retirement/contract.js.map +0 -1
  529. package/src/database-retirement/index.js.map +0 -1
  530. package/src/deterministic-order.js.map +0 -1
  531. package/src/developer-agent/context.js.map +0 -1
  532. package/src/developer-agent/generator-planning.js.map +0 -1
  533. package/src/developer-agent/generator-preview.js.map +0 -1
  534. package/src/developer-agent/git-inspection.js.map +0 -1
  535. package/src/developer-agent/handoff.js.map +0 -1
  536. package/src/developer-agent/index.js.map +0 -1
  537. package/src/developer-agent/model.js.map +0 -1
  538. package/src/developer-agent/operation-registry.js.map +0 -1
  539. package/src/developer-agent/ordering.js.map +0 -1
  540. package/src/developer-agent/planning.js.map +0 -1
  541. package/src/developer-agent/preview-changes.js.map +0 -1
  542. package/src/developer-agent/preview-source.js.map +0 -1
  543. package/src/developer-agent/validation.js.map +0 -1
  544. package/src/developer-agent/workspace-inspection.js.map +0 -1
  545. package/src/developer-agent/workspace-path.js.map +0 -1
  546. package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
  547. package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
  548. package/src/executors/deploy/deploy.js.map +0 -1
  549. package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
  550. package/src/executors/dev/dev.js.map +0 -1
  551. package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
  552. package/src/executors/dev-setup/dev-setup.js.map +0 -1
  553. package/src/executors/developer-context/developer-context.js.map +0 -1
  554. package/src/executors/fleet/fleet.js.map +0 -1
  555. package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
  556. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
  557. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
  558. package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
  559. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
  560. package/src/executors/refresh/refresh.js.map +0 -1
  561. package/src/executors/remove/remove.js.map +0 -1
  562. package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
  563. package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
  564. package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
  565. package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
  566. package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
  567. package/src/executors/unlock/unlock.js.map +0 -1
  568. package/src/executors/work-markers/work-markers.js.map +0 -1
  569. package/src/foundation/discovery.js.map +0 -1
  570. package/src/foundation/index.js.map +0 -1
  571. package/src/foundation/local-database-contract.js.map +0 -1
  572. package/src/foundation/logging-preflight.js.map +0 -1
  573. package/src/foundation/logging.js.map +0 -1
  574. package/src/foundation/preflight.js.map +0 -1
  575. package/src/foundation/provision-database-bindings.js.map +0 -1
  576. package/src/foundation/provision-logical-database.js.map +0 -1
  577. package/src/foundation/requirements.js.map +0 -1
  578. package/src/foundation/router-origin-proof.js.map +0 -1
  579. package/src/foundation/stages.js.map +0 -1
  580. package/src/frontend-security/index.js.map +0 -1
  581. package/src/frontend-security/security-headers.js.map +0 -1
  582. package/src/generators/feature-registry.js.map +0 -1
  583. package/src/generators/function/function.js.map +0 -1
  584. package/src/generators/job/job.js.map +0 -1
  585. package/src/generators/logging-registry.js.map +0 -1
  586. package/src/generators/post-generation-install.js.map +0 -1
  587. package/src/generators/preset/generator.js.map +0 -1
  588. package/src/generators/preset/tool-versions.js.map +0 -1
  589. package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
  590. package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
  591. package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
  592. package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
  593. package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
  594. package/src/generators/preset/workspace-files.js.map +0 -1
  595. package/src/generators/repository-policy/repository-policy.js.map +0 -1
  596. package/src/generators/service/service.js.map +0 -1
  597. package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
  598. package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
  599. package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
  600. package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
  601. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
  602. package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
  603. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
  604. package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
  605. package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
  606. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
  607. package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
  608. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
  609. package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
  610. package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
  611. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
  612. package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
  613. package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
  614. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
  615. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
  616. package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
  617. package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
  618. package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
  619. package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
  620. package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
  621. package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
  622. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
  623. package/src/generators/slice/built-in-plan-shared.js.map +0 -1
  624. package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
  625. package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
  626. package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
  627. package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
  628. package/src/generators/slice/built-in-plan.js.map +0 -1
  629. package/src/generators/slice/slice.js.map +0 -1
  630. package/src/generators/upgrade/upgrade.js.map +0 -1
  631. package/src/generators/workload/frozen-container.js.map +0 -1
  632. package/src/generators/workload/performance-registration.js.map +0 -1
  633. package/src/generators/workload/reliability-registration.js.map +0 -1
  634. package/src/generators/workload/service-performance-files.js.map +0 -1
  635. package/src/generators/workload/workload.js.map +0 -1
  636. package/src/git-policy/action-pins.js.map +0 -1
  637. package/src/git-policy/github-bootstrap.js.map +0 -1
  638. package/src/git-policy/index.js.map +0 -1
  639. package/src/git-policy/routing.js.map +0 -1
  640. package/src/index.js.map +0 -1
  641. package/src/infrastructure-change/convergence.js.map +0 -1
  642. package/src/infrastructure-change/drift.js.map +0 -1
  643. package/src/infrastructure-change/index.js.map +0 -1
  644. package/src/infrastructure-change/model.js.map +0 -1
  645. package/src/infrastructure-change/normalize.js.map +0 -1
  646. package/src/infrastructure-change/plan.js.map +0 -1
  647. package/src/infrastructure-change/risk.js.map +0 -1
  648. package/src/infrastructure-change/summary.js.map +0 -1
  649. package/src/local-dev/context-discovery.js.map +0 -1
  650. package/src/local-dev/contract-validation.js.map +0 -1
  651. package/src/local-dev/contracts.js.map +0 -1
  652. package/src/local-dev/control-contract.js.map +0 -1
  653. package/src/local-dev/dev-command-core.js.map +0 -1
  654. package/src/local-dev/effects.js.map +0 -1
  655. package/src/local-dev/environment-inspector.js.map +0 -1
  656. package/src/local-dev/environment-state.js.map +0 -1
  657. package/src/local-dev/errors.js.map +0 -1
  658. package/src/local-dev/fleet-client.js.map +0 -1
  659. package/src/local-dev/fleet-configuration.js.map +0 -1
  660. package/src/local-dev/fleet-inventory.js.map +0 -1
  661. package/src/local-dev/fleet-ipc.js.map +0 -1
  662. package/src/local-dev/fleet-launcher.js.map +0 -1
  663. package/src/local-dev/fleet-lock.js.map +0 -1
  664. package/src/local-dev/fleet-logs.js.map +0 -1
  665. package/src/local-dev/fleet-process.js.map +0 -1
  666. package/src/local-dev/fleet-runtime.js.map +0 -1
  667. package/src/local-dev/fleet-session.js.map +0 -1
  668. package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
  669. package/src/local-dev/fleet-startup.js.map +0 -1
  670. package/src/local-dev/fleet-state.js.map +0 -1
  671. package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
  672. package/src/local-dev/fleet-supervisor.js.map +0 -1
  673. package/src/local-dev/gateway-daemon.js.map +0 -1
  674. package/src/local-dev/gateway.js.map +0 -1
  675. package/src/local-dev/identity.js.map +0 -1
  676. package/src/local-dev/index.js.map +0 -1
  677. package/src/local-dev/local-context.js.map +0 -1
  678. package/src/local-dev/nx-workspace.js.map +0 -1
  679. package/src/local-dev/personal-secret-ledger.js.map +0 -1
  680. package/src/local-dev/personal-stage.js.map +0 -1
  681. package/src/local-dev/portless.js.map +0 -1
  682. package/src/local-dev/ports.js.map +0 -1
  683. package/src/local-dev/private-state.js.map +0 -1
  684. package/src/local-dev/process-identity.js.map +0 -1
  685. package/src/local-dev/proxy.js.map +0 -1
  686. package/src/local-dev/runtime-paths.js.map +0 -1
  687. package/src/local-dev/secret-slice-claim.js.map +0 -1
  688. package/src/local-dev/slice-claim.js.map +0 -1
  689. package/src/local-dev/slice-runner.js.map +0 -1
  690. package/src/local-dev/tls.js.map +0 -1
  691. package/src/ownership/composition.js.map +0 -1
  692. package/src/ownership/foundation-record.js.map +0 -1
  693. package/src/ownership/hash.js.map +0 -1
  694. package/src/ownership/index.js.map +0 -1
  695. package/src/ownership/json-ownership.js.map +0 -1
  696. package/src/ownership/record.js.map +0 -1
  697. package/src/ownership/workspace-record.js.map +0 -1
  698. package/src/performance/cost-collection.js.map +0 -1
  699. package/src/performance/cost-controls.js.map +0 -1
  700. package/src/performance/evidence.js.map +0 -1
  701. package/src/performance/index.js.map +0 -1
  702. package/src/performance/load-safety.js.map +0 -1
  703. package/src/performance/model.js.map +0 -1
  704. package/src/performance/pr-artifact-budget.js.map +0 -1
  705. package/src/performance/runner.js.map +0 -1
  706. package/src/performance/scenario-endpoint.js.map +0 -1
  707. package/src/performance/scenario.js.map +0 -1
  708. package/src/performance/test-fixtures.d.ts +0 -7
  709. package/src/performance/test-fixtures.js +0 -169
  710. package/src/performance/test-fixtures.js.map +0 -1
  711. package/src/performance/unit-cost.js.map +0 -1
  712. package/src/release/index.js.map +0 -1
  713. package/src/release/lifecycle.js.map +0 -1
  714. package/src/release/manifest.js.map +0 -1
  715. package/src/release/rollout.js.map +0 -1
  716. package/src/release/source-authority.js.map +0 -1
  717. package/src/repository-policy/aurora-preflight.js.map +0 -1
  718. package/src/repository-policy/deployment-plan.js.map +0 -1
  719. package/src/repository-policy/foundation-profile.js.map +0 -1
  720. package/src/repository-policy/index.js.map +0 -1
  721. package/src/repository-policy/policy.js.map +0 -1
  722. package/src/secrets/adapters.js.map +0 -1
  723. package/src/secrets/aws-control-plane.js.map +0 -1
  724. package/src/secrets/declaration-verification.js.map +0 -1
  725. package/src/secrets/guardrails.js.map +0 -1
  726. package/src/secrets/index.js.map +0 -1
  727. package/src/secrets/metadata.js.map +0 -1
  728. package/src/secrets/model.js.map +0 -1
  729. package/src/secrets/operator.js.map +0 -1
  730. package/src/secrets/permissions.js.map +0 -1
  731. package/src/secrets/personal-command.js.map +0 -1
  732. package/src/secrets/personal-ledger.js.map +0 -1
  733. package/src/secrets/registry.js.map +0 -1
  734. package/src/secrets/verification.js.map +0 -1
  735. package/src/secrets/workload-access.js.map +0 -1
  736. package/src/supply-chain/action-pins.js.map +0 -1
  737. package/src/supply-chain/blueprint-trust-git.js.map +0 -1
  738. package/src/supply-chain/blueprint-trust-process.js.map +0 -1
  739. package/src/supply-chain/blueprint-trust.js.map +0 -1
  740. package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
  741. package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
  742. package/src/supply-chain/build-output.js.map +0 -1
  743. package/src/supply-chain/common.js.map +0 -1
  744. package/src/supply-chain/container-artifact-contract.js.map +0 -1
  745. package/src/supply-chain/container-release.js.map +0 -1
  746. package/src/supply-chain/ecr-applicability.js.map +0 -1
  747. package/src/supply-chain/ecr-scanning.js.map +0 -1
  748. package/src/supply-chain/ecs-deployed-image.js.map +0 -1
  749. package/src/supply-chain/errors.js.map +0 -1
  750. package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
  751. package/src/supply-chain/generated-command.js.map +0 -1
  752. package/src/supply-chain/generated-container-release-command.js.map +0 -1
  753. package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
  754. package/src/supply-chain/generated-files.js.map +0 -1
  755. package/src/supply-chain/generated-scanner-command.js.map +0 -1
  756. package/src/supply-chain/index.js.map +0 -1
  757. package/src/supply-chain/inventory.js.map +0 -1
  758. package/src/supply-chain/license-expression.js.map +0 -1
  759. package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
  760. package/src/supply-chain/policy.js.map +0 -1
  761. package/src/supply-chain/publication.js.map +0 -1
  762. package/src/supply-chain/sbom.js.map +0 -1
  763. package/src/supply-chain/scanner.js.map +0 -1
  764. package/src/supply-chain/vendored-source.js.map +0 -1
  765. package/src/testing-evidence/fixture-scope.js.map +0 -1
  766. package/src/testing-evidence/index.js.map +0 -1
  767. package/src/testing-evidence/quarantine.js.map +0 -1
  768. package/src/testing-evidence/result.js.map +0 -1
  769. package/src/testing-evidence/runner-adapter.js.map +0 -1
  770. package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
  771. package/src/validation.js.map +0 -1
  772. package/src/work-markers/index.js.map +0 -1
  773. package/src/work-markers/work-markers.js.map +0 -1
  774. package/src/workload-roles/account-baseline.js.map +0 -1
  775. package/src/workload-roles/authority.js.map +0 -1
  776. package/src/workload-roles/aws-adapter.js.map +0 -1
  777. package/src/workload-roles/aws-internal-handler.js.map +0 -1
  778. package/src/workload-roles/aws-s3-state.js.map +0 -1
  779. package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
  780. package/src/workload-roles/boundary.js.map +0 -1
  781. package/src/workload-roles/convergence.js.map +0 -1
  782. package/src/workload-roles/effective-policy.js.map +0 -1
  783. package/src/workload-roles/handler.js.map +0 -1
  784. package/src/workload-roles/history.js.map +0 -1
  785. package/src/workload-roles/index.js.map +0 -1
  786. package/src/workload-roles/injection.js.map +0 -1
  787. package/src/workload-roles/manifest.js.map +0 -1
  788. package/src/workload-roles/provisioner.js.map +0 -1
  789. package/src/workload-roles/registration.js.map +0 -1
  790. package/src/workload-roles/stage-boundary.js.map +0 -1
  791. package/src/workload-roles/standard-slice.js.map +0 -1
@@ -6,8 +6,12 @@ const feature_registry_js_1 = require("../feature-registry.js");
6
6
  const logging_registry_js_1 = require("../logging-registry.js");
7
7
  const built_in_plan_shared_js_1 = require("./built-in-plan-shared.js");
8
8
  /** @internal */
9
- function renderSliceOperationsFiles(name, workspace = 'workspace', frameworkVersion = 'workspace-installed') {
10
- return {
9
+ function renderSliceOperationsFiles(name, workspace = 'workspace', frameworkVersion = 'workspace-installed', sql = true) {
10
+ const pascalName = name
11
+ .split('-')
12
+ .map((segment) => segment[0]?.toUpperCase() + segment.slice(1))
13
+ .join('');
14
+ const files = {
11
15
  'operations/features.json': (0, built_in_plan_shared_js_1.json)({
12
16
  features: [
13
17
  {
@@ -26,10 +30,14 @@ function renderSliceOperationsFiles(name, workspace = 'workspace', frameworkVers
26
30
  description: 'Logical database health and lifecycle behavior.',
27
31
  id: 'database',
28
32
  },
29
- {
30
- description: 'Database bootstrap, migration, and protected retirement behavior.',
31
- id: 'database-lifecycle',
32
- },
33
+ ...(sql
34
+ ? [
35
+ {
36
+ description: 'Database bootstrap, migration, and protected retirement behavior.',
37
+ id: 'database-lifecycle',
38
+ },
39
+ ]
40
+ : []),
33
41
  {
34
42
  description: 'Retention, export, correction, deletion, and hold behavior.',
35
43
  id: 'data-lifecycle',
@@ -46,10 +54,6 @@ function renderSliceOperationsFiles(name, workspace = 'workspace', frameworkVers
46
54
  description: 'Health and operator-facing runtime behavior.',
47
55
  id: 'operations',
48
56
  },
49
- {
50
- description: 'Infrastructure planning, drift, approval, and convergence behavior.',
51
- id: 'infrastructure-change',
52
- },
53
57
  {
54
58
  description: 'Performance budgets, capacity limits, protected load, cost, and resource attribution.',
55
59
  id: 'performance',
@@ -141,6 +145,8 @@ function renderSliceOperationsFiles(name, workspace = 'workspace', frameworkVers
141
145
  'job-data-retention-maintenance',
142
146
  'job-data-retention-maintenance-launcher',
143
147
  'job-data-retention-orchestration',
148
+ 'key-value-stream-delivery',
149
+ 'key-value-reconciliation',
144
150
  'machine-client-provisioner',
145
151
  'machine-authorization-proof',
146
152
  'machine-authorization-proof-target',
@@ -148,14 +154,17 @@ function renderSliceOperationsFiles(name, workspace = 'workspace', frameworkVers
148
154
  'next-revalidation-seeder',
149
155
  'next-revalidation-subscriber',
150
156
  'next-server',
157
+ ...(sql ? ['sql-outbox-relay'] : []),
151
158
  ],
152
- databaseComponents: [
153
- 'database-bootstrap',
154
- 'database-migration',
155
- 'database-migration-orchestration',
156
- 'database-retirement',
157
- 'database-retirement-orchestration',
158
- ],
159
+ databaseComponents: sql
160
+ ? [
161
+ 'database-bootstrap',
162
+ 'database-migration',
163
+ 'database-migration-orchestration',
164
+ 'database-retirement',
165
+ 'database-retirement-orchestration',
166
+ ]
167
+ : [],
159
168
  schemaVersion: logging_registry_js_1.SLICE_LOGGING_REGISTRY_SCHEMA_VERSION,
160
169
  }),
161
170
  'docs/runbooks/log-investigation.md': `# Log investigation
@@ -192,9 +201,12 @@ if (ownership.schemaVersion !== ${index_js_1.GENERATED_OWNERSHIP_SCHEMA_VERSION}
192
201
  if (!ownership.foundation.capabilities.includes('deployment')) {
193
202
  throw new Error('Slice does not declare the Foundation deployment capability.');
194
203
  }
195
- const databaseBindings = JSON.parse(
204
+ ${sql
205
+ ? `const databaseBindings = JSON.parse(
196
206
  readFileSync(new URL('../database/bindings.json', import.meta.url), 'utf8'),
197
207
  );
208
+ `
209
+ : 'const databaseBindings = {};\n'}\
198
210
  const featureRegistry = JSON.parse(
199
211
  readFileSync(new URL('../operations/features.json', import.meta.url), 'utf8'),
200
212
  );
@@ -210,12 +222,6 @@ const configurationDeclarations = JSON.parse(
210
222
  'utf8',
211
223
  ),
212
224
  );
213
- const infrastructureChange = JSON.parse(
214
- readFileSync(
215
- new URL('../operations/infrastructure-change.json', import.meta.url),
216
- 'utf8',
217
- ),
218
- );
219
225
  const frontend = JSON.parse(
220
226
  readFileSync(new URL('../frontend/contract.json', import.meta.url), 'utf8'),
221
227
  );
@@ -238,7 +244,6 @@ for (const [label, document] of [
238
244
  ['async work', asyncContract],
239
245
  ['configuration', configurationDeclarations],
240
246
  ['frontend', frontend],
241
- ['infrastructure change', infrastructureChange],
242
247
  ['performance', performance],
243
248
  ['release', release],
244
249
  ['reliability', reliability],
@@ -282,59 +287,45 @@ if (origin) {
282
287
  process.stdout.write('${name} live-mode prerequisites verified.\\n');
283
288
  `,
284
289
  'scripts/check-database.mjs': `import { existsSync, readFileSync } from 'node:fs';
285
- import { createDatabaseBindingPlan } from '@empire-builder-kit/nx/foundation';
290
+ import { createDatabaseBindingPlan, validateDatabaseBindings } from '@empire-builder-kit/nx/foundation';
286
291
  import databaseBindings from '../database/bindings.json' with { type: 'json' };
287
292
 
288
293
  const migration = new URL('../database/migrations/0000_initial.sql', import.meta.url);
289
294
  if (!existsSync(migration) || !readFileSync(migration, 'utf8').includes('CREATE TABLE')) {
290
295
  throw new Error('The initial database migration is missing or invalid.');
291
296
  }
292
- const plan = createDatabaseBindingPlan(databaseBindings, {
293
- slice: '${name}',
294
- stage: process.env.EBK_STAGE ?? 'development',
295
- });
297
+ const stage = process.env.EBK_STAGE ?? 'development';
298
+ // Task prerequisites validate declarations before local allocation exists.
299
+ // Canonical stages retain the complete deployed identifier/length validation.
300
+ const plan = /^personal-[a-f0-9]{24}$/.test(stage)
301
+ ? validateDatabaseBindings(databaseBindings, { slice: '${name}' })
302
+ : createDatabaseBindingPlan(databaseBindings, { slice: '${name}', stage });
296
303
  if (!plan.active.primary) throw new Error('Database binding "primary" is required.');
297
304
  process.stdout.write('${name} database history verified.\\n');
298
305
  `,
299
- 'scripts/local-database.mjs': `import { spawnSync } from 'node:child_process';
300
- import { createDatabaseBindingPlan, resolveLocalDatabaseContract } from '@empire-builder-kit/nx/foundation';
306
+ 'scripts/local-database.mjs': `import { fileURLToPath } from 'node:url';
307
+ import { validateDatabaseBindings, runLocalDatabaseLifecycle } from '@empire-builder-kit/nx/foundation';
301
308
  import databaseBindings from '../database/bindings.json' with { type: 'json' };
302
309
 
303
310
  const action = process.argv[2];
304
311
  if (action !== 'up' && action !== 'down') {
305
312
  throw new Error('Usage: node scripts/local-database.mjs <up|down>');
306
313
  }
307
- const plan = createDatabaseBindingPlan(databaseBindings, {
314
+ const plan = validateDatabaseBindings(databaseBindings, {
308
315
  slice: '${name}',
309
- stage: 'development',
310
316
  });
311
317
  const activeDatabase = plan.active.primary;
312
318
  if (!activeDatabase) throw new Error('Database binding "primary" is required.');
313
- const local = resolveLocalDatabaseContract({
319
+ await runLocalDatabaseLifecycle({
320
+ action,
321
+ composeFile: fileURLToPath(new URL('../database/docker-compose.yml', import.meta.url)),
314
322
  database: activeDatabase,
315
323
  slice: '${name}',
316
324
  });
317
- const project = process.env.COMPOSE_PROJECT_NAME ?? ('ebk-${name}-' + activeDatabase)
318
- .replace(/[^a-z0-9_-]/g, '_')
319
- .toLowerCase();
320
- const args = ['compose', '--project-name', project, '-f', 'database/docker-compose.yml'];
321
- args.push(...(action === 'up' ? ['up', '-d', '--wait'] : ['down']));
322
- const result = spawnSync('docker', args, {
323
- env: {
324
- ...process.env,
325
- EBK_LOCAL_DATABASE: local.database,
326
- EBK_LOCAL_DATABASE_PASSWORD: local.password,
327
- EBK_LOCAL_DATABASE_PORT: String(local.port),
328
- EBK_LOCAL_DATABASE_USERNAME: local.username,
329
- },
330
- stdio: 'inherit',
331
- });
332
- if (result.error) throw result.error;
333
- if (result.status !== 0) process.exit(result.status ?? 1);
334
325
  `,
335
326
  'scripts/confirm-deploy.mjs': `const stageArg = process.argv.find((value) => value.startsWith('--stage='));
336
327
  const stage = stageArg?.slice('--stage='.length) ?? 'development';
337
- process.stdout.write('${name} infrastructure and database migrations completed for ' + stage + '.\\n');
328
+ process.stdout.write('${name} infrastructure${sql ? ' and database migrations' : ''} completed for ' + stage + '.\\n');
338
329
  `,
339
330
  'scripts/migrate-database.mjs': `import { createHash } from 'node:crypto';
340
331
  import {
@@ -343,6 +334,8 @@ import {
343
334
  StartExecutionCommand,
344
335
  } from '@aws-sdk/client-sfn';
345
336
  import { GetParameterCommand, SSMClient } from '@aws-sdk/client-ssm';
337
+ import { assertWorkspaceStageOwnershipForWorkspace } from '@empire-builder-kit/nx/workspace-deployment';
338
+ import { resolve } from 'node:path';
346
339
  import {
347
340
  createDatabaseBindingPlan,
348
341
  productSliceMigrationPath,
@@ -372,13 +365,31 @@ const selectedDatabase = selectDatabaseTarget(bindingPlan, {
372
365
  database: databaseArg?.slice('--database='.length),
373
366
  });
374
367
 
368
+ const ownership = await assertWorkspaceStageOwnershipForWorkspace(
369
+ resolve(import.meta.dirname, '../../..'),
370
+ stage,
371
+ {
372
+ ...(process.env.AWS_PROFILE ? { profile: process.env.AWS_PROFILE } : {}),
373
+ ...(process.env.AWS_CONFIG_FILE ? { configFilepath: process.env.AWS_CONFIG_FILE } : {}),
374
+ ...(process.env.AWS_SHARED_CREDENTIALS_FILE
375
+ ? { credentialsFilepath: process.env.AWS_SHARED_CREDENTIALS_FILE }
376
+ : {}),
377
+ },
378
+ );
379
+ if (
380
+ process.env.AWS_REGION?.trim() &&
381
+ process.env.AWS_REGION.trim() !== ownership.region
382
+ ) {
383
+ throw new Error('Database migration Region differs from its exact workspace owner tuple.');
384
+ }
385
+
375
386
  const parameterName = productSliceMigrationPath(
376
387
  foundationStage,
377
388
  stage,
378
389
  '${name}',
379
390
  selectedDatabase,
380
391
  );
381
- const parameter = await new SSMClient({}).send(
392
+ const parameter = await new SSMClient({ region: ownership.region }).send(
382
393
  new GetParameterCommand({ Name: parameterName }),
383
394
  );
384
395
  const stateMachineArn = parameter.Parameter?.Value;
@@ -428,28 +439,12 @@ const baseExecutionName = [
428
439
  ].join('-').slice(0, 80);
429
440
  const databaseLifecycleCorrelationId =
430
441
  'dbm-' + executionIdentity + '-' + runAttempt;
431
- const sfn = new SFNClient({});
442
+ const sfn = new SFNClient({ region: ownership.region });
432
443
  const executionArnFor = (name) =>
433
444
  stateMachineArn.replace(':stateMachine:', ':execution:') + ':' + name;
434
- const describeExecution = async (name) => {
445
+ const startOrDescribeExecution = async (name) => {
435
446
  try {
436
- return await sfn.send(
437
- new DescribeExecutionCommand({ executionArn: executionArnFor(name) }),
438
- );
439
- } catch (error) {
440
- if (
441
- error &&
442
- typeof error === 'object' &&
443
- error.name === 'ExecutionDoesNotExist'
444
- ) {
445
- return undefined;
446
- }
447
- throw error;
448
- }
449
- };
450
- const startExecution = async (name) => {
451
- try {
452
- await sfn.send(
447
+ const started = await sfn.send(
453
448
  new StartExecutionCommand({
454
449
  input: JSON.stringify({
455
450
  databaseLifecycleCorrelationId,
@@ -464,6 +459,10 @@ const startExecution = async (name) => {
464
459
  stateMachineArn,
465
460
  }),
466
461
  );
462
+ return {
463
+ executionArn: started.executionArn ?? executionArnFor(name),
464
+ status: 'RUNNING',
465
+ };
467
466
  } catch (error) {
468
467
  if (
469
468
  !error ||
@@ -472,6 +471,9 @@ const startExecution = async (name) => {
472
471
  ) {
473
472
  throw error;
474
473
  }
474
+ return await sfn.send(
475
+ new DescribeExecutionCommand({ executionArn: executionArnFor(name) }),
476
+ );
475
477
  }
476
478
  };
477
479
  const terminal = new Set([
@@ -482,9 +484,8 @@ const terminal = new Set([
482
484
  ]);
483
485
 
484
486
  let executionName = baseExecutionName;
485
- let execution = await describeExecution(executionName);
487
+ let execution = await startOrDescribeExecution(executionName);
486
488
  if (
487
- execution &&
488
489
  terminal.has(execution.status ?? 'UNKNOWN') &&
489
490
  execution.status !== 'SUCCEEDED' &&
490
491
  parsedRunAttempt > 1
@@ -492,14 +493,11 @@ if (
492
493
  const retrySuffix = '-retry-' + runAttempt;
493
494
  executionName =
494
495
  baseExecutionName.slice(0, 80 - retrySuffix.length) + retrySuffix;
495
- execution = await describeExecution(executionName);
496
- }
497
- if (!execution) {
498
- await startExecution(executionName);
496
+ execution = await startOrDescribeExecution(executionName);
499
497
  }
500
498
 
501
- const executionArn = executionArnFor(executionName);
502
- let status = execution?.status ?? 'RUNNING';
499
+ const executionArn = execution.executionArn ?? executionArnFor(executionName);
500
+ let status = execution.status ?? 'RUNNING';
503
501
  process.stdout.write(
504
502
  '[database-migration] execution=' + executionArn + ' status=' + status + '\\n',
505
503
  );
@@ -532,7 +530,139 @@ process.stdout.write(
532
530
  'sst-env.d.ts': `// Bootstrap placeholder. SST overwrites this file after install, dev, or deploy.
533
531
  export {};
534
532
  `,
535
- 'sst.config.ts': `export default $config({
533
+ 'sst.config.ts': `const ebkNextBuildEnvironmentKeys = new Set([
534
+ 'AUTH_CLIENT_ID',
535
+ 'AUTH_USER_POOL_ID',
536
+ 'CI',
537
+ 'EBK_APPCONFIG_APPLICATION_ID',
538
+ 'EBK_APPCONFIG_ENVIRONMENT_ID',
539
+ 'EBK_APPCONFIG_PROFILE_ID',
540
+ 'EBK_FLEET_ORIGIN',
541
+ 'EBK_KEY_VALUE_TABLE',
542
+ 'EBK_LOCAL_SOURCE_TREE',
543
+ 'EBK_PERFORMANCE_ACCOUNT_FINGERPRINT',
544
+ 'EBK_PERFORMANCE_CANDIDATE_DIGEST',
545
+ 'EBK_PERFORMANCE_LOAD_ENABLED',
546
+ 'EBK_PERFORMANCE_ORIGIN',
547
+ 'EBK_PERFORMANCE_REGION',
548
+ 'EBK_PERFORMANCE_RELEASE_ID',
549
+ 'EBK_PERFORMANCE_RELEASE_MATERIAL_DIGEST',
550
+ 'EBK_PERFORMANCE_SLICE',
551
+ 'EBK_SECURE_COOKIES',
552
+ 'EBK_SOURCE_COMMIT',
553
+ 'EBK_STAGE',
554
+ 'EVENT_BUS_NAME',
555
+ 'NEXT_PUBLIC_API_URL',
556
+ 'NEXT_TELEMETRY_DISABLED',
557
+ 'SST',
558
+ 'SST_RESOURCE_App',
559
+ 'SST_RESOURCE_${pascalName}KeyValueAccess',
560
+ ${sql ? ` 'SST_RESOURCE_${pascalName}PrimaryDatabase',\n` : ''}\
561
+ 'SST_RESOURCE_FoundationIdentity',
562
+ ]);
563
+
564
+ const ebkRequiredNextBuildEnvironmentKeys = [
565
+ 'AUTH_CLIENT_ID',
566
+ 'AUTH_USER_POOL_ID',
567
+ 'CI',
568
+ 'EBK_FLEET_ORIGIN',
569
+ 'EBK_KEY_VALUE_TABLE',
570
+ 'EBK_LOCAL_SOURCE_TREE',
571
+ 'EBK_PERFORMANCE_ACCOUNT_FINGERPRINT',
572
+ 'EBK_PERFORMANCE_CANDIDATE_DIGEST',
573
+ 'EBK_PERFORMANCE_LOAD_ENABLED',
574
+ 'EBK_PERFORMANCE_ORIGIN',
575
+ 'EBK_PERFORMANCE_REGION',
576
+ 'EBK_PERFORMANCE_RELEASE_ID',
577
+ 'EBK_PERFORMANCE_RELEASE_MATERIAL_DIGEST',
578
+ 'EBK_PERFORMANCE_SLICE',
579
+ 'EBK_SECURE_COOKIES',
580
+ 'EBK_SOURCE_COMMIT',
581
+ 'EBK_STAGE',
582
+ 'EVENT_BUS_NAME',
583
+ 'NEXT_PUBLIC_API_URL',
584
+ 'NEXT_TELEMETRY_DISABLED',
585
+ 'SST',
586
+ 'SST_RESOURCE_App',
587
+ 'SST_RESOURCE_${pascalName}KeyValueAccess',
588
+ ${sql ? ` 'SST_RESOURCE_${pascalName}PrimaryDatabase',\n` : ''}\
589
+ 'SST_RESOURCE_FoundationIdentity',
590
+ ] as const;
591
+
592
+ const ebkLocalCommandResource = {
593
+ __pulumiType: 'command:local:Command',
594
+ } as unknown as new (
595
+ name: string,
596
+ args: { environment?: unknown; triggers?: unknown },
597
+ options?: unknown,
598
+ ) => unknown;
599
+
600
+ const ebkSourceCommitPattern = /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/;
601
+ const ebkSourceTreePattern = /^[a-f0-9]{64}$/;
602
+
603
+ function exactNextBuildEnvironment(value: unknown): Record<string, string> {
604
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
605
+ throw new Error('The Next build environment must resolve to one object.');
606
+ }
607
+ const environment = value as Record<string, unknown>;
608
+ const retained = Object.fromEntries(
609
+ Object.entries(environment)
610
+ .filter(([key]) => ebkNextBuildEnvironmentKeys.has(key))
611
+ .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0)),
612
+ );
613
+ for (const key of ebkRequiredNextBuildEnvironmentKeys) {
614
+ if (typeof retained[key] !== 'string') {
615
+ throw new Error('The Next build environment omitted ' + key + '.');
616
+ }
617
+ }
618
+ return retained as Record<string, string>;
619
+ }
620
+
621
+ // SST 4.17.1 installs its transform globals only while evaluating $config.run.
622
+ // Register there, before infrastructure construction, rather than at module
623
+ // load. The explicit Slice buildCommand separately routes diff/refresh invokes
624
+ // through the wrapper.
625
+ function registerExactNextBuildEnvironmentTransform(): void {
626
+ $transform(
627
+ ebkLocalCommandResource,
628
+ (
629
+ args: { environment?: unknown; triggers?: unknown },
630
+ _options: unknown,
631
+ resourceName: string,
632
+ ) => {
633
+ if (resourceName !== '${pascalName}WebBuilder') return;
634
+ const unresolvedEnvironment = args.environment as Record<
635
+ string,
636
+ unknown
637
+ >;
638
+ const resolveEnvironment = (environment: Record<string, unknown>) => {
639
+ const resolved = exactNextBuildEnvironment({
640
+ ...environment,
641
+ CI: 'true',
642
+ NEXT_TELEMETRY_DISABLED: '1',
643
+ });
644
+ const sourceCommit = resolved.EBK_SOURCE_COMMIT.trim();
645
+ const sourceTree = resolved.EBK_LOCAL_SOURCE_TREE.trim();
646
+ if (
647
+ !ebkSourceCommitPattern.test(sourceCommit) ||
648
+ !ebkSourceTreePattern.test(sourceTree)
649
+ ) {
650
+ throw new Error(
651
+ 'The Next builder requires exact EBK commit and working-tree identities.',
652
+ );
653
+ }
654
+ return resolved;
655
+ };
656
+ args.environment = $output(unresolvedEnvironment).apply(
657
+ resolveEnvironment,
658
+ );
659
+ // Preserve SST's native per-invocation build trigger. Replacing it with
660
+ // source identity skips OpenNext on same-source retries on fresh runners.
661
+ },
662
+ );
663
+ }
664
+
665
+ export default $config({
536
666
  app(input: { stage?: string } | undefined) {
537
667
  const stage = input?.stage ?? 'development';
538
668
  const production = input?.stage === 'production';
@@ -544,16 +674,17 @@ export {};
544
674
  providers: {
545
675
  aws: {
546
676
  defaultTags: {
677
+ // SST contributes sst:app and sst:stage. Keep the provider baseline
678
+ // at eight tags so generated S3 asset objects remain within AWS's
679
+ // hard ten-tag object limit. Performance coverage requires this
680
+ // provider baseline; repository and production-profile identity is
681
+ // supplementary on resources using createStandardResourceTags.
547
682
  tags: {
548
683
  'ebk:cost-allocation': 'unallocated',
549
684
  'ebk:cost-scope': '${workspace}/${name}/' + stage,
550
685
  'ebk:framework-version': '${frameworkVersion}',
551
686
  'ebk:managed-by': 'empire-builder-kit',
552
687
  'ebk:owner': '${name}-product',
553
- 'ebk:production-profile':
554
- process.env.EBK_PRODUCTION_PROFILE ?? 'standard',
555
- 'ebk:repository':
556
- process.env.GITHUB_REPOSITORY ?? '${workspace}',
557
688
  'ebk:slice': '${name}',
558
689
  'ebk:stage': stage,
559
690
  'ebk:workspace': '${workspace}',
@@ -565,29 +696,379 @@ export {};
565
696
  };
566
697
  },
567
698
  async run() {
568
- const personalStagePattern = /^personal-[a-z0-9](?:[a-z0-9-]{0,34}[a-z0-9])?$/;
699
+ const personalStagePattern = /^personal-[a-f0-9]{24}$/;
569
700
  if ($dev && !personalStagePattern.test($app.stage)) {
570
701
  throw new Error(
571
702
  'SST dev requires the framework-derived personal stage. Use ebk dev.',
572
703
  );
573
704
  }
574
- if (!$dev && personalStagePattern.test($app.stage)) {
705
+ if (!$dev && $app.stage.startsWith('personal-')) {
706
+ // The task-only Nx cleanup executor derives and verifies this exact ID.
707
+ // It invokes native SST remove, never deploy/refresh. Pulumi destroy owns
708
+ // the retained resource graph; do not materialize a production graph here.
709
+ const cleanupTask = process.env.EBK_NX_TASK_CLEANUP;
710
+ if (/^[a-f0-9]{24}$/.test(cleanupTask ?? '') && $app.stage === 'personal-' + cleanupTask) {
711
+ return {};
712
+ }
575
713
  throw new Error(
576
714
  'A personal stage may run only through the framework development adapter.',
577
715
  );
578
716
  }
579
- const workloadRoles = $dev
580
- ? undefined
581
- : await (async () => {
582
- const { preflightStandardSliceWorkloadRoles } = await import(
583
- './infra/workload-roles/preflight.js'
584
- );
585
- return preflightStandardSliceWorkloadRoles($app.stage);
586
- })();
717
+ const {
718
+ installLambdaPolicyWriteOrdering,
719
+ installStageIamBoundaryTransforms,
720
+ } = await import('@empire-builder-kit/nx/aws-authority');
721
+ registerExactNextBuildEnvironmentTransform();
722
+ const accountId = process.env.AWS_EXPECTED_ACCOUNT_ID?.trim() ?? '';
723
+ if (!/^[0-9]{12}$/.test(accountId)) {
724
+ throw new Error(
725
+ 'Native Slice IAM boundary injection requires AWS_EXPECTED_ACCOUNT_ID.',
726
+ );
727
+ }
728
+ installStageIamBoundaryTransforms({
729
+ accountId,
730
+ instanceProfileResource: aws.iam.InstanceProfile,
731
+ registerTransform: $transform,
732
+ roleResource: aws.iam.Role,
733
+ resourceStage: $app.stage,
734
+ stage: ($dev ? 'development' : $app.stage) as
735
+ | 'development'
736
+ | 'staging'
737
+ | 'production',
738
+ });
739
+ // Order Function URL and Lambda permission policy writes before any
740
+ // resource registers; the pinned providers otherwise race them.
741
+ installLambdaPolicyWriteOrdering({
742
+ mergeOptions: $util.mergeOptions,
743
+ registerStackTransformation: $util.runtime.registerStackTransformation,
744
+ });
587
745
  const { app } = await import('./infra/index.js');
588
- return app(workloadRoles);
746
+ return app();
589
747
  },
590
748
  });
749
+ `,
750
+ 'tools/ebk-next-dev.mjs': `import { createRequire } from 'node:module';
751
+ import { dirname, join } from 'node:path';
752
+ const require = createRequire(import.meta.url);
753
+ const packageRoot = dirname(require.resolve('@empire-builder-kit/nx/package.json'));
754
+ const { runNativeWebCommand } = require(join(packageRoot, 'src/local-dev/web-launch.js'));
755
+ try {
756
+ process.exitCode = await runNativeWebCommand('${name}');
757
+ } catch (error) {
758
+ console.error(error instanceof Error ? error.message : String(error));
759
+ process.exitCode = 1;
760
+ }
761
+ `,
762
+ 'tools/ebk-next-build-environment.mjs': `import { spawnSync } from 'node:child_process';
763
+ import {
764
+ chmodSync,
765
+ existsSync,
766
+ lstatSync,
767
+ readFileSync,
768
+ readdirSync,
769
+ realpathSync,
770
+ renameSync,
771
+ rmSync,
772
+ unlinkSync,
773
+ writeFileSync,
774
+ } from 'node:fs';
775
+ import { dirname, join, relative, resolve } from 'node:path';
776
+
777
+ // SST diff/refresh invokes the build outside the Command resource transform.
778
+ // Reconstruct the child environment here so every builder path has one policy.
779
+ const applicationKeys = new Set(${JSON.stringify([
780
+ 'AUTH_CLIENT_ID',
781
+ 'AUTH_USER_POOL_ID',
782
+ 'CI',
783
+ 'EBK_APPCONFIG_APPLICATION_ID',
784
+ 'EBK_APPCONFIG_ENVIRONMENT_ID',
785
+ 'EBK_APPCONFIG_PROFILE_ID',
786
+ 'EBK_FLEET_ORIGIN',
787
+ 'EBK_KEY_VALUE_TABLE',
788
+ 'EBK_LOCAL_SOURCE_TREE',
789
+ 'EBK_PERFORMANCE_ACCOUNT_FINGERPRINT',
790
+ 'EBK_PERFORMANCE_CANDIDATE_DIGEST',
791
+ 'EBK_PERFORMANCE_LOAD_ENABLED',
792
+ 'EBK_PERFORMANCE_ORIGIN',
793
+ 'EBK_PERFORMANCE_REGION',
794
+ 'EBK_PERFORMANCE_RELEASE_ID',
795
+ 'EBK_PERFORMANCE_RELEASE_MATERIAL_DIGEST',
796
+ 'EBK_PERFORMANCE_SLICE',
797
+ 'EBK_SECURE_COOKIES',
798
+ 'EBK_SOURCE_COMMIT',
799
+ 'EBK_STAGE',
800
+ 'EVENT_BUS_NAME',
801
+ 'NEXT_PUBLIC_API_URL',
802
+ 'NEXT_TELEMETRY_DISABLED',
803
+ 'SST',
804
+ 'SST_RESOURCE_App',
805
+ `SST_RESOURCE_${pascalName}KeyValueAccess`,
806
+ ...(sql ? [`SST_RESOURCE_${pascalName}PrimaryDatabase`] : []),
807
+ 'SST_RESOURCE_FoundationIdentity',
808
+ ], null, 2)});
809
+ const operatingKeys = new Set(
810
+ [
811
+ 'APPDATA',
812
+ 'COMSPEC',
813
+ 'HOME',
814
+ 'LANG',
815
+ 'LC_ALL',
816
+ 'LOCALAPPDATA',
817
+ 'PATH',
818
+ 'PATHEXT',
819
+ 'PROGRAMDATA',
820
+ 'SHELL',
821
+ 'SYSTEMROOT',
822
+ 'TEMP',
823
+ 'TERM',
824
+ 'TMP',
825
+ 'TMPDIR',
826
+ 'TZ',
827
+ 'USERPROFILE',
828
+ ].map((key) => key.toLowerCase()),
829
+ );
830
+
831
+ if (process.argv.length !== 2) {
832
+ throw new Error('The Next build wrapper does not accept arguments.');
833
+ }
834
+
835
+ const root = realpathSync(process.cwd());
836
+ const openNextRoot = resolve(root, '.open-next');
837
+ const priorSealedFunctionBundles = [
838
+ resolve(root, '.open-next/image-optimization-function'),
839
+ resolve(root, '.open-next/server-functions/default'),
840
+ ];
841
+ if (process.platform === 'darwin') {
842
+ for (const priorBundle of priorSealedFunctionBundles) {
843
+ if (!existsSync(priorBundle)) continue;
844
+ if (realpathSync(priorBundle) !== priorBundle) {
845
+ throw new Error(
846
+ 'The prior sealed OpenNext Function bundle has an invalid identity.',
847
+ );
848
+ }
849
+ const pendingDirectories = [{ depth: 0, path: priorBundle }];
850
+ let observedDirectories = 0;
851
+ while (pendingDirectories.length > 0) {
852
+ const current = pendingDirectories.pop();
853
+ if (!current) break;
854
+ if (current.depth > 64) {
855
+ throw new Error(
856
+ 'The prior sealed OpenNext Function bundle exceeds its depth bound.',
857
+ );
858
+ }
859
+ observedDirectories += 1;
860
+ if (observedDirectories > 65_536) {
861
+ throw new Error(
862
+ 'The prior sealed OpenNext Function bundle exceeds its directory bound.',
863
+ );
864
+ }
865
+ const identity = lstatSync(current.path, { bigint: true });
866
+ if (!identity.isDirectory() || identity.isSymbolicLink()) {
867
+ throw new Error(
868
+ 'The prior sealed OpenNext Function directory changed identity.',
869
+ );
870
+ }
871
+ if ((identity.mode & 0o200n) === 0n) {
872
+ chmodSync(current.path, Number((identity.mode & 0o7_777n) | 0o200n));
873
+ }
874
+ for (const entry of readdirSync(current.path, {
875
+ withFileTypes: true,
876
+ }).sort((left, right) =>
877
+ left.name < right.name ? -1 : left.name > right.name ? 1 : 0,
878
+ )) {
879
+ if (!entry.isDirectory() || entry.isSymbolicLink()) continue;
880
+ const entryPath = join(current.path, entry.name);
881
+ const confined = relative(priorBundle, entryPath);
882
+ if (
883
+ confined === '..' ||
884
+ confined.startsWith('../') ||
885
+ resolve(priorBundle, confined) !== entryPath
886
+ ) {
887
+ throw new Error(
888
+ 'The prior sealed OpenNext Function directory escapes its root.',
889
+ );
890
+ }
891
+ pendingDirectories.push({ depth: current.depth + 1, path: entryPath });
892
+ }
893
+ }
894
+ }
895
+ if (existsSync(openNextRoot)) {
896
+ const identity = lstatSync(openNextRoot, { bigint: true });
897
+ if (
898
+ !identity.isDirectory() ||
899
+ identity.isSymbolicLink() ||
900
+ realpathSync(openNextRoot) !== openNextRoot
901
+ ) {
902
+ throw new Error('The prior OpenNext build root has an invalid identity.');
903
+ }
904
+ rmSync(openNextRoot, {
905
+ force: true,
906
+ maxRetries: 8,
907
+ recursive: true,
908
+ retryDelay: 50,
909
+ });
910
+ if (existsSync(openNextRoot)) {
911
+ throw new Error('The prior OpenNext build root was not removed.');
912
+ }
913
+ }
914
+ }
915
+
916
+ const environment = Object.fromEntries(
917
+ Object.entries(process.env)
918
+ .filter(
919
+ ([key, value]) =>
920
+ typeof value === 'string' &&
921
+ (applicationKeys.has(key) || operatingKeys.has(key.toLowerCase())),
922
+ )
923
+ .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0)),
924
+ );
925
+ const windows = process.platform === 'win32';
926
+ const result = spawnSync(
927
+ windows ? 'cmd.exe' : 'npx',
928
+ windows
929
+ ? ['/d', '/s', '/c', 'npx --yes @opennextjs/aws@3.9.14 build']
930
+ : ['--yes', '@opennextjs/aws@3.9.14', 'build'],
931
+ {
932
+ cwd: process.cwd(),
933
+ env: environment,
934
+ stdio: 'inherit',
935
+ windowsHide: true,
936
+ },
937
+ );
938
+ if (result.error) throw result.error;
939
+ if (result.signal) {
940
+ throw new Error('The Next build command exited from signal ' + result.signal + '.');
941
+ }
942
+ if (result.status !== 0) {
943
+ process.exitCode = result.status ?? 1;
944
+ } else {
945
+ // Finder can create .DS_Store files anywhere below OpenNext's assembled
946
+ // output while the macOS build is running. They have no runtime meaning,
947
+ // but SST includes them in Lambda archives, so their presence makes one
948
+ // immutable source alternate between different code object hashes. Remove
949
+ // only this exact derived metadata before SST archives the output.
950
+ if (realpathSync(openNextRoot) !== openNextRoot) {
951
+ throw new Error('The OpenNext build root has an invalid identity.');
952
+ }
953
+ const pendingDirectories = [{ depth: 0, path: openNextRoot }];
954
+ let observedEntries = 0;
955
+ let removedFinderMetadata = 0;
956
+ while (pendingDirectories.length > 0) {
957
+ const current = pendingDirectories.pop();
958
+ if (!current) break;
959
+ if (current.depth > 64) {
960
+ throw new Error('The OpenNext build tree exceeds its depth bound.');
961
+ }
962
+ for (const entry of readdirSync(current.path, { withFileTypes: true }).sort(
963
+ (left, right) =>
964
+ left.name < right.name ? -1 : left.name > right.name ? 1 : 0,
965
+ )) {
966
+ observedEntries += 1;
967
+ if (observedEntries > 65_536) {
968
+ throw new Error('The OpenNext build tree exceeds its entry bound.');
969
+ }
970
+ const entryPath = join(current.path, entry.name);
971
+ const identity = lstatSync(entryPath, { bigint: true });
972
+ if (entry.name === '.DS_Store') {
973
+ removedFinderMetadata += 1;
974
+ if (
975
+ removedFinderMetadata > 256 ||
976
+ !identity.isFile() ||
977
+ identity.isSymbolicLink() ||
978
+ identity.nlink !== 1n ||
979
+ identity.size > 1_048_576n
980
+ ) {
981
+ throw new Error('The OpenNext Finder metadata has an invalid identity.');
982
+ }
983
+ unlinkSync(entryPath);
984
+ if (existsSync(entryPath)) {
985
+ throw new Error('The OpenNext Finder metadata was not removed.');
986
+ }
987
+ continue;
988
+ }
989
+ if (identity.isDirectory() && !identity.isSymbolicLink()) {
990
+ const confined = relative(openNextRoot, entryPath);
991
+ if (
992
+ confined === '..' ||
993
+ confined.startsWith('../') ||
994
+ resolve(openNextRoot, confined) !== entryPath
995
+ ) {
996
+ throw new Error('The OpenNext build entry escapes its root.');
997
+ }
998
+ pendingDirectories.push({ depth: current.depth + 1, path: entryPath });
999
+ }
1000
+ }
1001
+ }
1002
+
1003
+ // OpenNext 3.9.14 installs the image optimizer dependencies in an npm
1004
+ // mkdtemp directory and copies npm's hidden package lock into the deployed
1005
+ // bundle. npm records that random directory basename as the lock name. The
1006
+ // name has no runtime meaning, but without this exact normalization two
1007
+ // builds of one source produce different Lambda ZIP bytes.
1008
+ const lockPath = resolve(
1009
+ process.cwd(),
1010
+ '.open-next/image-optimization-function/node_modules/.package-lock.json',
1011
+ );
1012
+ const lockParent = realpathSync(dirname(lockPath));
1013
+ const confinedParent = relative(root, lockParent);
1014
+ if (
1015
+ confinedParent === '..' ||
1016
+ confinedParent.startsWith('../') ||
1017
+ resolve(lockParent, '.package-lock.json') !== lockPath
1018
+ ) {
1019
+ throw new Error('The OpenNext image optimizer package lock escapes the build root.');
1020
+ }
1021
+ const before = lstatSync(lockPath, { bigint: true });
1022
+ if (
1023
+ !before.isFile() ||
1024
+ before.isSymbolicLink() ||
1025
+ before.nlink !== 1n ||
1026
+ before.size < 2n ||
1027
+ before.size > 131_072n
1028
+ ) {
1029
+ throw new Error('The OpenNext image optimizer package lock has an invalid identity.');
1030
+ }
1031
+ const raw = readFileSync(lockPath, 'utf8');
1032
+ if (Buffer.byteLength(raw, 'utf8') !== Number(before.size)) {
1033
+ throw new Error('The OpenNext image optimizer package lock changed while reading.');
1034
+ }
1035
+ const parsed = JSON.parse(raw);
1036
+ if (
1037
+ parsed === null ||
1038
+ typeof parsed !== 'object' ||
1039
+ Array.isArray(parsed) ||
1040
+ !/^open-next-install-image-optimization-function[A-Za-z0-9]{6}$/u.test(
1041
+ parsed.name,
1042
+ ) ||
1043
+ parsed.lockfileVersion !== 3 ||
1044
+ parsed.requires !== true ||
1045
+ parsed.packages === null ||
1046
+ typeof parsed.packages !== 'object' ||
1047
+ Array.isArray(parsed.packages)
1048
+ ) {
1049
+ throw new Error('The OpenNext image optimizer package lock shape is unsupported.');
1050
+ }
1051
+ parsed.name = 'open-next-image-optimization-function';
1052
+ const normalized = JSON.stringify(parsed, null, 2) + '\\n';
1053
+ const temporaryPath = join(lockParent, '.package-lock.json.ebk-normalized');
1054
+ writeFileSync(temporaryPath, normalized, {
1055
+ encoding: 'utf8',
1056
+ flag: 'wx',
1057
+ mode: Number(before.mode & 0o777n),
1058
+ });
1059
+ chmodSync(temporaryPath, Number(before.mode & 0o777n));
1060
+ renameSync(temporaryPath, lockPath);
1061
+ const after = lstatSync(lockPath, { bigint: true });
1062
+ if (
1063
+ !after.isFile() ||
1064
+ after.isSymbolicLink() ||
1065
+ after.nlink !== 1n ||
1066
+ after.mode !== before.mode ||
1067
+ readFileSync(lockPath, 'utf8') !== normalized
1068
+ ) {
1069
+ throw new Error('The normalized OpenNext image optimizer package lock is invalid.');
1070
+ }
1071
+ }
591
1072
  `,
592
1073
  'tsconfig.json': (0, built_in_plan_shared_js_1.json)({
593
1074
  extends: '../../tsconfig.base.json',
@@ -613,6 +1094,7 @@ export {};
613
1094
  'api/**/*.ts',
614
1095
  'infra/**/*.ts',
615
1096
  'jobs/**/*.ts',
1097
+ 'performance/**/*.ts',
616
1098
  'reliability/**/*.ts',
617
1099
  'secrets/**/*.ts',
618
1100
  'services/**/*.ts',
@@ -626,5 +1108,11 @@ export {};
626
1108
  exclude: ['.sst', 'dist', 'node_modules'],
627
1109
  }),
628
1110
  };
1111
+ const sqlOnlyPaths = new Set([
1112
+ 'scripts/check-database.mjs',
1113
+ 'scripts/local-database.mjs',
1114
+ 'scripts/migrate-database.mjs',
1115
+ ]);
1116
+ return Object.fromEntries(Object.entries(files).filter(([path]) => sql || !sqlOnlyPaths.has(path)));
629
1117
  }
630
1118
  //# sourceMappingURL=built-in-plan-operations-files.js.map