@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
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runnerAlreadyAllowed = runnerAlreadyAllowed;
4
+ exports.publicRunnerIpv4 = publicRunnerIpv4;
5
+ exports.parseSmokeAdmissionLease = parseSmokeAdmissionLease;
6
+ exports.cleanupSmokeAdmission = cleanupSmokeAdmission;
7
+ exports.recoverSmokeAdmission = recoverSmokeAdmission;
8
+ exports.withPrivateSmokeAdmission = withPrivateSmokeAdmission;
9
+ const node_crypto_1 = require("node:crypto");
10
+ const node_net_1 = require("node:net");
11
+ const prefix = 'ebk-smoke-v1:';
12
+ const localPrefix = 'ebk-smoke-local-v1:';
13
+ const sorted = (values) => [...values].sort();
14
+ const same = (a, b) => JSON.stringify(sorted(a)) === JSON.stringify(sorted(b));
15
+ const baselineDigest = (values) => (0, node_crypto_1.createHash)('sha256')
16
+ .update(JSON.stringify(sorted(values)))
17
+ .digest('hex');
18
+ function requireCondition(condition, message) {
19
+ if (!condition)
20
+ throw new Error(`Private smoke access: ${message}`);
21
+ }
22
+ function runnerAlreadyAllowed(cidr, baseline) {
23
+ const address = cidr.replace(/\/32$/, '');
24
+ requireCondition(cidr === publicRunnerIpv4(address), 'admission is not an exact /32');
25
+ const numeric = (ip) => ip.split('.').reduce((value, octet) => value * 256 + Number(octet), 0) >>>
26
+ 0;
27
+ return baseline.some((entry) => {
28
+ const [network, bits] = entry.split('/');
29
+ requireCondition((0, node_net_1.isIP)(network) === 4 && /^(?:[0-9]|[12][0-9]|3[0-2])$/.test(bits), 'invalid IPv4 baseline');
30
+ const mask = Number(bits) === 0 ? 0 : (0xffffffff << (32 - Number(bits))) >>> 0;
31
+ return (numeric(address) & mask) === (numeric(network) & mask);
32
+ });
33
+ }
34
+ function publicRunnerIpv4(value) {
35
+ requireCondition((0, node_net_1.isIP)(value) === 4, 'one exact public IPv4 runner address is required');
36
+ const [a, b] = value.split('.').map(Number);
37
+ requireCondition(a > 0 &&
38
+ a < 224 &&
39
+ a !== 10 &&
40
+ a !== 127 &&
41
+ !(a === 169 && b === 254) &&
42
+ !(a === 172 && b >= 16 && b <= 31) &&
43
+ !(a === 192 && b === 168) &&
44
+ !(a === 100 && b >= 64 && b <= 127) &&
45
+ !(a === 198 && (b === 18 || b === 19)), 'non-public runner address refused');
46
+ return `${value}/32`;
47
+ }
48
+ function parseSmokeAdmissionLease(description) {
49
+ if (description === '')
50
+ return undefined;
51
+ const local = description.startsWith(localPrefix);
52
+ const leasePrefix = local ? localPrefix : prefix;
53
+ requireCondition(description.startsWith(leasePrefix) && description.length <= 256, 'unrecognized IP-set description; do not overwrite it');
54
+ const parts = description.slice(leasePrefix.length).split(',');
55
+ requireCondition(parts.length === 6, 'malformed admission lease');
56
+ const [run, attempt, source, cidr, baseline, expires] = parts;
57
+ requireCondition((local ? /^[a-f0-9]{32}$/.test(run) : /^[1-9][0-9]*$/.test(run)) &&
58
+ /^[1-9][0-9]*$/.test(attempt) &&
59
+ /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(source) &&
60
+ /^[a-f0-9]{64}$/.test(baseline) &&
61
+ /^[0-9]{13}$/.test(expires), 'malformed admission identity');
62
+ requireCondition(cidr === publicRunnerIpv4(cidr.replace(/\/32$/, '')), 'admission is not an exact /32');
63
+ return {
64
+ ...(local ? { authority: 'local' } : {}),
65
+ run,
66
+ attempt,
67
+ source,
68
+ cidr,
69
+ baseline,
70
+ expiresAt: Number(expires),
71
+ };
72
+ }
73
+ function belongsTo(lease, context) {
74
+ return (lease.authority === context.authority &&
75
+ lease.run === context.run &&
76
+ lease.attempt === context.attempt &&
77
+ lease.source === context.source);
78
+ }
79
+ /** Remove only this lease's address. Never replace unrelated addresses with a baseline. */
80
+ async function cleanupSmokeAdmission(store, context) {
81
+ for (let attempt = 0; attempt < 3; attempt += 1) {
82
+ const before = await store.read();
83
+ const lease = parseSmokeAdmissionLease(before.description);
84
+ if (!lease) {
85
+ requireCondition(same(before.addresses, context.baseline), 'allowlist differs from committed baseline; cleanup unproved');
86
+ return;
87
+ }
88
+ requireCondition(belongsTo(lease, context), 'another run owns the admission; use protected stale recovery');
89
+ requireCondition(lease.baseline === baselineDigest(context.baseline) &&
90
+ !context.baseline.includes(lease.cidr), 'lease baseline changed; investigate without deleting');
91
+ try {
92
+ await store.update(before, {
93
+ addresses: before.addresses.filter((cidr) => cidr !== lease.cidr),
94
+ description: '',
95
+ });
96
+ }
97
+ catch {
98
+ // An update may have succeeded remotely. Read back before retrying it.
99
+ }
100
+ const after = await store.read();
101
+ if (!after.description && !after.addresses.includes(lease.cidr)) {
102
+ requireCondition(same(after.addresses, context.baseline), 'temporary admission removed but unrelated allowlist drift remains');
103
+ return;
104
+ }
105
+ }
106
+ throw new Error('Private smoke access: cleanup unproved; deployment acceptance is prohibited. ' +
107
+ (context.authority === 'local'
108
+ ? 'Preserve the private recovery receipt, stop the owning invocation, then retry ebk deploy from the same workspace and stage with its verified credential profile.'
109
+ : 'Run protected smoke-access cleanup before retrying.'));
110
+ }
111
+ /** A retained lease alone, or its expiry, is not proof that a different run ended. */
112
+ async function recoverSmokeAdmission(store, baseline, completedRun) {
113
+ const current = await store.read();
114
+ const lease = parseSmokeAdmissionLease(current.description);
115
+ if (!lease) {
116
+ requireCondition(same(current.addresses, baseline), 'unleased allowlist drift requires investigation');
117
+ return;
118
+ }
119
+ requireCondition(lease.baseline === baselineDigest(baseline), 'stale lease baseline differs from committed policy');
120
+ requireCondition(await completedRun(lease), 'prior admission run is not confirmed complete');
121
+ await cleanupSmokeAdmission(store, { ...lease, baseline });
122
+ }
123
+ async function withPrivateSmokeAdmission(input) {
124
+ const { store, context, cidr } = input;
125
+ requireCondition(cidr === publicRunnerIpv4(cidr.replace(/\/32$/, '')), 'admission is not an exact /32');
126
+ const before = await store.read();
127
+ requireCondition(!parseSmokeAdmissionLease(before.description), 'recover the existing admission before starting smoke');
128
+ requireCondition(same(before.addresses, context.baseline), 'live allowlist differs from committed baseline');
129
+ const alreadyAllowed = runnerAlreadyAllowed(cidr, context.baseline);
130
+ const description = (context.authority === 'local' ? localPrefix : prefix) +
131
+ [
132
+ context.run,
133
+ context.attempt,
134
+ context.source,
135
+ cidr,
136
+ baselineDigest(context.baseline),
137
+ (input.now ?? Date.now)() + 40 * 60_000,
138
+ ].join(',');
139
+ const lease = parseSmokeAdmissionLease(description);
140
+ requireCondition(lease !== undefined, 'admission lease is unreadable');
141
+ const signals = input.signals ?? process;
142
+ let interrupted = false;
143
+ const admissionAbort = new AbortController();
144
+ const stop = () => {
145
+ interrupted = true;
146
+ admissionAbort.abort(new Error('Private smoke interrupted'));
147
+ };
148
+ signals.on('SIGINT', stop);
149
+ signals.on('SIGTERM', stop);
150
+ try {
151
+ if (!alreadyAllowed)
152
+ await store.update(before, {
153
+ addresses: sorted([...context.baseline, cidr]),
154
+ description,
155
+ });
156
+ const after = await store.read();
157
+ requireCondition(same(after.addresses, alreadyAllowed ? context.baseline : [...context.baseline, cidr]) && after.description === (alreadyAllowed ? '' : description), 'admission readback differs');
158
+ requireCondition(!interrupted, 'interrupted before admission');
159
+ await input.awaitAdmission(admissionAbort.signal);
160
+ requireCondition(!interrupted, 'interrupted before smoke');
161
+ const result = await input.run(lease);
162
+ requireCondition(!interrupted, 'smoke interrupted');
163
+ return result;
164
+ }
165
+ finally {
166
+ try {
167
+ await cleanupSmokeAdmission(store, context);
168
+ if (!alreadyAllowed)
169
+ await input.awaitRevocation();
170
+ // Signals must not abort revocation, but they must invalidate the pending
171
+ // return value even when smoke itself already completed successfully.
172
+ requireCondition(!interrupted, 'smoke interrupted during cleanup');
173
+ }
174
+ finally {
175
+ signals.removeListener('SIGINT', stop);
176
+ signals.removeListener('SIGTERM', stop);
177
+ }
178
+ }
179
+ }
180
+ //# sourceMappingURL=private-smoke-admission.js.map
@@ -0,0 +1,18 @@
1
+ import { WAFV2Client } from '@aws-sdk/client-wafv2';
2
+ import { CloudFrontClient } from '@aws-sdk/client-cloudfront';
3
+ import type { SmokeIpSetStore } from './private-smoke-admission.js';
4
+ import type { CanonicalDeploymentStage } from '../repository-policy/index.js';
5
+ export interface PrivateSmokeResourceIdentity {
6
+ account: string;
7
+ stage: CanonicalDeploymentStage;
8
+ workspace: string;
9
+ policyDigest: string;
10
+ }
11
+ export interface PrivateSmokeClients {
12
+ waf: Pick<WAFV2Client, 'send'>;
13
+ cloudfront: Pick<CloudFrontClient, 'send'>;
14
+ }
15
+ /** Only global WAF resources attached to the exact generated Router are eligible. */
16
+ export declare function openPrivateSmokeControlPlane(identity: PrivateSmokeResourceIdentity, smokeUrl: string | undefined, clients?: PrivateSmokeClients): Promise<SmokeIpSetStore & {
17
+ arn: string;
18
+ }>;
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.openPrivateSmokeControlPlane = openPrivateSmokeControlPlane;
4
+ const client_wafv2_1 = require("@aws-sdk/client-wafv2");
5
+ const client_cloudfront_1 = require("@aws-sdk/client-cloudfront");
6
+ function check(condition, message) {
7
+ if (!condition)
8
+ throw new Error(`Private smoke access: ${message}`);
9
+ }
10
+ /** Only global WAF resources attached to the exact generated Router are eligible. */
11
+ async function openPrivateSmokeControlPlane(identity, smokeUrl, clients = {
12
+ waf: new client_wafv2_1.WAFV2Client({
13
+ region: 'us-east-1',
14
+ endpoint: 'https://wafv2.us-east-1.amazonaws.com',
15
+ maxAttempts: 3,
16
+ requestHandler: { connectionTimeout: 10_000, requestTimeout: 30_000 },
17
+ }),
18
+ cloudfront: new client_cloudfront_1.CloudFrontClient({
19
+ region: 'us-east-1',
20
+ endpoint: 'https://cloudfront.amazonaws.com',
21
+ maxAttempts: 3,
22
+ requestHandler: { connectionTimeout: 10_000, requestTimeout: 30_000 },
23
+ }),
24
+ }) {
25
+ check(/^\d{12}$/.test(identity.account) &&
26
+ /^[a-z0-9][a-z0-9-]{0,62}$/.test(identity.workspace) &&
27
+ ['development', 'staging', 'production'].includes(identity.stage) &&
28
+ /^sha256:[a-f0-9]{64}$/.test(identity.policyDigest), 'invalid committed resource identity');
29
+ const url = smokeUrl === undefined ? undefined : new URL(smokeUrl);
30
+ if (url)
31
+ check(url.protocol === 'https:' && !url.username && !url.password && !url.port, 'credential-free HTTPS Router required');
32
+ const name = `foundation-${identity.stage}-router-smoke-access`;
33
+ const ipSets = [];
34
+ let marker;
35
+ const seen = new Set();
36
+ do {
37
+ const page = await clients.waf.send(new client_wafv2_1.ListIPSetsCommand({
38
+ Scope: 'CLOUDFRONT',
39
+ Limit: 100,
40
+ NextMarker: marker,
41
+ }));
42
+ ipSets.push(...(page.IPSets ?? []));
43
+ marker = page.NextMarker;
44
+ check(!marker || !seen.has(marker), 'IP-set pagination did not advance');
45
+ if (marker)
46
+ seen.add(marker);
47
+ check(seen.size <= 100, 'IP-set inventory exceeds bounded inspection');
48
+ } while (marker);
49
+ const matches = ipSets.filter((set) => set.Name === name);
50
+ check(matches.length === 1 && matches[0].Id, 'exact stage smoke-access IP set missing or ambiguous; deploy the upgraded Foundation before private smoke');
51
+ const selected = matches[0];
52
+ const arn = `arn:aws:wafv2:us-east-1:${identity.account}:global/ipset/${name}/${selected.Id}`;
53
+ check(selected.ARN === arn, 'IP-set account/scope/identity mismatch');
54
+ const expectedTags = {
55
+ 'ebk:managed-by': 'empire-builder-kit',
56
+ 'ebk:owner': 'foundation',
57
+ 'ebk:stage': identity.stage,
58
+ 'ebk:workspace': identity.workspace,
59
+ };
60
+ async function attestTags(resourceArn) {
61
+ const tags = {};
62
+ let tagMarker;
63
+ const markers = new Set();
64
+ do {
65
+ const page = await clients.waf.send(new client_wafv2_1.ListTagsForResourceCommand({
66
+ ResourceARN: resourceArn,
67
+ NextMarker: tagMarker,
68
+ Limit: 100,
69
+ }));
70
+ for (const tag of page.TagInfoForResource?.TagList ?? []) {
71
+ if (tag.Key && tag.Value)
72
+ tags[tag.Key] = tag.Value;
73
+ }
74
+ tagMarker = page.NextMarker;
75
+ check(!tagMarker || !markers.has(tagMarker), 'tag pagination did not advance');
76
+ if (tagMarker)
77
+ markers.add(tagMarker);
78
+ check(markers.size <= 10, 'tag inventory exceeds bounded inspection');
79
+ } while (tagMarker);
80
+ for (const [key, value] of Object.entries(expectedTags))
81
+ check(tags[key] === value, 'WAF ownership or committed policy differs');
82
+ if (resourceArn === arn) {
83
+ // The dedicated smoke set has stable ownership, not mutable WAF policy.
84
+ // An older creation-time digest tag is inert. Policy binding is checked
85
+ // on the attached Web ACL before any admission, never during revocation.
86
+ check(tags['ebk:purpose'] === 'private-smoke-access', 'IP set is not owned exclusively by private smoke');
87
+ }
88
+ else {
89
+ check(tags['ebk:policy-digest'] === identity.policyDigest, 'WAF ownership or committed policy differs');
90
+ }
91
+ }
92
+ await attestTags(arn);
93
+ // Cleanup never expands access; exact tagged IP-set identity and lease are sufficient.
94
+ // Admission additionally proves the Router-to-ACL-to-IP-set attachment.
95
+ if (url) {
96
+ const distributions = [];
97
+ marker = undefined;
98
+ seen.clear();
99
+ do {
100
+ const page = await clients.cloudfront.send(new client_cloudfront_1.ListDistributionsCommand({ Marker: marker }));
101
+ distributions.push(...(page.DistributionList?.Items ?? []));
102
+ marker = page.DistributionList?.NextMarker;
103
+ check(!page.DistributionList?.IsTruncated || marker, 'truncated Router inventory has no continuation');
104
+ check(!marker || !seen.has(marker), 'Router pagination did not advance');
105
+ if (marker)
106
+ seen.add(marker);
107
+ check(seen.size <= 100, 'Router inventory exceeds bounded inspection');
108
+ } while (marker);
109
+ const routers = distributions.filter((router) => router.DomainName === url.hostname ||
110
+ router.Aliases?.Items?.includes(url.hostname));
111
+ check(routers.length === 1 &&
112
+ routers[0].Enabled &&
113
+ routers[0].ARN?.startsWith(`arn:aws:cloudfront::${identity.account}:distribution/`), 'exact account Router missing, disabled, or ambiguous');
114
+ const acls = [];
115
+ marker = undefined;
116
+ seen.clear();
117
+ do {
118
+ const page = await clients.waf.send(new client_wafv2_1.ListWebACLsCommand({
119
+ Scope: 'CLOUDFRONT',
120
+ Limit: 100,
121
+ NextMarker: marker,
122
+ }));
123
+ acls.push(...(page.WebACLs ?? []));
124
+ marker = page.NextMarker;
125
+ check(!marker || !seen.has(marker), 'Web ACL pagination did not advance');
126
+ if (marker)
127
+ seen.add(marker);
128
+ check(seen.size <= 100, 'Web ACL inventory exceeds bounded inspection');
129
+ } while (marker);
130
+ const attached = acls.filter((acl) => acl.ARN === routers[0].WebACLId);
131
+ check(attached.length === 1 &&
132
+ attached[0].Id &&
133
+ attached[0].Name &&
134
+ attached[0].ARN?.startsWith(`arn:aws:wafv2:us-east-1:${identity.account}:global/webacl/`), 'Router Web ACL is outside the exact account/scope');
135
+ const acl = attached[0];
136
+ await attestTags(acl.ARN);
137
+ const { WebACL } = await clients.waf.send(new client_wafv2_1.GetWebACLCommand({ Scope: 'CLOUDFRONT', Name: acl.Name, Id: acl.Id }));
138
+ check(WebACL?.ARN === acl.ARN, 'Web ACL readback identity differs');
139
+ const rules = WebACL?.Rules?.filter((rule) => rule.Name === 'StageIpAllowlist') ?? [];
140
+ const statement = rules[0]?.Statement?.NotStatement?.Statement;
141
+ const refs = statement?.IPSetReferenceStatement
142
+ ? [statement.IPSetReferenceStatement]
143
+ : statement?.OrStatement?.Statements?.map((item) => item.IPSetReferenceStatement);
144
+ check(rules.length === 1 &&
145
+ rules[0].Action?.Block &&
146
+ refs &&
147
+ refs.length >= 2 &&
148
+ refs.length <= 3 &&
149
+ refs.every((ref) => ref?.ARN) &&
150
+ new Set(refs.map((ref) => ref?.ARN)).size === refs.length &&
151
+ refs.filter((ref) => ref?.ARN === arn).length === 1, 'Router blocking rule does not reference the exact IP set');
152
+ // Only the unchanged same-stage baseline sets may accompany the smoke set.
153
+ check(refs.every((ref) => ref?.ARN === arn ||
154
+ ['ipv4', 'ipv6'].some((family) => ref?.ARN?.startsWith(`arn:aws:wafv2:us-east-1:${identity.account}:global/ipset/foundation-${identity.stage}-router-${family}-allowlist/`))), 'Router allowlist contains an out-of-stage reference');
155
+ }
156
+ const key = { Name: name, Id: selected.Id, Scope: 'CLOUDFRONT' };
157
+ return {
158
+ arn,
159
+ async read() {
160
+ await attestTags(arn);
161
+ const { IPSet, LockToken } = await clients.waf.send(new client_wafv2_1.GetIPSetCommand(key));
162
+ check(IPSet?.ARN === arn &&
163
+ IPSet.Name === name &&
164
+ IPSet.IPAddressVersion === 'IPV4' &&
165
+ LockToken &&
166
+ Array.isArray(IPSet.Addresses), 'live IP-set identity mismatch');
167
+ return {
168
+ addresses: IPSet.Addresses,
169
+ description: IPSet.Description ?? '',
170
+ lockToken: LockToken,
171
+ };
172
+ },
173
+ async update(previous, next) {
174
+ await attestTags(arn);
175
+ await clients.waf.send(new client_wafv2_1.UpdateIPSetCommand({
176
+ ...key,
177
+ LockToken: previous.lockToken,
178
+ Addresses: [...next.addresses],
179
+ Description: next.description || undefined,
180
+ }));
181
+ },
182
+ };
183
+ }
184
+ //# sourceMappingURL=private-smoke-control-plane.js.map
@@ -32,7 +32,12 @@ export type ProvisionedDatabaseBindings<TBindings extends DatabaseBindingDeclara
32
32
  export declare function createDatabaseBindingPlan(bindings: DatabaseBindingDeclaration, context: {
33
33
  slice: string;
34
34
  stage: string;
35
+ localDev?: boolean;
35
36
  }): DatabaseBindingPlan;
37
+ /** Validate declaration shape/collisions without planning deployment or connection coordinates. */
38
+ export declare function validateDatabaseBindings(bindings: DatabaseBindingDeclaration, context: {
39
+ slice: string;
40
+ }): Pick<DatabaseBindingPlan, 'active' | 'provisioned'>;
36
41
  export declare function provisionDatabaseBindings<TBindings extends DatabaseBindingDeclaration>(foundation: FoundationInfrastructure, options: ProvisionDatabaseBindingsOptions & {
37
42
  bindings: TBindings;
38
43
  }): ProvisionedDatabaseBindings<TBindings>;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.selectDatabaseTarget = selectDatabaseTarget;
4
4
  exports.createDatabaseBindingPlan = createDatabaseBindingPlan;
5
+ exports.validateDatabaseBindings = validateDatabaseBindings;
5
6
  exports.provisionDatabaseBindings = provisionDatabaseBindings;
6
7
  const local_database_contract_js_1 = require("./local-database-contract.js");
7
8
  const provision_logical_database_js_1 = require("./provision-logical-database.js");
@@ -25,6 +26,40 @@ function collisionKey(value) {
25
26
  return (0, local_database_contract_js_1.normalizePostgresIdentifier)(value).normalize('NFKC').toLowerCase();
26
27
  }
27
28
  function createDatabaseBindingPlan(bindings, context) {
29
+ return inspectDatabaseBindings(bindings, context.slice, (identifier) => {
30
+ if (!context.localDev)
31
+ return (0, local_database_contract_js_1.resolveLogicalDatabaseIdentifiers)({
32
+ database: identifier,
33
+ slice: context.slice,
34
+ stage: context.stage,
35
+ });
36
+ const local = (0, local_database_contract_js_1.resolveLocalDatabaseContract)({
37
+ database: identifier,
38
+ slice: context.slice,
39
+ stage: context.stage,
40
+ });
41
+ const resolved = {
42
+ database: local.database,
43
+ localDatabase: local.database,
44
+ localReadwriteRole: local.username,
45
+ readwriteRole: local.username,
46
+ readonlyRole: `${local.database}_readonly`,
47
+ migratorRole: `${local.database}_migrator`,
48
+ };
49
+ for (const [role, value] of Object.entries(resolved))
50
+ (0, local_database_contract_js_1.assertPostgresIdentifierLength)(value, `Local ${role} identifier`);
51
+ return resolved;
52
+ });
53
+ }
54
+ /** Validate declaration shape/collisions without planning deployment or connection coordinates. */
55
+ function validateDatabaseBindings(bindings, context) {
56
+ const { active, provisioned } = inspectDatabaseBindings(bindings, context.slice);
57
+ return { active, provisioned };
58
+ }
59
+ function inspectDatabaseBindings(bindings, slice, resolveIdentifiers) {
60
+ if (typeof slice !== 'string' || slice.trim() === '') {
61
+ throw new Error('Product Slice name must be a non-empty string.');
62
+ }
28
63
  if (typeof bindings !== 'object' ||
29
64
  bindings === null ||
30
65
  Array.isArray(bindings)) {
@@ -73,17 +108,13 @@ function createDatabaseBindingPlan(bindings, context) {
73
108
  if (declared.has(identifier)) {
74
109
  throw new Error(`Database identifier "${identifier}" is declared more than once. Each provisioned identifier must be unique across the binding set.`);
75
110
  }
76
- const resolved = (0, local_database_contract_js_1.resolveLogicalDatabaseIdentifiers)({
77
- database: identifier,
78
- slice: context.slice,
79
- stage: context.stage,
80
- });
81
- const key = collisionKey(resolved.database);
111
+ const resolved = resolveIdentifiers?.(identifier);
112
+ const key = collisionKey(resolved?.database ?? identifier);
82
113
  const previous = normalized.get(key);
83
114
  if (previous !== undefined) {
84
115
  throw new Error(`Database identifiers "${previous}" and "${identifier}" collide after PostgreSQL normalization. Rename one identifier; EBK never truncates or aliases database bindings.`);
85
116
  }
86
- const componentName = (0, provision_logical_database_js_1.defaultDatabaseLinkableName)(context.slice, identifier);
117
+ const componentName = (0, provision_logical_database_js_1.defaultDatabaseLinkableName)(slice, identifier);
87
118
  const previousComponent = componentNames.get(componentName);
88
119
  if (previousComponent !== undefined) {
89
120
  throw new Error(`Database identifiers "${previousComponent}" and "${identifier}" collide after SST logical-name normalization as "${componentName}". Rename one identifier so every resource name is unique before deployment.`);
@@ -91,7 +122,8 @@ function createDatabaseBindingPlan(bindings, context) {
91
122
  declared.add(identifier);
92
123
  normalized.set(key, identifier);
93
124
  componentNames.set(componentName, identifier);
94
- identifiers[identifier] = resolved;
125
+ if (resolved)
126
+ identifiers[identifier] = resolved;
95
127
  }
96
128
  }
97
129
  return {
@@ -107,6 +139,7 @@ function provisionDatabaseBindings(foundation, options) {
107
139
  const plan = createDatabaseBindingPlan(options.bindings, {
108
140
  slice: options.slice,
109
141
  stage: $app.stage,
142
+ localDev: $dev && options.localDev !== false,
110
143
  });
111
144
  const provisioned = new Map();
112
145
  for (const database of plan.provisioned) {
@@ -27,11 +27,6 @@ function provisionLogicalDatabase(foundation, options) {
27
27
  options.rotationToken.trim() === '') {
28
28
  throw new Error('Logical database rotationToken must be a non-empty string when supplied.');
29
29
  }
30
- const identifiers = (0, local_database_contract_js_1.resolveLogicalDatabaseIdentifiers)({
31
- database: options.database,
32
- slice: options.slice,
33
- stage: consumerStage,
34
- });
35
30
  const resourceName = options.linkableName ??
36
31
  defaultDatabaseLinkableName(options.slice, options.database);
37
32
  if ($dev && (options.localDev ?? true)) {
@@ -40,7 +35,12 @@ function provisionLogicalDatabase(foundation, options) {
40
35
  password: options.localDevPassword,
41
36
  port: options.localDevPort,
42
37
  slice: options.slice,
38
+ stage: consumerStage,
43
39
  });
40
+ const readonlyRole = `${localDatabase.database}_readonly`;
41
+ const migratorRole = `${localDatabase.database}_migrator`;
42
+ (0, local_database_contract_js_1.assertPostgresIdentifierLength)(readonlyRole, 'Local read-only role identifier');
43
+ (0, local_database_contract_js_1.assertPostgresIdentifierLength)(migratorRole, 'Local migrator role identifier');
44
44
  return {
45
45
  db: new sst.Linkable(resourceName, {
46
46
  properties: {
@@ -49,12 +49,17 @@ function provisionLogicalDatabase(foundation, options) {
49
49
  },
50
50
  }),
51
51
  databaseName: localDatabase.database,
52
- migratorRole: identifiers.migratorRole,
53
- readonlyRole: identifiers.readonlyRole,
54
- readwriteRole: identifiers.readwriteRole,
52
+ migratorRole,
53
+ readonlyRole,
54
+ readwriteRole: localDatabase.username,
55
55
  resourceName,
56
56
  };
57
57
  }
58
+ const identifiers = (0, local_database_contract_js_1.resolveLogicalDatabaseIdentifiers)({
59
+ database: options.database,
60
+ slice: options.slice,
61
+ stage: consumerStage,
62
+ });
58
63
  if (options.removalPolicy === 'destroy') {
59
64
  throw new Error('Logical database removalPolicy "destroy" requires a reviewed AWS-internal retirement workflow and is not supported by the v1 protected bootstrap.');
60
65
  }
@@ -63,8 +68,10 @@ function provisionLogicalDatabase(foundation, options) {
63
68
  const secretBasePath = `ebk/${consumerStage}/${options.slice}/database/${options.database}`;
64
69
  const tags = {
65
70
  'ebk:database': options.database,
71
+ 'ebk:managed-by': 'empire-builder-kit',
66
72
  'ebk:management': 'generated-database-credential',
67
73
  'ebk:slice': options.slice,
74
+ 'ebk:stage': consumerStage,
68
75
  'sst:stage': consumerStage,
69
76
  };
70
77
  // Secret containers deliberately have no SecretVersion resources. Their
@@ -1,6 +1,6 @@
1
1
  import { type ValidationResult } from '../validation.js';
2
- export declare const STANDARD_FOUNDATION_CONTRACT_VERSION: 1;
3
- export declare const STANDARD_FOUNDATION_CAPABILITIES: readonly ["network", "routing", "container-compute", "postgres", "identity", "events", "observability", "configuration", "deployment"];
2
+ export declare const STANDARD_FOUNDATION_CONTRACT_VERSION: 2;
3
+ export declare const STANDARD_FOUNDATION_CAPABILITIES: readonly ["key-value", "routing", "identity", "events", "observability", "configuration", "deployment", "network", "container-compute", "postgres"];
4
4
  export type StandardFoundationCapability = (typeof STANDARD_FOUNDATION_CAPABILITIES)[number];
5
5
  export interface FoundationRequirement {
6
6
  capabilities: StandardFoundationCapability[];
@@ -20,7 +20,7 @@ export declare const foundationRequirementSchema: {
20
20
  readonly properties: {
21
21
  readonly capabilities: {
22
22
  readonly items: {
23
- readonly enum: readonly ["network", "routing", "container-compute", "postgres", "identity", "events", "observability", "configuration", "deployment"];
23
+ readonly enum: readonly ["key-value", "routing", "identity", "events", "observability", "configuration", "deployment", "network", "container-compute", "postgres"];
24
24
  readonly type: "string";
25
25
  };
26
26
  readonly type: "array";
@@ -6,18 +6,9 @@ exports.validateFoundationRequirement = validateFoundationRequirement;
6
6
  exports.validateFoundationCompatibility = validateFoundationCompatibility;
7
7
  const validation_js_1 = require("../validation.js");
8
8
  const semver_1 = require("semver");
9
- exports.STANDARD_FOUNDATION_CONTRACT_VERSION = 1;
10
- exports.STANDARD_FOUNDATION_CAPABILITIES = [
11
- 'network',
12
- 'routing',
13
- 'container-compute',
14
- 'postgres',
15
- 'identity',
16
- 'events',
17
- 'observability',
18
- 'configuration',
19
- 'deployment',
20
- ];
9
+ const capability_plan_js_1 = require("./capability-plan.js");
10
+ exports.STANDARD_FOUNDATION_CONTRACT_VERSION = 2;
11
+ exports.STANDARD_FOUNDATION_CAPABILITIES = capability_plan_js_1.FOUNDATION_CAPABILITY_VOCABULARY;
21
12
  const capabilitySet = new Set(exports.STANDARD_FOUNDATION_CAPABILITIES);
22
13
  function isStandardFoundationCapability(value) {
23
14
  return typeof value === 'string' && capabilitySet.has(value);
@@ -91,6 +82,7 @@ function validateFoundationCompatibility(requirement, foundation) {
91
82
  });
92
83
  }
93
84
  else {
85
+ const seen = new Set();
94
86
  foundation.capabilities.forEach((capability, index) => {
95
87
  if (!isStandardFoundationCapability(capability)) {
96
88
  issues.push({
@@ -98,7 +90,27 @@ function validateFoundationCompatibility(requirement, foundation) {
98
90
  path: `foundationDescriptor.capabilities[${index}]`,
99
91
  });
100
92
  }
93
+ if (seen.has(capability)) {
94
+ issues.push({
95
+ message: 'must not contain duplicate capabilities',
96
+ path: `foundationDescriptor.capabilities[${index}]`,
97
+ });
98
+ }
99
+ seen.add(capability);
101
100
  });
101
+ if (foundation.contractVersion === '2.0.0') {
102
+ for (const [capability, dependency] of [
103
+ ['postgres', 'container-compute'],
104
+ ['container-compute', 'network'],
105
+ ]) {
106
+ if (seen.has(capability) && !seen.has(dependency)) {
107
+ issues.push({
108
+ message: `capability ${capability} requires ${dependency}`,
109
+ path: 'foundationDescriptor.capabilities',
110
+ });
111
+ }
112
+ }
113
+ }
102
114
  }
103
115
  if (requirementResult.valid &&
104
116
  typeof foundation.contractVersion === 'string' &&