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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (805) hide show
  1. package/README.md +44 -10
  2. package/executors.json +21 -1
  3. package/generators.json +10 -0
  4. package/package.json +31 -7
  5. package/src/aws/child-environment.d.ts +10 -0
  6. package/src/aws/child-environment.js +77 -0
  7. package/src/aws/identity.d.ts +13 -0
  8. package/src/aws/identity.js +41 -0
  9. package/src/aws-authority/index.d.ts +2 -0
  10. package/src/aws-authority/index.js +6 -0
  11. package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
  12. package/src/aws-authority/lambda-policy-ordering.js +56 -0
  13. package/src/aws-authority/stage-authority.d.ts +248 -0
  14. package/src/aws-authority/stage-authority.js +3558 -0
  15. package/src/blueprints/external-sandbox.d.ts +1 -1
  16. package/src/blueprints/external-sandbox.js +21 -9
  17. package/src/blueprints/manifest.d.ts +1 -1
  18. package/src/blueprints/resolver.js +28 -15
  19. package/src/cli/bootstrap.d.ts +1 -1
  20. package/src/cli/deploy-runtime.d.ts +30 -0
  21. package/src/cli/deploy-runtime.js +174 -0
  22. package/src/cli/dev-command.d.ts +18 -4
  23. package/src/cli/dev-command.js +71 -0
  24. package/src/cli/main.d.ts +9 -1
  25. package/src/cli/main.js +157 -24
  26. package/src/cli/output.d.ts +1 -1
  27. package/src/cli/output.js +1 -1
  28. package/src/cli/personal-secret-runtime.d.ts +12 -0
  29. package/src/cli/personal-secret-runtime.js +18 -3
  30. package/src/cli/secret-terminal.js +1 -1
  31. package/src/container-images.d.ts +1 -1
  32. package/src/container-images.js +1 -1
  33. package/src/developer-agent/context.js +41 -9
  34. package/src/developer-agent/generator-planning.js +20 -6
  35. package/src/developer-agent/git-inspection.d.ts +6 -2
  36. package/src/developer-agent/git-inspection.js +78 -6
  37. package/src/developer-agent/model.d.ts +5 -3
  38. package/src/developer-agent/model.js +4 -4
  39. package/src/developer-agent/operation-registry.d.ts +15 -0
  40. package/src/developer-agent/operation-registry.js +342 -49
  41. package/src/developer-agent/planning.d.ts +8 -1
  42. package/src/developer-agent/planning.js +39 -16
  43. package/src/developer-agent/preview-changes.d.ts +2 -0
  44. package/src/developer-agent/preview-changes.js +14 -2
  45. package/src/developer-agent/preview-source.js +3 -0
  46. package/src/developer-agent/validation.js +25 -9
  47. package/src/developer-agent/workspace-inspection.js +60 -5
  48. package/src/executors/blueprint-trust/blueprint-trust.js +6 -0
  49. package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
  50. package/src/executors/deployment-plan/deployment-plan.js +57 -2
  51. package/src/executors/dev-doctor/dev-doctor.js +13 -6
  52. package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
  53. package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
  54. package/src/executors/dev-task-cleanup/schema.json +9 -0
  55. package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
  56. package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
  57. package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
  58. package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
  59. package/src/executors/fleet/fleet.js +1 -1
  60. package/src/executors/foundation-preflight/foundation-preflight.d.ts +1 -0
  61. package/src/executors/foundation-preflight/foundation-preflight.js +6 -2
  62. package/src/executors/foundation-preflight/schema.json +5 -0
  63. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +13 -2
  64. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -31
  65. package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +65 -0
  66. package/src/executors/foundation-profile-preflight/production-database-safeguard.js +223 -0
  67. package/src/executors/foundation-profile-preflight/schema.json +15 -4
  68. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
  69. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +70 -20
  70. package/src/executors/foundation-remove-preflight/schema.json +6 -1
  71. package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
  72. package/src/executors/github-bootstrap/github-bootstrap.js +3 -0
  73. package/src/executors/github-bootstrap/schema.json +7 -1
  74. package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +29 -136
  75. package/src/executors/infrastructure-plan/infrastructure-plan.js +230 -3282
  76. package/src/executors/infrastructure-plan/schema.json +12 -52
  77. package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
  78. package/src/executors/local-deploy/federated-credential-transport.js +252 -0
  79. package/src/executors/local-deploy/local-approval.d.ts +18 -0
  80. package/src/executors/local-deploy/local-approval.js +39 -0
  81. package/src/executors/local-deploy/local-deploy.d.ts +112 -0
  82. package/src/executors/local-deploy/local-deploy.js +1404 -0
  83. package/src/executors/local-deploy/schema.json +70 -0
  84. package/src/executors/refresh/refresh.js +2 -2
  85. package/src/executors/remove/remove.js +2 -2
  86. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +42 -0
  87. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +1229 -0
  88. package/src/executors/router-waf-rehearsal/schema.json +29 -0
  89. package/src/executors/secret-initialize/schema.json +42 -0
  90. package/src/executors/secret-initialize/secret-initialize.d.ts +34 -0
  91. package/src/executors/secret-initialize/secret-initialize.js +297 -0
  92. package/src/executors/secret-metadata/schema.json +5 -0
  93. package/src/executors/secret-metadata/secret-metadata.d.ts +16 -2
  94. package/src/executors/secret-metadata/secret-metadata.js +129 -30
  95. package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
  96. package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
  97. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +48 -0
  98. package/src/executors/sst-lifecycle/governed-native-operation.js +163 -0
  99. package/src/executors/sst-lifecycle/logging-preflight.d.ts +5 -0
  100. package/src/executors/sst-lifecycle/logging-preflight.js +23 -13
  101. package/src/executors/sst-lifecycle/run-sst-command.d.ts +46 -6
  102. package/src/executors/sst-lifecycle/run-sst-command.js +750 -71
  103. package/src/executors/sst-lifecycle/schema.json +8 -1
  104. package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
  105. package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
  106. package/src/executors/sst-lifecycle/sst-environment-source.d.ts +33 -0
  107. package/src/executors/sst-lifecycle/sst-environment-source.js +267 -0
  108. package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
  109. package/src/executors/sst-lifecycle/task-unlock.js +126 -0
  110. package/src/executors/unlock/unlock.js +2 -2
  111. package/src/foundation/capability-plan.d.ts +43 -0
  112. package/src/foundation/capability-plan.js +168 -0
  113. package/src/foundation/cost-estimate.d.ts +170 -0
  114. package/src/foundation/cost-estimate.js +683 -0
  115. package/src/foundation/discovery.d.ts +14 -11
  116. package/src/foundation/discovery.js +32 -6
  117. package/src/foundation/index.d.ts +4 -0
  118. package/src/foundation/index.js +11 -0
  119. package/src/foundation/local-database-contract.d.ts +20 -0
  120. package/src/foundation/local-database-contract.js +262 -13
  121. package/src/foundation/local-private-smoke-access.d.ts +20 -0
  122. package/src/foundation/local-private-smoke-access.js +197 -0
  123. package/src/foundation/logging-preflight.js +1 -1
  124. package/src/foundation/logging.d.ts +3 -1
  125. package/src/foundation/logging.js +1 -1
  126. package/src/foundation/partial-state.d.ts +10 -0
  127. package/src/foundation/partial-state.js +21 -0
  128. package/src/foundation/preflight.js +37 -18
  129. package/src/foundation/private-smoke-access.d.ts +25 -0
  130. package/src/foundation/private-smoke-access.js +135 -0
  131. package/src/foundation/private-smoke-admission.d.ts +45 -0
  132. package/src/foundation/private-smoke-admission.js +180 -0
  133. package/src/foundation/private-smoke-control-plane.d.ts +18 -0
  134. package/src/foundation/private-smoke-control-plane.js +184 -0
  135. package/src/foundation/provision-database-bindings.d.ts +5 -0
  136. package/src/foundation/provision-database-bindings.js +41 -8
  137. package/src/foundation/provision-logical-database.js +15 -8
  138. package/src/foundation/requirements.d.ts +3 -3
  139. package/src/foundation/requirements.js +24 -12
  140. package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
  141. package/src/foundation/router-waf-rate-rehearsal.js +210 -0
  142. package/src/foundation/router-waf.d.ts +149 -0
  143. package/src/foundation/router-waf.js +809 -0
  144. package/src/foundation/stages.d.ts +1 -0
  145. package/src/foundation/stages.js +11 -0
  146. package/src/generators/blueprint/blueprint.d.ts +5 -0
  147. package/src/generators/blueprint/blueprint.js +102 -0
  148. package/src/generators/blueprint/files.d.ts +6 -0
  149. package/src/generators/blueprint/files.js +217 -0
  150. package/src/generators/blueprint/schema.d.ts +4 -0
  151. package/src/generators/blueprint/schema.json +18 -0
  152. package/src/generators/formatting.d.ts +8 -0
  153. package/src/generators/formatting.js +141 -0
  154. package/src/generators/function/function.js +38 -17
  155. package/src/generators/logging-registry.d.ts +2 -0
  156. package/src/generators/logging-registry.js +22 -0
  157. package/src/generators/post-generation-install.js +2 -2
  158. package/src/generators/preset/dependency-overrides.d.ts +8 -0
  159. package/src/generators/preset/dependency-overrides.js +55 -0
  160. package/src/generators/preset/generator.js +43 -3
  161. package/src/generators/preset/schema.d.ts +10 -0
  162. package/src/generators/preset/schema.json +47 -0
  163. package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
  164. package/src/generators/preset/workspace-files-adopter-skills.js +324 -0
  165. package/src/generators/preset/workspace-files-ci-acceptance.d.ts +1 -0
  166. package/src/generators/preset/workspace-files-ci-acceptance.js +791 -0
  167. package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
  168. package/src/generators/preset/workspace-files-ci-install.js +196 -0
  169. package/src/generators/preset/workspace-files-developer-agent.d.ts +2 -0
  170. package/src/generators/preset/workspace-files-developer-agent.js +162 -44
  171. package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
  172. package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
  173. package/src/generators/preset/workspace-files-foundation-workload-roles.js +5 -2
  174. package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
  175. package/src/generators/preset/workspace-files-performance-cost.js +8 -8
  176. package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
  177. package/src/generators/preset/workspace-files-performance-load.js +39 -25
  178. package/src/generators/preset/workspace-files-shared-operation-claims.d.ts +10 -0
  179. package/src/generators/preset/workspace-files-shared-operation-claims.js +59 -0
  180. package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
  181. package/src/generators/preset/workspace-files-stage-authority.js +529 -0
  182. package/src/generators/preset/workspace-files-thin-deploy.d.ts +65 -0
  183. package/src/generators/preset/workspace-files-thin-deploy.js +2507 -0
  184. package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
  185. package/src/generators/preset/workspace-files-thin-docs.js +370 -0
  186. package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
  187. package/src/generators/preset/workspace-files-thin-release.js +26 -0
  188. package/src/generators/preset/workspace-files-workload-role-baseline.js +254 -42
  189. package/src/generators/preset/workspace-files.d.ts +18 -2
  190. package/src/generators/preset/workspace-files.js +1525 -609
  191. package/src/generators/repository-policy/repository-policy.js +235 -5
  192. package/src/generators/repository-policy/schema.d.ts +10 -0
  193. package/src/generators/repository-policy/schema.json +80 -4
  194. package/src/generators/repository-policy/tree-policy.d.ts +3 -0
  195. package/src/generators/repository-policy/tree-policy.js +25 -0
  196. package/src/generators/slice/built-in-plan-api-contract-files.js +49 -11
  197. package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
  198. package/src/generators/slice/built-in-plan-api-files.js +130 -414
  199. package/src/generators/slice/built-in-plan-async-work-files.js +166 -1969
  200. package/src/generators/slice/built-in-plan-authorization-files.js +102 -334
  201. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +975 -233
  202. package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
  203. package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
  204. package/src/generators/slice/built-in-plan-background-work-files.d.ts +2 -0
  205. package/src/generators/slice/built-in-plan-background-work-files.js +99 -0
  206. package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
  207. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
  208. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  209. package/src/generators/slice/built-in-plan-data-files.js +176 -1200
  210. package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
  211. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +37 -2
  212. package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2443
  213. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +50 -8
  214. package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
  215. package/src/generators/slice/built-in-plan-database-lifecycle-files.js +44 -25
  216. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +25 -2
  217. package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
  218. package/src/generators/slice/built-in-plan-foundation-files.js +39 -18
  219. package/src/generators/slice/built-in-plan-frontend-files.js +14 -3
  220. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  221. package/src/generators/slice/built-in-plan-infrastructure-files.js +933 -730
  222. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +75 -14
  223. package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
  224. package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
  225. package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
  226. package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
  227. package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
  228. package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
  229. package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
  230. package/src/generators/slice/built-in-plan-key-value-delivery.js +137 -0
  231. package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
  232. package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
  233. package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
  234. package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
  235. package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
  236. package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
  237. package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
  238. package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
  239. package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
  240. package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
  241. package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
  242. package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
  243. package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
  244. package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
  245. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
  246. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
  247. package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
  248. package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
  249. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
  250. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
  251. package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
  252. package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
  253. package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
  254. package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
  255. package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
  256. package/src/generators/slice/built-in-plan-metadata-files.js +159 -29
  257. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
  258. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +324 -0
  259. package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
  260. package/src/generators/slice/built-in-plan-operations-files.js +585 -97
  261. package/src/generators/slice/built-in-plan-performance-files.d.ts +2 -1
  262. package/src/generators/slice/built-in-plan-performance-files.js +220 -1074
  263. package/src/generators/slice/built-in-plan-project-files.js +141 -135
  264. package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
  265. package/src/generators/slice/built-in-plan-release-files.js +310 -70
  266. package/src/generators/slice/built-in-plan-reliability-files.d.ts +1 -1
  267. package/src/generators/slice/built-in-plan-reliability-files.js +283 -44
  268. package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
  269. package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
  270. package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
  271. package/src/generators/slice/built-in-plan-shared.js +41 -19
  272. package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
  273. package/src/generators/slice/built-in-plan-sql-events.js +276 -0
  274. package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
  275. package/src/generators/slice/built-in-plan-testing-files.js +304 -172
  276. package/src/generators/slice/built-in-plan-testing-persistence-event-files.d.ts +7 -0
  277. package/src/generators/slice/built-in-plan-testing-persistence-event-files.js +487 -0
  278. package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
  279. package/src/generators/slice/built-in-plan-testing-persistence-files.js +180 -0
  280. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
  281. package/src/generators/slice/built-in-plan-thin-release-files.js +162 -0
  282. package/src/generators/slice/built-in-plan-verification-files.js +76 -2
  283. package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
  284. package/src/generators/slice/built-in-plan-web-files.js +223 -16
  285. package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
  286. package/src/generators/slice/built-in-plan-workload-role-files.js +143 -279
  287. package/src/generators/slice/built-in-plan.d.ts +11 -1
  288. package/src/generators/slice/built-in-plan.js +83 -30
  289. package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
  290. package/src/generators/slice/data-policy-review-seed.js +22 -0
  291. package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
  292. package/src/generators/slice/deployed-smoke-readiness.js +214 -0
  293. package/src/generators/slice/local-source-identity.d.ts +2 -0
  294. package/src/generators/slice/local-source-identity.js +31 -0
  295. package/src/generators/slice/persistence-contract.d.ts +14 -0
  296. package/src/generators/slice/persistence-contract.js +32 -0
  297. package/src/generators/slice/slice.js +61 -50
  298. package/src/generators/sql/schema.d.ts +7 -0
  299. package/src/generators/sql/schema.json +38 -0
  300. package/src/generators/sql/sql.d.ts +6 -0
  301. package/src/generators/sql/sql.js +53 -0
  302. package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
  303. package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
  304. package/src/generators/upgrade/upgrade.d.ts +15 -1
  305. package/src/generators/upgrade/upgrade.js +435 -44
  306. package/src/generators/workload/frozen-container.d.ts +1 -1
  307. package/src/generators/workload/performance-registration.d.ts +1 -0
  308. package/src/generators/workload/performance-registration.js +9 -11
  309. package/src/generators/workload/service-performance-files.d.ts +1 -0
  310. package/src/generators/workload/service-performance-files.js +27 -7
  311. package/src/generators/workload/workload.d.ts +1 -1
  312. package/src/generators/workload/workload.js +105 -29
  313. package/src/git-policy/action-pins.d.ts +5 -0
  314. package/src/git-policy/action-pins.js +5 -0
  315. package/src/git-policy/github-bootstrap.d.ts +48 -8
  316. package/src/git-policy/github-bootstrap.js +344 -176
  317. package/src/git-policy/routing.d.ts +7 -1
  318. package/src/git-policy/routing.js +62 -1
  319. package/src/index.d.ts +1 -0
  320. package/src/index.js +1 -0
  321. package/src/infrastructure-change/local-capability.d.ts +73 -0
  322. package/src/infrastructure-change/local-capability.js +114 -0
  323. package/src/infrastructure-change/model.d.ts +25 -4
  324. package/src/infrastructure-change/model.js +1 -0
  325. package/src/infrastructure-change/normalize.d.ts +4 -0
  326. package/src/infrastructure-change/normalize.js +47 -7
  327. package/src/infrastructure-change/plan.d.ts +30 -3
  328. package/src/infrastructure-change/plan.js +323 -13
  329. package/src/infrastructure-change/risk.d.ts +3 -1
  330. package/src/infrastructure-change/risk.js +96 -16
  331. package/src/local-dev/browser-verification.d.ts +37 -0
  332. package/src/local-dev/browser-verification.js +281 -0
  333. package/src/local-dev/contracts.d.ts +10 -1
  334. package/src/local-dev/contracts.js +114 -13
  335. package/src/local-dev/dev-command-core.js +24 -5
  336. package/src/local-dev/docker-credential-health.d.ts +14 -0
  337. package/src/local-dev/docker-credential-health.js +94 -0
  338. package/src/local-dev/environment-inspector.d.ts +7 -0
  339. package/src/local-dev/environment-inspector.js +42 -15
  340. package/src/local-dev/environment-state.js +2 -2
  341. package/src/local-dev/errors.d.ts +1 -1
  342. package/src/local-dev/errors.js +2 -0
  343. package/src/local-dev/fleet-client.js +2 -2
  344. package/src/local-dev/fleet-configuration.js +57 -25
  345. package/src/local-dev/fleet-inventory.js +58 -22
  346. package/src/local-dev/fleet-ipc.d.ts +7 -0
  347. package/src/local-dev/fleet-ipc.js +14 -2
  348. package/src/local-dev/fleet-launcher.d.ts +6 -0
  349. package/src/local-dev/fleet-launcher.js +16 -4
  350. package/src/local-dev/fleet-logs.js +50 -22
  351. package/src/local-dev/fleet-process.d.ts +20 -1
  352. package/src/local-dev/fleet-process.js +197 -41
  353. package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
  354. package/src/local-dev/fleet-runner-evidence.js +56 -0
  355. package/src/local-dev/fleet-runtime.js +268 -229
  356. package/src/local-dev/fleet-session.d.ts +2 -0
  357. package/src/local-dev/fleet-session.js +28 -11
  358. package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
  359. package/src/local-dev/fleet-state.d.ts +5 -2
  360. package/src/local-dev/fleet-state.js +25 -4
  361. package/src/local-dev/fleet-supervisor.d.ts +3 -0
  362. package/src/local-dev/fleet-supervisor.js +66 -11
  363. package/src/local-dev/fleet-web-start.d.ts +12 -0
  364. package/src/local-dev/fleet-web-start.js +48 -0
  365. package/src/local-dev/identity.js +3 -14
  366. package/src/local-dev/index.d.ts +1 -0
  367. package/src/local-dev/index.js +1 -0
  368. package/src/local-dev/native-completion.d.ts +9 -0
  369. package/src/local-dev/native-completion.js +130 -0
  370. package/src/local-dev/nx-workspace.d.ts +4 -2
  371. package/src/local-dev/nx-workspace.js +11 -6
  372. package/src/local-dev/personal-stage.d.ts +4 -5
  373. package/src/local-dev/personal-stage.js +6 -54
  374. package/src/local-dev/port-claims.d.ts +13 -0
  375. package/src/local-dev/port-claims.js +46 -0
  376. package/src/local-dev/ports.d.ts +14 -2
  377. package/src/local-dev/ports.js +78 -3
  378. package/src/local-dev/private-state.d.ts +11 -0
  379. package/src/local-dev/private-state.js +146 -40
  380. package/src/local-dev/process-group.d.ts +4 -0
  381. package/src/local-dev/process-group.js +29 -0
  382. package/src/local-dev/process-identity.d.ts +8 -0
  383. package/src/local-dev/process-identity.js +31 -1
  384. package/src/local-dev/proxy.js +11 -12
  385. package/src/local-dev/runtime-paths.js +1 -1
  386. package/src/local-dev/slice-claim.js +1 -1
  387. package/src/local-dev/slice-runner.d.ts +15 -6
  388. package/src/local-dev/slice-runner.js +189 -54
  389. package/src/local-dev/task-attachment.d.ts +17 -0
  390. package/src/local-dev/task-attachment.js +73 -0
  391. package/src/local-dev/task-authority.d.ts +10 -0
  392. package/src/local-dev/task-authority.js +27 -0
  393. package/src/local-dev/task-identity.d.ts +33 -0
  394. package/src/local-dev/task-identity.js +418 -0
  395. package/src/local-dev/task-native-writer.d.ts +18 -0
  396. package/src/local-dev/task-native-writer.js +329 -0
  397. package/src/local-dev/tls.js +8 -2
  398. package/src/local-dev/web-launch.d.ts +9 -0
  399. package/src/local-dev/web-launch.js +130 -0
  400. package/src/ownership/composition.d.ts +2 -1
  401. package/src/ownership/composition.js +1 -0
  402. package/src/performance/cost-collection.d.ts +1 -1
  403. package/src/performance/cost-collection.js +4 -2
  404. package/src/performance/cost-controls.d.ts +8 -4
  405. package/src/performance/cost-controls.js +39 -28
  406. package/src/performance/evidence.d.ts +1 -1
  407. package/src/performance/evidence.js +5 -3
  408. package/src/performance/load-safety.js +5 -3
  409. package/src/performance/model.d.ts +4 -4
  410. package/src/performance/model.js +4 -5
  411. package/src/performance/scenario.d.ts +22 -0
  412. package/src/performance/scenario.js +100 -92
  413. package/src/release/index.d.ts +0 -2
  414. package/src/release/index.js +0 -2
  415. package/src/release/source-authority.d.ts +5 -5
  416. package/src/release/source-authority.js +141 -124
  417. package/src/repository-policy/aurora-preflight.d.ts +1 -1
  418. package/src/repository-policy/aurora-preflight.js +4 -1
  419. package/src/repository-policy/capacity-migration.d.ts +3 -0
  420. package/src/repository-policy/capacity-migration.js +21 -0
  421. package/src/repository-policy/deployment-plan.d.ts +4 -1
  422. package/src/repository-policy/deployment-plan.js +9 -0
  423. package/src/repository-policy/foundation-profile.js +10 -1
  424. package/src/repository-policy/policy.d.ts +57 -3
  425. package/src/repository-policy/policy.js +497 -11
  426. package/src/schemas/blueprint-v1.json +5 -4
  427. package/src/schemas/foundation-requirement-v1.json +5 -4
  428. package/src/schemas/performance-policy-v1.json +3 -3
  429. package/src/schemas/repository-policy-v1.json +130 -6
  430. package/src/schemas/testing-evidence-result-v1.json +1 -1
  431. package/src/secrets/adapters.d.ts +7 -2
  432. package/src/secrets/adapters.js +34 -3
  433. package/src/secrets/aws-control-plane.d.ts +10 -1
  434. package/src/secrets/aws-control-plane.js +67 -0
  435. package/src/secrets/generated-aws-control-plane.d.ts +23 -0
  436. package/src/secrets/generated-aws-control-plane.js +259 -0
  437. package/src/secrets/metadata.js +38 -10
  438. package/src/secrets/model.d.ts +8 -1
  439. package/src/secrets/model.js +24 -3
  440. package/src/secrets/operator.d.ts +91 -3
  441. package/src/secrets/operator.js +463 -13
  442. package/src/secrets/personal-command.d.ts +18 -2
  443. package/src/secrets/personal-command.js +66 -12
  444. package/src/secrets/registry.d.ts +2 -1
  445. package/src/secrets/registry.js +18 -1
  446. package/src/secrets/verification.js +15 -2
  447. package/src/secrets/workload-access.js +10 -2
  448. package/src/sst-environment-source-format.d.ts +6 -0
  449. package/src/sst-environment-source-format.js +199 -0
  450. package/src/supply-chain/action-pins.js +61 -7
  451. package/src/supply-chain/blueprint-trust-git.js +85 -24
  452. package/src/supply-chain/blueprint-verification-authority.js +55 -3
  453. package/src/supply-chain/build-output-bounds.d.ts +2 -0
  454. package/src/supply-chain/build-output-bounds.js +12 -0
  455. package/src/supply-chain/build-output.d.ts +7 -1
  456. package/src/supply-chain/build-output.js +177 -24
  457. package/src/supply-chain/ecr-scanning.d.ts +5 -3
  458. package/src/supply-chain/ecr-scanning.js +11 -7
  459. package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
  460. package/src/supply-chain/ecs-deployed-image.js +6 -4
  461. package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
  462. package/src/supply-chain/generated-command.js +1 -0
  463. package/src/supply-chain/generated-container-release-command.js +1285 -124
  464. package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
  465. package/src/supply-chain/generated-ecr-collector-command.js +200 -93
  466. package/src/supply-chain/generated-files.js +25 -14
  467. package/src/supply-chain/generated-scanner-command.js +2 -1
  468. package/src/supply-chain/index.d.ts +1 -1
  469. package/src/supply-chain/index.js +2 -1
  470. package/src/supply-chain/sbom.d.ts +1 -1
  471. package/src/supply-chain/sbom.js +30 -5
  472. package/src/supply-chain/scanner.js +3 -0
  473. package/src/testing-evidence/fixture-scope.d.ts +2 -1
  474. package/src/testing-evidence/fixture-scope.js +4 -2
  475. package/src/testing-evidence/result.d.ts +2 -1
  476. package/src/testing-evidence/result.js +18 -4
  477. package/src/workload-roles/account-baseline.d.ts +11 -0
  478. package/src/workload-roles/account-baseline.js +253 -16
  479. package/src/workload-roles/authority.d.ts +3 -1
  480. package/src/workload-roles/authority.js +48 -2
  481. package/src/workload-roles/aws-s3-state.js +27 -0
  482. package/src/workload-roles/boundary.d.ts +2 -1
  483. package/src/workload-roles/boundary.js +9 -2
  484. package/src/workload-roles/handler.js +52 -24
  485. package/src/workload-roles/index.d.ts +10 -17
  486. package/src/workload-roles/index.js +5 -18
  487. package/src/workload-roles/injection.js +1 -1
  488. package/src/workload-roles/provisioner.js +12 -4
  489. package/src/workload-roles/registration.d.ts +1 -0
  490. package/src/workload-roles/registration.js +5 -0
  491. package/src/workload-roles/stage-boundary.js +1 -1
  492. package/src/workload-roles/standard-slice.js +3 -3
  493. package/src/workspace-deployment/affected-lifecycle.d.ts +53 -0
  494. package/src/workspace-deployment/affected-lifecycle.js +84 -0
  495. package/src/workspace-deployment/identity.d.ts +3 -0
  496. package/src/workspace-deployment/identity.js +22 -0
  497. package/src/workspace-deployment/index.d.ts +4 -0
  498. package/src/workspace-deployment/index.js +8 -0
  499. package/src/workspace-deployment/migration-evidence.d.ts +29 -0
  500. package/src/workspace-deployment/migration-evidence.js +83 -0
  501. package/src/workspace-deployment/migration.d.ts +27 -0
  502. package/src/workspace-deployment/migration.js +109 -0
  503. package/src/workspace-deployment/ownership.d.ts +81 -0
  504. package/src/workspace-deployment/ownership.js +381 -0
  505. package/src/api-contract/baseline-update.js.map +0 -1
  506. package/src/api-contract/compatibility.js.map +0 -1
  507. package/src/api-contract/contract-graph.js.map +0 -1
  508. package/src/api-contract/evidence.js.map +0 -1
  509. package/src/api-contract/index.js.map +0 -1
  510. package/src/api-contract/model.fixtures.d.ts +0 -2
  511. package/src/api-contract/model.fixtures.js +0 -81
  512. package/src/api-contract/model.fixtures.js.map +0 -1
  513. package/src/api-contract/model.js.map +0 -1
  514. package/src/api-contract/rollout.js.map +0 -1
  515. package/src/authorization/compatibility.js.map +0 -1
  516. package/src/authorization/index.js.map +0 -1
  517. package/src/blueprints/execution.js.map +0 -1
  518. package/src/blueprints/external-sandbox.js.map +0 -1
  519. package/src/blueprints/index.js.map +0 -1
  520. package/src/blueprints/inputs.js.map +0 -1
  521. package/src/blueprints/manifest.js.map +0 -1
  522. package/src/blueprints/resolver.js.map +0 -1
  523. package/src/blueprints/transitions.js.map +0 -1
  524. package/src/cli/agent-command.js.map +0 -1
  525. package/src/cli/agent-runtime.js.map +0 -1
  526. package/src/cli/blueprint-authority.js.map +0 -1
  527. package/src/cli/blueprint-command.js.map +0 -1
  528. package/src/cli/bootstrap.js.map +0 -1
  529. package/src/cli/dev-command.js.map +0 -1
  530. package/src/cli/main.js.map +0 -1
  531. package/src/cli/output.js.map +0 -1
  532. package/src/cli/personal-secret-runtime.js.map +0 -1
  533. package/src/cli/secret-terminal.js.map +0 -1
  534. package/src/container-images.js.map +0 -1
  535. package/src/data-lifecycle/index.js.map +0 -1
  536. package/src/data-lifecycle/model.fixtures.d.ts +0 -2
  537. package/src/data-lifecycle/model.fixtures.js +0 -244
  538. package/src/data-lifecycle/model.fixtures.js.map +0 -1
  539. package/src/data-lifecycle/model.js.map +0 -1
  540. package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
  541. package/src/data-lifecycle/validation.js.map +0 -1
  542. package/src/database-retirement/contract.js.map +0 -1
  543. package/src/database-retirement/index.js.map +0 -1
  544. package/src/deterministic-order.js.map +0 -1
  545. package/src/developer-agent/context.js.map +0 -1
  546. package/src/developer-agent/generator-planning.js.map +0 -1
  547. package/src/developer-agent/generator-preview.js.map +0 -1
  548. package/src/developer-agent/git-inspection.js.map +0 -1
  549. package/src/developer-agent/handoff.js.map +0 -1
  550. package/src/developer-agent/index.js.map +0 -1
  551. package/src/developer-agent/model.js.map +0 -1
  552. package/src/developer-agent/operation-registry.js.map +0 -1
  553. package/src/developer-agent/ordering.js.map +0 -1
  554. package/src/developer-agent/planning.js.map +0 -1
  555. package/src/developer-agent/preview-changes.js.map +0 -1
  556. package/src/developer-agent/preview-source.js.map +0 -1
  557. package/src/developer-agent/validation.js.map +0 -1
  558. package/src/developer-agent/workspace-inspection.js.map +0 -1
  559. package/src/developer-agent/workspace-path.js.map +0 -1
  560. package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
  561. package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
  562. package/src/executors/deploy/deploy.js.map +0 -1
  563. package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
  564. package/src/executors/dev/dev.js.map +0 -1
  565. package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
  566. package/src/executors/dev-setup/dev-setup.js.map +0 -1
  567. package/src/executors/developer-context/developer-context.js.map +0 -1
  568. package/src/executors/fleet/fleet.js.map +0 -1
  569. package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
  570. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
  571. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
  572. package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
  573. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
  574. package/src/executors/refresh/refresh.js.map +0 -1
  575. package/src/executors/remove/remove.js.map +0 -1
  576. package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
  577. package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
  578. package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
  579. package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
  580. package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
  581. package/src/executors/unlock/unlock.js.map +0 -1
  582. package/src/executors/work-markers/work-markers.js.map +0 -1
  583. package/src/foundation/discovery.js.map +0 -1
  584. package/src/foundation/index.js.map +0 -1
  585. package/src/foundation/local-database-contract.js.map +0 -1
  586. package/src/foundation/logging-preflight.js.map +0 -1
  587. package/src/foundation/logging.js.map +0 -1
  588. package/src/foundation/preflight.js.map +0 -1
  589. package/src/foundation/provision-database-bindings.js.map +0 -1
  590. package/src/foundation/provision-logical-database.js.map +0 -1
  591. package/src/foundation/requirements.js.map +0 -1
  592. package/src/foundation/router-origin-proof.js.map +0 -1
  593. package/src/foundation/stages.js.map +0 -1
  594. package/src/frontend-security/index.js.map +0 -1
  595. package/src/frontend-security/security-headers.js.map +0 -1
  596. package/src/generators/feature-registry.js.map +0 -1
  597. package/src/generators/function/function.js.map +0 -1
  598. package/src/generators/job/job.js.map +0 -1
  599. package/src/generators/logging-registry.js.map +0 -1
  600. package/src/generators/post-generation-install.js.map +0 -1
  601. package/src/generators/preset/generator.js.map +0 -1
  602. package/src/generators/preset/tool-versions.js.map +0 -1
  603. package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
  604. package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
  605. package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
  606. package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
  607. package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
  608. package/src/generators/preset/workspace-files.js.map +0 -1
  609. package/src/generators/repository-policy/repository-policy.js.map +0 -1
  610. package/src/generators/service/service.js.map +0 -1
  611. package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
  612. package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
  613. package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
  614. package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
  615. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
  616. package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
  617. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
  618. package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
  619. package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
  620. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
  621. package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
  622. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
  623. package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
  624. package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
  625. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
  626. package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
  627. package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
  628. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
  629. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
  630. package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
  631. package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
  632. package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
  633. package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
  634. package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
  635. package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
  636. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
  637. package/src/generators/slice/built-in-plan-shared.js.map +0 -1
  638. package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
  639. package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
  640. package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
  641. package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
  642. package/src/generators/slice/built-in-plan.js.map +0 -1
  643. package/src/generators/slice/slice.js.map +0 -1
  644. package/src/generators/upgrade/upgrade.js.map +0 -1
  645. package/src/generators/workload/frozen-container.js.map +0 -1
  646. package/src/generators/workload/performance-registration.js.map +0 -1
  647. package/src/generators/workload/reliability-registration.js.map +0 -1
  648. package/src/generators/workload/service-performance-files.js.map +0 -1
  649. package/src/generators/workload/workload.js.map +0 -1
  650. package/src/git-policy/action-pins.js.map +0 -1
  651. package/src/git-policy/github-bootstrap.js.map +0 -1
  652. package/src/git-policy/index.js.map +0 -1
  653. package/src/git-policy/routing.js.map +0 -1
  654. package/src/index.js.map +0 -1
  655. package/src/infrastructure-change/convergence.js.map +0 -1
  656. package/src/infrastructure-change/drift.js.map +0 -1
  657. package/src/infrastructure-change/index.js.map +0 -1
  658. package/src/infrastructure-change/model.js.map +0 -1
  659. package/src/infrastructure-change/normalize.js.map +0 -1
  660. package/src/infrastructure-change/plan.js.map +0 -1
  661. package/src/infrastructure-change/risk.js.map +0 -1
  662. package/src/infrastructure-change/summary.js.map +0 -1
  663. package/src/local-dev/context-discovery.js.map +0 -1
  664. package/src/local-dev/contract-validation.js.map +0 -1
  665. package/src/local-dev/contracts.js.map +0 -1
  666. package/src/local-dev/control-contract.js.map +0 -1
  667. package/src/local-dev/dev-command-core.js.map +0 -1
  668. package/src/local-dev/effects.js.map +0 -1
  669. package/src/local-dev/environment-inspector.js.map +0 -1
  670. package/src/local-dev/environment-state.js.map +0 -1
  671. package/src/local-dev/errors.js.map +0 -1
  672. package/src/local-dev/fleet-client.js.map +0 -1
  673. package/src/local-dev/fleet-configuration.js.map +0 -1
  674. package/src/local-dev/fleet-inventory.js.map +0 -1
  675. package/src/local-dev/fleet-ipc.js.map +0 -1
  676. package/src/local-dev/fleet-launcher.js.map +0 -1
  677. package/src/local-dev/fleet-lock.js.map +0 -1
  678. package/src/local-dev/fleet-logs.js.map +0 -1
  679. package/src/local-dev/fleet-process.js.map +0 -1
  680. package/src/local-dev/fleet-runtime.js.map +0 -1
  681. package/src/local-dev/fleet-session.js.map +0 -1
  682. package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
  683. package/src/local-dev/fleet-startup.js.map +0 -1
  684. package/src/local-dev/fleet-state.js.map +0 -1
  685. package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
  686. package/src/local-dev/fleet-supervisor.js.map +0 -1
  687. package/src/local-dev/gateway-daemon.js.map +0 -1
  688. package/src/local-dev/gateway.js.map +0 -1
  689. package/src/local-dev/identity.js.map +0 -1
  690. package/src/local-dev/index.js.map +0 -1
  691. package/src/local-dev/local-context.js.map +0 -1
  692. package/src/local-dev/nx-workspace.js.map +0 -1
  693. package/src/local-dev/personal-secret-ledger.js.map +0 -1
  694. package/src/local-dev/personal-stage.js.map +0 -1
  695. package/src/local-dev/portless.js.map +0 -1
  696. package/src/local-dev/ports.js.map +0 -1
  697. package/src/local-dev/private-state.js.map +0 -1
  698. package/src/local-dev/process-identity.js.map +0 -1
  699. package/src/local-dev/proxy.js.map +0 -1
  700. package/src/local-dev/runtime-paths.js.map +0 -1
  701. package/src/local-dev/secret-slice-claim.js.map +0 -1
  702. package/src/local-dev/slice-claim.js.map +0 -1
  703. package/src/local-dev/slice-runner.js.map +0 -1
  704. package/src/local-dev/tls.js.map +0 -1
  705. package/src/ownership/composition.js.map +0 -1
  706. package/src/ownership/foundation-record.js.map +0 -1
  707. package/src/ownership/hash.js.map +0 -1
  708. package/src/ownership/index.js.map +0 -1
  709. package/src/ownership/json-ownership.js.map +0 -1
  710. package/src/ownership/record.js.map +0 -1
  711. package/src/ownership/workspace-record.js.map +0 -1
  712. package/src/performance/cost-collection.js.map +0 -1
  713. package/src/performance/cost-controls.js.map +0 -1
  714. package/src/performance/evidence.js.map +0 -1
  715. package/src/performance/index.js.map +0 -1
  716. package/src/performance/load-safety.js.map +0 -1
  717. package/src/performance/model.js.map +0 -1
  718. package/src/performance/pr-artifact-budget.js.map +0 -1
  719. package/src/performance/runner.js.map +0 -1
  720. package/src/performance/scenario-endpoint.js.map +0 -1
  721. package/src/performance/scenario.js.map +0 -1
  722. package/src/performance/test-fixtures.d.ts +0 -7
  723. package/src/performance/test-fixtures.js +0 -169
  724. package/src/performance/test-fixtures.js.map +0 -1
  725. package/src/performance/unit-cost.js.map +0 -1
  726. package/src/release/index.js.map +0 -1
  727. package/src/release/lifecycle.js.map +0 -1
  728. package/src/release/manifest.js.map +0 -1
  729. package/src/release/rollout.js.map +0 -1
  730. package/src/release/source-authority.js.map +0 -1
  731. package/src/repository-policy/aurora-preflight.js.map +0 -1
  732. package/src/repository-policy/deployment-plan.js.map +0 -1
  733. package/src/repository-policy/foundation-profile.js.map +0 -1
  734. package/src/repository-policy/index.js.map +0 -1
  735. package/src/repository-policy/policy.js.map +0 -1
  736. package/src/secrets/adapters.js.map +0 -1
  737. package/src/secrets/aws-control-plane.js.map +0 -1
  738. package/src/secrets/declaration-verification.js.map +0 -1
  739. package/src/secrets/guardrails.js.map +0 -1
  740. package/src/secrets/index.js.map +0 -1
  741. package/src/secrets/metadata.js.map +0 -1
  742. package/src/secrets/model.js.map +0 -1
  743. package/src/secrets/operator.js.map +0 -1
  744. package/src/secrets/permissions.js.map +0 -1
  745. package/src/secrets/personal-command.js.map +0 -1
  746. package/src/secrets/personal-ledger.js.map +0 -1
  747. package/src/secrets/registry.js.map +0 -1
  748. package/src/secrets/verification.js.map +0 -1
  749. package/src/secrets/workload-access.js.map +0 -1
  750. package/src/supply-chain/action-pins.js.map +0 -1
  751. package/src/supply-chain/blueprint-trust-git.js.map +0 -1
  752. package/src/supply-chain/blueprint-trust-process.js.map +0 -1
  753. package/src/supply-chain/blueprint-trust.js.map +0 -1
  754. package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
  755. package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
  756. package/src/supply-chain/build-output.js.map +0 -1
  757. package/src/supply-chain/common.js.map +0 -1
  758. package/src/supply-chain/container-artifact-contract.js.map +0 -1
  759. package/src/supply-chain/container-release.js.map +0 -1
  760. package/src/supply-chain/ecr-applicability.js.map +0 -1
  761. package/src/supply-chain/ecr-scanning.js.map +0 -1
  762. package/src/supply-chain/ecs-deployed-image.js.map +0 -1
  763. package/src/supply-chain/errors.js.map +0 -1
  764. package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
  765. package/src/supply-chain/generated-command.js.map +0 -1
  766. package/src/supply-chain/generated-container-release-command.js.map +0 -1
  767. package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
  768. package/src/supply-chain/generated-files.js.map +0 -1
  769. package/src/supply-chain/generated-scanner-command.js.map +0 -1
  770. package/src/supply-chain/index.js.map +0 -1
  771. package/src/supply-chain/inventory.js.map +0 -1
  772. package/src/supply-chain/license-expression.js.map +0 -1
  773. package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
  774. package/src/supply-chain/policy.js.map +0 -1
  775. package/src/supply-chain/publication.js.map +0 -1
  776. package/src/supply-chain/sbom.js.map +0 -1
  777. package/src/supply-chain/scanner.js.map +0 -1
  778. package/src/supply-chain/vendored-source.js.map +0 -1
  779. package/src/testing-evidence/fixture-scope.js.map +0 -1
  780. package/src/testing-evidence/index.js.map +0 -1
  781. package/src/testing-evidence/quarantine.js.map +0 -1
  782. package/src/testing-evidence/result.js.map +0 -1
  783. package/src/testing-evidence/runner-adapter.js.map +0 -1
  784. package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
  785. package/src/validation.js.map +0 -1
  786. package/src/work-markers/index.js.map +0 -1
  787. package/src/work-markers/work-markers.js.map +0 -1
  788. package/src/workload-roles/account-baseline.js.map +0 -1
  789. package/src/workload-roles/authority.js.map +0 -1
  790. package/src/workload-roles/aws-adapter.js.map +0 -1
  791. package/src/workload-roles/aws-internal-handler.js.map +0 -1
  792. package/src/workload-roles/aws-s3-state.js.map +0 -1
  793. package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
  794. package/src/workload-roles/boundary.js.map +0 -1
  795. package/src/workload-roles/convergence.js.map +0 -1
  796. package/src/workload-roles/effective-policy.js.map +0 -1
  797. package/src/workload-roles/handler.js.map +0 -1
  798. package/src/workload-roles/history.js.map +0 -1
  799. package/src/workload-roles/index.js.map +0 -1
  800. package/src/workload-roles/injection.js.map +0 -1
  801. package/src/workload-roles/manifest.js.map +0 -1
  802. package/src/workload-roles/provisioner.js.map +0 -1
  803. package/src/workload-roles/registration.js.map +0 -1
  804. package/src/workload-roles/stage-boundary.js.map +0 -1
  805. package/src/workload-roles/standard-slice.js.map +0 -1
@@ -8,7 +8,7 @@ function snapshotColumn(name, type, options = {}) {
8
8
  type,
9
9
  primaryKey: options.primaryKey ?? false,
10
10
  notNull: options.notNull ?? true,
11
- ...(options.default ? { default: options.default } : {}),
11
+ ...(options.default === undefined ? {} : { default: options.default }),
12
12
  };
13
13
  }
14
14
  function snapshotTable(name, columns, uniqueConstraints = {}, compositePrimaryKeys = {}, indexes = {}, foreignKeys = {}) {
@@ -25,25 +25,12 @@ function snapshotTable(name, columns, uniqueConstraints = {}, compositePrimaryKe
25
25
  isRLSEnabled: false,
26
26
  };
27
27
  }
28
- function snapshotIndex(name, columns) {
29
- return {
30
- columns: columns.map(({ expression, opclass }) => ({
31
- asc: true,
32
- expression,
33
- isExpression: false,
34
- nulls: 'last',
35
- opclass,
36
- })),
37
- concurrently: false,
38
- isUnique: false,
39
- method: 'btree',
40
- name,
41
- with: {},
42
- };
43
- }
44
28
  /** @internal */
45
- function renderProductDataFiles(name, pascalName) {
46
- return {
29
+ function renderProductDataFiles(name, pascalName, protectedRuntimeStages = ['staging', 'production'], sql = true) {
30
+ const databaseStages = [
31
+ ...new Set(['development', ...protectedRuntimeStages]),
32
+ ];
33
+ const files = {
47
34
  'contracts/events.ts': `import type { DataLifecycleChangeEventV1 } from '@empire-builder-kit/runtime/data-lifecycle';
48
35
 
49
36
  export interface ${pascalName}CreatedData {
@@ -96,219 +83,13 @@ export const EventContractSchema = {
96
83
  slice: '${name}',
97
84
  } as const;
98
85
  `,
99
- 'database/schema.ts': `import { boolean, index, integer, jsonb, pgTable, primaryKey, text, timestamp, uuid } from 'drizzle-orm/pg-core';
100
-
101
- export const records = pgTable(
102
- 'records',
103
- {
104
- createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
105
- id: uuid('id').defaultRandom().primaryKey(),
106
- lastActivityAt: timestamp('last_activity_at', { withTimezone: true }).defaultNow().notNull(),
107
- name: text('name').notNull(),
108
- ownerId: text('owner_id').notNull(),
109
- runScope: text('run_scope').notNull(),
110
- testExpiresAt: timestamp('test_expires_at', { withTimezone: true }),
111
- },
112
- (table) => [
113
- index('records_performance_expiry_idx').on(
114
- table.ownerId,
115
- table.name,
116
- table.testExpiresAt,
117
- ),
118
- index('records_performance_run_scope_idx').on(
119
- table.ownerId,
120
- table.name,
121
- table.runScope,
122
- ),
123
- ],
124
- );
125
-
126
- export const authorizationAudit = pgTable('authorization_audit', {
127
- action: text('action').notNull(),
128
- approvalReference: text('approval_reference'),
129
- authorityMode: text('authority_mode').notNull(),
130
- correlationId: text('correlation_id').notNull(),
131
- createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
132
- decision: text('decision').notNull(),
133
- id: uuid('id').defaultRandom().primaryKey(),
134
- policyVersion: text('policy_version').notNull(),
135
- principalKind: text('principal_kind').notNull(),
136
- pseudonymousSubjectId: text('pseudonymous_subject_id').notNull(),
137
- reasonCategory: text('reason_category').notNull(),
138
- delegationReference: text('delegation_reference'),
139
- resourceReference: text('resource_reference'),
140
- resourceType: text('resource_type').notNull(),
141
- slice: text('slice').notNull(),
142
- stage: text('stage').notNull(),
143
- subjectType: text('subject_type').notNull(),
144
- });
145
-
146
- export const delegationGrants = pgTable('delegation_grants', {
147
- capabilityDigest: text('capability_digest').notNull(),
148
- createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
149
- expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
150
- grantJson: jsonb('grant_json').notNull(),
151
- id: uuid('id').primaryKey(),
152
- issuedAt: timestamp('issued_at', { withTimezone: true }).notNull(),
153
- policyVersion: text('policy_version').notNull(),
154
- revision: integer('revision').notNull(),
155
- status: text('status').notNull(),
156
- });
157
-
158
- export const approvalRequests = pgTable('approval_requests', {
159
- authorReference: text('author_reference').notNull(),
160
- createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
161
- expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
162
- id: uuid('id').primaryKey(),
163
- policyVersion: text('policy_version').notNull(),
164
- requestJson: jsonb('request_json').notNull(),
165
- requestDigest: text('request_digest').notNull(),
166
- revision: integer('revision').notNull(),
167
- status: text('status').notNull(),
168
- });
169
-
170
- export const dataLifecycleAudit = pgTable(
171
- 'data_lifecycle_audit',
172
- {
173
- action: text('action').notNull(),
174
- actorRef: text('actor_ref').notNull(),
175
- approvalReference: text('approval_reference'),
176
- auditJson: jsonb('audit_json').notNull(),
177
- authorityCode: text('authority_code').notNull(),
178
- correlationRef: text('correlation_ref').notNull(),
179
- expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
180
- id: uuid('id').defaultRandom().primaryKey(),
181
- occurredAt: timestamp('occurred_at', { withTimezone: true }).notNull(),
182
- outcome: text('outcome').notNull(),
183
- policyVersion: text('policy_version').notNull(),
184
- principalKind: text('principal_kind').notNull(),
185
- purposeCode: text('purpose_code').notNull(),
186
- resourceReference: text('resource_reference'),
187
- slice: text('slice').notNull(),
188
- stage: text('stage').notNull(),
189
- subjectType: text('subject_type').notNull(),
190
- targetCategoryId: text('target_category_id').notNull(),
191
- },
192
- (table) => [
193
- index('data_lifecycle_audit_expires_at_idx').on(table.expiresAt),
194
- ],
195
- );
196
-
197
- export const dataLifecycleExportArtifacts = pgTable(
198
- 'data_lifecycle_export_artifacts',
199
- {
200
- approvalRequestId: uuid('approval_request_id')
201
- .primaryKey()
202
- .references(() => approvalRequests.id, { onDelete: 'cascade' }),
203
- artifactRef: text('artifact_ref'),
204
- cleanupDeadlineAt: timestamp('cleanup_deadline_at', {
205
- withTimezone: true,
206
- }),
207
- cleanupState: text('cleanup_state').notNull(),
208
- createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
209
- currentVersionId: text('current_version_id'),
210
- expiresAt: timestamp('expires_at', { withTimezone: true }),
211
- lastErrorCode: text('last_error_code'),
212
- objectKey: text('object_key').notNull(),
213
- recordRef: text('record_ref').notNull(),
214
- subjectRef: text('subject_ref').notNull(),
215
- updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
216
- uploadStartedAt: timestamp('upload_started_at', { withTimezone: true }),
217
- },
218
- (table) => [
219
- index('data_lifecycle_export_artifacts_subject_created_idx').on(
220
- table.subjectRef,
221
- table.createdAt,
222
- ),
223
- index('data_lifecycle_export_artifacts_cleanup_expiry_idx').on(
224
- table.cleanupState,
225
- table.expiresAt,
226
- ),
227
- index('data_lifecycle_export_artifacts_cleanup_deadline_idx').on(
228
- table.cleanupState,
229
- table.cleanupDeadlineAt,
230
- ),
231
- ],
232
- );
233
-
234
- export const dataLifecycleExportVersions = pgTable(
235
- 'data_lifecycle_export_versions',
236
- {
237
- approvalRequestId: uuid('approval_request_id')
238
- .notNull()
239
- .references(() => approvalRequests.id, { onDelete: 'cascade' }),
240
- deletedAt: timestamp('deleted_at', { withTimezone: true }),
241
- isDeleteMarker: boolean('is_delete_marker').notNull(),
242
- objectKey: text('object_key').notNull(),
243
- status: text('status').notNull(),
244
- versionId: text('version_id').notNull(),
245
- },
246
- (table) => [
247
- primaryKey({
248
- columns: [table.approvalRequestId, table.versionId],
249
- }),
250
- index('data_lifecycle_export_versions_status_idx').on(table.status),
251
- ],
252
- );
253
-
254
- export const cleanupDeadlineReportCapacity = pgTable(
255
- 'cleanup_deadline_report_capacity',
256
- {
257
- feature: text('feature').primaryKey(),
258
- maximumPending: integer('maximum_pending').notNull(),
259
- },
260
- );
261
-
262
- export const cleanupDeadlineReports = pgTable(
263
- 'cleanup_deadline_reports',
264
- {
265
- deadlineAt: timestamp('deadline_at', { withTimezone: true }).notNull(),
266
- feature: text('feature').notNull(),
267
- observedAt: timestamp('observed_at', { withTimezone: true })
268
- .defaultNow()
269
- .notNull(),
270
- resourceRef: text('resource_ref').notNull(),
271
- },
272
- (table) => [
273
- primaryKey({ columns: [table.feature, table.resourceRef] }),
274
- index('cleanup_deadline_reports_feature_observed_idx').on(
275
- table.feature,
276
- table.observedAt,
277
- ),
278
- ],
279
- );
280
-
281
- export const dataLifecycleLedger = pgTable('data_lifecycle_ledger', {
282
- action: text('action').notNull(),
283
- categoryId: text('category_id').notNull(),
284
- createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
285
- effectiveAt: timestamp('effective_at', { withTimezone: true }).notNull(),
286
- entryId: text('entry_id').primaryKey(),
287
- expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
288
- idempotencyKey: text('idempotency_key').notNull().unique(),
289
- policyVersion: text('policy_version').notNull(),
290
- pseudonymousKey: text('pseudonymous_key').notNull(),
291
- });
292
-
293
- export const dataLifecycleRequests = pgTable('data_lifecycle_requests', {
294
- approvalRequestId: uuid('approval_request_id').notNull().unique(),
295
- id: uuid('id').primaryKey(),
296
- requestJson: jsonb('request_json').notNull(),
297
- revision: integer('revision').notNull(),
298
- status: text('status').notNull(),
299
- updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
300
- });
301
-
302
- export const dataLifecycleHolds = pgTable('data_lifecycle_holds', {
303
- categoryId: text('category_id').notNull(),
304
- expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
305
- holdId: text('hold_id').primaryKey(),
306
- holdJson: jsonb('hold_json').notNull(),
307
- reviewAt: timestamp('review_at', { withTimezone: true }).notNull(),
308
- scopeRef: text('scope_ref').notNull(),
309
- status: text('status').notNull(),
310
- });
86
+ 'database/schema.ts': `import { integer, jsonb, pgTable, text, timestamp } from 'drizzle-orm/pg-core';
311
87
 
88
+ /**
89
+ * Add user-owned relational feature tables here. Standard records, authorization,
90
+ * inbox, retention and ordinary event intents remain in DynamoDB.
91
+ * This table is only for events committed atomically with an optional SQL feature.
92
+ */
312
93
  export const dataLifecycleOutbox = pgTable('data_lifecycle_outbox', {
313
94
  attempts: integer('attempts').default(0).notNull(),
314
95
  createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
@@ -318,162 +99,8 @@ export const dataLifecycleOutbox = pgTable('data_lifecycle_outbox', {
318
99
  lastErrorCode: text('last_error_code'),
319
100
  publishedAt: timestamp('published_at', { withTimezone: true }),
320
101
  });
321
-
322
- export const performanceLoadRuns = pgTable(
323
- 'performance_load_runs',
324
- {
325
- adapterId: text('adapter_id').notNull(),
326
- cleanupStartedAt: timestamp('cleanup_started_at', {
327
- withTimezone: true,
328
- }),
329
- createdAt: timestamp('created_at', { withTimezone: true }).notNull(),
330
- expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
331
- maximumRequests: integer('maximum_requests').notNull(),
332
- planDigest: text('plan_digest').primaryKey(),
333
- releaseMaterialDigest: text('release_material_digest').notNull(),
334
- runId: text('run_id').notNull(),
335
- scenarioId: text('scenario_id').notNull(),
336
- sourceCommit: text('source_commit').notNull(),
337
- stage: text('stage').notNull(),
338
- },
339
- (table) => [
340
- index('performance_load_runs_expires_at_idx').on(table.expiresAt),
341
- ],
342
- );
343
-
344
- export const performanceLoadRequests = pgTable(
345
- 'performance_load_requests',
346
- {
347
- claimedAt: timestamp('claimed_at', { withTimezone: true })
348
- .defaultNow()
349
- .notNull(),
350
- effectId: text('effect_id'),
351
- planDigest: text('plan_digest').notNull(),
352
- requestOrdinal: integer('request_ordinal').notNull(),
353
- },
354
- (table) => [
355
- primaryKey({ columns: [table.planDigest, table.requestOrdinal] }),
356
- ],
357
- );
358
-
359
- export const performanceLoadAsyncEffects = pgTable(
360
- 'performance_load_async_effects',
361
- {
362
- createdAt: timestamp('created_at', { withTimezone: true })
363
- .defaultNow()
364
- .notNull(),
365
- effectId: text('effect_id').primaryKey(),
366
- expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
367
- planDigest: text('plan_digest').notNull(),
368
- processedAt: timestamp('processed_at', { withTimezone: true }),
369
- runId: text('run_id').notNull(),
370
- },
371
- (table) => [
372
- index('performance_load_async_effects_expires_at_idx').on(
373
- table.expiresAt,
374
- ),
375
- index('performance_load_async_effects_pending_idx').on(
376
- table.processedAt,
377
- table.expiresAt,
378
- ),
379
- index('performance_load_async_effects_run_idx').on(
380
- table.planDigest,
381
- table.runId,
382
- ),
383
- ],
384
- );
385
-
386
- export const ebkInbox = pgTable(
387
- 'ebk_inbox',
388
- {
389
- attempts: integer('attempts').default(0).notNull(),
390
- completedAt: timestamp('completed_at', { withTimezone: true }),
391
- expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
392
- firstSeenAt: timestamp('first_seen_at', { withTimezone: true }).defaultNow().notNull(),
393
- handlerId: text('handler_id').notNull(),
394
- handlerVersion: text('handler_version').notNull(),
395
- lastAttemptAt: timestamp('last_attempt_at', { withTimezone: true }).notNull(),
396
- messageId: text('message_id').notNull(),
397
- payloadDigest: text('payload_digest').notNull(),
398
- resultReference: text('result_reference'),
399
- status: text('status').notNull(),
400
- },
401
- (table) => [
402
- primaryKey({ columns: [table.handlerId, table.messageId] }),
403
- index('ebk_inbox_expires_at_idx').on(table.expiresAt),
404
- ],
405
- );
406
-
407
- export const dataLifecycleRetentionCandidates = pgTable(
408
- 'data_lifecycle_retention_candidates',
409
- {
410
- candidateOrder: text('candidate_order').notNull(),
411
- dueAt: timestamp('due_at', { withTimezone: true }).notNull(),
412
- recordId: uuid('record_id').notNull(),
413
- recordRef: text('record_ref').notNull(),
414
- runId: uuid('run_id').notNull(),
415
- },
416
- (table) => [
417
- primaryKey({ columns: [table.runId, table.candidateOrder] }),
418
- ],
419
- );
420
-
421
- export const dataLifecycleRetentionRuns = pgTable('data_lifecycle_retention_runs', {
422
- approvalRequestId: uuid('approval_request_id').unique(),
423
- asOf: timestamp('as_of', { withTimezone: true }).notNull(),
424
- checkpointJson: jsonb('checkpoint_json').notNull(),
425
- completedAt: timestamp('completed_at', { withTimezone: true }),
426
- countsJson: jsonb('counts_json').notNull(),
427
- expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
428
- id: uuid('id').primaryKey(),
429
- planJson: jsonb('plan_json').notNull(),
430
- policyVersion: text('policy_version').notNull(),
431
- revision: integer('revision').notNull(),
432
- status: text('status').notNull(),
433
- updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
434
- });
435
-
436
- export const dataLifecycleReceipts = pgTable('data_lifecycle_receipts', {
437
- action: text('action').notNull(),
438
- occurredAt: timestamp('occurred_at', { withTimezone: true }).notNull(),
439
- policyVersion: text('policy_version').notNull(),
440
- pseudonymousKey: text('pseudonymous_key').notNull(),
441
- receivedAt: timestamp('received_at', { withTimezone: true }).defaultNow().notNull(),
442
- requestRef: text('request_ref').notNull(),
443
- sourceSlice: text('source_slice').notNull(),
444
- }, (table) => [
445
- primaryKey({
446
- columns: [
447
- table.sourceSlice,
448
- table.pseudonymousKey,
449
- table.action,
450
- table.requestRef,
451
- ],
452
- }),
453
- ]);
454
-
455
- export const dataLifecycleDownstreamCopies = pgTable(
456
- 'data_lifecycle_downstream_copies',
457
- {
458
- action: text('action').notNull(),
459
- copyId: text('copy_id').notNull(),
460
- expiresAt: timestamp('expires_at', { withTimezone: true }).notNull(),
461
- holdRefs: jsonb('hold_refs').notNull(),
462
- pseudonymousKey: text('pseudonymous_key').notNull(),
463
- purpose: text('purpose').notNull(),
464
- recipient: text('recipient').notNull(),
465
- sourceSlice: text('source_slice').notNull(),
466
- status: text('status').notNull(),
467
- updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
468
- },
469
- (table) => [
470
- primaryKey({
471
- columns: [table.sourceSlice, table.pseudonymousKey, table.copyId],
472
- }),
473
- ],
474
- );
475
102
  `,
476
- 'secrets/declarations.ts': `import { databaseCredentialSecretSchema } from '@empire-builder-kit/runtime/database';
103
+ 'secrets/declarations.ts': `${sql ? "import { databaseCredentialSecretSchema } from '@empire-builder-kit/runtime/database';\n" : ''}\
477
104
  import {
478
105
  defineSecrets,
479
106
  secret,
@@ -530,21 +157,23 @@ const performanceLoadHmacKeys = secret.json<{
530
157
  });
531
158
 
532
159
  const SecretDefinitions = {
533
- ${pascalName}PerformanceLoadHmacKeys: {
160
+ GeneratedPerformanceLoadHmacKeys: {
534
161
  cache: { freshTtlMs: 1_000, staleTtlMs: 0 },
162
+ generation: { kind: 'hmac-key-ring-v1' },
535
163
  owner: '${name}',
536
- requiredStages: ['staging', 'production'],
164
+ requiredStages: ${JSON.stringify(protectedRuntimeStages)},
537
165
  retention: { mode: 'retain' },
538
166
  rotation: {
539
167
  mode: 'manual',
540
168
  runbook: 'docs/runbooks/performance-capacity-cost.md',
541
169
  },
542
- source: 'operator',
170
+ source: 'generated',
543
171
  value: performanceLoadHmacKeys,
544
172
  },
545
- ${pascalName}PrimaryDatabaseCredential: {
173
+ ${sql
174
+ ? ` ${pascalName}PrimaryDatabaseCredential: {
546
175
  owner: '${name}',
547
- requiredStages: ['development', 'staging', 'production'],
176
+ requiredStages: ${JSON.stringify(databaseStages)},
548
177
  retention: { mode: 'retain' },
549
178
  rotation: {
550
179
  mode: 'manual',
@@ -553,6 +182,8 @@ const SecretDefinitions = {
553
182
  source: 'database-bootstrap',
554
183
  value: databaseCredentialSecretSchema,
555
184
  },
185
+ `
186
+ : ''}\
556
187
  } as const;
557
188
 
558
189
  export const Secrets: DefinedSecrets<typeof SecretDefinitions> =
@@ -561,23 +192,28 @@ export const Secrets: DefinedSecrets<typeof SecretDefinitions> =
561
192
  'secrets/metadata.json': (0, built_in_plan_shared_js_1.json)({
562
193
  declarations: [
563
194
  {
564
- logicalName: `${pascalName}PerformanceLoadHmacKeys`,
195
+ generation: { kind: 'hmac-key-ring-v1' },
196
+ logicalName: 'GeneratedPerformanceLoadHmacKeys',
565
197
  owner: name,
566
- requiredStages: ['staging', 'production'],
198
+ requiredStages: protectedRuntimeStages,
567
199
  rotation: { mode: 'manual' },
568
- source: 'operator',
569
- valueKind: 'json',
570
- },
571
- {
572
- logicalName: `${pascalName}PrimaryDatabaseCredential`,
573
- owner: name,
574
- requiredStages: ['development', 'staging', 'production'],
575
- rotation: { mode: 'manual' },
576
- source: 'database-bootstrap',
200
+ source: 'generated',
577
201
  valueKind: 'json',
578
202
  },
203
+ ...(sql
204
+ ? [
205
+ {
206
+ logicalName: `${pascalName}PrimaryDatabaseCredential`,
207
+ owner: name,
208
+ requiredStages: databaseStages,
209
+ rotation: { mode: 'manual' },
210
+ source: 'database-bootstrap',
211
+ valueKind: 'json',
212
+ },
213
+ ]
214
+ : []),
579
215
  ],
580
- schemaVersion: 1,
216
+ schemaVersion: 2,
581
217
  }),
582
218
  'docs/runbooks/database-credential-rotation.md': `# Database credential rotation
583
219
 
@@ -595,7 +231,8 @@ restored before accepting the rotation.
595
231
  `,
596
232
  'docs/runbooks/operator-secret-management.md': `# Operator secret management
597
233
 
598
- Operator-supplied deployed secrets use AWS Secrets Manager containers named
234
+ Human-supplied and machine-generated deployed secrets use AWS Secrets Manager
235
+ containers named
599
236
  \`ebk/<stage>/${name}/<logical-name>\`. The declaration in
600
237
  \`secrets/declarations.ts\` owns the typed runtime contract. Its value-free
601
238
  control-plane projection in \`secrets/metadata.json\` must carry the same
@@ -603,10 +240,60 @@ logical name, owner, required stages, rotation mode, source, and value kind.
603
240
  Neither file may contain a value, placeholder, fallback, value hash, or
604
241
  provider credential.
605
242
 
606
- ## Personal development value
243
+ ## Machine-generated performance key ring
244
+
245
+ The trusted AWS adapter process generates the
246
+ \`GeneratedPerformanceLoadHmacKeys\` value and writes it directly to Secrets
247
+ Manager. Transient plaintext bytes exist only in that adapter process; the
248
+ agent, model, and invoking caller never receive, copy, or log them. The
249
+ initializer atomically creates the container and first version; do not
250
+ pre-create it with \`secret-metadata\`. Report the initialization proposal:
251
+
252
+ \`\`\`bash
253
+ pnpm nx run ${name}:secret-initialize -- --logicalName=GeneratedPerformanceLoadHmacKeys --stage=<required-stage> --profile=<profile> --region=<region> --expectedRoleArn=<role-arn>
254
+ \`\`\`
255
+
256
+ After reviewing the exact declaration and target, apply with the committed
257
+ stage deployment role:
607
258
 
608
- Only a human at a local interactive terminal may set or remove an
609
- operator-declared personal value:
259
+ \`\`\`bash
260
+ pnpm nx run ${name}:secret-initialize -- --logicalName=GeneratedPerformanceLoadHmacKeys --stage=<required-stage> --profile=<profile> --region=<region> --expectedRoleArn=<role-arn> --apply
261
+ \`\`\`
262
+
263
+ For a protected stage, dispatch
264
+ the dedicated **Secret initialize** workflow from its exact protected branch,
265
+ select the Slice and logical name, and choose \`report\` before \`apply\`. The
266
+ executor generates and writes the key ring inside the AWS adapter and returns
267
+ only bounded status; it accepts no value input and cannot read the plaintext
268
+ back through its public contract.
269
+
270
+ The initializer is initial-create only. It never rotates or silently replaces
271
+ an existing version; later rotation remains a separate reviewed manual
272
+ lifecycle under the declaration's rotation runbook.
273
+
274
+ A successful governed Slice \`remove\` targets only the exact
275
+ \`GeneratedPerformanceLoadHmacKeys\` container for deletion. Development and
276
+ staging use immediate deletion and wait up to ten minutes for the asynchronous
277
+ provider operation to reach not-found so the deterministic name can be
278
+ redeployed. Production uses a fixed seven-day recovery window, where an already
279
+ scheduled container is idempotent only when its deletion date is no later than
280
+ seven days plus the bounded five-minute clock-skew allowance; a later date
281
+ fails closed. A lower-stage container with a future recovery date is restored,
282
+ reattested, and converted to immediate deletion; a current, past, or
283
+ five-minute clock-skew-tolerant deletion date denotes an interrupted force
284
+ deletion and is polled to not-found without restore. The post-remove step
285
+ reattests the committed account, Region, stage deployment role, canonical name,
286
+ and complete generated ownership tags without reading the value. An absent
287
+ container is
288
+ idempotent. A failed or interrupted native SST remove does not run this step.
289
+ Imported, externally owned, genuinely shared, database-bootstrap, and authority-history
290
+ containers are never targets. Container ownership—not whether a value was
291
+ human-supplied—controls cleanup.
292
+
293
+ ## Personal human-supplied development value
294
+
295
+ Setting a human-supplied operator-declared personal value is a human-only
296
+ step. Removing one carries no value and may be started by an agent:
610
297
 
611
298
  \`\`\`bash
612
299
  ebk secret set ${name} <logical-name>
@@ -616,14 +303,21 @@ ebk secret remove ${name} <logical-name>
616
303
  The CLI derives the personal stage, reads the profile and Region saved by
617
304
  \`ebk dev configure\`, proves the current AWS account is the development
618
305
  Foundation account, and invokes the workspace-pinned SST CLI. Set accepts the
619
- value only through a hidden TTY prompt; remove requires a hidden confirmation.
306
+ value only through a hidden TTY prompt and refuses agent and CI environments,
307
+ because a hidden prompt does not hide the value from the process that owns the
308
+ terminal: a human runs it in a terminal no agent spawned. An agent prepares
309
+ that step by naming the exact logical name and command, then resumes without
310
+ reading the value. Remove may be started by an agent; the human types the
311
+ hidden \`REMOVE <logical-name>\` confirmation in that interactive terminal.
620
312
  Neither command accepts a stage, profile, Region, value argument, environment
621
- value, file, fallback, or placeholder. Do not ask or permit an agent or CI job
622
- to invoke either command.
313
+ value, file, fallback, or placeholder. Never ask an agent or CI job to run
314
+ \`ebk secret set\`.
623
315
 
624
316
  ## Development metadata
625
317
 
626
- Report first, using the exact development account profile and Region:
318
+ This target is only for human-supplied operator declarations. It never creates
319
+ or updates a generated declaration. Report first, using the exact development
320
+ account profile and Region:
627
321
 
628
322
  \`\`\`bash
629
323
  pnpm nx run ${name}:secret-metadata --stage=development --profile=<profile> --region=<region>
@@ -635,272 +329,56 @@ write a secret version, change a rotation label, or delete a secret.
635
329
 
636
330
  ## Protected metadata
637
331
 
638
- Run the **Secret metadata** GitHub workflow from \`develop\` for staging or
639
- \`main\` for production. Select this exact Slice and choose \`report\` first.
640
- After review, dispatch \`apply\` from the same protected branch and
641
- environment. The workflow assumes the protected deploy role through OIDC,
642
- verifies the expected AWS account, and invokes the same value-blind Nx
643
- executor. Never add an application value to GitHub secrets or workflow input.
332
+ This workflow is only for human-supplied operator declarations. Run the
333
+ **Secret metadata** GitHub workflow from \`develop\` for staging or
334
+ \`main\` for production when the deployment profile requires protected GitHub
335
+ authority. Select this exact Slice and choose \`report\` first. After review,
336
+ dispatch \`apply\` from the same protected branch and environment. The workflow
337
+ assumes the protected deploy role through OIDC, verifies the expected AWS
338
+ account, and invokes the same value-blind Nx executor.
339
+
340
+ Profiles that admit local deployment may apply the reviewed empty-container
341
+ metadata with the same temporary federated profile and stage deployment role:
342
+
343
+ \`\`\`bash
344
+ pnpm nx run ${name}:secret-metadata -- --stage=<staging-or-production> --profile=<profile> --region=<region> --expectedRoleArn=<role-arn> --apply
345
+ \`\`\`
346
+
347
+ The local path binds the committed deployment profile, account, Region, and
348
+ exact assumed role. It does not permit a secret value. Never add an application
349
+ value to GitHub secrets, workflow input, argv, or agent-visible material.
644
350
 
645
- The protected deploy role needs metadata-only authority for the Slice prefix:
351
+ The protected deploy role needs metadata authority for the Slice prefix:
646
352
  \`ListSecrets\`, \`DescribeSecret\`, \`CreateSecret\`, and \`TagResource\`.
647
353
  It must be denied \`BatchGetSecretValue\`, \`GetSecretValue\`,
648
- \`PutSecretValue\`, \`UpdateSecretVersionStage\`, \`DeleteSecret\`, and
649
- application deployment outside its separately reviewed deploy policy.
354
+ \`PutSecretValue\`, \`UpdateSecret\`, \`UpdateSecretVersionStage\`,
355
+ and application deployment outside its separately reviewed deploy policy.
356
+ \`DeleteSecret\` is used only by the governed generated-secret retirement path
357
+ after native Slice removal succeeds; the executor binds that call to the exact
358
+ generated HMAC name and ownership tags described above.
650
359
  Account-level role materialization remains an adopter responsibility.
651
360
 
652
- ## Value ceremony
653
-
654
- After an empty container exists, a human secret operator enters or rotates the
655
- value through the approved hidden-input or provider-owned ceremony. Do not
656
- delegate this ceremony to an agent and do not pass a value through argv,
657
- source, a file, a ticket, a work marker, GitHub, logs, or evidence. Routine
658
- operator authority is write-only for exact approved paths and has no
659
- application or Foundation deployment authority. Value reads require a separate
660
- audited break-glass path.
361
+ ## Human-supplied value ceremony
362
+
363
+ After an empty human-supplied container exists, a human secret operator enters
364
+ or rotates the value through the approved hidden-input or provider-owned
365
+ ceremony. Only the value entry is human-only: an agent may confirm the empty
366
+ container through the value-blind \`secret-metadata\` report, tell the operator
367
+ the exact container name and stage, and verify afterwards with the same report
368
+ and the deployment; it never enters, reads, or relays the value. Do not
369
+ delegate that human-supplied ceremony to an agent and do not pass a value
370
+ through argv, source, a file, a ticket, a work marker, GitHub, logs, or
371
+ evidence. Routine operator authority is write-only for exact approved
372
+ paths and has no application or Foundation deployment authority. Value reads
373
+ require a separate audited break-glass path. Machine-generated declarations
374
+ instead use \`secret-initialize\`; they never accept a human value.
661
375
 
662
376
  Run the report again and then deploy. Deployment performs only a read-only
663
377
  metadata preflight and refuses before SST mutation when a required container,
664
378
  \`AWSCURRENT\`, ownership tag, or rotation policy is invalid. Remove, unlock,
665
379
  retirement, and recovery do not depend on this preflight.
666
380
  `,
667
- 'database/migrations/0000_initial.sql': `CREATE TABLE IF NOT EXISTS "records" (
668
- "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
669
- "name" text NOT NULL,
670
- "owner_id" text NOT NULL,
671
- "run_scope" text NOT NULL,
672
- "created_at" timestamptz NOT NULL DEFAULT now(),
673
- "last_activity_at" timestamptz NOT NULL DEFAULT now(),
674
- "test_expires_at" timestamptz
675
- );
676
- CREATE INDEX IF NOT EXISTS "records_performance_expiry_idx"
677
- ON "records" ("owner_id", "name", "test_expires_at");
678
- CREATE INDEX IF NOT EXISTS "records_performance_run_scope_idx"
679
- ON "records" ("owner_id", "name", "run_scope");
680
-
681
- CREATE TABLE IF NOT EXISTS "authorization_audit" (
682
- "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
683
- "action" text NOT NULL,
684
- "approval_reference" text,
685
- "authority_mode" text NOT NULL,
686
- "correlation_id" text NOT NULL,
687
- "decision" text NOT NULL,
688
- "policy_version" text NOT NULL,
689
- "principal_kind" text NOT NULL,
690
- "pseudonymous_subject_id" text NOT NULL,
691
- "reason_category" text NOT NULL,
692
- "delegation_reference" text,
693
- "resource_reference" text,
694
- "resource_type" text NOT NULL,
695
- "slice" text NOT NULL,
696
- "stage" text NOT NULL,
697
- "subject_type" text NOT NULL,
698
- "created_at" timestamptz NOT NULL DEFAULT now()
699
- );
700
-
701
- CREATE TABLE IF NOT EXISTS "delegation_grants" (
702
- "id" uuid PRIMARY KEY,
703
- "capability_digest" text NOT NULL,
704
- "created_at" timestamptz NOT NULL DEFAULT now(),
705
- "expires_at" timestamptz NOT NULL,
706
- "grant_json" jsonb NOT NULL,
707
- "issued_at" timestamptz NOT NULL,
708
- "policy_version" text NOT NULL,
709
- "revision" integer NOT NULL,
710
- "status" text NOT NULL
711
- );
712
-
713
- CREATE TABLE IF NOT EXISTS "approval_requests" (
714
- "id" uuid PRIMARY KEY,
715
- "author_reference" text NOT NULL,
716
- "created_at" timestamptz NOT NULL DEFAULT now(),
717
- "expires_at" timestamptz NOT NULL,
718
- "policy_version" text NOT NULL,
719
- "request_json" jsonb NOT NULL,
720
- "request_digest" text NOT NULL,
721
- "revision" integer NOT NULL,
722
- "status" text NOT NULL
723
- );
724
-
725
- CREATE TABLE IF NOT EXISTS "data_lifecycle_audit" (
726
- "id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
727
- "action" text NOT NULL,
728
- "actor_ref" text NOT NULL,
729
- "approval_reference" text,
730
- "audit_json" jsonb NOT NULL,
731
- "authority_code" text NOT NULL,
732
- "correlation_ref" text NOT NULL,
733
- "expires_at" timestamptz NOT NULL,
734
- "outcome" text NOT NULL,
735
- "policy_version" text NOT NULL,
736
- "principal_kind" text NOT NULL,
737
- "purpose_code" text NOT NULL,
738
- "resource_reference" text,
739
- "slice" text NOT NULL,
740
- "stage" text NOT NULL,
741
- "subject_type" text NOT NULL,
742
- "target_category_id" text NOT NULL,
743
- "occurred_at" timestamptz NOT NULL
744
- );
745
-
746
- CREATE INDEX IF NOT EXISTS "data_lifecycle_audit_expires_at_idx"
747
- ON "data_lifecycle_audit" ("expires_at");
748
-
749
- CREATE OR REPLACE FUNCTION "ebk_prune_data_lifecycle_audit"(
750
- "cutoff" timestamptz,
751
- "batch_limit" integer
752
- ) RETURNS integer
753
- LANGUAGE plpgsql
754
- SECURITY DEFINER
755
- SET search_path = pg_catalog, public
756
- AS $$
757
- DECLARE
758
- deleted_count integer;
759
- effective_cutoff timestamptz;
760
- BEGIN
761
- IF batch_limit < 1 OR batch_limit > 1000 THEN
762
- RAISE EXCEPTION 'audit prune batch is outside the reviewed bound';
763
- END IF;
764
- effective_cutoff := LEAST(cutoff, clock_timestamp());
765
- WITH expired AS (
766
- SELECT ctid FROM public.data_lifecycle_audit
767
- WHERE expires_at <= effective_cutoff
768
- ORDER BY expires_at, id
769
- LIMIT batch_limit
770
- FOR UPDATE SKIP LOCKED
771
- )
772
- DELETE FROM public.data_lifecycle_audit
773
- WHERE ctid IN (SELECT ctid FROM expired);
774
- GET DIAGNOSTICS deleted_count = ROW_COUNT;
775
- RETURN deleted_count;
776
- END;
777
- $$;
778
-
779
- CREATE OR REPLACE FUNCTION "ebk_prune_authorization_audit"(
780
- "cutoff" timestamptz,
781
- "batch_limit" integer
782
- ) RETURNS integer
783
- LANGUAGE plpgsql
784
- SECURITY DEFINER
785
- SET search_path = pg_catalog, public
786
- AS $$
787
- DECLARE
788
- deleted_count integer;
789
- effective_cutoff timestamptz;
790
- BEGIN
791
- IF batch_limit < 1 OR batch_limit > 1000 THEN
792
- RAISE EXCEPTION 'audit prune batch is outside the reviewed bound';
793
- END IF;
794
- effective_cutoff := LEAST(cutoff, clock_timestamp());
795
- WITH expired AS (
796
- SELECT ctid FROM public.authorization_audit
797
- WHERE created_at <= effective_cutoff - INTERVAL '400 days'
798
- ORDER BY created_at, id
799
- LIMIT batch_limit
800
- FOR UPDATE SKIP LOCKED
801
- )
802
- DELETE FROM public.authorization_audit
803
- WHERE ctid IN (SELECT ctid FROM expired);
804
- GET DIAGNOSTICS deleted_count = ROW_COUNT;
805
- RETURN deleted_count;
806
- END;
807
- $$;
808
-
809
- REVOKE ALL ON FUNCTION "ebk_prune_data_lifecycle_audit"(
810
- timestamptz, integer
811
- ) FROM PUBLIC;
812
- REVOKE ALL ON FUNCTION "ebk_prune_authorization_audit"(
813
- timestamptz, integer
814
- ) FROM PUBLIC;
815
-
816
- CREATE TABLE IF NOT EXISTS "data_lifecycle_export_artifacts" (
817
- "approval_request_id" uuid PRIMARY KEY
818
- REFERENCES "approval_requests" ("id") ON DELETE CASCADE,
819
- "artifact_ref" text,
820
- "cleanup_deadline_at" timestamptz,
821
- "cleanup_state" text NOT NULL,
822
- "current_version_id" text,
823
- "expires_at" timestamptz,
824
- "last_error_code" text,
825
- "object_key" text NOT NULL,
826
- "record_ref" text NOT NULL,
827
- "subject_ref" text NOT NULL,
828
- "upload_started_at" timestamptz,
829
- "created_at" timestamptz NOT NULL DEFAULT now(),
830
- "updated_at" timestamptz NOT NULL DEFAULT now()
831
- );
832
-
833
- CREATE INDEX IF NOT EXISTS "data_lifecycle_export_artifacts_subject_created_idx"
834
- ON "data_lifecycle_export_artifacts" ("subject_ref", "created_at");
835
- CREATE INDEX IF NOT EXISTS "data_lifecycle_export_artifacts_cleanup_expiry_idx"
836
- ON "data_lifecycle_export_artifacts" ("cleanup_state", "expires_at");
837
- CREATE INDEX IF NOT EXISTS "data_lifecycle_export_artifacts_cleanup_deadline_idx"
838
- ON "data_lifecycle_export_artifacts" ("cleanup_state", "cleanup_deadline_at");
839
-
840
- CREATE TABLE IF NOT EXISTS "data_lifecycle_export_versions" (
841
- "approval_request_id" uuid NOT NULL
842
- REFERENCES "approval_requests" ("id") ON DELETE CASCADE,
843
- "version_id" text NOT NULL,
844
- "object_key" text NOT NULL,
845
- "is_delete_marker" boolean NOT NULL,
846
- "status" text NOT NULL,
847
- "deleted_at" timestamptz,
848
- PRIMARY KEY ("approval_request_id", "version_id")
849
- );
850
-
851
- CREATE TABLE IF NOT EXISTS "cleanup_deadline_reports" (
852
- "feature" text NOT NULL,
853
- "resource_ref" text NOT NULL,
854
- "deadline_at" timestamptz NOT NULL,
855
- "observed_at" timestamptz NOT NULL DEFAULT now(),
856
- PRIMARY KEY ("feature", "resource_ref")
857
- );
858
- CREATE INDEX IF NOT EXISTS "cleanup_deadline_reports_feature_observed_idx"
859
- ON "cleanup_deadline_reports" ("feature", "observed_at");
860
-
861
- CREATE TABLE IF NOT EXISTS "cleanup_deadline_report_capacity" (
862
- "feature" text PRIMARY KEY,
863
- "maximum_pending" integer NOT NULL
864
- );
865
- INSERT INTO "cleanup_deadline_report_capacity" ("feature", "maximum_pending")
866
- VALUES ('confidential-export', 1000)
867
- ON CONFLICT ("feature") DO NOTHING;
868
-
869
- CREATE INDEX IF NOT EXISTS "data_lifecycle_export_versions_status_idx"
870
- ON "data_lifecycle_export_versions" ("status");
871
-
872
- CREATE TABLE IF NOT EXISTS "data_lifecycle_ledger" (
873
- "entry_id" text PRIMARY KEY,
874
- "action" text NOT NULL,
875
- "category_id" text NOT NULL,
876
- "effective_at" timestamptz NOT NULL,
877
- "expires_at" timestamptz NOT NULL,
878
- "idempotency_key" text NOT NULL UNIQUE,
879
- "policy_version" text NOT NULL,
880
- "pseudonymous_key" text NOT NULL,
881
- "created_at" timestamptz NOT NULL DEFAULT now()
882
- );
883
-
884
- CREATE TABLE IF NOT EXISTS "data_lifecycle_requests" (
885
- "id" uuid PRIMARY KEY,
886
- "approval_request_id" uuid NOT NULL UNIQUE,
887
- "request_json" jsonb NOT NULL,
888
- "revision" integer NOT NULL,
889
- "status" text NOT NULL,
890
- "updated_at" timestamptz NOT NULL DEFAULT now()
891
- );
892
-
893
- CREATE TABLE IF NOT EXISTS "data_lifecycle_holds" (
894
- "hold_id" text PRIMARY KEY,
895
- "scope_ref" text NOT NULL,
896
- "category_id" text NOT NULL,
897
- "hold_json" jsonb NOT NULL,
898
- "status" text NOT NULL,
899
- "expires_at" timestamptz NOT NULL,
900
- "review_at" timestamptz NOT NULL
901
- );
902
-
903
- CREATE TABLE IF NOT EXISTS "data_lifecycle_outbox" (
381
+ 'database/migrations/0000_initial.sql': `CREATE TABLE IF NOT EXISTS "data_lifecycle_outbox" (
904
382
  "idempotency_key" text PRIMARY KEY,
905
383
  "event_json" jsonb NOT NULL,
906
384
  "published_at" timestamptz,
@@ -909,113 +387,6 @@ CREATE TABLE IF NOT EXISTS "data_lifecycle_outbox" (
909
387
  "expires_at" timestamptz NOT NULL,
910
388
  "created_at" timestamptz NOT NULL DEFAULT now()
911
389
  );
912
-
913
- CREATE TABLE IF NOT EXISTS "performance_load_runs" (
914
- "plan_digest" text PRIMARY KEY,
915
- "run_id" text NOT NULL,
916
- "adapter_id" text NOT NULL,
917
- "cleanup_started_at" timestamptz,
918
- "scenario_id" text NOT NULL,
919
- "stage" text NOT NULL,
920
- "source_commit" text NOT NULL,
921
- "release_material_digest" text NOT NULL,
922
- "maximum_requests" integer NOT NULL,
923
- "created_at" timestamptz NOT NULL,
924
- "expires_at" timestamptz NOT NULL
925
- );
926
- CREATE INDEX IF NOT EXISTS "performance_load_runs_expires_at_idx"
927
- ON "performance_load_runs" ("expires_at");
928
-
929
- CREATE TABLE IF NOT EXISTS "performance_load_requests" (
930
- "plan_digest" text NOT NULL,
931
- "request_ordinal" integer NOT NULL,
932
- "effect_id" text,
933
- "claimed_at" timestamptz NOT NULL DEFAULT now(),
934
- PRIMARY KEY ("plan_digest", "request_ordinal")
935
- );
936
-
937
- CREATE TABLE IF NOT EXISTS "performance_load_async_effects" (
938
- "effect_id" text PRIMARY KEY,
939
- "plan_digest" text NOT NULL,
940
- "run_id" text NOT NULL,
941
- "processed_at" timestamptz,
942
- "expires_at" timestamptz NOT NULL,
943
- "created_at" timestamptz NOT NULL DEFAULT now()
944
- );
945
- CREATE INDEX IF NOT EXISTS "performance_load_async_effects_expires_at_idx"
946
- ON "performance_load_async_effects" USING btree ("expires_at");
947
- CREATE INDEX "performance_load_async_effects_pending_idx"
948
- ON "performance_load_async_effects" USING btree
949
- ("processed_at", "expires_at");
950
- CREATE INDEX IF NOT EXISTS "performance_load_async_effects_run_idx"
951
- ON "performance_load_async_effects" USING btree
952
- ("plan_digest", "run_id");
953
-
954
- CREATE TABLE IF NOT EXISTS "ebk_inbox" (
955
- "handler_id" text NOT NULL,
956
- "handler_version" text NOT NULL,
957
- "message_id" text NOT NULL,
958
- "payload_digest" text NOT NULL,
959
- "status" text NOT NULL,
960
- "attempts" integer NOT NULL DEFAULT 0,
961
- "result_reference" text,
962
- "first_seen_at" timestamptz NOT NULL DEFAULT now(),
963
- "last_attempt_at" timestamptz NOT NULL,
964
- "completed_at" timestamptz,
965
- "expires_at" timestamptz NOT NULL,
966
- PRIMARY KEY ("handler_id", "message_id")
967
- );
968
- CREATE INDEX "ebk_inbox_expires_at_idx"
969
- ON "ebk_inbox" USING btree ("expires_at");
970
-
971
- CREATE TABLE IF NOT EXISTS "data_lifecycle_retention_runs" (
972
- "id" uuid PRIMARY KEY,
973
- "approval_request_id" uuid UNIQUE,
974
- "as_of" timestamptz NOT NULL,
975
- "checkpoint_json" jsonb NOT NULL,
976
- "completed_at" timestamptz,
977
- "counts_json" jsonb NOT NULL,
978
- "expires_at" timestamptz NOT NULL,
979
- "plan_json" jsonb NOT NULL,
980
- "policy_version" text NOT NULL,
981
- "revision" integer NOT NULL,
982
- "status" text NOT NULL,
983
- "updated_at" timestamptz NOT NULL DEFAULT now()
984
- );
985
-
986
- CREATE TABLE IF NOT EXISTS "data_lifecycle_retention_candidates" (
987
- "run_id" uuid NOT NULL,
988
- "candidate_order" text NOT NULL,
989
- "record_id" uuid NOT NULL,
990
- "record_ref" text NOT NULL,
991
- "due_at" timestamptz NOT NULL,
992
- PRIMARY KEY ("run_id", "candidate_order")
993
- );
994
-
995
- CREATE TABLE IF NOT EXISTS "data_lifecycle_receipts" (
996
- "source_slice" text NOT NULL,
997
- "pseudonymous_key" text NOT NULL,
998
- "action" text NOT NULL,
999
- "request_ref" text NOT NULL,
1000
- "policy_version" text NOT NULL,
1001
- "occurred_at" timestamptz NOT NULL,
1002
- "received_at" timestamptz NOT NULL DEFAULT now(),
1003
- PRIMARY KEY ("source_slice", "pseudonymous_key", "action", "request_ref")
1004
- );
1005
-
1006
- CREATE TABLE IF NOT EXISTS "data_lifecycle_downstream_copies" (
1007
- "source_slice" text NOT NULL,
1008
- "pseudonymous_key" text NOT NULL,
1009
- "copy_id" text NOT NULL,
1010
- "recipient" text NOT NULL,
1011
- "purpose" text NOT NULL,
1012
- "expires_at" timestamptz NOT NULL,
1013
- "action" text NOT NULL,
1014
- "hold_refs" jsonb NOT NULL,
1015
- "status" text NOT NULL,
1016
- "updated_at" timestamptz NOT NULL DEFAULT now(),
1017
- PRIMARY KEY ("source_slice", "pseudonymous_key", "copy_id")
1018
- );
1019
390
  `,
1020
391
  'database/migrations/meta/_journal.json': (0, built_in_plan_shared_js_1.json)({
1021
392
  dialect: 'postgresql',
@@ -1036,222 +407,8 @@ CREATE TABLE IF NOT EXISTS "data_lifecycle_downstream_copies" (
1036
407
  version: '7',
1037
408
  dialect: 'postgresql',
1038
409
  tables: {
1039
- 'public.approval_requests': snapshotTable('approval_requests', {
1040
- author_reference: snapshotColumn('author_reference', 'text'),
1041
- created_at: snapshotColumn('created_at', 'timestamp with time zone', {
1042
- default: 'now()',
1043
- }),
1044
- expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
1045
- id: snapshotColumn('id', 'uuid', { primaryKey: true }),
1046
- policy_version: snapshotColumn('policy_version', 'text'),
1047
- request_digest: snapshotColumn('request_digest', 'text'),
1048
- request_json: snapshotColumn('request_json', 'jsonb'),
1049
- revision: snapshotColumn('revision', 'integer'),
1050
- status: snapshotColumn('status', 'text'),
1051
- }),
1052
- 'public.authorization_audit': snapshotTable('authorization_audit', {
1053
- action: snapshotColumn('action', 'text'),
1054
- approval_reference: snapshotColumn('approval_reference', 'text', {
1055
- notNull: false,
1056
- }),
1057
- authority_mode: snapshotColumn('authority_mode', 'text'),
1058
- correlation_id: snapshotColumn('correlation_id', 'text'),
1059
- created_at: snapshotColumn('created_at', 'timestamp with time zone', {
1060
- default: 'now()',
1061
- }),
1062
- decision: snapshotColumn('decision', 'text'),
1063
- id: snapshotColumn('id', 'uuid', {
1064
- default: 'gen_random_uuid()',
1065
- primaryKey: true,
1066
- }),
1067
- policy_version: snapshotColumn('policy_version', 'text'),
1068
- principal_kind: snapshotColumn('principal_kind', 'text'),
1069
- pseudonymous_subject_id: snapshotColumn('pseudonymous_subject_id', 'text'),
1070
- reason_category: snapshotColumn('reason_category', 'text'),
1071
- delegation_reference: snapshotColumn('delegation_reference', 'text', {
1072
- notNull: false,
1073
- }),
1074
- resource_reference: snapshotColumn('resource_reference', 'text', {
1075
- notNull: false,
1076
- }),
1077
- resource_type: snapshotColumn('resource_type', 'text'),
1078
- slice: snapshotColumn('slice', 'text'),
1079
- stage: snapshotColumn('stage', 'text'),
1080
- subject_type: snapshotColumn('subject_type', 'text'),
1081
- }),
1082
- 'public.data_lifecycle_audit': snapshotTable('data_lifecycle_audit', {
1083
- action: snapshotColumn('action', 'text'),
1084
- actor_ref: snapshotColumn('actor_ref', 'text'),
1085
- approval_reference: snapshotColumn('approval_reference', 'text', {
1086
- notNull: false,
1087
- }),
1088
- audit_json: snapshotColumn('audit_json', 'jsonb'),
1089
- authority_code: snapshotColumn('authority_code', 'text'),
1090
- correlation_ref: snapshotColumn('correlation_ref', 'text'),
1091
- expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
1092
- id: snapshotColumn('id', 'uuid', {
1093
- default: 'gen_random_uuid()',
1094
- primaryKey: true,
1095
- }),
1096
- occurred_at: snapshotColumn('occurred_at', 'timestamp with time zone'),
1097
- outcome: snapshotColumn('outcome', 'text'),
1098
- policy_version: snapshotColumn('policy_version', 'text'),
1099
- principal_kind: snapshotColumn('principal_kind', 'text'),
1100
- purpose_code: snapshotColumn('purpose_code', 'text'),
1101
- resource_reference: snapshotColumn('resource_reference', 'text', {
1102
- notNull: false,
1103
- }),
1104
- slice: snapshotColumn('slice', 'text'),
1105
- stage: snapshotColumn('stage', 'text'),
1106
- subject_type: snapshotColumn('subject_type', 'text'),
1107
- target_category_id: snapshotColumn('target_category_id', 'text'),
1108
- }, {}, {}, {
1109
- data_lifecycle_audit_expires_at_idx: snapshotIndex('data_lifecycle_audit_expires_at_idx', [{ expression: 'expires_at', opclass: 'timestamptz_ops' }]),
1110
- }),
1111
- 'public.data_lifecycle_export_artifacts': snapshotTable('data_lifecycle_export_artifacts', {
1112
- approval_request_id: snapshotColumn('approval_request_id', 'uuid', {
1113
- primaryKey: true,
1114
- }),
1115
- artifact_ref: snapshotColumn('artifact_ref', 'text', {
1116
- notNull: false,
1117
- }),
1118
- cleanup_deadline_at: snapshotColumn('cleanup_deadline_at', 'timestamp with time zone', { notNull: false }),
1119
- cleanup_state: snapshotColumn('cleanup_state', 'text'),
1120
- created_at: snapshotColumn('created_at', 'timestamp with time zone', { default: 'now()' }),
1121
- current_version_id: snapshotColumn('current_version_id', 'text', {
1122
- notNull: false,
1123
- }),
1124
- expires_at: snapshotColumn('expires_at', 'timestamp with time zone', { notNull: false }),
1125
- last_error_code: snapshotColumn('last_error_code', 'text', {
1126
- notNull: false,
1127
- }),
1128
- object_key: snapshotColumn('object_key', 'text'),
1129
- record_ref: snapshotColumn('record_ref', 'text'),
1130
- subject_ref: snapshotColumn('subject_ref', 'text'),
1131
- updated_at: snapshotColumn('updated_at', 'timestamp with time zone', { default: 'now()' }),
1132
- upload_started_at: snapshotColumn('upload_started_at', 'timestamp with time zone', { notNull: false }),
1133
- }, {}, {}, {
1134
- data_lifecycle_export_artifacts_cleanup_deadline_idx: snapshotIndex('data_lifecycle_export_artifacts_cleanup_deadline_idx', [
1135
- { expression: 'cleanup_state', opclass: 'text_ops' },
1136
- {
1137
- expression: 'cleanup_deadline_at',
1138
- opclass: 'timestamptz_ops',
1139
- },
1140
- ]),
1141
- data_lifecycle_export_artifacts_cleanup_expiry_idx: snapshotIndex('data_lifecycle_export_artifacts_cleanup_expiry_idx', [
1142
- { expression: 'cleanup_state', opclass: 'text_ops' },
1143
- { expression: 'expires_at', opclass: 'timestamptz_ops' },
1144
- ]),
1145
- data_lifecycle_export_artifacts_subject_created_idx: snapshotIndex('data_lifecycle_export_artifacts_subject_created_idx', [
1146
- { expression: 'subject_ref', opclass: 'text_ops' },
1147
- { expression: 'created_at', opclass: 'timestamptz_ops' },
1148
- ]),
1149
- }, {
1150
- data_lifecycle_export_artifacts_approval_request_id_approval_requests_id_fk: {
1151
- columnsFrom: ['approval_request_id'],
1152
- columnsTo: ['id'],
1153
- name: 'data_lifecycle_export_artifacts_approval_request_id_approval_requests_id_fk',
1154
- onDelete: 'cascade',
1155
- onUpdate: 'no action',
1156
- tableFrom: 'data_lifecycle_export_artifacts',
1157
- tableTo: 'approval_requests',
1158
- },
1159
- }),
1160
- 'public.cleanup_deadline_report_capacity': snapshotTable('cleanup_deadline_report_capacity', {
1161
- feature: snapshotColumn('feature', 'text', { primaryKey: true }),
1162
- maximum_pending: snapshotColumn('maximum_pending', 'integer'),
1163
- }),
1164
- 'public.cleanup_deadline_reports': snapshotTable('cleanup_deadline_reports', {
1165
- deadline_at: snapshotColumn('deadline_at', 'timestamp with time zone'),
1166
- feature: snapshotColumn('feature', 'text'),
1167
- observed_at: snapshotColumn('observed_at', 'timestamp with time zone', { default: 'now()' }),
1168
- resource_ref: snapshotColumn('resource_ref', 'text'),
1169
- }, {}, {
1170
- cleanup_deadline_reports_feature_resource_ref_pk: {
1171
- columns: ['feature', 'resource_ref'],
1172
- name: 'cleanup_deadline_reports_feature_resource_ref_pk',
1173
- },
1174
- }, {
1175
- cleanup_deadline_reports_feature_observed_idx: snapshotIndex('cleanup_deadline_reports_feature_observed_idx', [
1176
- { expression: 'feature', opclass: 'text_ops' },
1177
- {
1178
- expression: 'observed_at',
1179
- opclass: 'timestamptz_ops',
1180
- },
1181
- ]),
1182
- }),
1183
- 'public.data_lifecycle_export_versions': snapshotTable('data_lifecycle_export_versions', {
1184
- approval_request_id: snapshotColumn('approval_request_id', 'uuid'),
1185
- deleted_at: snapshotColumn('deleted_at', 'timestamp with time zone', { notNull: false }),
1186
- is_delete_marker: snapshotColumn('is_delete_marker', 'boolean'),
1187
- object_key: snapshotColumn('object_key', 'text'),
1188
- status: snapshotColumn('status', 'text'),
1189
- version_id: snapshotColumn('version_id', 'text'),
1190
- }, {}, {
1191
- data_lifecycle_export_versions_approval_request_id_version_id_pk: {
1192
- columns: ['approval_request_id', 'version_id'],
1193
- name: 'data_lifecycle_export_versions_approval_request_id_version_id_pk',
1194
- },
1195
- }, {
1196
- data_lifecycle_export_versions_status_idx: snapshotIndex('data_lifecycle_export_versions_status_idx', [{ expression: 'status', opclass: 'text_ops' }]),
1197
- }, {
1198
- data_lifecycle_export_versions_approval_request_id_approval_requests_id_fk: {
1199
- columnsFrom: ['approval_request_id'],
1200
- columnsTo: ['id'],
1201
- name: 'data_lifecycle_export_versions_approval_request_id_approval_requests_id_fk',
1202
- onDelete: 'cascade',
1203
- onUpdate: 'no action',
1204
- tableFrom: 'data_lifecycle_export_versions',
1205
- tableTo: 'approval_requests',
1206
- },
1207
- }),
1208
- 'public.data_lifecycle_ledger': snapshotTable('data_lifecycle_ledger', {
1209
- action: snapshotColumn('action', 'text'),
1210
- category_id: snapshotColumn('category_id', 'text'),
1211
- created_at: snapshotColumn('created_at', 'timestamp with time zone', { default: 'now()' }),
1212
- effective_at: snapshotColumn('effective_at', 'timestamp with time zone'),
1213
- entry_id: snapshotColumn('entry_id', 'text', {
1214
- primaryKey: true,
1215
- }),
1216
- expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
1217
- idempotency_key: snapshotColumn('idempotency_key', 'text'),
1218
- policy_version: snapshotColumn('policy_version', 'text'),
1219
- pseudonymous_key: snapshotColumn('pseudonymous_key', 'text'),
1220
- }, {
1221
- data_lifecycle_ledger_idempotency_key_unique: {
1222
- columns: ['idempotency_key'],
1223
- name: 'data_lifecycle_ledger_idempotency_key_unique',
1224
- nullsNotDistinct: false,
1225
- },
1226
- }),
1227
- 'public.data_lifecycle_downstream_copies': snapshotTable('data_lifecycle_downstream_copies', {
1228
- action: snapshotColumn('action', 'text'),
1229
- copy_id: snapshotColumn('copy_id', 'text'),
1230
- expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
1231
- hold_refs: snapshotColumn('hold_refs', 'jsonb'),
1232
- pseudonymous_key: snapshotColumn('pseudonymous_key', 'text'),
1233
- purpose: snapshotColumn('purpose', 'text'),
1234
- recipient: snapshotColumn('recipient', 'text'),
1235
- source_slice: snapshotColumn('source_slice', 'text'),
1236
- status: snapshotColumn('status', 'text'),
1237
- updated_at: snapshotColumn('updated_at', 'timestamp with time zone', { default: 'now()' }),
1238
- }, {}, {
1239
- data_lifecycle_downstream_copies_source_slice_pseudonymous_key_copy_id_pk: {
1240
- columns: ['source_slice', 'pseudonymous_key', 'copy_id'],
1241
- name: 'data_lifecycle_downstream_copies_source_slice_pseudonymous_key_copy_id_pk',
1242
- },
1243
- }),
1244
- 'public.data_lifecycle_holds': snapshotTable('data_lifecycle_holds', {
1245
- category_id: snapshotColumn('category_id', 'text'),
1246
- expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
1247
- hold_id: snapshotColumn('hold_id', 'text', { primaryKey: true }),
1248
- hold_json: snapshotColumn('hold_json', 'jsonb'),
1249
- review_at: snapshotColumn('review_at', 'timestamp with time zone'),
1250
- scope_ref: snapshotColumn('scope_ref', 'text'),
1251
- status: snapshotColumn('status', 'text'),
1252
- }),
1253
410
  'public.data_lifecycle_outbox': snapshotTable('data_lifecycle_outbox', {
1254
- attempts: snapshotColumn('attempts', 'integer', { default: '0' }),
411
+ attempts: snapshotColumn('attempts', 'integer', { default: 0 }),
1255
412
  created_at: snapshotColumn('created_at', 'timestamp with time zone', {
1256
413
  default: 'now()',
1257
414
  }),
@@ -1265,213 +422,6 @@ CREATE TABLE IF NOT EXISTS "data_lifecycle_downstream_copies" (
1265
422
  }),
1266
423
  published_at: snapshotColumn('published_at', 'timestamp with time zone', { notNull: false }),
1267
424
  }),
1268
- 'public.performance_load_runs': snapshotTable('performance_load_runs', {
1269
- adapter_id: snapshotColumn('adapter_id', 'text'),
1270
- cleanup_started_at: snapshotColumn('cleanup_started_at', 'timestamp with time zone', { notNull: false }),
1271
- created_at: snapshotColumn('created_at', 'timestamp with time zone'),
1272
- expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
1273
- maximum_requests: snapshotColumn('maximum_requests', 'integer'),
1274
- plan_digest: snapshotColumn('plan_digest', 'text', {
1275
- primaryKey: true,
1276
- }),
1277
- release_material_digest: snapshotColumn('release_material_digest', 'text'),
1278
- run_id: snapshotColumn('run_id', 'text'),
1279
- scenario_id: snapshotColumn('scenario_id', 'text'),
1280
- source_commit: snapshotColumn('source_commit', 'text'),
1281
- stage: snapshotColumn('stage', 'text'),
1282
- }, {}, {}, {
1283
- performance_load_runs_expires_at_idx: snapshotIndex('performance_load_runs_expires_at_idx', [
1284
- {
1285
- expression: 'expires_at',
1286
- opclass: 'timestamptz_ops',
1287
- },
1288
- ]),
1289
- }),
1290
- 'public.performance_load_requests': snapshotTable('performance_load_requests', {
1291
- claimed_at: snapshotColumn('claimed_at', 'timestamp with time zone', { default: 'now()' }),
1292
- effect_id: snapshotColumn('effect_id', 'text', {
1293
- notNull: false,
1294
- }),
1295
- plan_digest: snapshotColumn('plan_digest', 'text'),
1296
- request_ordinal: snapshotColumn('request_ordinal', 'integer'),
1297
- }, {}, {
1298
- performance_load_requests_plan_digest_request_ordinal_pk: {
1299
- columns: ['plan_digest', 'request_ordinal'],
1300
- name: 'performance_load_requests_plan_digest_request_ordinal_pk',
1301
- },
1302
- }),
1303
- 'public.performance_load_async_effects': snapshotTable('performance_load_async_effects', {
1304
- created_at: snapshotColumn('created_at', 'timestamp with time zone', { default: 'now()' }),
1305
- effect_id: snapshotColumn('effect_id', 'text', {
1306
- primaryKey: true,
1307
- }),
1308
- expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
1309
- plan_digest: snapshotColumn('plan_digest', 'text'),
1310
- processed_at: snapshotColumn('processed_at', 'timestamp with time zone', { notNull: false }),
1311
- run_id: snapshotColumn('run_id', 'text'),
1312
- }, {}, {}, {
1313
- performance_load_async_effects_expires_at_idx: snapshotIndex('performance_load_async_effects_expires_at_idx', [
1314
- {
1315
- expression: 'expires_at',
1316
- opclass: 'timestamptz_ops',
1317
- },
1318
- ]),
1319
- performance_load_async_effects_pending_idx: snapshotIndex('performance_load_async_effects_pending_idx', [
1320
- {
1321
- expression: 'processed_at',
1322
- opclass: 'timestamptz_ops',
1323
- },
1324
- {
1325
- expression: 'expires_at',
1326
- opclass: 'timestamptz_ops',
1327
- },
1328
- ]),
1329
- performance_load_async_effects_run_idx: snapshotIndex('performance_load_async_effects_run_idx', [
1330
- {
1331
- expression: 'plan_digest',
1332
- opclass: 'text_ops',
1333
- },
1334
- {
1335
- expression: 'run_id',
1336
- opclass: 'text_ops',
1337
- },
1338
- ]),
1339
- }),
1340
- 'public.ebk_inbox': snapshotTable('ebk_inbox', {
1341
- attempts: snapshotColumn('attempts', 'integer', { default: '0' }),
1342
- completed_at: snapshotColumn('completed_at', 'timestamp with time zone', { notNull: false }),
1343
- expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
1344
- first_seen_at: snapshotColumn('first_seen_at', 'timestamp with time zone', { default: 'now()' }),
1345
- handler_id: snapshotColumn('handler_id', 'text'),
1346
- handler_version: snapshotColumn('handler_version', 'text'),
1347
- last_attempt_at: snapshotColumn('last_attempt_at', 'timestamp with time zone'),
1348
- message_id: snapshotColumn('message_id', 'text'),
1349
- payload_digest: snapshotColumn('payload_digest', 'text'),
1350
- result_reference: snapshotColumn('result_reference', 'text', {
1351
- notNull: false,
1352
- }),
1353
- status: snapshotColumn('status', 'text'),
1354
- }, {}, {
1355
- ebk_inbox_handler_id_message_id_pk: {
1356
- columns: ['handler_id', 'message_id'],
1357
- name: 'ebk_inbox_handler_id_message_id_pk',
1358
- },
1359
- }, {
1360
- ebk_inbox_expires_at_idx: snapshotIndex('ebk_inbox_expires_at_idx', [
1361
- {
1362
- expression: 'expires_at',
1363
- opclass: 'timestamptz_ops',
1364
- },
1365
- ]),
1366
- }),
1367
- 'public.data_lifecycle_requests': snapshotTable('data_lifecycle_requests', {
1368
- approval_request_id: snapshotColumn('approval_request_id', 'uuid'),
1369
- id: snapshotColumn('id', 'uuid', { primaryKey: true }),
1370
- request_json: snapshotColumn('request_json', 'jsonb'),
1371
- revision: snapshotColumn('revision', 'integer'),
1372
- status: snapshotColumn('status', 'text'),
1373
- updated_at: snapshotColumn('updated_at', 'timestamp with time zone', { default: 'now()' }),
1374
- }, {
1375
- data_lifecycle_requests_approval_request_id_unique: {
1376
- columns: ['approval_request_id'],
1377
- name: 'data_lifecycle_requests_approval_request_id_unique',
1378
- nullsNotDistinct: false,
1379
- },
1380
- }),
1381
- 'public.data_lifecycle_receipts': snapshotTable('data_lifecycle_receipts', {
1382
- action: snapshotColumn('action', 'text'),
1383
- occurred_at: snapshotColumn('occurred_at', 'timestamp with time zone'),
1384
- policy_version: snapshotColumn('policy_version', 'text'),
1385
- pseudonymous_key: snapshotColumn('pseudonymous_key', 'text'),
1386
- received_at: snapshotColumn('received_at', 'timestamp with time zone', { default: 'now()' }),
1387
- request_ref: snapshotColumn('request_ref', 'text'),
1388
- source_slice: snapshotColumn('source_slice', 'text'),
1389
- }, {}, {
1390
- data_lifecycle_receipts_source_slice_pseudonymous_key_action_request_ref_pk: {
1391
- columns: [
1392
- 'source_slice',
1393
- 'pseudonymous_key',
1394
- 'action',
1395
- 'request_ref',
1396
- ],
1397
- name: 'data_lifecycle_receipts_source_slice_pseudonymous_key_action_request_ref_pk',
1398
- },
1399
- }),
1400
- 'public.data_lifecycle_retention_runs': snapshotTable('data_lifecycle_retention_runs', {
1401
- approval_request_id: snapshotColumn('approval_request_id', 'uuid', {
1402
- notNull: false,
1403
- }),
1404
- as_of: snapshotColumn('as_of', 'timestamp with time zone'),
1405
- checkpoint_json: snapshotColumn('checkpoint_json', 'jsonb'),
1406
- completed_at: snapshotColumn('completed_at', 'timestamp with time zone', { notNull: false }),
1407
- counts_json: snapshotColumn('counts_json', 'jsonb'),
1408
- expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
1409
- id: snapshotColumn('id', 'uuid', { primaryKey: true }),
1410
- plan_json: snapshotColumn('plan_json', 'jsonb'),
1411
- policy_version: snapshotColumn('policy_version', 'text'),
1412
- revision: snapshotColumn('revision', 'integer'),
1413
- status: snapshotColumn('status', 'text'),
1414
- updated_at: snapshotColumn('updated_at', 'timestamp with time zone', { default: 'now()' }),
1415
- }, {
1416
- data_lifecycle_retention_runs_approval_request_id_unique: {
1417
- columns: ['approval_request_id'],
1418
- name: 'data_lifecycle_retention_runs_approval_request_id_unique',
1419
- nullsNotDistinct: false,
1420
- },
1421
- }),
1422
- 'public.data_lifecycle_retention_candidates': snapshotTable('data_lifecycle_retention_candidates', {
1423
- candidate_order: snapshotColumn('candidate_order', 'text'),
1424
- due_at: snapshotColumn('due_at', 'timestamp with time zone'),
1425
- record_id: snapshotColumn('record_id', 'uuid'),
1426
- record_ref: snapshotColumn('record_ref', 'text'),
1427
- run_id: snapshotColumn('run_id', 'uuid'),
1428
- }, {}, {
1429
- data_lifecycle_retention_candidates_run_id_candidate_order_pk: {
1430
- columns: ['run_id', 'candidate_order'],
1431
- name: 'data_lifecycle_retention_candidates_run_id_candidate_order_pk',
1432
- },
1433
- }),
1434
- 'public.delegation_grants': snapshotTable('delegation_grants', {
1435
- capability_digest: snapshotColumn('capability_digest', 'text'),
1436
- created_at: snapshotColumn('created_at', 'timestamp with time zone', {
1437
- default: 'now()',
1438
- }),
1439
- expires_at: snapshotColumn('expires_at', 'timestamp with time zone'),
1440
- grant_json: snapshotColumn('grant_json', 'jsonb'),
1441
- id: snapshotColumn('id', 'uuid', { primaryKey: true }),
1442
- issued_at: snapshotColumn('issued_at', 'timestamp with time zone'),
1443
- policy_version: snapshotColumn('policy_version', 'text'),
1444
- revision: snapshotColumn('revision', 'integer'),
1445
- status: snapshotColumn('status', 'text'),
1446
- }),
1447
- 'public.records': snapshotTable('records', {
1448
- created_at: snapshotColumn('created_at', 'timestamp with time zone', {
1449
- default: 'now()',
1450
- }),
1451
- id: snapshotColumn('id', 'uuid', {
1452
- default: 'gen_random_uuid()',
1453
- primaryKey: true,
1454
- }),
1455
- last_activity_at: snapshotColumn('last_activity_at', 'timestamp with time zone', { default: 'now()' }),
1456
- name: snapshotColumn('name', 'text'),
1457
- owner_id: snapshotColumn('owner_id', 'text'),
1458
- run_scope: snapshotColumn('run_scope', 'text'),
1459
- test_expires_at: snapshotColumn('test_expires_at', 'timestamp with time zone', { notNull: false }),
1460
- }, {}, {}, {
1461
- records_performance_expiry_idx: snapshotIndex('records_performance_expiry_idx', [
1462
- { expression: 'owner_id', opclass: 'text_ops' },
1463
- { expression: 'name', opclass: 'text_ops' },
1464
- {
1465
- expression: 'test_expires_at',
1466
- opclass: 'timestamptz_ops',
1467
- },
1468
- ]),
1469
- records_performance_run_scope_idx: snapshotIndex('records_performance_run_scope_idx', [
1470
- { expression: 'owner_id', opclass: 'text_ops' },
1471
- { expression: 'name', opclass: 'text_ops' },
1472
- { expression: 'run_scope', opclass: 'text_ops' },
1473
- ]),
1474
- }),
1475
425
  },
1476
426
  enums: {},
1477
427
  schemas: {},
@@ -1491,15 +441,20 @@ const plan = createDatabaseBindingPlan(databaseBindings, {
1491
441
  });
1492
442
  const activeDatabase = plan.active.primary;
1493
443
  if (!activeDatabase) throw new Error('Database binding "primary" is required.');
1494
- const localDatabase = resolveLocalDatabaseContract({
444
+ // Schema-only commands stay offline; connection commands require the owned allocation.
445
+ const schemaOnly = process.argv[2] === 'generate' || process.argv[2] === 'check';
446
+ const localDatabase = schemaOnly || process.env.DATABASE_URL ? undefined : resolveLocalDatabaseContract({
1495
447
  database: activeDatabase,
1496
448
  slice: '${name}',
1497
449
  });
450
+ const databaseUrl = process.env.DATABASE_URL ?? (localDatabase
451
+ ? \`postgresql://\${encodeURIComponent(localDatabase.username)}:\${encodeURIComponent(localDatabase.password)}@\${localDatabase.host}:\${localDatabase.port}/\${localDatabase.database}\`
452
+ : undefined);
1498
453
 
1499
454
  export default defineConfig({
1500
- dbCredentials: {
1501
- url: process.env.DATABASE_URL ?? \`postgresql://\${localDatabase.username}:\${localDatabase.password}@\${localDatabase.host}:\${localDatabase.port}/\${localDatabase.database}\`,
1502
- },
455
+ ...(!schemaOnly && databaseUrl ? {
456
+ dbCredentials: { url: databaseUrl },
457
+ } : {}),
1503
458
  dialect: 'postgresql',
1504
459
  out: './database/migrations',
1505
460
  schema: './database/schema.ts',
@@ -1508,6 +463,11 @@ export default defineConfig({
1508
463
  'database/docker-compose.yml': `services:
1509
464
  database:
1510
465
  image: postgres:17-alpine
466
+ container_name: \${EBK_LOCAL_DATABASE_PROJECT}-database
467
+ labels:
468
+ dev.ebk.task: \${EBK_LOCAL_DATABASE_TASK}
469
+ dev.ebk.slice: \${EBK_LOCAL_DATABASE_SLICE}
470
+ dev.ebk.database: \${EBK_LOCAL_DATABASE_LOGICAL}
1511
471
  environment:
1512
472
  POSTGRES_DB: \${EBK_LOCAL_DATABASE}
1513
473
  POSTGRES_PASSWORD: \${EBK_LOCAL_DATABASE_PASSWORD}
@@ -1518,13 +478,29 @@ export default defineConfig({
1518
478
  timeout: 3s
1519
479
  retries: 15
1520
480
  ports:
1521
- - '\${EBK_LOCAL_DATABASE_PORT}:5432'
481
+ - '127.0.0.1:\${EBK_LOCAL_DATABASE_PORT}:5432'
1522
482
  volumes:
1523
483
  - database-data:/var/lib/postgresql/data
1524
484
 
1525
485
  volumes:
1526
486
  database-data:
487
+ name: \${EBK_LOCAL_DATABASE_PROJECT}-data
488
+ labels:
489
+ dev.ebk.task: \${EBK_LOCAL_DATABASE_TASK}
490
+ dev.ebk.slice: \${EBK_LOCAL_DATABASE_SLICE}
491
+ dev.ebk.database: \${EBK_LOCAL_DATABASE_LOGICAL}
492
+
493
+ networks:
494
+ default:
495
+ name: \${EBK_LOCAL_DATABASE_PROJECT}-network
496
+ labels:
497
+ dev.ebk.task: \${EBK_LOCAL_DATABASE_TASK}
498
+ dev.ebk.slice: \${EBK_LOCAL_DATABASE_SLICE}
499
+ dev.ebk.database: \${EBK_LOCAL_DATABASE_LOGICAL}
1527
500
  `,
1528
501
  };
502
+ return Object.fromEntries(Object.entries(files).filter(([path]) => sql ||
503
+ (!path.startsWith('database/') &&
504
+ path !== 'docs/runbooks/database-credential-rotation.md')));
1529
505
  }
1530
506
  //# sourceMappingURL=built-in-plan-data-files.js.map