@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
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderKeyValueRetentionFiles = renderKeyValueRetentionFiles;
4
+ const built_in_plan_shared_js_1 = require("./built-in-plan-shared.js");
5
+ /** Framework retention control records remain in DynamoDB, including for SQL-enabled Slices. */
6
+ function renderKeyValueRetentionFiles(name, pascalName) {
7
+ const prefix = (0, built_in_plan_shared_js_1.lowerCamelIdentifier)(pascalName);
8
+ return {
9
+ 'data/retention-state.ts': `import { digestApprovalRequest, type ApprovalRequest } from '@empire-builder-kit/runtime/authorization';
10
+ import type { KeyValueChange } from '@empire-builder-kit/runtime/key-value';
11
+ import { createDataLifecyclePseudonymousReference } from '@empire-builder-kit/runtime/data-lifecycle';
12
+ import { ${prefix}AuthorizationPolicy } from '../authorization/policy.js';
13
+ import { canonicalDataRightsNow, plusDataRightsDays } from './data-rights-shared.js';
14
+ import { ${pascalName}DataLifecycleRuntimePolicy } from './runtime-policy.cjs';
15
+ import { dataStore } from './key-value.js';
16
+
17
+ export const RETENTION_ACTION = '${name}:retention-apply';
18
+ export const RETENTION_AUTHORIZATION_POLICY = ${prefix}AuthorizationPolicy.version;
19
+ export const RETENTION_POLICY = ${pascalName}DataLifecycleRuntimePolicy.policyVersion;
20
+ export const RETENTION_DAYS = ${pascalName}DataLifecycleRuntimePolicy.retentionDays;
21
+ export const RETENTION_RUNS = 'data-retention-runs';
22
+ const UUID = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;
23
+
24
+ export interface ${pascalName}RetentionPlanV1 {
25
+ asOf: string; candidateDigest: string; categoryId: 'product-record'; due: number;
26
+ locationId: 'primary-database'; maxItems: 10000; pageSize: 100;
27
+ policyVersion: string; retentionDays: number; runId: string;
28
+ }
29
+ export interface RetentionRun {
30
+ kind: 'data-retention-run'; schemaVersion: 1; slice: '${name}'; stage: string;
31
+ plan: ${pascalName}RetentionPlanV1;
32
+ approval: ApprovalRequest<typeof RETENTION_ACTION> | null;
33
+ status: 'reported' | 'approval-pending' | 'approval-approved' | 'approval-rejected' |
34
+ 'applying' | 'retry-required' | 'completed' | 'expired';
35
+ createdAt: string; updatedAt: string; expiresAt: string;
36
+ }
37
+ export function retentionStage(): string {
38
+ const stage = process.env.EBK_STAGE;
39
+ if (!stage || !/^[a-z][a-z0-9-]{0,62}$/.test(stage)) throw new Error('Retention requires the exact Slice/task stage.');
40
+ return stage;
41
+ }
42
+ export function retentionRunReference(runId: string): string {
43
+ if (typeof runId !== 'string' || !UUID.test(runId)) throw new Error('Retention run requires an exact UUID.');
44
+ return createDataLifecyclePseudonymousReference({ categoryId: 'lifecycle-control-metadata', slice: '${name}', value: runId });
45
+ }
46
+ /** Retained control metadata is validated against its own policy, never today's deletion authority. */
47
+ export function requireRetainedRetentionPlan(value: ${pascalName}RetentionPlanV1, runId: string): ${pascalName}RetentionPlanV1 {
48
+ retentionRunReference(runId);
49
+ if (!value || value.runId !== runId || typeof value.policyVersion !== 'string' || !value.policyVersion.trim() || value.policyVersion.length > 128 ||
50
+ value.categoryId !== 'product-record' || value.locationId !== 'primary-database' ||
51
+ value.maxItems !== 10000 || value.pageSize !== 100 || !Number.isSafeInteger(value.retentionDays) || value.retentionDays < 1 ||
52
+ !Number.isSafeInteger(value.due) || value.due < 0 || value.due > value.maxItems ||
53
+ typeof value.asOf !== 'string' || typeof value.candidateDigest !== 'string' || !/^sha256:[a-f0-9]{64}$/.test(value.candidateDigest) ||
54
+ Object.keys(value).sort().join(',') !== 'asOf,candidateDigest,categoryId,due,locationId,maxItems,pageSize,policyVersion,retentionDays,runId')
55
+ throw new Error('Retention report plan is invalid.');
56
+ canonicalDataRightsNow(value.asOf);
57
+ return value;
58
+ }
59
+ export function requireRetentionPlan(value: ${pascalName}RetentionPlanV1, runId: string): ${pascalName}RetentionPlanV1 {
60
+ requireRetainedRetentionPlan(value, runId);
61
+ if (value.policyVersion !== RETENTION_POLICY || value.retentionDays !== RETENTION_DAYS)
62
+ throw new Error('Retention report policy changed; create and approve a new report.');
63
+ return value;
64
+ }
65
+ export const retentionApprovalInput = (plan: ${pascalName}RetentionPlanV1) => ({
66
+ action: RETENTION_ACTION, command: plan, resource: { id: plan.runId, type: 'retention-run' },
67
+ } as const);
68
+ export function createReportedRetentionRun(plan: ${pascalName}RetentionPlanV1, now: string): RetentionRun {
69
+ if (typeof now !== 'string') throw new Error('Retention report requires an explicit timestamp.');
70
+ requireRetentionPlan(plan, plan.runId); canonicalDataRightsNow(now);
71
+ if (Date.parse(plan.asOf) > Date.parse(now)) throw new Error('Retention report cannot select future records.');
72
+ return { kind: 'data-retention-run', schemaVersion: 1, slice: '${name}', stage: retentionStage(),
73
+ plan, approval: null, status: 'reported', createdAt: now, updatedAt: now, expiresAt: plusDataRightsDays(now, 400) };
74
+ }
75
+ export function retentionRunChange(run: RetentionRun, expectedVersion: number): KeyValueChange {
76
+ return { action: 'put', collection: RETENTION_RUNS, id: run.plan.runId, expectedVersion, value: run };
77
+ }
78
+ export async function loadRetentionRun(runId: string, now: string) {
79
+ if (typeof now !== 'string') throw new Error('Retention operation requires an explicit timestamp.');
80
+ retentionRunReference(runId); canonicalDataRightsNow(now);
81
+ const row = await dataStore().get('application', RETENTION_RUNS, runId);
82
+ const run = row?.value as RetentionRun | undefined;
83
+ if (!row || !run || run.kind !== 'data-retention-run' || run.schemaVersion !== 1 ||
84
+ run.slice !== '${name}' || run.stage !== retentionStage() ||
85
+ !['reported', 'approval-pending', 'approval-approved', 'approval-rejected', 'applying', 'retry-required', 'completed', 'expired'].includes(run.status))
86
+ throw new Error('The exact retention report was not found or is malformed.');
87
+ requireRetentionPlan(run.plan, runId);
88
+ for (const value of [run.createdAt, run.updatedAt, run.expiresAt]) {
89
+ if (typeof value !== 'string') throw new Error('Retention report time bounds are malformed.');
90
+ canonicalDataRightsNow(value);
91
+ }
92
+ if (Date.parse(run.plan.asOf) > Date.parse(run.createdAt) || Date.parse(run.createdAt) > Date.parse(run.updatedAt) ||
93
+ Date.parse(run.updatedAt) > Date.parse(now) || run.expiresAt !== plusDataRightsDays(run.createdAt, 400) ||
94
+ Date.parse(now) >= Date.parse(run.expiresAt))
95
+ throw new Error('Retention report is expired or its retained time bounds are invalid.');
96
+ const approval = run.approval;
97
+ if (approval !== null) {
98
+ if (!approval || !UUID.test(approval.id) || approval.schemaVersion !== 1 || approval.slice !== '${name}' ||
99
+ approval.action !== RETENTION_ACTION || approval.policyVersion !== RETENTION_AUTHORIZATION_POLICY ||
100
+ approval.resource?.id !== runId || approval.resource.type !== 'retention-run' ||
101
+ !Number.isSafeInteger(approval.revision) || approval.revision < 0 ||
102
+ digestApprovalRequest(retentionApprovalInput(run.plan)) !== approval.requestDigest ||
103
+ approval.author?.authorityMode !== 'direct' || approval.author.subjectType !== 'user' ||
104
+ typeof approval.author.actorId !== 'string' || !approval.author.actorId ||
105
+ approval.author.effectiveHumanId !== approval.author.actorId)
106
+ throw new Error('Retention approval is not bound to the exact report and direct author.');
107
+ if (typeof approval.requestedAt !== 'string' || typeof approval.expiresAt !== 'string')
108
+ throw new Error('Retention approval time bounds are malformed.');
109
+ canonicalDataRightsNow(approval.requestedAt); canonicalDataRightsNow(approval.expiresAt);
110
+ if (Date.parse(approval.requestedAt) < Date.parse(run.createdAt) || Date.parse(approval.requestedAt) > Date.parse(run.updatedAt) ||
111
+ Date.parse(approval.expiresAt) > Date.parse(run.expiresAt) ||
112
+ approval.expiresAt !== plusDataRightsDays(approval.requestedAt, 1))
113
+ throw new Error('Retention approval has invalid time bounds.');
114
+ }
115
+ const expected = { reported: null, 'approval-pending': 'pending', 'approval-approved': 'approved',
116
+ 'approval-rejected': 'rejected', applying: 'executing', 'retry-required': 'executing', completed: 'executed', expired: 'expired' };
117
+ if ((approval?.status ?? null) !== expected[run.status]) throw new Error('Retention report and approval state disagree.');
118
+ return { run, version: row.version };
119
+ }
120
+ `,
121
+ 'data/retention-control.ts': `import {
122
+ assertAuthorizationAllowed, createApprovalRequest, decideApprovalRequest,
123
+ type AuthorizationPrincipal,
124
+ } from '@empire-builder-kit/runtime/authorization';
125
+ import { canonicalDataRightsNow, dataRightsAuditChange, plusDataRightsDays, requireDirectAdmin } from './data-rights-shared.js';
126
+ import { dataStore } from './key-value.js';
127
+ import { loadRetentionRun, retentionApprovalInput, retentionRunChange, retentionRunReference,
128
+ RETENTION_AUTHORIZATION_POLICY, type RetentionRun } from './retention-state.js';
129
+ export type { ${pascalName}RetentionPlanV1 } from './retention-state.js';
130
+
131
+ interface Command { correlationId: string; now: string; principal: AuthorizationPrincipal; runId: string }
132
+ function validate(input: Command) {
133
+ requireDirectAdmin(input.principal);
134
+ if (typeof input.now !== 'string') throw new Error('Retention operation requires an explicit timestamp.');
135
+ canonicalDataRightsNow(input.now); retentionRunReference(input.runId);
136
+ if (typeof input.correlationId !== 'string' || !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(input.correlationId))
137
+ throw new Error('Retention requires a bounded correlation identifier.');
138
+ }
139
+ async function commit(run: RetentionRun, version: number, input: Command, purposeCode: string) {
140
+ if (!run.approval) throw new Error('Retention approval transition requires an approval.');
141
+ // Report, approval and audit share one native transaction; no independently
142
+ // writable approval file/row can authorize another report or a stale version.
143
+ await dataStore().commit({ tenantId: 'application', changes: [
144
+ retentionRunChange(run, version),
145
+ dataRightsAuditChange({ action: 'retention-apply', approvalRequestId: run.approval.id,
146
+ correlationId: input.correlationId, now: input.now, principal: input.principal,
147
+ resourceReference: retentionRunReference(input.runId), purposeCode,
148
+ outcome: run.status === 'approval-rejected' ? 'rejected' : 'succeeded',
149
+ summary: 'A bounded retention approval transition was committed.' }),
150
+ ] });
151
+ }
152
+ export async function request${pascalName}RetentionApproval(input: Command) {
153
+ validate(input);
154
+ const { run, version } = await loadRetentionRun(input.runId, input.now);
155
+ if (run.status !== 'reported' || run.approval !== null)
156
+ throw new Error('Retention report already has an approval request or is no longer reviewable.');
157
+ const approval = createApprovalRequest({ ...retentionApprovalInput(run.plan), author: input.principal,
158
+ expiresAt: plusDataRightsDays(input.now, 1), now: input.now,
159
+ policyVersion: RETENTION_AUTHORIZATION_POLICY, slice: '${name}' });
160
+ if (Date.parse(approval.expiresAt) > Date.parse(run.expiresAt))
161
+ throw new Error('Retention report expires before its approval; create a new report.');
162
+ await commit({ ...run, approval, status: 'approval-pending', updatedAt: input.now }, version, input, 'approval-pending');
163
+ return { approvalRequestId: approval.id, expiresAt: approval.expiresAt, requestDigest: approval.requestDigest, status: approval.status };
164
+ }
165
+ export async function decide${pascalName}RetentionApproval(input: Command & {
166
+ approvalRequestId: string; expectedRequestDigest: string; outcome: 'approved' | 'rejected'; reasonReference: string;
167
+ }) {
168
+ validate(input);
169
+ if (input.outcome !== 'approved' && input.outcome !== 'rejected') throw new Error('Retention approval outcome is invalid.');
170
+ const { run, version } = await loadRetentionRun(input.runId, input.now);
171
+ if (run.status !== 'approval-pending' || !run.approval || run.approval.id !== input.approvalRequestId)
172
+ throw new Error('Retention approval does not match the pending report.');
173
+ const decision = decideApprovalRequest(run.approval, { approver: input.principal,
174
+ expectedRequestDigest: input.expectedRequestDigest, now: input.now, outcome: input.outcome,
175
+ reasonReference: input.reasonReference, requiredPolicyVersion: RETENTION_AUTHORIZATION_POLICY });
176
+ assertAuthorizationAllowed(decision.decision);
177
+ await commit({ ...run, approval: decision.request, status: input.outcome === 'approved' ? 'approval-approved' : 'approval-rejected',
178
+ updatedAt: input.now }, version, input, 'approval-' + input.outcome);
179
+ return { approvalRequestId: decision.request.id, status: decision.request.status };
180
+ }
181
+ `,
182
+ };
183
+ }
184
+ //# sourceMappingURL=built-in-plan-key-value-retention.js.map
@@ -1,3 +1,3 @@
1
1
  import type { GeneratedOwnershipRecord } from '../../ownership/index.js';
2
2
  /** @internal */
3
- export declare function renderSliceMetadataFiles(name: string, scope: string, pascalName: string, ownership: GeneratedOwnershipRecord): Readonly<Record<string, string>>;
3
+ export declare function renderSliceMetadataFiles(name: string, scope: string, pascalName: string, ownership: GeneratedOwnershipRecord, sql?: boolean): Readonly<Record<string, string>>;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.renderSliceMetadataFiles = renderSliceMetadataFiles;
4
4
  const built_in_plan_shared_js_1 = require("./built-in-plan-shared.js");
5
5
  /** @internal */
6
- function renderSliceMetadataFiles(name, scope, pascalName, ownership) {
6
+ function renderSliceMetadataFiles(name, scope, pascalName, ownership, sql = false) {
7
7
  return {
8
8
  '.ebk/ownership.json': (0, built_in_plan_shared_js_1.json)(ownership),
9
9
  'README.md': `# ${name}
@@ -18,7 +18,8 @@ files from \`packages/foundation/infra\` or from another slice's internals.
18
18
 
19
19
  - Next.js web application with sign-in, refresh, sign-out, callback, and password-reset paths
20
20
  - Lambda HTTP API with health and JWT-protected routes
21
- - stage- and slice-scoped logical Postgres database plus migration history
21
+ - task/stage- and Slice-scoped DynamoDB persistence with durable event intents and inbox handling
22
+ - optional user-feature PostgreSQL/Drizzle backed by Foundation Aurora when SQL is declared
22
23
  - typed EventBridge publisher and SQS/DLQ-backed consumer
23
24
  - Product Slice dashboard and API/DLQ alarms routed through Foundation alerts
24
25
  - Vitest source test and Playwright deployed-smoke path
@@ -26,11 +27,20 @@ files from \`packages/foundation/infra\` or from another slice's internals.
26
27
  rendered accessibility checks, and reviewable visual evidence
27
28
  - versioned SLO, alarm, diagnostic, incident-remediation, and reliability-exercise contracts
28
29
  - performance, capacity, resource-tag, protected-load, and actual-cost evidence contracts
29
- - workspace-lockfile-derived migration and retention container recipes with supply-chain checks
30
+ - supply-chain-checked migration containers only for declared SQL workloads
30
31
 
31
32
  Keep business contracts in \`contracts/\`. Add long-running Services and finite Jobs only when
32
33
  the product needs them.
33
34
 
35
+ Declare a new same-Slice domain event in the seeded \`contracts/events.ts\`
36
+ \`EventContractSchema\` and implement its effect in the seeded \`api/event-consumer.ts\`.
37
+ The existing queue rule subscribes to those declared event types while retaining
38
+ the exact publishing Slice and current stage filters. Keep the built-in event
39
+ declarations; lifecycle events retain their separate declared-source rule.
40
+ Commit domain changes and event intents together through the DynamoDB store,
41
+ and commit consumer effects with the inbox. Do not edit managed routing or
42
+ assume that declaring an event implements its consumer behavior.
43
+
34
44
  Run \`pnpm nx run ${name}:verify\` for the non-deployed Slice checks. The policy files under
35
45
  \`frontend/\`, \`docs/reliability/\`, \`operations/\`, and \`performance/\` are seeded decisions:
36
46
  adopt real owners, journeys, thresholds, targets, and evidence sources before enabling
@@ -43,19 +53,58 @@ Add product dependencies with \`pnpm --filter ${scope}/${name} add <package>\`.
43
53
  its recorded framework keys in this package manifest, so health checks and upgrades preserve
44
54
  dependencies, scripts, and other keys added by the product team.
45
55
 
46
- ## Local database
56
+ ## Develop the DynamoDB-first application
47
57
 
48
- Run \`ebk dev up ${name}\`. The framework derives the current developer's
49
- personal stage, starts Docker Postgres, applies local migrations, and starts
50
- SST live mode through the workspace-pinned Nx task. A caller cannot supply or
51
- persist a stage override. The fleet supervisor allocates the internal Next.js
52
- port and reports the HTTPS readiness URL.
58
+ Run \`ebk dev up ${name}\`. The framework reuses this worktree's persisted opaque
59
+ task identity, starts the selected Slice and declared dependencies, and runs
60
+ SST live mode through the workspace-pinned Nx task. Native persistence uses the
61
+ task's real AWS DynamoDB resources; Docker PostgreSQL starts only for declared
62
+ relational workloads. A caller cannot supply or persist a stage override. The
63
+ fleet supervisor allocates the internal Next.js port and reports the HTTPS
64
+ readiness URL. Development accepts a dirty tree and requires no production
65
+ confirmation or release artifact.
53
66
 
54
67
  The workspace fleet target discovers this slice through its versioned
55
68
  \`metadata.ebk.localDev\` adapter. It supplies the exact HTTPS fleet origin, secure-cookie
56
69
  signal, callback/logout URLs, and allocated internal port; do not persist a developer port in
57
70
  this project.
58
71
 
72
+ Functions added with \`nx g @empire-builder-kit/nx:function\` use
73
+ \`/${name}/api/functions/<name>\` on this same browser origin. During fleet
74
+ development, generated Next routing forwards only that namespace to this task's
75
+ SST API; handlers keep native SST live execution. This is not deployed-stage
76
+ fallback. Keep user-owned Next API routes local and do not add a manual proxy.
77
+
78
+ Use \`pnpm nx run ${name}:verify-local-browser\` against that owned fleet origin.
79
+ Before its first run, install the pinned browser from this Slice's directory
80
+ with \`pnpm exec playwright install chromium\`. Repeat after a Playwright upgrade
81
+ only when the required browser revision changes. Verification never downloads
82
+ a browser or changes system trust silently. Inspect local failures under
83
+ \`.ebk/evidence/local-browser-artifacts\` in this Slice; keep these diagnostics
84
+ private because they may contain application test data.
85
+ Run affected feature tests, typecheck and lint for ordinary edits; use the
86
+ complete Slice/workspace verification at milestones, not after every hot edit.
87
+ Local fixture tests do not prove cloud routing, Streams, IAM or browser behavior.
88
+ Run \`ebk dev down ${name}\` when finished; cleanup must target only owned task
89
+ resources, and retained local SQL volumes remain available for the next session.
90
+
91
+ ## Add relational storage deliberately
92
+
93
+ SQL is optional for user features that need relational constraints, joins or
94
+ transactions. DynamoDB remains the framework core, including its inbox and
95
+ outbox, when SQL is enabled. Use the Standard Blueprint's \`inputs.sql.reason\`
96
+ at Slice creation, or run
97
+ \`pnpm nx g @empire-builder-kit/nx:sql ${name} --reason="Explain the relational requirement"\`
98
+ to review the later addition, then repeat with \`--apply\`. The generator updates
99
+ the persisted Foundation/Slice declarations and reports resource implications;
100
+ it does not deploy AWS resources. New SQL defaults to \`cost-optimized\` Aurora
101
+ (0–2 ACUs, five-minute auto-pause); an explicit existing capacity choice is
102
+ preserved. Choose \`balanced\` or \`standard\` only when measured latency and
103
+ capacity needs justify a warm floor. Capacity selection does not pause schedules.
104
+
105
+ The commands below apply only after SQL has been declared. No Aurora, Drizzle
106
+ migration target or local PostgreSQL prerequisite is part of the SQL-free path.
107
+
59
108
  \`database/bindings.json\` is the adopter-owned database selection contract. Add a candidate
60
109
  identifier to \`primary.provisioned\` to provision it without moving workload traffic. Every
61
110
  provisioned identifier receives its own AWS-internal bootstrap-and-migration workflow. Run
@@ -67,10 +116,7 @@ databases with Foundation master credentials.
67
116
  The readiness route is framework-managed for local orchestration. Put product-specific
68
117
  dependency and status checks under \`/${name}/api/status\` rather than editing that route.
69
118
 
70
- Run \`ebk dev down ${name}\` when finished. The named volume preserves local
71
- data between sessions.
72
-
73
- For a deployed canonical stage, \`${name}:db-migrate\` does not connect from the
119
+ For a deployed canonical SQL stage, \`${name}:db-migrate\` does not connect from the
74
120
  local or GitHub process. It starts the generated Standard Step Functions
75
121
  workflow, waits for its one-off Fargate task, and reports the execution ARN.
76
122
  The workflow first runs an AWS-internal bootstrap task that converges the
@@ -79,16 +125,22 @@ IAM-authenticated migration task. Neither password resolves in GitHub, SST, or
79
125
  Pulumi state. The authenticated \`GET /database-health\` API route uses the
80
126
  server-only resolver, linked secret, and runtime-embedded AWS RDS global CA
81
127
  bundle to prove the deployed runtime path with hostname-verified TLS.
82
- Staging and production use the existing environment-scoped
83
- \`AWS_DEPLOY_ROLE_ARN\`; no second migration OIDC role or database password is
84
- configured by the adopter. That role needs only \`ssm:GetParameter\` for the
128
+ Staging and production use the canonical stage deployment role
129
+ (\`ebk-<stage>-deploy\`), which the managed Deploy workflow derives from
130
+ committed account, stage and partition policy and exposes to its jobs as
131
+ \`AWS_DEPLOY_ROLE_ARN\`; no GitHub environment role secret, second migration
132
+ OIDC role or database password is configured by the adopter. That role needs only \`ssm:GetParameter\` for the
85
133
  exact generated migration-registration path and \`states:StartExecution\` /
86
134
  \`states:DescribeExecution\` for the exact generated state machine and its
87
135
  execution namespace; it never receives SQL, database-token, or arbitrary ECS
88
- authority.
89
-
90
- Ordinary Slice removal is non-destructive and retains logical databases and
91
- credential containers. The only destructive v1 database path is the protected
136
+ authority. When a user feature changes SQL data and publishes an event, keep
137
+ the SQL change and SQL intent in one transaction, then notify after commit.
138
+ Missed SQL notifications recover on the next hourly reconciliation by default;
139
+ explicit cadence and maintenance pauses remain independent settings. No
140
+ transaction spans SQL and DynamoDB.
141
+
142
+ Ordinary Slice removal retains declared relational databases and their
143
+ credential containers. The generated SQL retirement rehearsal is the protected
92
144
  \`db-retirement-rehearsal\` target for the exact operations-declared
93
145
  \`development\` database named \`retirement_rehearsal\`. It accepts no stage,
94
146
  Slice, database, task, role, image, network, or workflow selection.
@@ -110,12 +162,14 @@ export const ${pascalName}ContractVersion = '1.0.0' as const;
110
162
 
111
163
  ## Boundary
112
164
 
113
- This slice owns its product behavior, routes, app clients, logical databases, event rules,
114
- queues, alarms, dashboards, and runbooks. The Foundation owns shared capacity and policy.
165
+ This Slice owns its product behavior, routes, app clients, DynamoDB tables,
166
+ declared relational databases, event rules, queues, alarms, dashboards and
167
+ runbooks. Foundation owns shared capabilities and policy; Aurora is provisioned
168
+ only for declared relational requirements, not for the DynamoDB framework core.
115
169
 
116
170
  ## Dependencies
117
171
 
118
- - Foundation contract: \`^1\`
172
+ - Foundation discovery follows its versioned capability contract
119
173
  - Canonical stages map to the same Foundation stage; framework-derived personal stages map
120
174
  only to \`development\`
121
175
  - Other slices: contracts-only imports
@@ -146,7 +200,8 @@ before adopting capacity limits, enabling protected load, or collecting actual-c
146
200
 
147
201
  ## Database migration
148
202
 
149
- Protected migration runs from generated immutable bootstrap and migration
203
+ ${sql
204
+ ? `Protected migration runs from generated immutable bootstrap and migration
150
205
  Fargate tasks through one Standard Step Functions workflow per provisioned
151
206
  database identifier. The bootstrap task owns exact master-secret read,
152
207
  runtime-secret read/write, and migrator-connect permissions; it converges the
@@ -157,10 +212,12 @@ receives only exact migrator-connect permission.
157
212
 
158
213
  Retain the workflow execution ARN, both task identities, image identity, source
159
214
  commit, migration checksums, sanitized CloudWatch logs, backup reference, and
160
- verification result. The GitHub job reuses
161
- \`AWS_DEPLOY_ROLE_ARN\` only to start and describe the exact workflow; it must
162
- not have direct SQL, secret-value, \`rds-db:connect\`, or arbitrary
163
- \`ecs:RunTask\` authority.
215
+ verification result. The GitHub job uses the stage deployment role
216
+ (\`AWS_DEPLOY_ROLE_ARN\`) only to start and describe the exact workflow. That
217
+ role has no \`rds-db:connect\` or \`ecs:RunTask\` authority and no secret-value
218
+ access to operator or Slice secret containers; its sole secret-value exception
219
+ is the SST-managed Foundation Aurora credential described in the workspace
220
+ \`docs/stage-deployment-authority.md\`.
164
221
 
165
222
  The default \`db-migrate\` target selects the active \`primary\` database.
166
223
  During replacement, first add the candidate to \`primary.provisioned\`, deploy
@@ -188,6 +245,61 @@ reviewed replacement or forward-compatible design instead of bypassing the
188
245
  transaction. Apply expand/migrate/contract. Repair failures with a forward
189
246
  migration or the documented restore/replacement procedure; do not edit an
190
247
  applied SQL file.
248
+ `
249
+ : `This Slice uses DynamoDB and has no SQL migration or retirement targets.
250
+ For a feature requiring relational integrity or joins, review
251
+ \`pnpm nx g @empire-builder-kit/nx:sql ${name} --reason="Explain the relational requirement"\`,
252
+ then repeat with \`--apply\`. Generation declares the capability; deploy through
253
+ the normal lifecycle. DynamoDB remains the framework core after SQL is added.
254
+ `}
255
+ `,
256
+ 'docs/runbooks/database-recovery.md': `# ${name} persistence recovery
257
+
258
+ Start with the exact Slice, stage, source and alarm dimensions. Keep unrelated
259
+ stages and production protections unchanged. Record bounded diagnostics; do not
260
+ retain record bodies, credentials or raw provider state.
261
+
262
+ ## DynamoDB
263
+
264
+ For \`database-errors\`, inspect both table and PendingEvents index read/write
265
+ throttle metrics. Check hot keys, account/service quotas, retries and backlog;
266
+ do not treat a missing RDS signal as proof that the table is healthy. Check the
267
+ outbox schedule and stream mapping against their deliberate maintenance state.
268
+ Never delete pending intents or completion work to silence an alarm. If delivery
269
+ was interrupted, restore the owning worker's authority/connectivity and allow
270
+ bounded reconciliation to resume. Repeated failures require investigation of
271
+ the retained content-free failure marker and exact original workflow.
272
+ Completion failures retain a bounded attempt counter and exponential retry
273
+ delay (one minute up to one hour). A deferred or earlier-page obligation keeps
274
+ reconciliation partial; it is never expired by TTL. Repair the owning failure,
275
+ then allow the next retry, or retry the original approved deletion command.
276
+ Never invent publication acknowledgement or remove its pending-work binding.
277
+
278
+ Control-metadata holds belong in the seeded \`data/policy.json\` descriptor and
279
+ take effect with its governed deployment. They are checked before every
280
+ maintenance invocation, independent of its retained cursor. Record-hold APIs
281
+ create only product-record holds. Do not insert control holds directly into
282
+ the product hold collection; it is not a global maintenance-authority surface.
283
+
284
+ For restore, use point-in-time recovery into a new, separately identified table.
285
+ Verify record integrity, encryption, access scope and replay/idempotency behavior
286
+ before proposing a reviewed binding change. Do not automatically cut over,
287
+ overwrite the original table, replay expired inbox messages or disable deletion
288
+ protection. Retain measured recovery point/time and the rollback identity.
289
+
290
+ ${sql
291
+ ? `## Declared PostgreSQL
292
+
293
+ The declared Aurora database additionally requires its migration checksums,
294
+ backup identity, retained resource identity and deletion protection to be checked.
295
+ Use the [database migration procedure](../runbooks.md#database-migration).
296
+ Restore into a new resource and verify authorization and migrations before any
297
+ reviewed traffic change; never edit an applied migration or replace production
298
+ as an incidental repair.
299
+ `
300
+ : `SQL is not declared. No Aurora investigation or SQL migration command is
301
+ required for this Slice's DynamoDB recovery.
302
+ `}
191
303
  `,
192
304
  'ebk-globals.d.ts': `import 'sst/resource';
193
305
 
@@ -1,2 +1,2 @@
1
1
  /** @internal */
2
- export declare function renderStandardSliceNativeRuntimeAuthorityFiles(name: string, workspace: string): Readonly<Record<string, string>>;
2
+ export declare function renderStandardSliceNativeRuntimeAuthorityFiles(name: string, workspace: string, sql?: boolean): Readonly<Record<string, string>>;
@@ -2,14 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.renderStandardSliceNativeRuntimeAuthorityFiles = renderStandardSliceNativeRuntimeAuthorityFiles;
4
4
  const built_in_plan_workload_role_files_js_1 = require("./built-in-plan-workload-role-files.js");
5
- function renderTopology(name) {
6
- return `import { createDatabaseBindingPlan } from '@empire-builder-kit/nx/foundation';
5
+ function renderTopology(name, sql) {
6
+ return `${sql ? "import { createDatabaseBindingPlan } from '@empire-builder-kit/nx/foundation';\n" : ''}\
7
7
  import {
8
8
  createStandardSliceWorkloadRoleTopology as createRuntimeTopology,
9
9
  type StandardSliceServiceAdapterMetadata,
10
10
  type StandardSliceWorkloadExtension,
11
11
  } from '@empire-builder-kit/nx/workload-roles';
12
- import databaseBindings from '../../database/bindings.json';
12
+ ${sql ? "import databaseBindings from '../../database/bindings.json';\n" : ''}\
13
13
  import performanceOperations from '../../operations/performance.json';
14
14
 
15
15
  export const STANDARD_SLICE_RUNTIME_EXTENSIONS = [
@@ -40,10 +40,15 @@ function serviceAdapterMetadata(value: unknown): StandardSliceServiceAdapterMeta
40
40
  const SERVICE_ADAPTER = serviceAdapterMetadata(performanceOperations);
41
41
 
42
42
  export function createStandardSliceRuntimeTopology(stage: string) {
43
- const databases = createDatabaseBindingPlan(databaseBindings, {
43
+ ${sql
44
+ ? ` const databases = createDatabaseBindingPlan(databaseBindings, {
44
45
  slice: '${name}',
45
46
  stage,
46
47
  }).provisioned;
48
+ `
49
+ : ` void stage;
50
+ const databases: string[] = [];
51
+ `}\
47
52
  return createRuntimeTopology({
48
53
  databaseIdentifiers: databases,
49
54
  extensions: STANDARD_SLICE_RUNTIME_EXTENSIONS,
@@ -53,8 +58,8 @@ export function createStandardSliceRuntimeTopology(stage: string) {
53
58
  }
54
59
  `;
55
60
  }
56
- function renderEffectiveIntent(name, workspace) {
57
- const source = (0, built_in_plan_workload_role_files_js_1.renderStandardSliceWorkloadRoleFiles)(name, workspace)['infra/workload-roles/effective-intent.ts'];
61
+ function renderEffectiveIntent(name, workspace, sql) {
62
+ const source = (0, built_in_plan_workload_role_files_js_1.renderStandardSliceWorkloadRoleFiles)(name, workspace, sql)['infra/workload-roles/effective-intent.ts'];
58
63
  if (!source) {
59
64
  throw new Error('Standard Slice native authority source is unavailable.');
60
65
  }
@@ -87,7 +92,7 @@ function renderEffectiveIntent(name, workspace) {
87
92
  '/workloads/*'
88
93
  );
89
94
  }`;
90
- if (!withoutRoleNameImport.includes(legacyRoleArn)) {
95
+ if (sql && !withoutRoleNameImport.includes(legacyRoleArn)) {
91
96
  throw new Error('Standard Slice role ARN source seam changed unexpectedly.');
92
97
  }
93
98
  return withoutRoleNameImport
@@ -95,7 +100,7 @@ function renderEffectiveIntent(name, workspace) {
95
100
  .replace('<ebk:workload-role-intent-contributions:start>', '<ebk:native-runtime-intent-contributions:start>')
96
101
  .replace('<ebk:workload-role-intent-contributions:end>', '<ebk:native-runtime-intent-contributions:end>');
97
102
  }
98
- function renderRuntime(name, workspace) {
103
+ function renderRuntime(name, workspace, sql) {
99
104
  return `import { canonicalOperatorSecretName } from '@empire-builder-kit/nx/secrets';
100
105
  import {
101
106
  createStandardSliceWorkloadRoleIntents,
@@ -171,11 +176,14 @@ function policyJson(permissions: readonly NativePermission[]): string {
171
176
  }
172
177
 
173
178
  export function createStandardSliceNativeRuntimeAuthority(input: {
174
- clusterId: any;
179
+ ${sql
180
+ ? ` clusterId: any;
175
181
  clusterResourceId: any;
182
+ masterSecretArn: any;
183
+ `
184
+ : ''}\
176
185
  eventBusArn: any;
177
186
  identityUserPoolArn: any;
178
- masterSecretArn: any;
179
187
  }) {
180
188
  const accountId = requiredAccountId();
181
189
  const region = requiredRegion();
@@ -214,25 +222,34 @@ export function createStandardSliceNativeRuntimeAuthority(input: {
214
222
  };
215
223
  });
216
224
  const resolved = $resolve({
217
- clusterId: input.clusterId,
225
+ ${sql
226
+ ? ` clusterId: input.clusterId,
218
227
  clusterResourceId: input.clusterResourceId,
228
+ masterSecretArn: input.masterSecretArn,
229
+ `
230
+ : ''}\
219
231
  eventBusArn: input.eventBusArn,
220
232
  identityUserPoolArn: input.identityUserPoolArn,
221
- masterSecretArn: input.masterSecretArn,
222
233
  secretArns: secretReferences.map(({ observed }) => observed.arn),
223
234
  }).apply((values) => {
224
- const clusterId = values.clusterId ?? '';
235
+ ${sql
236
+ ? ` const clusterId = values.clusterId ?? '';
225
237
  const clusterName = clusterId.split('/').at(-1) ?? '';
226
238
  if (!clusterName || !/^[A-Za-z0-9_-]{1,255}$/.test(clusterName)) {
227
239
  throw new Error('Foundation cluster identity is malformed.');
228
240
  }
241
+ `
242
+ : ''}\
229
243
  const context: StandardSliceWorkloadRoleIntentContext = {
230
244
  accountId,
231
- clusterName,
245
+ ${sql
246
+ ? ` clusterName,
232
247
  clusterResourceId: values.clusterResourceId ?? '',
248
+ masterSecretArn: values.masterSecretArn ?? '',
249
+ `
250
+ : ''}\
233
251
  eventBusArn: values.eventBusArn ?? '',
234
252
  identityUserPoolArn: values.identityUserPoolArn ?? '',
235
- masterSecretArn: values.masterSecretArn ?? '',
236
253
  partition,
237
254
  region,
238
255
  stage: authorityStage,
@@ -296,12 +313,12 @@ export function createStandardSliceNativeRuntimeAuthority(input: {
296
313
  `;
297
314
  }
298
315
  /** @internal */
299
- function renderStandardSliceNativeRuntimeAuthorityFiles(name, workspace) {
316
+ function renderStandardSliceNativeRuntimeAuthorityFiles(name, workspace, sql = false) {
300
317
  return {
301
- 'infra/native-runtime-authority/effective-intent.ts': renderEffectiveIntent(name, workspace),
318
+ 'infra/native-runtime-authority/effective-intent.ts': renderEffectiveIntent(name, workspace, sql),
302
319
  'infra/native-runtime-authority/index.ts': `export * from './runtime.js';\n`,
303
- 'infra/native-runtime-authority/runtime.ts': renderRuntime(name, workspace),
304
- 'infra/native-runtime-authority/topology.ts': renderTopology(name),
320
+ 'infra/native-runtime-authority/runtime.ts': renderRuntime(name, workspace, sql),
321
+ 'infra/native-runtime-authority/topology.ts': renderTopology(name, sql),
305
322
  };
306
323
  }
307
324
  //# sourceMappingURL=built-in-plan-native-runtime-authority-files.js.map
@@ -1,2 +1,2 @@
1
1
  /** @internal */
2
- export declare function renderSliceOperationsFiles(name: string, workspace?: string, frameworkVersion?: string): Readonly<Record<string, string>>;
2
+ export declare function renderSliceOperationsFiles(name: string, workspace?: string, frameworkVersion?: string, sql?: boolean): Readonly<Record<string, string>>;