@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
@@ -2,36 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.renderProductTestingFiles = renderProductTestingFiles;
4
4
  const built_in_plan_shared_js_1 = require("./built-in-plan-shared.js");
5
+ const local_source_identity_js_1 = require("./local-source-identity.js");
6
+ const built_in_plan_testing_persistence_files_js_1 = require("./built-in-plan-testing-persistence-files.js");
7
+ const deployed_smoke_readiness_js_1 = require("./deployed-smoke-readiness.js");
5
8
  /** @internal */
6
- function renderProductTestingFiles(name, pascalName) {
9
+ function renderProductTestingFiles(name, pascalName, sql = false) {
7
10
  return {
8
- 'database/test-compose.yml': `services:
9
- database:
10
- image: postgres:17-alpine
11
- environment:
12
- POSTGRES_DB: postgres
13
- POSTGRES_PASSWORD: ebk_test
14
- POSTGRES_USER: ebk_test
15
- healthcheck:
16
- test: [CMD-SHELL, "pg_isready -U ebk_test -d postgres"]
17
- interval: 1s
18
- timeout: 3s
19
- retries: 30
20
- labels:
21
- dev.empirebuilderkit.owner: test-integration
22
- dev.empirebuilderkit.run: \${EBK_TEST_RUN_ID}
23
- dev.empirebuilderkit.slice: ${name}
24
- ports:
25
- - '127.0.0.1::5432'
26
- tmpfs:
27
- - /var/lib/postgresql/data
28
- `,
11
+ ...(0, built_in_plan_testing_persistence_files_js_1.renderTestingPersistenceFiles)(name, pascalName, sql),
12
+ 'scripts/deployed-smoke-readiness.mjs': deployed_smoke_readiness_js_1.deployedSmokeReadinessScript,
29
13
  'docs/testing.md': `# ${name} testing
30
14
 
31
15
  Use the narrowest proof layer that can establish the behavior. Source tests are
32
16
  hermetic and credential-free. The \`test-integration\` target owns a disposable
33
- PostgreSQL container, creates one database per worker, applies the committed
34
- migrations, runs deterministic fixtures, and removes every resource it creates.
17
+ DynamoDB Local container and one isolated table per worker. Declared SQL adds
18
+ a PostgreSQL container and one migrated database per worker. It runs deterministic
19
+ fixtures and removes every resource it creates.
35
20
  It never uses the persistent database started by \`ebk dev\`.
36
21
 
37
22
  Every fixture run records its seed and run scope. Keep fixture data synthetic.
@@ -45,41 +30,52 @@ those validators enforce cross-field outcome rules and trusted time/workflow
45
30
  context that JSON Schema cannot establish alone.
46
31
 
47
32
  \`smoke-deployed-check\` only proves that Playwright can discover the suite. It
48
- does not contact or prove a deployment. Governed staging smoke runs through the
49
- protected \`Deployed smoke\` GitHub workflow and emits a candidate-, commit-,
50
- stage-, and cleanup-attributed result. Configure each protected environment's
51
- \`EBK_SMOKE_TARGETS\` variable as a JSON object from exact Slice name to its
52
- credential-free HTTPS \`webUrl\` and \`apiUrl\`, Cognito \`userPoolId\`, and
53
- \`clientId\`. Set \`EBK_SMOKE_AUTHORITY_VERSION\` to
54
- \`cognito-admin-cloudwatch-observe-v1\` only after the protected role is reviewed for
55
- \`DescribeUserPoolClient\`, \`AdminCreateUser\`, \`AdminSetUserPassword\`,
56
- \`AdminAddUserToGroup\`, and \`AdminDeleteUser\` on those pools and
57
- \`FilterLogEvents\` on each exact
58
- \`/ebk/<stage>/<slice>/event-consumer\` log group. The workflow creates one
59
- run-scoped synthetic customer in the Slice's narrow \`<slice>-test-writer\`
60
- group and one distinct synthetic reviewer in \`<slice>-admin\`. It never grants
61
- the customer administrator authority, strips AWS credentials from the browser
62
- child,
63
- observes the published event only from the credential-bearing parent, removes
64
- both principals and all raw browser and log state, and retains only allowlisted
65
- sanitized evidence.
33
+ does not contact or prove a deployment. The root governed lifecycle runs each
34
+ Slice's \`smoke-deployed\` target immediately after its successful native SST
35
+ deployment and migration. Local and GitHub execution use the same stage
36
+ deployment role and exact deployed outputs; no separate smoke role, workflow,
37
+ target registry, or staging-evidence reconciliation graph exists.
38
+
39
+ The generated Next.js component selects native SST invalidation completion
40
+ before deployment returns. This is not a readiness or application guarantee;
41
+ the subsequent readiness and browser gates still apply.
66
42
 
67
- The environment-only \`AWS_SMOKE_ROLE_ARN\` is a setup/observation role, never
68
- a deployment role. Its GitHub OIDC trust is limited to this repository and the
69
- matching protected environment. Its policy names only the reviewed user-pool
70
- ARNs for the five Cognito actions above and the exact generated event-consumer
71
- log-group ARNs for \`logs:FilterLogEvents\`. It has no CloudFormation, SST,
72
- application mutation, wildcard Logs query, \`GetLogEvents\`, \`StartQuery\`, or
73
- \`logs:Unmask\` authority. GitHub bootstrap verifies that the secret name exists
74
- only in each protected environment; it never creates the secret or role and
75
- cannot attest to the hidden role policy. Review that policy before setting the
76
- authority-version acknowledgement.
43
+ Before synthetic users or browser assertions, a read-only prerequisite checks
44
+ the exact API and web service, stage and deployed build. Transient gateway or
45
+ network unavailability has one fixed thirty-second readiness bound. The one
46
+ exception is the Router's own CloudFront error page for the web route: the
47
+ pinned SST Router reads routing from an eventually consistent CloudFront
48
+ KeyValueStore, so a newly deployed route can briefly reach the placeholder
49
+ origin at an edge. Only that classified page may extend readiness, to at most
50
+ three hundred seconds; any other failure ends the extension. Readiness then
51
+ requires consecutive healthy rounds on fresh connections spanning thirty
52
+ seconds; any fallthrough restarts that window. Wrong build
53
+ identity, malformed responses, certificate errors, redirects and access denials
54
+ fail immediately. Bounded status, request-start time, duration, valid
55
+ CloudFront request-ID/POP/cache-result observations and the edge-routing
56
+ classification are retained in \`deployed-readiness.json\`; no URLs, response
57
+ bodies, cookies, arbitrary headers or credentials are retained. Duration
58
+ measures the request through response headers (or transport failure), not
59
+ response-body processing.
60
+ This prerequisite is not application acceptance and does not change browser or
61
+ event deadlines. Subsequent failed-then-passed assertions remain flaky/failing.
77
62
 
78
- A successful \`develop\` deployment automatically starts staging smoke for
79
- every registered Slice target at that exact commit. The credential-free
80
- \`staging-evidence\` promotion check downloads only artifacts from the managed
81
- smoke workflow and rejects missing, mismatched, flaky, failed, incomplete, or
82
- cleanup-deficient evidence.
63
+ Development and staging smoke observe the exact event for at most sixteen
64
+ minutes; production observes it for at most ninety seconds. Ordinary delivery
65
+ uses DynamoDB Streams or SQL post-commit publication/notification, not a wait
66
+ for the recovery schedule. New SQL recovery defaults to hourly; a missed
67
+ notification may therefore leave a bounded smoke unsuccessful while its durable
68
+ intent remains recoverable. These observation limits include CloudWatch Logs
69
+ request latency; the runner aborts an in-flight request when time runs out.
70
+ Do not change maintenance pauses or increase timeouts merely to claim success.
71
+
72
+ The runner creates one run-scoped synthetic customer in the Slice's narrow
73
+ \`<slice>-test-writer\` group and one distinct synthetic reviewer in
74
+ \`<slice>-admin\`. It never grants the customer administrator authority, strips
75
+ AWS credentials from the browser child, observes the published event only from
76
+ the credential-bearing parent, removes both principals and all raw browser and
77
+ log state, and retains only allowlisted sanitized evidence. A failed smoke ends
78
+ the lifecycle immediately and no successful deployment receipt is written.
83
79
 
84
80
  One optional evidence-level retry replays the complete, identical browser or
85
81
  live-integration proof. Consequently \`counts.retried\` is always zero or one.
@@ -94,78 +90,6 @@ Local quarantine uses reviewed date expiry. A run-count record binds an
94
90
  absolute \`.github/workflows/*.yml\` path and \`expiresAfterRun\`; it is accepted
95
91
  only when GitHub supplies a matching \`GITHUB_WORKFLOW_REF\` and positive
96
92
  \`GITHUB_RUN_NUMBER\`, and it must expire within 25 trusted workflow runs.
97
- `,
98
- 'integration/record.spec.ts': `import { Client } from 'pg';
99
- import { describe, expect, it } from 'vitest';
100
- import { build${pascalName}RecordFixture } from '../testing/fixtures/records.js';
101
-
102
- const databaseUrl = process.env.DATABASE_URL;
103
- if (!databaseUrl) {
104
- throw new Error('DATABASE_URL is required for ${name} local integration proof.');
105
- }
106
- const seed = process.env.EBK_TEST_SEED;
107
- if (!seed) {
108
- throw new Error('EBK_TEST_SEED is required for reproducible integration fixtures.');
109
- }
110
-
111
- describe('${name} database integration', () => {
112
- it('writes and reads one deterministic record in its worker database', async () => {
113
- const fixture = build${pascalName}RecordFixture(seed);
114
- const client = new Client({ connectionString: databaseUrl });
115
- await client.connect();
116
- try {
117
- await client.query(
118
- \`INSERT INTO records
119
- (id, name, owner_id, run_scope, test_expires_at)
120
- VALUES ($1::uuid, $2, $3, $4, now() + INTERVAL '1 day')\`,
121
- [fixture.id, fixture.name, 'synthetic-test-owner', seed],
122
- );
123
- const result = await client.query(
124
- 'SELECT id::text AS id, name FROM records WHERE id = $1::uuid',
125
- [fixture.id],
126
- );
127
- expect(result.rows).toEqual([fixture]);
128
- } finally {
129
- await client.end();
130
- }
131
- });
132
- });
133
- `,
134
- 'integration/migrations.spec.ts': `import { Client } from 'pg';
135
- import { describe, expect, it } from 'vitest';
136
-
137
- const databaseUrl = process.env.DATABASE_URL;
138
- if (!databaseUrl) {
139
- throw new Error('DATABASE_URL is required for ${name} local integration proof.');
140
- }
141
-
142
- describe('${name} migration integration', () => {
143
- it('exposes the committed records table contract', async () => {
144
- const requiredColumns = [
145
- { column_name: 'id', data_type: 'uuid' },
146
- { column_name: 'name', data_type: 'text' },
147
- { column_name: 'owner_id', data_type: 'text' },
148
- { column_name: 'run_scope', data_type: 'text' },
149
- { column_name: 'created_at', data_type: 'timestamp with time zone' },
150
- ];
151
- const client = new Client({ connectionString: databaseUrl });
152
- await client.connect();
153
- try {
154
- const result = await client.query(
155
- \`SELECT column_name, data_type
156
- FROM information_schema.columns
157
- WHERE table_schema = 'public'
158
- AND table_name = 'records'
159
- AND column_name = ANY($1::text[])
160
- ORDER BY ordinal_position\`,
161
- [requiredColumns.map(({ column_name }) => column_name)],
162
- );
163
- expect(result.rows).toEqual(requiredColumns);
164
- } finally {
165
- await client.end();
166
- }
167
- });
168
- });
169
93
  `,
170
94
  'testing/fixtures/records.ts': `import { createTypedFixtureBuilder } from '@empire-builder-kit/nx/testing-evidence';
171
95
 
@@ -338,7 +262,7 @@ import {
338
262
  mkdirSync,
339
263
  readFileSync,
340
264
  realpathSync,
341
- readdirSync,
265
+ ${sql ? ' readdirSync,\n' : ''}\
342
266
  rmSync,
343
267
  statSync,
344
268
  writeFileSync,
@@ -346,7 +270,9 @@ import {
346
270
  import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
347
271
  import { createRequire } from 'node:module';
348
272
  import { TextDecoder } from 'node:util';
349
- import pg from 'pg';
273
+ ${sql ? "import pg from 'pg';" : ''}
274
+ import { CreateTableCommand, DynamoDBClient, ListTablesCommand } from '@aws-sdk/client-dynamodb';
275
+ import { DYNAMO_PENDING_INDEX } from '@empire-builder-kit/runtime/key-value';
350
276
  import {
351
277
  githubWorkflowRun,
352
278
  reconcileRunnerQuarantine,
@@ -355,14 +281,14 @@ import {
355
281
 
356
282
  const require = createRequire(import.meta.url);
357
283
  const {
358
- createLocalTestScope,
284
+ ${sql ? ' createLocalTestScope,\n' : ''}\
359
285
  createTestingEvidenceFromRunnerAttempts,
360
286
  inspectTestingEvidenceArtifact,
361
287
  normalizeEbkIntegrationEvidenceAttempt,
362
288
  sanitizeTestingEvidenceSummary,
363
289
  validateTestingEvidenceQuarantine,
364
290
  } = require('@empire-builder-kit/nx/testing-evidence');
365
- const { Client } = pg;
291
+ ${sql ? 'const { Client } = pg;' : ''}
366
292
  const fatalUtf8Decoder = new TextDecoder('utf-8', { fatal: true });
367
293
  const projectRoot = process.cwd();
368
294
  const workspaceRoot = resolve(projectRoot, '../..');
@@ -398,9 +324,8 @@ const run = (command, args, options = {}) => {
398
324
  }
399
325
  return result.stdout.trim();
400
326
  };
401
- const gitCommit =
402
- process.env.EBK_SOURCE_COMMIT ??
403
- run('git', ['rev-parse', 'HEAD'], { cwd: workspaceRoot });
327
+ ${local_source_identity_js_1.localSourceCommitFunction}
328
+ const gitCommit = localSourceCommit();
404
329
  const workspacePackage = readJson(join(workspaceRoot, 'package.json'));
405
330
  const ownership = readJson(join(projectRoot, '.ebk', 'ownership.json'));
406
331
  const frameworkCandidate =
@@ -658,7 +583,8 @@ function pruneStaleTestProjects() {
658
583
  }
659
584
  }
660
585
 
661
- async function prepareDatabase(adminUrl, databaseName) {
586
+ ${sql
587
+ ? `async function prepareDatabase(adminUrl, databaseName) {
662
588
  const admin = new Client({ connectionString: adminUrl });
663
589
  await admin.connect();
664
590
  try {
@@ -681,9 +607,54 @@ async function prepareDatabase(adminUrl, databaseName) {
681
607
  await client.end();
682
608
  }
683
609
  return databaseUrl;
610
+ }`
611
+ : ''}
612
+
613
+ function localDynamoClient(endpoint) {
614
+ const url = new URL(endpoint);
615
+ if (url.protocol !== 'http:' || url.hostname !== '127.0.0.1' || !url.port ||
616
+ url.username || url.password || url.search || url.hash || url.pathname !== '/')
617
+ throw new Error('Integration DynamoDB must use its owned loopback endpoint.');
618
+ return new DynamoDBClient({ endpoint, region: 'us-east-1', maxAttempts: 1,
619
+ credentials: { accessKeyId: 'LOCALFIXTURE', secretAccessKey: 'local-fixture-not-an-aws-credential' } });
620
+ }
621
+
622
+ async function waitForLocalDynamo(endpoint) {
623
+ const client = localDynamoClient(endpoint);
624
+ const deadline = Date.now() + 30_000;
625
+ try {
626
+ for (;;) {
627
+ try { await client.send(new ListTablesCommand({ Limit: 1 })); return; }
628
+ catch (error) {
629
+ if (Date.now() >= deadline) throw error;
630
+ await new Promise((resolveWait) => setTimeout(resolveWait, 200));
631
+ }
632
+ }
633
+ } finally { client.destroy(); }
634
+ }
635
+
636
+ async function prepareKeyValue(endpoint, attempt, worker) {
637
+ if (!validRunId || ![1, 2].includes(attempt) || !Number.isInteger(worker) || worker < 0 || worker > 7)
638
+ throw new Error('Integration table identity is invalid.');
639
+ const tableName = 'ebk-test-${name}-' + runId + '-a' + attempt + '-w' + worker;
640
+ const client = localDynamoClient(endpoint);
641
+ try {
642
+ await client.send(new CreateTableCommand({ TableName: tableName, BillingMode: 'PAY_PER_REQUEST',
643
+ AttributeDefinitions: [
644
+ { AttributeName: 'pk', AttributeType: 'S' }, { AttributeName: 'sk', AttributeType: 'S' },
645
+ { AttributeName: 'pendingPk', AttributeType: 'S' }, { AttributeName: 'pendingAt', AttributeType: 'N' },
646
+ ],
647
+ KeySchema: [{ AttributeName: 'pk', KeyType: 'HASH' }, { AttributeName: 'sk', KeyType: 'RANGE' }],
648
+ GlobalSecondaryIndexes: [{ IndexName: DYNAMO_PENDING_INDEX,
649
+ KeySchema: [{ AttributeName: 'pendingPk', KeyType: 'HASH' }, { AttributeName: 'pendingAt', KeyType: 'RANGE' }],
650
+ Projection: { ProjectionType: 'ALL' } }],
651
+ StreamSpecification: { StreamEnabled: true, StreamViewType: 'NEW_AND_OLD_IMAGES' },
652
+ }));
653
+ return tableName;
654
+ } finally { client.destroy(); }
684
655
  }
685
656
 
686
- function runWorker(worker, databaseUrl, reportPath, attempt) {
657
+ function runWorker(worker, persistence, reportPath, attempt) {
687
658
  const arguments_ = [
688
659
  installedVitestCommand.entryPoint,
689
660
  'run',
@@ -724,7 +695,11 @@ function runWorker(worker, databaseUrl, reportPath, attempt) {
724
695
  cwd: projectRoot,
725
696
  env: {
726
697
  ...childEnvironment,
727
- DATABASE_URL: databaseUrl,
698
+ ...(persistence.databaseUrl ? { DATABASE_URL: persistence.databaseUrl } : {}),
699
+ EBK_TEST_DYNAMODB_ENDPOINT: persistence.endpoint,
700
+ EBK_TEST_DYNAMODB_TABLE: persistence.tableName,
701
+ EBK_STAGE: 'development',
702
+ EVENT_BUS_NAME: 'local-integration-events',
728
703
  EBK_TEST_ATTEMPT: String(attempt),
729
704
  EBK_TEST_RUN_ID: runId,
730
705
  EBK_TEST_SEED: seed,
@@ -909,16 +884,17 @@ function readBoundedVitestReport(reportPath) {
909
884
  return { report };
910
885
  }
911
886
 
912
- async function runAttempt(attempt, adminUrl) {
887
+ async function runAttempt(attempt, endpoint${sql ? ', adminUrl' : ''}) {
913
888
  const attemptStartedAt = new Date().toISOString();
914
889
  const findings = [];
915
890
  const reports = [];
916
891
  const reportPaths = [];
917
892
  let workerResults = [];
918
893
  try {
919
- const databaseUrls = [];
894
+ const persistenceWorkers = [];
920
895
  for (let worker = 0; worker < workers; worker += 1) {
921
- const scope = createLocalTestScope({
896
+ ${sql
897
+ ? `const scope = createLocalTestScope({
922
898
  capabilities: {
923
899
  canCreateDatabase: true,
924
900
  canForceDropDatabase: true,
@@ -935,18 +911,18 @@ async function runAttempt(attempt, adminUrl) {
935
911
  },
936
912
  sharedDatabaseName: 'postgres',
937
913
  });
938
- databaseUrls.push(
939
- await prepareDatabase(adminUrl, scope.databaseName),
940
- );
914
+ const databaseUrl = await prepareDatabase(adminUrl, scope.databaseName);`
915
+ : ''}
916
+ persistenceWorkers.push({ endpoint, tableName: await prepareKeyValue(endpoint, attempt, worker)${sql ? ', databaseUrl' : ''} });
941
917
  }
942
918
  workerResults = await Promise.all(
943
- databaseUrls.map((databaseUrl, worker) => {
919
+ persistenceWorkers.map((persistence, worker) => {
944
920
  const reportPath = join(
945
921
  rawRoot,
946
922
  'vitest-attempt-' + attempt + '-worker-' + worker + '.json',
947
923
  );
948
924
  reportPaths.push(reportPath);
949
- return runWorker(worker, databaseUrl, reportPath, attempt);
925
+ return runWorker(worker, persistence, reportPath, attempt);
950
926
  }),
951
927
  );
952
928
  const workerDiagnostics = [];
@@ -1164,11 +1140,18 @@ if (process.exitCode === undefined) {
1164
1140
  const reports = [];
1165
1141
  const reportPaths = [];
1166
1142
  try {
1143
+ // Even a partially failed compose up can create owned resources.
1144
+ proofStarted = true;
1167
1145
  run('docker', [...composeArgs, 'up', '--detach', '--wait'], {
1168
1146
  env: { ...process.env, EBK_TEST_RUN_ID: runId },
1169
1147
  });
1170
- proofStarted = true;
1171
- const address = run('docker', [
1148
+ const keyValueAddress = run('docker', [...composeArgs, 'port', 'key-value', '8000']);
1149
+ const keyValuePort = /:(\\d+)\\s*$/.exec(keyValueAddress)?.[1];
1150
+ if (!keyValuePort) throw new Error('Docker did not report the integration DynamoDB port.');
1151
+ const endpoint = 'http://127.0.0.1:' + keyValuePort;
1152
+ await waitForLocalDynamo(endpoint);
1153
+ ${sql
1154
+ ? `const address = run('docker', [
1172
1155
  ...composeArgs,
1173
1156
  'port',
1174
1157
  'database',
@@ -1177,13 +1160,14 @@ if (process.exitCode === undefined) {
1177
1160
  const port = /:(\\d+)\\s*$/.exec(address)?.[1];
1178
1161
  if (!port) throw new Error('Docker did not report the integration port.');
1179
1162
  const adminUrl =
1180
- 'postgresql://ebk_test:ebk_test@127.0.0.1:' + port + '/postgres';
1181
- const first = await runAttempt(1, adminUrl);
1163
+ 'postgresql://ebk_test:ebk_test@127.0.0.1:' + port + '/postgres';`
1164
+ : ''}
1165
+ const first = await runAttempt(1, endpoint${sql ? ', adminUrl' : ''});
1182
1166
  attempts.push(first.normalized);
1183
1167
  reports.push(...first.reports);
1184
1168
  reportPaths.push(...first.reportPaths);
1185
1169
  if (first.normalized.failed > 0) {
1186
- const second = await runAttempt(2, adminUrl);
1170
+ const second = await runAttempt(2, endpoint${sql ? ', adminUrl' : ''});
1187
1171
  attempts.push(second.normalized);
1188
1172
  reports.push(...second.reports);
1189
1173
  reportPaths.push(...second.reportPaths);
@@ -1310,7 +1294,9 @@ if (process.exitCode === undefined) {
1310
1294
  }
1311
1295
  }
1312
1296
  `,
1313
- 'scripts/run-smoke-deployed.mjs': `import {
1297
+ 'scripts/run-smoke-deployed.mjs': `import { sliceAuthorizationGroupNames } from '../authorization/groups.mjs';
1298
+ import { waitForDeployedSmokeReadiness } from './deployed-smoke-readiness.mjs';
1299
+ import {
1314
1300
  AdminAddUserToGroupCommand,
1315
1301
  AdminCreateUserCommand,
1316
1302
  AdminDeleteUserCommand,
@@ -1333,6 +1319,7 @@ import {
1333
1319
  writeFileSync,
1334
1320
  } from 'node:fs';
1335
1321
  import { join, relative, resolve } from 'node:path';
1322
+ import { performance } from 'node:perf_hooks';
1336
1323
  import { createRequire } from 'node:module';
1337
1324
  import { TextDecoder } from 'node:util';
1338
1325
  import {
@@ -1340,6 +1327,7 @@ import {
1340
1327
  playwrightSkippedTestIds,
1341
1328
  reconcileRunnerQuarantine,
1342
1329
  } from '../testing/quarantine-runtime.mjs';
1330
+ import { assertWorkspaceStageOwnershipForWorkspace } from '@empire-builder-kit/nx/workspace-deployment';
1343
1331
 
1344
1332
  const require = createRequire(import.meta.url);
1345
1333
  const {
@@ -1381,6 +1369,15 @@ const run = (command, args, options = {}) => {
1381
1369
  const gitCommit =
1382
1370
  process.env.EBK_SOURCE_COMMIT ??
1383
1371
  run('git', ['rev-parse', 'HEAD'], { cwd: workspaceRoot });
1372
+ // The deployed Functions report the build identity the packaged executor
1373
+ // hands over (EBK_DEPLOYED_SOURCE_COMMIT: the release source of promoted
1374
+ // immutable artifacts); evidence keeps binding the source commit this run
1375
+ // executes under.
1376
+ const deployedSourceCommit = /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(
1377
+ process.env.EBK_DEPLOYED_SOURCE_COMMIT ?? '',
1378
+ )
1379
+ ? process.env.EBK_DEPLOYED_SOURCE_COMMIT
1380
+ : gitCommit;
1384
1381
  const workspacePackage = readJson(join(workspaceRoot, 'package.json'));
1385
1382
  const ownership = readJson(join(projectRoot, '.ebk', 'ownership.json'));
1386
1383
  const frameworkCandidate =
@@ -1397,6 +1394,14 @@ const userPoolId = process.env.EBK_SMOKE_USER_POOL_ID ?? '';
1397
1394
  const clientId = process.env.EBK_SMOKE_CLIENT_ID ?? '';
1398
1395
  const smokeAuthority =
1399
1396
  process.env.EBK_SMOKE_AUTHORITY_VERSION ?? '';
1397
+ const lifecycleAdapter = process.env.EBK_NX_STAGE_LIFECYCLE ?? '';
1398
+ const deployedEnvironmentClass =
1399
+ lifecycleAdapter === 'local'
1400
+ ? 'local-federated'
1401
+ : lifecycleAdapter === 'github'
1402
+ ? 'protected-github'
1403
+ : undefined;
1404
+ const unexpectedArguments = process.argv.slice(2);
1400
1405
  const requestedRunId = process.env.EBK_TEST_RUN_ID;
1401
1406
  const runId = requestedRunId ?? randomUUID().replaceAll('-', '');
1402
1407
  const seed = process.env.EBK_TEST_SEED ?? runId;
@@ -1406,8 +1411,10 @@ const evidenceRunId = validRunId ? runId : 'invalid-run-id';
1406
1411
  const evidenceSeed = validSeed ? seed : 'invalid-seed';
1407
1412
  const resultPath = join(evidenceRoot, 'smoke-deployed.json');
1408
1413
  const sanitizedReportPath = join(evidenceRoot, 'playwright-smoke.json');
1414
+ const readinessPath = join(evidenceRoot, 'deployed-readiness.json');
1409
1415
  rmSync(resultPath, { force: true });
1410
1416
  rmSync(sanitizedReportPath, { force: true });
1417
+ rmSync(readinessPath, { force: true });
1411
1418
  const rawPath = (attempt) =>
1412
1419
  join(rawRoot, 'playwright-smoke-' + attempt + '.json');
1413
1420
  const dataCleanupPath = (attempt) =>
@@ -1483,7 +1490,7 @@ function failPreflight(
1483
1490
  attempts: [],
1484
1491
  cleanup,
1485
1492
  environment: {
1486
- class: 'protected-github',
1493
+ class: deployedEnvironmentClass ?? 'unresolved-adapter',
1487
1494
  deployed: true,
1488
1495
  stage: stage || 'unresolved',
1489
1496
  },
@@ -1597,6 +1604,30 @@ function validObservationIntent(value) {
1597
1604
  );
1598
1605
  }
1599
1606
 
1607
+ // Names the failed specs by their static titles so retained evidence says
1608
+ // which journey failed without carrying runner output.
1609
+ function playwrightFailureDiagnostic(report) {
1610
+ const titles = [];
1611
+ const visit = (suite, parents) => {
1612
+ const nextTitles = suite.title ? [...parents, suite.title] : parents;
1613
+ for (const spec of suite.specs ?? []) {
1614
+ if (spec?.ok === false && titles.length < 8) {
1615
+ titles.push(
1616
+ [...nextTitles, spec.title ?? '']
1617
+ .filter(Boolean)
1618
+ .join(' > ')
1619
+ .slice(0, 160),
1620
+ );
1621
+ }
1622
+ }
1623
+ for (const child of suite.suites ?? []) visit(child, nextTitles);
1624
+ };
1625
+ for (const suite of report?.suites ?? []) visit(suite, []);
1626
+ return titles.length > 0
1627
+ ? 'Playwright smoke assertions failed: ' + titles.join('; ')
1628
+ : 'Playwright smoke assertions failed.';
1629
+ }
1630
+
1600
1631
  function inspectPlaywrightReportPolicy(report) {
1601
1632
  const config = report?.config;
1602
1633
  const stats = report?.stats;
@@ -1690,6 +1721,29 @@ function inspectPlaywrightReportPolicy(report) {
1690
1721
  };
1691
1722
  }
1692
1723
 
1724
+ function requiresScheduledDeliveryObservation(stage) {
1725
+ return ['development', 'staging', 'production'].includes(stage);
1726
+ }
1727
+
1728
+ // A successful browser journey may have deleted its synthetic record, while
1729
+ // its mutation receipt remains. Replaying that same journey/run scope cannot
1730
+ // recreate the record, even when the first cleanup completed successfully.
1731
+ function shouldRetryDeployedSmoke(execution) {
1732
+ return (
1733
+ execution.failed > 0 &&
1734
+ execution.dataCleanup?.outcome === 'not-required' &&
1735
+ execution.observationFindings.length === 0
1736
+ );
1737
+ }
1738
+
1739
+ function scheduledDeliveryDeadlineFinding() {
1740
+ return {
1741
+ classification: 'assertion-failed',
1742
+ summary:
1743
+ 'The exact published event and correlation were not observed in the managed event-consumer log group within the bounded window.',
1744
+ };
1745
+ }
1746
+
1693
1747
  async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
1694
1748
  let intent;
1695
1749
  try {
@@ -1711,7 +1765,12 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
1711
1765
  }
1712
1766
  const logGroupName = '/ebk/' + stage + '/${name}/event-consumer';
1713
1767
  const startTime = Math.max(0, Date.parse(attemptStartedAt) - 5_000);
1714
- for (let poll = 0; poll < 8; poll += 1) {
1768
+ const timeoutMilliseconds = stage === 'production' ? 90_000 : 960_000;
1769
+ const deadline = performance.now() + timeoutMilliseconds;
1770
+ let consecutiveUnavailableReads = 0;
1771
+ while (true) {
1772
+ const remainingRequestMilliseconds = deadline - performance.now();
1773
+ if (remainingRequestMilliseconds <= 0) break;
1715
1774
  let response;
1716
1775
  try {
1717
1776
  response = await logs.send(
@@ -1721,14 +1780,47 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
1721
1780
  logGroupName,
1722
1781
  startTime,
1723
1782
  }),
1783
+ {
1784
+ abortSignal: AbortSignal.timeout(
1785
+ Math.max(1, Math.ceil(remainingRequestMilliseconds)),
1786
+ ),
1787
+ },
1724
1788
  );
1725
1789
  } catch (error) {
1790
+ if (error?.name === 'ServiceUnavailableException') {
1791
+ consecutiveUnavailableReads += 1;
1792
+ // Retry the read, not the already-mutating browser journey. Keep this
1793
+ // much shorter than the delivery deadline when Logs is unavailable.
1794
+ const remainingDelayMilliseconds = deadline - performance.now();
1795
+ const retryDelayMilliseconds = 1_000 * consecutiveUnavailableReads;
1796
+ if (
1797
+ consecutiveUnavailableReads >= 3 ||
1798
+ remainingDelayMilliseconds <= retryDelayMilliseconds
1799
+ ) {
1800
+ return permissionFailure(
1801
+ error,
1802
+ 'event-consumer observation',
1803
+ 'CloudWatch Logs',
1804
+ );
1805
+ }
1806
+ await new Promise((resolveDelay) =>
1807
+ setTimeout(resolveDelay, retryDelayMilliseconds),
1808
+ );
1809
+ continue;
1810
+ }
1811
+ if (['AbortError', 'TimeoutError'].includes(error?.name)) {
1812
+ return scheduledDeliveryDeadlineFinding();
1813
+ }
1726
1814
  return permissionFailure(
1727
1815
  error,
1728
1816
  'event-consumer observation',
1729
1817
  'CloudWatch Logs',
1730
1818
  );
1731
1819
  }
1820
+ consecutiveUnavailableReads = 0;
1821
+ if (performance.now() > deadline) {
1822
+ return scheduledDeliveryDeadlineFinding();
1823
+ }
1732
1824
  const observed = (response.events ?? []).some(({ message }) => {
1733
1825
  const record = structuredLogRecord(message);
1734
1826
  return (
@@ -1744,15 +1836,13 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
1744
1836
  );
1745
1837
  });
1746
1838
  if (observed) return undefined;
1747
- if (poll < 7) {
1748
- await new Promise((resolveDelay) => setTimeout(resolveDelay, 3_000));
1749
- }
1839
+ const remainingDelayMilliseconds = deadline - performance.now();
1840
+ if (remainingDelayMilliseconds <= 0) break;
1841
+ await new Promise((resolveDelay) =>
1842
+ setTimeout(resolveDelay, Math.min(3_000, remainingDelayMilliseconds)),
1843
+ );
1750
1844
  }
1751
- return {
1752
- classification: 'assertion-failed',
1753
- summary:
1754
- 'The exact published event and correlation were not observed in the managed event-consumer log group within the bounded window.',
1755
- };
1845
+ return scheduledDeliveryDeadlineFinding();
1756
1846
  }
1757
1847
 
1758
1848
  const url = credentialFreeHttpsUrl(smokeUrl);
@@ -1763,7 +1853,7 @@ const validIdentity =
1763
1853
  /^[A-Za-z0-9_-]{1,128}_[A-Za-z0-9]{1,128}$/.test(userPoolId) &&
1764
1854
  /^[a-z0-9]{1,128}$/.test(clientId);
1765
1855
  if (
1766
- !['staging', 'production'].includes(stage) ||
1856
+ !['development', 'staging', 'production'].includes(stage) ||
1767
1857
  !url ||
1768
1858
  !apiUrl ||
1769
1859
  normalizedProductPath !== expectedProductPath ||
@@ -1772,14 +1862,35 @@ if (
1772
1862
  !validSourceCommit ||
1773
1863
  !validRunId ||
1774
1864
  !validSeed ||
1865
+ !deployedEnvironmentClass ||
1866
+ unexpectedArguments.length > 0 ||
1775
1867
  smokeAuthority !== 'cognito-admin-cloudwatch-observe-v1' ||
1776
1868
  !process.env.AWS_REGION
1777
1869
  ) {
1778
1870
  failPreflight(
1779
1871
  'prerequisite-missing',
1780
- 'Protected smoke requires staging or production, one exact source commit, reviewed credential-free HTTPS web and API targets, exact Cognito identity, bounded run/seed identity, AWS region, and cognito-admin-cloudwatch-observe-v1 authority acknowledgement.',
1872
+ 'Deployed smoke requires development, staging, or production, one exact source commit, native credential-free HTTPS web and API outputs, exact Cognito identity, bounded run/seed identity, AWS region, and cognito-admin-cloudwatch-observe-v1 authority acknowledgement.',
1781
1873
  );
1782
1874
  }
1875
+ if (process.exitCode === undefined) {
1876
+ try {
1877
+ const ownership = await assertWorkspaceStageOwnershipForWorkspace(workspaceRoot, stage, {
1878
+ ...(process.env.AWS_PROFILE ? { profile: process.env.AWS_PROFILE } : {}),
1879
+ ...(process.env.AWS_CONFIG_FILE ? { configFilepath: process.env.AWS_CONFIG_FILE } : {}),
1880
+ ...(process.env.AWS_SHARED_CREDENTIALS_FILE
1881
+ ? { credentialsFilepath: process.env.AWS_SHARED_CREDENTIALS_FILE }
1882
+ : {}),
1883
+ });
1884
+ if (process.env.AWS_REGION !== ownership.region) {
1885
+ throw new Error('Deployed smoke Region differs from its exact workspace owner tuple.');
1886
+ }
1887
+ } catch {
1888
+ failPreflight(
1889
+ 'authorization-denied',
1890
+ 'Deployed smoke requires this workspace to own the exact account, Region, and canonical stage tuple.',
1891
+ );
1892
+ }
1893
+ }
1783
1894
  if (process.exitCode === undefined) {
1784
1895
  let quarantine;
1785
1896
  try {
@@ -1809,6 +1920,23 @@ if (process.exitCode === undefined) {
1809
1920
  }
1810
1921
  }
1811
1922
 
1923
+ if (process.exitCode === undefined) {
1924
+ const readiness = await waitForDeployedSmokeReadiness({
1925
+ apiUrl: smokeApiUrl,
1926
+ webUrl: smokeUrl,
1927
+ service: '${name}',
1928
+ stage,
1929
+ sourceCommit: deployedSourceCommit,
1930
+ });
1931
+ writeFileSync(readinessPath, JSON.stringify({
1932
+ schemaVersion: 1, source, deployedSourceCommit, stage, slice: '${name}',
1933
+ result: readiness,
1934
+ }, null, 2) + '\\n', { encoding: 'utf8', mode: 0o600 });
1935
+ if (readiness.outcome !== 'ready') {
1936
+ failPreflight(readiness.classification, readiness.summary);
1937
+ }
1938
+ }
1939
+
1812
1940
  if (process.exitCode === undefined) {
1813
1941
  const cognito = new CognitoIdentityProviderClient({
1814
1942
  region: process.env.AWS_REGION,
@@ -1857,7 +1985,7 @@ if (process.exitCode === undefined) {
1857
1985
  );
1858
1986
  await cognito.send(
1859
1987
  new AdminAddUserToGroupCommand({
1860
- GroupName: '${name}-test-writer',
1988
+ GroupName: sliceAuthorizationGroupNames(stage).testWriter,
1861
1989
  Username: principalEmail,
1862
1990
  UserPoolId: userPoolId,
1863
1991
  }),
@@ -1884,7 +2012,7 @@ if (process.exitCode === undefined) {
1884
2012
  );
1885
2013
  await cognito.send(
1886
2014
  new AdminAddUserToGroupCommand({
1887
- GroupName: '${name}-admin',
2015
+ GroupName: sliceAuthorizationGroupNames(stage).admin,
1888
2016
  Username: reviewerEmail,
1889
2017
  UserPoolId: userPoolId,
1890
2018
  }),
@@ -2015,11 +2143,12 @@ if (process.exitCode === undefined) {
2015
2143
  encoding: 'utf8',
2016
2144
  env: {
2017
2145
  ...childEnvironment,
2018
- EBK_SOURCE_COMMIT: gitCommit,
2146
+ EBK_SOURCE_COMMIT: deployedSourceCommit,
2019
2147
  EBK_STAGE: stage,
2020
2148
  EBK_SMOKE_API_URL: apiUrl.href,
2021
2149
  EBK_SMOKE_DATA_CLEANUP_PATH: cleanupPath,
2022
2150
  EBK_SMOKE_EMAIL: principalEmail,
2151
+ EBK_FRONTEND_SECURITY_PROFILE: 'deployed-https',
2023
2152
  EBK_SMOKE_PASSWORD: principalPassword,
2024
2153
  EBK_SMOKE_REVIEWER_EMAIL: reviewerEmail,
2025
2154
  EBK_SMOKE_REVIEWER_PASSWORD: reviewerPassword,
@@ -2077,7 +2206,10 @@ if (process.exitCode === undefined) {
2077
2206
  } else {
2078
2207
  reportInvalid = true;
2079
2208
  }
2080
- if (execution?.status === 0) {
2209
+ if (
2210
+ execution?.status === 0 &&
2211
+ requiresScheduledDeliveryObservation(stage)
2212
+ ) {
2081
2213
  observationFinding = await observePublishedEvent(
2082
2214
  logs,
2083
2215
  observationPath,
@@ -2142,7 +2274,7 @@ if (process.exitCode === undefined) {
2142
2274
  : undefined) ||
2143
2275
  (execution?.error
2144
2276
  ? 'The Playwright process could not start.'
2145
- : 'Playwright smoke assertions failed.'),
2277
+ : playwrightFailureDiagnostic(report)),
2146
2278
  failed,
2147
2279
  artifactSensitive: reportCredentialLeak,
2148
2280
  observationFindings: observationFinding
@@ -2178,7 +2310,7 @@ if (process.exitCode === undefined) {
2178
2310
  let cleanup = { outcome: 'passed' };
2179
2311
  try {
2180
2312
  executions.push(await executeAttempt(1));
2181
- if (executions[0].failed > 0) {
2313
+ if (shouldRetryDeployedSmoke(executions[0])) {
2182
2314
  executions.push(await executeAttempt(2));
2183
2315
  }
2184
2316
  const reports = executions
@@ -2362,7 +2494,7 @@ if (process.exitCode === undefined) {
2362
2494
  attempts,
2363
2495
  cleanup,
2364
2496
  environment: {
2365
- class: 'protected-github',
2497
+ class: deployedEnvironmentClass,
2366
2498
  deployed: true,
2367
2499
  stage,
2368
2500
  },