@empire-builder-kit/nx 1.0.0-rc.37 → 1.0.0-rc.39

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 (637) hide show
  1. package/README.md +18 -0
  2. package/executors.json +5 -0
  3. package/generators.json +10 -0
  4. package/package.json +20 -3
  5. package/src/aws-authority/index.d.ts +1 -0
  6. package/src/aws-authority/index.js +1 -0
  7. package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
  8. package/src/aws-authority/lambda-policy-ordering.js +56 -0
  9. package/src/aws-authority/stage-authority.d.ts +11 -3
  10. package/src/aws-authority/stage-authority.js +615 -29
  11. package/src/blueprints/external-sandbox.js +21 -9
  12. package/src/blueprints/manifest.d.ts +1 -1
  13. package/src/blueprints/resolver.js +28 -15
  14. package/src/cli/bootstrap.d.ts +1 -1
  15. package/src/cli/deploy-runtime.d.ts +6 -0
  16. package/src/cli/deploy-runtime.js +58 -0
  17. package/src/cli/dev-command.d.ts +16 -4
  18. package/src/cli/dev-command.js +63 -0
  19. package/src/cli/main.d.ts +7 -1
  20. package/src/cli/main.js +128 -20
  21. package/src/cli/output.d.ts +1 -1
  22. package/src/developer-agent/context.js +41 -9
  23. package/src/developer-agent/generator-planning.js +16 -2
  24. package/src/developer-agent/git-inspection.d.ts +6 -2
  25. package/src/developer-agent/git-inspection.js +78 -6
  26. package/src/developer-agent/model.d.ts +4 -2
  27. package/src/developer-agent/operation-registry.d.ts +5 -0
  28. package/src/developer-agent/operation-registry.js +179 -23
  29. package/src/developer-agent/preview-changes.d.ts +2 -0
  30. package/src/developer-agent/preview-changes.js +14 -2
  31. package/src/developer-agent/preview-source.js +3 -0
  32. package/src/developer-agent/validation.js +20 -8
  33. package/src/developer-agent/workspace-inspection.js +37 -3
  34. package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
  35. package/src/executors/deployment-plan/deployment-plan.js +51 -4
  36. package/src/executors/dev-doctor/dev-doctor.js +13 -6
  37. package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
  38. package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
  39. package/src/executors/dev-task-cleanup/schema.json +9 -0
  40. package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
  41. package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
  42. package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
  43. package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
  44. package/src/executors/fleet/fleet.js +1 -1
  45. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +28 -1
  46. package/src/executors/local-deploy/local-deploy.d.ts +8 -1
  47. package/src/executors/local-deploy/local-deploy.js +97 -24
  48. package/src/executors/local-deploy/schema.json +8 -0
  49. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +30 -18
  50. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +2 -0
  51. package/src/executors/sst-lifecycle/governed-native-operation.js +9 -0
  52. package/src/executors/sst-lifecycle/run-sst-command.d.ts +5 -0
  53. package/src/executors/sst-lifecycle/run-sst-command.js +220 -32
  54. package/src/executors/sst-lifecycle/sst-environment-source.d.ts +8 -0
  55. package/src/executors/sst-lifecycle/sst-environment-source.js +54 -0
  56. package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
  57. package/src/executors/sst-lifecycle/task-unlock.js +126 -0
  58. package/src/foundation/capability-plan.d.ts +43 -0
  59. package/src/foundation/capability-plan.js +168 -0
  60. package/src/foundation/discovery.d.ts +14 -11
  61. package/src/foundation/discovery.js +32 -6
  62. package/src/foundation/index.d.ts +1 -0
  63. package/src/foundation/index.js +1 -0
  64. package/src/foundation/local-database-contract.d.ts +20 -0
  65. package/src/foundation/local-database-contract.js +262 -13
  66. package/src/foundation/local-private-smoke-access.d.ts +20 -0
  67. package/src/foundation/local-private-smoke-access.js +197 -0
  68. package/src/foundation/preflight.js +37 -18
  69. package/src/foundation/private-smoke-access.js +10 -2
  70. package/src/foundation/private-smoke-admission.d.ts +3 -1
  71. package/src/foundation/private-smoke-admission.js +29 -8
  72. package/src/foundation/private-smoke-control-plane.js +17 -6
  73. package/src/foundation/provision-database-bindings.d.ts +5 -0
  74. package/src/foundation/provision-database-bindings.js +41 -8
  75. package/src/foundation/provision-logical-database.js +13 -8
  76. package/src/foundation/requirements.d.ts +3 -3
  77. package/src/foundation/requirements.js +24 -12
  78. package/src/foundation/router-waf.d.ts +1 -0
  79. package/src/foundation/router-waf.js +14 -1
  80. package/src/generators/blueprint/blueprint.d.ts +5 -0
  81. package/src/generators/blueprint/blueprint.js +102 -0
  82. package/src/generators/blueprint/files.d.ts +6 -0
  83. package/src/generators/blueprint/files.js +217 -0
  84. package/src/generators/blueprint/schema.d.ts +4 -0
  85. package/src/generators/blueprint/schema.json +18 -0
  86. package/src/generators/formatting.js +24 -1
  87. package/src/generators/logging-registry.d.ts +2 -0
  88. package/src/generators/logging-registry.js +22 -0
  89. package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
  90. package/src/generators/preset/workspace-files-adopter-skills.js +301 -0
  91. package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
  92. package/src/generators/preset/workspace-files-ci-install.js +196 -0
  93. package/src/generators/preset/workspace-files-developer-agent.js +40 -13
  94. package/src/generators/preset/workspace-files-performance-load.js +8 -0
  95. package/src/generators/preset/workspace-files-stage-authority.js +40 -1
  96. package/src/generators/preset/workspace-files-thin-deploy.js +66 -34
  97. package/src/generators/preset/workspace-files-thin-docs.js +64 -18
  98. package/src/generators/preset/workspace-files.d.ts +4 -0
  99. package/src/generators/preset/workspace-files.js +159 -91
  100. package/src/generators/repository-policy/repository-policy.js +37 -0
  101. package/src/generators/slice/built-in-plan-api-contract-files.js +42 -7
  102. package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
  103. package/src/generators/slice/built-in-plan-api-files.js +47 -389
  104. package/src/generators/slice/built-in-plan-async-work-files.js +19 -1912
  105. package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
  106. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +36 -2
  107. package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
  108. package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
  109. package/src/generators/slice/built-in-plan-background-work-files.d.ts +1 -1
  110. package/src/generators/slice/built-in-plan-background-work-files.js +15 -5
  111. package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
  112. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  113. package/src/generators/slice/built-in-plan-data-files.js +61 -1164
  114. package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
  115. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +18 -2
  116. package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2446
  117. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +30 -6
  118. package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
  119. package/src/generators/slice/built-in-plan-database-lifecycle-files.js +4 -15
  120. package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
  121. package/src/generators/slice/built-in-plan-foundation-files.js +34 -10
  122. package/src/generators/slice/built-in-plan-frontend-files.js +2 -2
  123. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  124. package/src/generators/slice/built-in-plan-infrastructure-files.js +180 -522
  125. package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
  126. package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
  127. package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
  128. package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
  129. package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
  130. package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
  131. package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
  132. package/src/generators/slice/built-in-plan-key-value-delivery.js +120 -0
  133. package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
  134. package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
  135. package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
  136. package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
  137. package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
  138. package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
  139. package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
  140. package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
  141. package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
  142. package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
  143. package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
  144. package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
  145. package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
  146. package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
  147. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
  148. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
  149. package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
  150. package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
  151. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
  152. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
  153. package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
  154. package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
  155. package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
  156. package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
  157. package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
  158. package/src/generators/slice/built-in-plan-metadata-files.js +140 -28
  159. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +1 -1
  160. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +36 -19
  161. package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
  162. package/src/generators/slice/built-in-plan-operations-files.js +89 -50
  163. package/src/generators/slice/built-in-plan-performance-files.js +84 -1010
  164. package/src/generators/slice/built-in-plan-project-files.js +116 -67
  165. package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
  166. package/src/generators/slice/built-in-plan-release-files.js +64 -15
  167. package/src/generators/slice/built-in-plan-reliability-files.js +54 -28
  168. package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
  169. package/src/generators/slice/built-in-plan-shared.js +41 -19
  170. package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
  171. package/src/generators/slice/built-in-plan-sql-events.js +257 -0
  172. package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
  173. package/src/generators/slice/built-in-plan-testing-files.js +184 -132
  174. package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
  175. package/src/generators/slice/built-in-plan-testing-persistence-files.js +178 -0
  176. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +1 -1
  177. package/src/generators/slice/built-in-plan-thin-release-files.js +35 -2
  178. package/src/generators/slice/built-in-plan-verification-files.js +70 -0
  179. package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
  180. package/src/generators/slice/built-in-plan-web-files.js +206 -14
  181. package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
  182. package/src/generators/slice/built-in-plan-workload-role-files.js +113 -274
  183. package/src/generators/slice/built-in-plan.d.ts +9 -1
  184. package/src/generators/slice/built-in-plan.js +49 -21
  185. package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
  186. package/src/generators/slice/data-policy-review-seed.js +22 -0
  187. package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
  188. package/src/generators/slice/deployed-smoke-readiness.js +214 -0
  189. package/src/generators/slice/local-source-identity.d.ts +2 -0
  190. package/src/generators/slice/local-source-identity.js +31 -0
  191. package/src/generators/slice/persistence-contract.d.ts +14 -0
  192. package/src/generators/slice/persistence-contract.js +32 -0
  193. package/src/generators/slice/slice.js +29 -24
  194. package/src/generators/sql/schema.d.ts +7 -0
  195. package/src/generators/sql/schema.json +38 -0
  196. package/src/generators/sql/sql.d.ts +6 -0
  197. package/src/generators/sql/sql.js +53 -0
  198. package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
  199. package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
  200. package/src/generators/upgrade/upgrade.d.ts +2 -0
  201. package/src/generators/upgrade/upgrade.js +136 -9
  202. package/src/generators/workload/workload.js +51 -2
  203. package/src/local-dev/browser-verification.d.ts +37 -0
  204. package/src/local-dev/browser-verification.js +281 -0
  205. package/src/local-dev/contracts.d.ts +10 -1
  206. package/src/local-dev/contracts.js +114 -13
  207. package/src/local-dev/dev-command-core.js +24 -5
  208. package/src/local-dev/docker-credential-health.d.ts +14 -0
  209. package/src/local-dev/docker-credential-health.js +94 -0
  210. package/src/local-dev/environment-inspector.d.ts +7 -0
  211. package/src/local-dev/environment-inspector.js +42 -15
  212. package/src/local-dev/environment-state.js +2 -2
  213. package/src/local-dev/errors.d.ts +1 -1
  214. package/src/local-dev/errors.js +2 -0
  215. package/src/local-dev/fleet-client.js +2 -2
  216. package/src/local-dev/fleet-configuration.js +57 -25
  217. package/src/local-dev/fleet-inventory.js +46 -18
  218. package/src/local-dev/fleet-ipc.d.ts +7 -0
  219. package/src/local-dev/fleet-ipc.js +14 -2
  220. package/src/local-dev/fleet-launcher.d.ts +6 -0
  221. package/src/local-dev/fleet-launcher.js +14 -2
  222. package/src/local-dev/fleet-logs.js +50 -22
  223. package/src/local-dev/fleet-process.d.ts +20 -1
  224. package/src/local-dev/fleet-process.js +197 -41
  225. package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
  226. package/src/local-dev/fleet-runner-evidence.js +56 -0
  227. package/src/local-dev/fleet-runtime.js +268 -229
  228. package/src/local-dev/fleet-session.d.ts +2 -0
  229. package/src/local-dev/fleet-session.js +28 -11
  230. package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
  231. package/src/local-dev/fleet-state.d.ts +5 -2
  232. package/src/local-dev/fleet-state.js +25 -4
  233. package/src/local-dev/fleet-supervisor.d.ts +3 -0
  234. package/src/local-dev/fleet-supervisor.js +66 -11
  235. package/src/local-dev/fleet-web-start.d.ts +12 -0
  236. package/src/local-dev/fleet-web-start.js +48 -0
  237. package/src/local-dev/identity.js +3 -14
  238. package/src/local-dev/index.d.ts +1 -0
  239. package/src/local-dev/index.js +1 -0
  240. package/src/local-dev/native-completion.d.ts +9 -0
  241. package/src/local-dev/native-completion.js +130 -0
  242. package/src/local-dev/nx-workspace.d.ts +4 -2
  243. package/src/local-dev/nx-workspace.js +11 -6
  244. package/src/local-dev/personal-stage.d.ts +4 -5
  245. package/src/local-dev/personal-stage.js +6 -54
  246. package/src/local-dev/port-claims.d.ts +13 -0
  247. package/src/local-dev/port-claims.js +46 -0
  248. package/src/local-dev/ports.d.ts +14 -2
  249. package/src/local-dev/ports.js +78 -3
  250. package/src/local-dev/private-state.d.ts +6 -0
  251. package/src/local-dev/private-state.js +126 -34
  252. package/src/local-dev/process-group.d.ts +4 -0
  253. package/src/local-dev/process-group.js +29 -0
  254. package/src/local-dev/process-identity.d.ts +8 -0
  255. package/src/local-dev/process-identity.js +31 -1
  256. package/src/local-dev/proxy.js +11 -12
  257. package/src/local-dev/runtime-paths.js +1 -1
  258. package/src/local-dev/slice-claim.js +1 -1
  259. package/src/local-dev/slice-runner.d.ts +15 -6
  260. package/src/local-dev/slice-runner.js +189 -54
  261. package/src/local-dev/task-attachment.d.ts +17 -0
  262. package/src/local-dev/task-attachment.js +73 -0
  263. package/src/local-dev/task-authority.d.ts +10 -0
  264. package/src/local-dev/task-authority.js +27 -0
  265. package/src/local-dev/task-identity.d.ts +33 -0
  266. package/src/local-dev/task-identity.js +418 -0
  267. package/src/local-dev/task-native-writer.d.ts +18 -0
  268. package/src/local-dev/task-native-writer.js +329 -0
  269. package/src/local-dev/tls.js +3 -1
  270. package/src/local-dev/web-launch.d.ts +9 -0
  271. package/src/local-dev/web-launch.js +130 -0
  272. package/src/ownership/composition.d.ts +2 -1
  273. package/src/ownership/composition.js +1 -0
  274. package/src/performance/scenario.d.ts +22 -0
  275. package/src/performance/scenario.js +100 -92
  276. package/src/repository-policy/deployment-plan.d.ts +2 -2
  277. package/src/repository-policy/deployment-plan.js +2 -1
  278. package/src/repository-policy/policy.js +38 -3
  279. package/src/schemas/blueprint-v1.json +5 -4
  280. package/src/schemas/foundation-requirement-v1.json +5 -4
  281. package/src/schemas/testing-evidence-result-v1.json +1 -1
  282. package/src/secrets/operator.d.ts +3 -1
  283. package/src/secrets/operator.js +22 -3
  284. package/src/sst-environment-source-format.d.ts +3 -0
  285. package/src/sst-environment-source-format.js +20 -0
  286. package/src/supply-chain/blueprint-trust-git.js +13 -3
  287. package/src/supply-chain/build-output.js +15 -0
  288. package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
  289. package/src/testing-evidence/fixture-scope.d.ts +2 -1
  290. package/src/testing-evidence/fixture-scope.js +4 -2
  291. package/src/testing-evidence/result.d.ts +2 -1
  292. package/src/testing-evidence/result.js +18 -4
  293. package/src/workload-roles/standard-slice.js +2 -3
  294. package/src/api-contract/baseline-update.js.map +0 -1
  295. package/src/api-contract/compatibility.js.map +0 -1
  296. package/src/api-contract/contract-graph.js.map +0 -1
  297. package/src/api-contract/evidence.js.map +0 -1
  298. package/src/api-contract/index.js.map +0 -1
  299. package/src/api-contract/model.fixtures.d.ts +0 -2
  300. package/src/api-contract/model.fixtures.js +0 -81
  301. package/src/api-contract/model.fixtures.js.map +0 -1
  302. package/src/api-contract/model.js.map +0 -1
  303. package/src/api-contract/rollout.js.map +0 -1
  304. package/src/authorization/compatibility.js.map +0 -1
  305. package/src/authorization/index.js.map +0 -1
  306. package/src/aws/child-environment.js.map +0 -1
  307. package/src/aws/identity.js.map +0 -1
  308. package/src/aws-authority/index.js.map +0 -1
  309. package/src/aws-authority/stage-authority.js.map +0 -1
  310. package/src/blueprints/execution.js.map +0 -1
  311. package/src/blueprints/external-sandbox.js.map +0 -1
  312. package/src/blueprints/index.js.map +0 -1
  313. package/src/blueprints/inputs.js.map +0 -1
  314. package/src/blueprints/manifest.js.map +0 -1
  315. package/src/blueprints/resolver.js.map +0 -1
  316. package/src/blueprints/transitions.js.map +0 -1
  317. package/src/cli/agent-command.js.map +0 -1
  318. package/src/cli/agent-runtime.js.map +0 -1
  319. package/src/cli/blueprint-authority.js.map +0 -1
  320. package/src/cli/blueprint-command.js.map +0 -1
  321. package/src/cli/bootstrap.js.map +0 -1
  322. package/src/cli/dev-command.js.map +0 -1
  323. package/src/cli/main.js.map +0 -1
  324. package/src/cli/output.js.map +0 -1
  325. package/src/cli/personal-secret-runtime.js.map +0 -1
  326. package/src/cli/secret-terminal.js.map +0 -1
  327. package/src/container-images.js.map +0 -1
  328. package/src/data-lifecycle/index.js.map +0 -1
  329. package/src/data-lifecycle/model.fixtures.d.ts +0 -2
  330. package/src/data-lifecycle/model.fixtures.js +0 -244
  331. package/src/data-lifecycle/model.fixtures.js.map +0 -1
  332. package/src/data-lifecycle/model.js.map +0 -1
  333. package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
  334. package/src/data-lifecycle/validation.js.map +0 -1
  335. package/src/database-retirement/contract.js.map +0 -1
  336. package/src/database-retirement/index.js.map +0 -1
  337. package/src/deterministic-order.js.map +0 -1
  338. package/src/developer-agent/context.js.map +0 -1
  339. package/src/developer-agent/generator-planning.js.map +0 -1
  340. package/src/developer-agent/generator-preview.js.map +0 -1
  341. package/src/developer-agent/git-inspection.js.map +0 -1
  342. package/src/developer-agent/handoff.js.map +0 -1
  343. package/src/developer-agent/index.js.map +0 -1
  344. package/src/developer-agent/model.js.map +0 -1
  345. package/src/developer-agent/operation-registry.js.map +0 -1
  346. package/src/developer-agent/ordering.js.map +0 -1
  347. package/src/developer-agent/planning.js.map +0 -1
  348. package/src/developer-agent/preview-changes.js.map +0 -1
  349. package/src/developer-agent/preview-source.js.map +0 -1
  350. package/src/developer-agent/validation.js.map +0 -1
  351. package/src/developer-agent/workspace-inspection.js.map +0 -1
  352. package/src/developer-agent/workspace-path.js.map +0 -1
  353. package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
  354. package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
  355. package/src/executors/deploy/deploy.js.map +0 -1
  356. package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
  357. package/src/executors/dev/dev.js.map +0 -1
  358. package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
  359. package/src/executors/dev-setup/dev-setup.js.map +0 -1
  360. package/src/executors/developer-context/developer-context.js.map +0 -1
  361. package/src/executors/fleet/fleet.js.map +0 -1
  362. package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
  363. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
  364. package/src/executors/foundation-profile-preflight/production-database-safeguard.js.map +0 -1
  365. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
  366. package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
  367. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
  368. package/src/executors/local-deploy/federated-credential-transport.js.map +0 -1
  369. package/src/executors/local-deploy/fixtures/local-deploy-state-machine.mjs +0 -53
  370. package/src/executors/local-deploy/local-approval.js.map +0 -1
  371. package/src/executors/local-deploy/local-deploy.js.map +0 -1
  372. package/src/executors/refresh/refresh.js.map +0 -1
  373. package/src/executors/remove/remove.js.map +0 -1
  374. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js.map +0 -1
  375. package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
  376. package/src/executors/secret-initialize/secret-initialize.js.map +0 -1
  377. package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
  378. package/src/executors/sst-lifecycle/generated-secret-retirement.js.map +0 -1
  379. package/src/executors/sst-lifecycle/governed-native-operation.js.map +0 -1
  380. package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
  381. package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
  382. package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
  383. package/src/executors/sst-lifecycle/sst-environment-source.js.map +0 -1
  384. package/src/executors/unlock/unlock.js.map +0 -1
  385. package/src/executors/work-markers/work-markers.js.map +0 -1
  386. package/src/foundation/discovery.js.map +0 -1
  387. package/src/foundation/index.js.map +0 -1
  388. package/src/foundation/local-database-contract.js.map +0 -1
  389. package/src/foundation/logging-preflight.js.map +0 -1
  390. package/src/foundation/logging.js.map +0 -1
  391. package/src/foundation/partial-state.js.map +0 -1
  392. package/src/foundation/preflight.js.map +0 -1
  393. package/src/foundation/private-smoke-access.js.map +0 -1
  394. package/src/foundation/private-smoke-admission.js.map +0 -1
  395. package/src/foundation/private-smoke-control-plane.js.map +0 -1
  396. package/src/foundation/provision-database-bindings.js.map +0 -1
  397. package/src/foundation/provision-logical-database.js.map +0 -1
  398. package/src/foundation/requirements.js.map +0 -1
  399. package/src/foundation/router-origin-proof.js.map +0 -1
  400. package/src/foundation/router-waf-rate-rehearsal.js.map +0 -1
  401. package/src/foundation/router-waf.js.map +0 -1
  402. package/src/foundation/stages.js.map +0 -1
  403. package/src/frontend-security/index.js.map +0 -1
  404. package/src/frontend-security/security-headers.js.map +0 -1
  405. package/src/generators/feature-registry.js.map +0 -1
  406. package/src/generators/formatting.js.map +0 -1
  407. package/src/generators/function/function.js.map +0 -1
  408. package/src/generators/job/job.js.map +0 -1
  409. package/src/generators/logging-registry.js.map +0 -1
  410. package/src/generators/post-generation-install.js.map +0 -1
  411. package/src/generators/preset/dependency-overrides.js.map +0 -1
  412. package/src/generators/preset/generator.js.map +0 -1
  413. package/src/generators/preset/tool-versions.js.map +0 -1
  414. package/src/generators/preset/workspace-files-ci-acceptance.js.map +0 -1
  415. package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
  416. package/src/generators/preset/workspace-files-ecr-inspector.js.map +0 -1
  417. package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
  418. package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
  419. package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
  420. package/src/generators/preset/workspace-files-stage-authority.js.map +0 -1
  421. package/src/generators/preset/workspace-files-thin-deploy.js.map +0 -1
  422. package/src/generators/preset/workspace-files-thin-docs.js.map +0 -1
  423. package/src/generators/preset/workspace-files-thin-release.js.map +0 -1
  424. package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
  425. package/src/generators/preset/workspace-files.js.map +0 -1
  426. package/src/generators/repository-policy/repository-policy.js.map +0 -1
  427. package/src/generators/repository-policy/tree-policy.js.map +0 -1
  428. package/src/generators/service/service.js.map +0 -1
  429. package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
  430. package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
  431. package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
  432. package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
  433. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
  434. package/src/generators/slice/built-in-plan-background-work-files.js.map +0 -1
  435. package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
  436. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
  437. package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
  438. package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
  439. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
  440. package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
  441. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
  442. package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
  443. package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
  444. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
  445. package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
  446. package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
  447. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
  448. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
  449. package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
  450. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js.map +0 -1
  451. package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
  452. package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
  453. package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
  454. package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
  455. package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
  456. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
  457. package/src/generators/slice/built-in-plan-shared.js.map +0 -1
  458. package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
  459. package/src/generators/slice/built-in-plan-thin-release-files.js.map +0 -1
  460. package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
  461. package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
  462. package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
  463. package/src/generators/slice/built-in-plan.js.map +0 -1
  464. package/src/generators/slice/slice.js.map +0 -1
  465. package/src/generators/upgrade/upgrade.js.map +0 -1
  466. package/src/generators/workload/frozen-container.js.map +0 -1
  467. package/src/generators/workload/performance-registration.js.map +0 -1
  468. package/src/generators/workload/reliability-registration.js.map +0 -1
  469. package/src/generators/workload/service-performance-files.js.map +0 -1
  470. package/src/generators/workload/workload.js.map +0 -1
  471. package/src/git-policy/action-pins.js.map +0 -1
  472. package/src/git-policy/github-bootstrap.js.map +0 -1
  473. package/src/git-policy/index.js.map +0 -1
  474. package/src/git-policy/routing.js.map +0 -1
  475. package/src/index.js.map +0 -1
  476. package/src/infrastructure-change/convergence.js.map +0 -1
  477. package/src/infrastructure-change/drift.js.map +0 -1
  478. package/src/infrastructure-change/index.js.map +0 -1
  479. package/src/infrastructure-change/local-capability.js.map +0 -1
  480. package/src/infrastructure-change/model.js.map +0 -1
  481. package/src/infrastructure-change/normalize.js.map +0 -1
  482. package/src/infrastructure-change/plan.js.map +0 -1
  483. package/src/infrastructure-change/risk.js.map +0 -1
  484. package/src/infrastructure-change/summary.js.map +0 -1
  485. package/src/local-dev/context-discovery.js.map +0 -1
  486. package/src/local-dev/contract-validation.js.map +0 -1
  487. package/src/local-dev/contracts.js.map +0 -1
  488. package/src/local-dev/control-contract.js.map +0 -1
  489. package/src/local-dev/dev-command-core.js.map +0 -1
  490. package/src/local-dev/effects.js.map +0 -1
  491. package/src/local-dev/environment-inspector.js.map +0 -1
  492. package/src/local-dev/environment-state.js.map +0 -1
  493. package/src/local-dev/errors.js.map +0 -1
  494. package/src/local-dev/fleet-client.js.map +0 -1
  495. package/src/local-dev/fleet-configuration.js.map +0 -1
  496. package/src/local-dev/fleet-inventory.js.map +0 -1
  497. package/src/local-dev/fleet-ipc.js.map +0 -1
  498. package/src/local-dev/fleet-launcher.js.map +0 -1
  499. package/src/local-dev/fleet-lock.js.map +0 -1
  500. package/src/local-dev/fleet-logs.js.map +0 -1
  501. package/src/local-dev/fleet-process.js.map +0 -1
  502. package/src/local-dev/fleet-runtime.js.map +0 -1
  503. package/src/local-dev/fleet-session.js.map +0 -1
  504. package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
  505. package/src/local-dev/fleet-startup.js.map +0 -1
  506. package/src/local-dev/fleet-state.js.map +0 -1
  507. package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
  508. package/src/local-dev/fleet-supervisor.js.map +0 -1
  509. package/src/local-dev/gateway-daemon.js.map +0 -1
  510. package/src/local-dev/gateway.js.map +0 -1
  511. package/src/local-dev/identity.js.map +0 -1
  512. package/src/local-dev/index.js.map +0 -1
  513. package/src/local-dev/local-context.js.map +0 -1
  514. package/src/local-dev/nx-workspace.js.map +0 -1
  515. package/src/local-dev/personal-secret-ledger.js.map +0 -1
  516. package/src/local-dev/personal-stage.js.map +0 -1
  517. package/src/local-dev/portless.js.map +0 -1
  518. package/src/local-dev/ports.js.map +0 -1
  519. package/src/local-dev/private-state.js.map +0 -1
  520. package/src/local-dev/process-identity.js.map +0 -1
  521. package/src/local-dev/proxy.js.map +0 -1
  522. package/src/local-dev/runtime-paths.js.map +0 -1
  523. package/src/local-dev/secret-slice-claim.js.map +0 -1
  524. package/src/local-dev/slice-claim.js.map +0 -1
  525. package/src/local-dev/slice-runner.js.map +0 -1
  526. package/src/local-dev/tls.js.map +0 -1
  527. package/src/ownership/composition.js.map +0 -1
  528. package/src/ownership/foundation-record.js.map +0 -1
  529. package/src/ownership/hash.js.map +0 -1
  530. package/src/ownership/index.js.map +0 -1
  531. package/src/ownership/json-ownership.js.map +0 -1
  532. package/src/ownership/record.js.map +0 -1
  533. package/src/ownership/workspace-record.js.map +0 -1
  534. package/src/performance/cost-collection.js.map +0 -1
  535. package/src/performance/cost-controls.js.map +0 -1
  536. package/src/performance/evidence.js.map +0 -1
  537. package/src/performance/index.js.map +0 -1
  538. package/src/performance/load-safety.js.map +0 -1
  539. package/src/performance/model.js.map +0 -1
  540. package/src/performance/pr-artifact-budget.js.map +0 -1
  541. package/src/performance/runner.js.map +0 -1
  542. package/src/performance/scenario-endpoint.js.map +0 -1
  543. package/src/performance/scenario.js.map +0 -1
  544. package/src/performance/test-fixtures.d.ts +0 -7
  545. package/src/performance/test-fixtures.js +0 -167
  546. package/src/performance/test-fixtures.js.map +0 -1
  547. package/src/performance/unit-cost.js.map +0 -1
  548. package/src/release/index.js.map +0 -1
  549. package/src/release/lifecycle.js.map +0 -1
  550. package/src/release/manifest.js.map +0 -1
  551. package/src/release/rollout.js.map +0 -1
  552. package/src/release/source-authority.js.map +0 -1
  553. package/src/repository-policy/aurora-preflight.js.map +0 -1
  554. package/src/repository-policy/capacity-migration.js.map +0 -1
  555. package/src/repository-policy/deployment-plan.js.map +0 -1
  556. package/src/repository-policy/foundation-profile.js.map +0 -1
  557. package/src/repository-policy/index.js.map +0 -1
  558. package/src/repository-policy/policy.js.map +0 -1
  559. package/src/secrets/adapters.js.map +0 -1
  560. package/src/secrets/aws-control-plane.js.map +0 -1
  561. package/src/secrets/declaration-verification.js.map +0 -1
  562. package/src/secrets/generated-aws-control-plane.js.map +0 -1
  563. package/src/secrets/guardrails.js.map +0 -1
  564. package/src/secrets/index.js.map +0 -1
  565. package/src/secrets/metadata.js.map +0 -1
  566. package/src/secrets/model.js.map +0 -1
  567. package/src/secrets/operator.js.map +0 -1
  568. package/src/secrets/permissions.js.map +0 -1
  569. package/src/secrets/personal-command.js.map +0 -1
  570. package/src/secrets/personal-ledger.js.map +0 -1
  571. package/src/secrets/registry.js.map +0 -1
  572. package/src/secrets/verification.js.map +0 -1
  573. package/src/secrets/workload-access.js.map +0 -1
  574. package/src/sst-environment-source-format.js.map +0 -1
  575. package/src/supply-chain/action-pins.js.map +0 -1
  576. package/src/supply-chain/blueprint-trust-git.js.map +0 -1
  577. package/src/supply-chain/blueprint-trust-process.js.map +0 -1
  578. package/src/supply-chain/blueprint-trust.js.map +0 -1
  579. package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
  580. package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
  581. package/src/supply-chain/build-output-bounds.js.map +0 -1
  582. package/src/supply-chain/build-output.js.map +0 -1
  583. package/src/supply-chain/common.js.map +0 -1
  584. package/src/supply-chain/container-artifact-contract.js.map +0 -1
  585. package/src/supply-chain/container-release.js.map +0 -1
  586. package/src/supply-chain/ecr-applicability.js.map +0 -1
  587. package/src/supply-chain/ecr-scanning.js.map +0 -1
  588. package/src/supply-chain/ecs-deployed-image.js.map +0 -1
  589. package/src/supply-chain/errors.js.map +0 -1
  590. package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
  591. package/src/supply-chain/generated-command.js.map +0 -1
  592. package/src/supply-chain/generated-container-release-command.js.map +0 -1
  593. package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
  594. package/src/supply-chain/generated-files.js.map +0 -1
  595. package/src/supply-chain/generated-scanner-command.js.map +0 -1
  596. package/src/supply-chain/index.js.map +0 -1
  597. package/src/supply-chain/inventory.js.map +0 -1
  598. package/src/supply-chain/license-expression.js.map +0 -1
  599. package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
  600. package/src/supply-chain/policy.js.map +0 -1
  601. package/src/supply-chain/publication.js.map +0 -1
  602. package/src/supply-chain/sbom.js.map +0 -1
  603. package/src/supply-chain/scanner.js.map +0 -1
  604. package/src/supply-chain/vendored-source.js.map +0 -1
  605. package/src/testing-evidence/fixture-scope.js.map +0 -1
  606. package/src/testing-evidence/index.js.map +0 -1
  607. package/src/testing-evidence/quarantine.js.map +0 -1
  608. package/src/testing-evidence/result.js.map +0 -1
  609. package/src/testing-evidence/runner-adapter.js.map +0 -1
  610. package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
  611. package/src/validation.js.map +0 -1
  612. package/src/work-markers/index.js.map +0 -1
  613. package/src/work-markers/work-markers.js.map +0 -1
  614. package/src/workload-roles/account-baseline.js.map +0 -1
  615. package/src/workload-roles/authority.js.map +0 -1
  616. package/src/workload-roles/aws-adapter.js.map +0 -1
  617. package/src/workload-roles/aws-internal-handler.js.map +0 -1
  618. package/src/workload-roles/aws-s3-state.js.map +0 -1
  619. package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
  620. package/src/workload-roles/boundary.js.map +0 -1
  621. package/src/workload-roles/convergence.js.map +0 -1
  622. package/src/workload-roles/effective-policy.js.map +0 -1
  623. package/src/workload-roles/handler.js.map +0 -1
  624. package/src/workload-roles/history.js.map +0 -1
  625. package/src/workload-roles/index.js.map +0 -1
  626. package/src/workload-roles/injection.js.map +0 -1
  627. package/src/workload-roles/manifest.js.map +0 -1
  628. package/src/workload-roles/provisioner.js.map +0 -1
  629. package/src/workload-roles/registration.js.map +0 -1
  630. package/src/workload-roles/stage-boundary.js.map +0 -1
  631. package/src/workload-roles/standard-slice.js.map +0 -1
  632. package/src/workspace-deployment/affected-lifecycle.js.map +0 -1
  633. package/src/workspace-deployment/identity.js.map +0 -1
  634. package/src/workspace-deployment/index.js.map +0 -1
  635. package/src/workspace-deployment/migration-evidence.js.map +0 -1
  636. package/src/workspace-deployment/migration.js.map +0 -1
  637. package/src/workspace-deployment/ownership.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.
@@ -51,11 +36,38 @@ deployment and migration. Local and GitHub execution use the same stage
51
36
  deployment role and exact deployed outputs; no separate smoke role, workflow,
52
37
  target registry, or staging-evidence reconciliation graph exists.
53
38
 
54
- Development and staging smoke wait up to sixteen minutes for the exact durable
55
- event on the fifteen-minute nonproduction outbox schedule. Production waits up
56
- to ninety seconds for the same proof on its one-minute schedule. These bounds
57
- include CloudWatch Logs request latency and the runner aborts an in-flight
58
- request when no bounded observation time remains.
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.
42
+
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.
62
+
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.
59
71
 
60
72
  The runner creates one run-scoped synthetic customer in the Slice's narrow
61
73
  \`<slice>-test-writer\` group and one distinct synthetic reviewer in
@@ -78,78 +90,6 @@ Local quarantine uses reviewed date expiry. A run-count record binds an
78
90
  absolute \`.github/workflows/*.yml\` path and \`expiresAfterRun\`; it is accepted
79
91
  only when GitHub supplies a matching \`GITHUB_WORKFLOW_REF\` and positive
80
92
  \`GITHUB_RUN_NUMBER\`, and it must expire within 25 trusted workflow runs.
81
- `,
82
- 'integration/record.spec.ts': `import { Client } from 'pg';
83
- import { describe, expect, it } from 'vitest';
84
- import { build${pascalName}RecordFixture } from '../testing/fixtures/records.js';
85
-
86
- const databaseUrl = process.env.DATABASE_URL;
87
- if (!databaseUrl) {
88
- throw new Error('DATABASE_URL is required for ${name} local integration proof.');
89
- }
90
- const seed = process.env.EBK_TEST_SEED;
91
- if (!seed) {
92
- throw new Error('EBK_TEST_SEED is required for reproducible integration fixtures.');
93
- }
94
-
95
- describe('${name} database integration', () => {
96
- it('writes and reads one deterministic record in its worker database', async () => {
97
- const fixture = build${pascalName}RecordFixture(seed);
98
- const client = new Client({ connectionString: databaseUrl });
99
- await client.connect();
100
- try {
101
- await client.query(
102
- \`INSERT INTO records
103
- (id, name, owner_id, run_scope, test_expires_at)
104
- VALUES ($1::uuid, $2, $3, $4, now() + INTERVAL '1 day')\`,
105
- [fixture.id, fixture.name, 'synthetic-test-owner', seed],
106
- );
107
- const result = await client.query(
108
- 'SELECT id::text AS id, name FROM records WHERE id = $1::uuid',
109
- [fixture.id],
110
- );
111
- expect(result.rows).toEqual([fixture]);
112
- } finally {
113
- await client.end();
114
- }
115
- });
116
- });
117
- `,
118
- 'integration/migrations.spec.ts': `import { Client } from 'pg';
119
- import { describe, expect, it } from 'vitest';
120
-
121
- const databaseUrl = process.env.DATABASE_URL;
122
- if (!databaseUrl) {
123
- throw new Error('DATABASE_URL is required for ${name} local integration proof.');
124
- }
125
-
126
- describe('${name} migration integration', () => {
127
- it('exposes the committed records table contract', async () => {
128
- const requiredColumns = [
129
- { column_name: 'id', data_type: 'uuid' },
130
- { column_name: 'name', data_type: 'text' },
131
- { column_name: 'owner_id', data_type: 'text' },
132
- { column_name: 'run_scope', data_type: 'text' },
133
- { column_name: 'created_at', data_type: 'timestamp with time zone' },
134
- ];
135
- const client = new Client({ connectionString: databaseUrl });
136
- await client.connect();
137
- try {
138
- const result = await client.query(
139
- \`SELECT column_name, data_type
140
- FROM information_schema.columns
141
- WHERE table_schema = 'public'
142
- AND table_name = 'records'
143
- AND column_name = ANY($1::text[])
144
- ORDER BY ordinal_position\`,
145
- [requiredColumns.map(({ column_name }) => column_name)],
146
- );
147
- expect(result.rows).toEqual(requiredColumns);
148
- } finally {
149
- await client.end();
150
- }
151
- });
152
- });
153
93
  `,
154
94
  'testing/fixtures/records.ts': `import { createTypedFixtureBuilder } from '@empire-builder-kit/nx/testing-evidence';
155
95
 
@@ -322,7 +262,7 @@ import {
322
262
  mkdirSync,
323
263
  readFileSync,
324
264
  realpathSync,
325
- readdirSync,
265
+ ${sql ? ' readdirSync,\n' : ''}\
326
266
  rmSync,
327
267
  statSync,
328
268
  writeFileSync,
@@ -330,7 +270,9 @@ import {
330
270
  import { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
331
271
  import { createRequire } from 'node:module';
332
272
  import { TextDecoder } from 'node:util';
333
- 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';
334
276
  import {
335
277
  githubWorkflowRun,
336
278
  reconcileRunnerQuarantine,
@@ -339,14 +281,14 @@ import {
339
281
 
340
282
  const require = createRequire(import.meta.url);
341
283
  const {
342
- createLocalTestScope,
284
+ ${sql ? ' createLocalTestScope,\n' : ''}\
343
285
  createTestingEvidenceFromRunnerAttempts,
344
286
  inspectTestingEvidenceArtifact,
345
287
  normalizeEbkIntegrationEvidenceAttempt,
346
288
  sanitizeTestingEvidenceSummary,
347
289
  validateTestingEvidenceQuarantine,
348
290
  } = require('@empire-builder-kit/nx/testing-evidence');
349
- const { Client } = pg;
291
+ ${sql ? 'const { Client } = pg;' : ''}
350
292
  const fatalUtf8Decoder = new TextDecoder('utf-8', { fatal: true });
351
293
  const projectRoot = process.cwd();
352
294
  const workspaceRoot = resolve(projectRoot, '../..');
@@ -382,9 +324,8 @@ const run = (command, args, options = {}) => {
382
324
  }
383
325
  return result.stdout.trim();
384
326
  };
385
- const gitCommit =
386
- process.env.EBK_SOURCE_COMMIT ??
387
- run('git', ['rev-parse', 'HEAD'], { cwd: workspaceRoot });
327
+ ${local_source_identity_js_1.localSourceCommitFunction}
328
+ const gitCommit = localSourceCommit();
388
329
  const workspacePackage = readJson(join(workspaceRoot, 'package.json'));
389
330
  const ownership = readJson(join(projectRoot, '.ebk', 'ownership.json'));
390
331
  const frameworkCandidate =
@@ -642,7 +583,8 @@ function pruneStaleTestProjects() {
642
583
  }
643
584
  }
644
585
 
645
- async function prepareDatabase(adminUrl, databaseName) {
586
+ ${sql
587
+ ? `async function prepareDatabase(adminUrl, databaseName) {
646
588
  const admin = new Client({ connectionString: adminUrl });
647
589
  await admin.connect();
648
590
  try {
@@ -665,9 +607,54 @@ async function prepareDatabase(adminUrl, databaseName) {
665
607
  await client.end();
666
608
  }
667
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' } });
668
620
  }
669
621
 
670
- function runWorker(worker, databaseUrl, reportPath, attempt) {
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(); }
655
+ }
656
+
657
+ function runWorker(worker, persistence, reportPath, attempt) {
671
658
  const arguments_ = [
672
659
  installedVitestCommand.entryPoint,
673
660
  'run',
@@ -708,7 +695,11 @@ function runWorker(worker, databaseUrl, reportPath, attempt) {
708
695
  cwd: projectRoot,
709
696
  env: {
710
697
  ...childEnvironment,
711
- 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',
712
703
  EBK_TEST_ATTEMPT: String(attempt),
713
704
  EBK_TEST_RUN_ID: runId,
714
705
  EBK_TEST_SEED: seed,
@@ -893,16 +884,17 @@ function readBoundedVitestReport(reportPath) {
893
884
  return { report };
894
885
  }
895
886
 
896
- async function runAttempt(attempt, adminUrl) {
887
+ async function runAttempt(attempt, endpoint${sql ? ', adminUrl' : ''}) {
897
888
  const attemptStartedAt = new Date().toISOString();
898
889
  const findings = [];
899
890
  const reports = [];
900
891
  const reportPaths = [];
901
892
  let workerResults = [];
902
893
  try {
903
- const databaseUrls = [];
894
+ const persistenceWorkers = [];
904
895
  for (let worker = 0; worker < workers; worker += 1) {
905
- const scope = createLocalTestScope({
896
+ ${sql
897
+ ? `const scope = createLocalTestScope({
906
898
  capabilities: {
907
899
  canCreateDatabase: true,
908
900
  canForceDropDatabase: true,
@@ -919,18 +911,18 @@ async function runAttempt(attempt, adminUrl) {
919
911
  },
920
912
  sharedDatabaseName: 'postgres',
921
913
  });
922
- databaseUrls.push(
923
- await prepareDatabase(adminUrl, scope.databaseName),
924
- );
914
+ const databaseUrl = await prepareDatabase(adminUrl, scope.databaseName);`
915
+ : ''}
916
+ persistenceWorkers.push({ endpoint, tableName: await prepareKeyValue(endpoint, attempt, worker)${sql ? ', databaseUrl' : ''} });
925
917
  }
926
918
  workerResults = await Promise.all(
927
- databaseUrls.map((databaseUrl, worker) => {
919
+ persistenceWorkers.map((persistence, worker) => {
928
920
  const reportPath = join(
929
921
  rawRoot,
930
922
  'vitest-attempt-' + attempt + '-worker-' + worker + '.json',
931
923
  );
932
924
  reportPaths.push(reportPath);
933
- return runWorker(worker, databaseUrl, reportPath, attempt);
925
+ return runWorker(worker, persistence, reportPath, attempt);
934
926
  }),
935
927
  );
936
928
  const workerDiagnostics = [];
@@ -1148,11 +1140,18 @@ if (process.exitCode === undefined) {
1148
1140
  const reports = [];
1149
1141
  const reportPaths = [];
1150
1142
  try {
1143
+ // Even a partially failed compose up can create owned resources.
1144
+ proofStarted = true;
1151
1145
  run('docker', [...composeArgs, 'up', '--detach', '--wait'], {
1152
1146
  env: { ...process.env, EBK_TEST_RUN_ID: runId },
1153
1147
  });
1154
- proofStarted = true;
1155
- 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', [
1156
1155
  ...composeArgs,
1157
1156
  'port',
1158
1157
  'database',
@@ -1161,13 +1160,14 @@ if (process.exitCode === undefined) {
1161
1160
  const port = /:(\\d+)\\s*$/.exec(address)?.[1];
1162
1161
  if (!port) throw new Error('Docker did not report the integration port.');
1163
1162
  const adminUrl =
1164
- 'postgresql://ebk_test:ebk_test@127.0.0.1:' + port + '/postgres';
1165
- 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' : ''});
1166
1166
  attempts.push(first.normalized);
1167
1167
  reports.push(...first.reports);
1168
1168
  reportPaths.push(...first.reportPaths);
1169
1169
  if (first.normalized.failed > 0) {
1170
- const second = await runAttempt(2, adminUrl);
1170
+ const second = await runAttempt(2, endpoint${sql ? ', adminUrl' : ''});
1171
1171
  attempts.push(second.normalized);
1172
1172
  reports.push(...second.reports);
1173
1173
  reportPaths.push(...second.reportPaths);
@@ -1294,7 +1294,9 @@ if (process.exitCode === undefined) {
1294
1294
  }
1295
1295
  }
1296
1296
  `,
1297
- '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 {
1298
1300
  AdminAddUserToGroupCommand,
1299
1301
  AdminCreateUserCommand,
1300
1302
  AdminDeleteUserCommand,
@@ -1409,8 +1411,10 @@ const evidenceRunId = validRunId ? runId : 'invalid-run-id';
1409
1411
  const evidenceSeed = validSeed ? seed : 'invalid-seed';
1410
1412
  const resultPath = join(evidenceRoot, 'smoke-deployed.json');
1411
1413
  const sanitizedReportPath = join(evidenceRoot, 'playwright-smoke.json');
1414
+ const readinessPath = join(evidenceRoot, 'deployed-readiness.json');
1412
1415
  rmSync(resultPath, { force: true });
1413
1416
  rmSync(sanitizedReportPath, { force: true });
1417
+ rmSync(readinessPath, { force: true });
1414
1418
  const rawPath = (attempt) =>
1415
1419
  join(rawRoot, 'playwright-smoke-' + attempt + '.json');
1416
1420
  const dataCleanupPath = (attempt) =>
@@ -1721,6 +1725,17 @@ function requiresScheduledDeliveryObservation(stage) {
1721
1725
  return ['development', 'staging', 'production'].includes(stage);
1722
1726
  }
1723
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
+
1724
1739
  function scheduledDeliveryDeadlineFinding() {
1725
1740
  return {
1726
1741
  classification: 'assertion-failed',
@@ -1752,6 +1767,7 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
1752
1767
  const startTime = Math.max(0, Date.parse(attemptStartedAt) - 5_000);
1753
1768
  const timeoutMilliseconds = stage === 'production' ? 90_000 : 960_000;
1754
1769
  const deadline = performance.now() + timeoutMilliseconds;
1770
+ let consecutiveUnavailableReads = 0;
1755
1771
  while (true) {
1756
1772
  const remainingRequestMilliseconds = deadline - performance.now();
1757
1773
  if (remainingRequestMilliseconds <= 0) break;
@@ -1771,10 +1787,28 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
1771
1787
  },
1772
1788
  );
1773
1789
  } catch (error) {
1774
- if (
1775
- performance.now() >= deadline ||
1776
- ['AbortError', 'TimeoutError'].includes(error?.name)
1777
- ) {
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)) {
1778
1812
  return scheduledDeliveryDeadlineFinding();
1779
1813
  }
1780
1814
  return permissionFailure(
@@ -1783,6 +1817,7 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
1783
1817
  'CloudWatch Logs',
1784
1818
  );
1785
1819
  }
1820
+ consecutiveUnavailableReads = 0;
1786
1821
  if (performance.now() > deadline) {
1787
1822
  return scheduledDeliveryDeadlineFinding();
1788
1823
  }
@@ -1885,6 +1920,23 @@ if (process.exitCode === undefined) {
1885
1920
  }
1886
1921
  }
1887
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
+
1888
1940
  if (process.exitCode === undefined) {
1889
1941
  const cognito = new CognitoIdentityProviderClient({
1890
1942
  region: process.env.AWS_REGION,
@@ -1933,7 +1985,7 @@ if (process.exitCode === undefined) {
1933
1985
  );
1934
1986
  await cognito.send(
1935
1987
  new AdminAddUserToGroupCommand({
1936
- GroupName: '${name}-test-writer',
1988
+ GroupName: sliceAuthorizationGroupNames(stage).testWriter,
1937
1989
  Username: principalEmail,
1938
1990
  UserPoolId: userPoolId,
1939
1991
  }),
@@ -1960,7 +2012,7 @@ if (process.exitCode === undefined) {
1960
2012
  );
1961
2013
  await cognito.send(
1962
2014
  new AdminAddUserToGroupCommand({
1963
- GroupName: '${name}-admin',
2015
+ GroupName: sliceAuthorizationGroupNames(stage).admin,
1964
2016
  Username: reviewerEmail,
1965
2017
  UserPoolId: userPoolId,
1966
2018
  }),
@@ -2258,7 +2310,7 @@ if (process.exitCode === undefined) {
2258
2310
  let cleanup = { outcome: 'passed' };
2259
2311
  try {
2260
2312
  executions.push(await executeAttempt(1));
2261
- if (executions[0].failed > 0) {
2313
+ if (shouldRetryDeployedSmoke(executions[0])) {
2262
2314
  executions.push(await executeAttempt(2));
2263
2315
  }
2264
2316
  const reports = executions
@@ -0,0 +1,2 @@
1
+ /** Disposable integration resources are independent of fleet or deployed data. */
2
+ export declare function renderTestingPersistenceFiles(name: string, pascalName: string, sql: boolean): Readonly<Record<string, string>>;