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

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 (791) hide show
  1. package/README.md +18 -0
  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.js +21 -9
  16. package/src/blueprints/manifest.d.ts +1 -1
  17. package/src/blueprints/resolver.js +28 -15
  18. package/src/cli/bootstrap.d.ts +1 -1
  19. package/src/cli/deploy-runtime.d.ts +6 -0
  20. package/src/cli/deploy-runtime.js +58 -0
  21. package/src/cli/dev-command.d.ts +16 -4
  22. package/src/cli/dev-command.js +63 -0
  23. package/src/cli/main.d.ts +9 -1
  24. package/src/cli/main.js +139 -20
  25. package/src/cli/output.d.ts +1 -1
  26. package/src/cli/output.js +1 -1
  27. package/src/developer-agent/context.js +41 -9
  28. package/src/developer-agent/generator-planning.js +20 -6
  29. package/src/developer-agent/git-inspection.d.ts +6 -2
  30. package/src/developer-agent/git-inspection.js +78 -6
  31. package/src/developer-agent/model.d.ts +5 -3
  32. package/src/developer-agent/model.js +4 -4
  33. package/src/developer-agent/operation-registry.d.ts +5 -0
  34. package/src/developer-agent/operation-registry.js +286 -40
  35. package/src/developer-agent/planning.js +16 -13
  36. package/src/developer-agent/preview-changes.d.ts +2 -0
  37. package/src/developer-agent/preview-changes.js +14 -2
  38. package/src/developer-agent/preview-source.js +3 -0
  39. package/src/developer-agent/validation.js +25 -9
  40. package/src/developer-agent/workspace-inspection.js +60 -5
  41. package/src/executors/blueprint-trust/blueprint-trust.js +6 -0
  42. package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
  43. package/src/executors/deployment-plan/deployment-plan.js +57 -2
  44. package/src/executors/dev-doctor/dev-doctor.js +13 -6
  45. package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
  46. package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
  47. package/src/executors/dev-task-cleanup/schema.json +9 -0
  48. package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
  49. package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
  50. package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
  51. package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
  52. package/src/executors/fleet/fleet.js +1 -1
  53. package/src/executors/foundation-preflight/foundation-preflight.d.ts +1 -0
  54. package/src/executors/foundation-preflight/foundation-preflight.js +6 -2
  55. package/src/executors/foundation-preflight/schema.json +5 -0
  56. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +13 -2
  57. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -31
  58. package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +65 -0
  59. package/src/executors/foundation-profile-preflight/production-database-safeguard.js +223 -0
  60. package/src/executors/foundation-profile-preflight/schema.json +15 -4
  61. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
  62. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +70 -20
  63. package/src/executors/foundation-remove-preflight/schema.json +6 -1
  64. package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
  65. package/src/executors/github-bootstrap/github-bootstrap.js +3 -0
  66. package/src/executors/github-bootstrap/schema.json +7 -1
  67. package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +29 -136
  68. package/src/executors/infrastructure-plan/infrastructure-plan.js +230 -3282
  69. package/src/executors/infrastructure-plan/schema.json +12 -52
  70. package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
  71. package/src/executors/local-deploy/federated-credential-transport.js +252 -0
  72. package/src/executors/local-deploy/local-approval.d.ts +18 -0
  73. package/src/executors/local-deploy/local-approval.js +39 -0
  74. package/src/executors/local-deploy/local-deploy.d.ts +112 -0
  75. package/src/executors/local-deploy/local-deploy.js +1404 -0
  76. package/src/executors/local-deploy/schema.json +70 -0
  77. package/src/executors/refresh/refresh.js +2 -2
  78. package/src/executors/remove/remove.js +2 -2
  79. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +42 -0
  80. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +1229 -0
  81. package/src/executors/router-waf-rehearsal/schema.json +29 -0
  82. package/src/executors/secret-initialize/schema.json +42 -0
  83. package/src/executors/secret-initialize/secret-initialize.d.ts +34 -0
  84. package/src/executors/secret-initialize/secret-initialize.js +297 -0
  85. package/src/executors/secret-metadata/schema.json +5 -0
  86. package/src/executors/secret-metadata/secret-metadata.d.ts +16 -2
  87. package/src/executors/secret-metadata/secret-metadata.js +129 -30
  88. package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
  89. package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
  90. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +48 -0
  91. package/src/executors/sst-lifecycle/governed-native-operation.js +162 -0
  92. package/src/executors/sst-lifecycle/logging-preflight.d.ts +5 -0
  93. package/src/executors/sst-lifecycle/logging-preflight.js +23 -13
  94. package/src/executors/sst-lifecycle/run-sst-command.d.ts +40 -6
  95. package/src/executors/sst-lifecycle/run-sst-command.js +779 -70
  96. package/src/executors/sst-lifecycle/schema.json +8 -1
  97. package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
  98. package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
  99. package/src/executors/sst-lifecycle/sst-environment-source.d.ts +33 -0
  100. package/src/executors/sst-lifecycle/sst-environment-source.js +267 -0
  101. package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
  102. package/src/executors/sst-lifecycle/task-unlock.js +126 -0
  103. package/src/executors/unlock/unlock.js +2 -2
  104. package/src/foundation/capability-plan.d.ts +43 -0
  105. package/src/foundation/capability-plan.js +168 -0
  106. package/src/foundation/discovery.d.ts +14 -11
  107. package/src/foundation/discovery.js +32 -6
  108. package/src/foundation/index.d.ts +4 -0
  109. package/src/foundation/index.js +11 -0
  110. package/src/foundation/local-database-contract.d.ts +20 -0
  111. package/src/foundation/local-database-contract.js +262 -13
  112. package/src/foundation/local-private-smoke-access.d.ts +20 -0
  113. package/src/foundation/local-private-smoke-access.js +197 -0
  114. package/src/foundation/logging-preflight.js +1 -1
  115. package/src/foundation/logging.d.ts +3 -1
  116. package/src/foundation/logging.js +1 -1
  117. package/src/foundation/partial-state.d.ts +10 -0
  118. package/src/foundation/partial-state.js +21 -0
  119. package/src/foundation/preflight.js +37 -18
  120. package/src/foundation/private-smoke-access.d.ts +25 -0
  121. package/src/foundation/private-smoke-access.js +135 -0
  122. package/src/foundation/private-smoke-admission.d.ts +45 -0
  123. package/src/foundation/private-smoke-admission.js +180 -0
  124. package/src/foundation/private-smoke-control-plane.d.ts +18 -0
  125. package/src/foundation/private-smoke-control-plane.js +184 -0
  126. package/src/foundation/provision-database-bindings.d.ts +5 -0
  127. package/src/foundation/provision-database-bindings.js +41 -8
  128. package/src/foundation/provision-logical-database.js +15 -8
  129. package/src/foundation/requirements.d.ts +3 -3
  130. package/src/foundation/requirements.js +24 -12
  131. package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
  132. package/src/foundation/router-waf-rate-rehearsal.js +210 -0
  133. package/src/foundation/router-waf.d.ts +149 -0
  134. package/src/foundation/router-waf.js +809 -0
  135. package/src/foundation/stages.d.ts +1 -0
  136. package/src/foundation/stages.js +11 -0
  137. package/src/generators/blueprint/blueprint.d.ts +5 -0
  138. package/src/generators/blueprint/blueprint.js +102 -0
  139. package/src/generators/blueprint/files.d.ts +6 -0
  140. package/src/generators/blueprint/files.js +217 -0
  141. package/src/generators/blueprint/schema.d.ts +4 -0
  142. package/src/generators/blueprint/schema.json +18 -0
  143. package/src/generators/formatting.d.ts +8 -0
  144. package/src/generators/formatting.js +141 -0
  145. package/src/generators/function/function.js +38 -17
  146. package/src/generators/logging-registry.d.ts +2 -0
  147. package/src/generators/logging-registry.js +22 -0
  148. package/src/generators/post-generation-install.js +2 -2
  149. package/src/generators/preset/dependency-overrides.d.ts +8 -0
  150. package/src/generators/preset/dependency-overrides.js +55 -0
  151. package/src/generators/preset/generator.js +43 -3
  152. package/src/generators/preset/schema.d.ts +10 -0
  153. package/src/generators/preset/schema.json +47 -0
  154. package/src/generators/preset/tool-versions.d.ts +2 -0
  155. package/src/generators/preset/tool-versions.js +3 -1
  156. package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
  157. package/src/generators/preset/workspace-files-adopter-skills.js +303 -0
  158. package/src/generators/preset/workspace-files-ci-acceptance.d.ts +1 -0
  159. package/src/generators/preset/workspace-files-ci-acceptance.js +791 -0
  160. package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
  161. package/src/generators/preset/workspace-files-ci-install.js +196 -0
  162. package/src/generators/preset/workspace-files-developer-agent.d.ts +2 -0
  163. package/src/generators/preset/workspace-files-developer-agent.js +90 -28
  164. package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
  165. package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
  166. package/src/generators/preset/workspace-files-foundation-workload-roles.js +5 -2
  167. package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
  168. package/src/generators/preset/workspace-files-performance-cost.js +8 -8
  169. package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
  170. package/src/generators/preset/workspace-files-performance-load.js +39 -25
  171. package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
  172. package/src/generators/preset/workspace-files-stage-authority.js +518 -0
  173. package/src/generators/preset/workspace-files-thin-deploy.d.ts +55 -0
  174. package/src/generators/preset/workspace-files-thin-deploy.js +2473 -0
  175. package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
  176. package/src/generators/preset/workspace-files-thin-docs.js +352 -0
  177. package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
  178. package/src/generators/preset/workspace-files-thin-release.js +26 -0
  179. package/src/generators/preset/workspace-files-workload-role-baseline.js +254 -42
  180. package/src/generators/preset/workspace-files.d.ts +18 -2
  181. package/src/generators/preset/workspace-files.js +1504 -608
  182. package/src/generators/repository-policy/repository-policy.js +235 -5
  183. package/src/generators/repository-policy/schema.d.ts +10 -0
  184. package/src/generators/repository-policy/schema.json +80 -4
  185. package/src/generators/repository-policy/tree-policy.d.ts +3 -0
  186. package/src/generators/repository-policy/tree-policy.js +25 -0
  187. package/src/generators/slice/built-in-plan-api-contract-files.js +42 -7
  188. package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
  189. package/src/generators/slice/built-in-plan-api-files.js +130 -414
  190. package/src/generators/slice/built-in-plan-async-work-files.js +166 -1969
  191. package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
  192. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +60 -2
  193. package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
  194. package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
  195. package/src/generators/slice/built-in-plan-background-work-files.d.ts +2 -0
  196. package/src/generators/slice/built-in-plan-background-work-files.js +99 -0
  197. package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
  198. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
  199. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  200. package/src/generators/slice/built-in-plan-data-files.js +163 -1196
  201. package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
  202. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +37 -2
  203. package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2443
  204. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +50 -8
  205. package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
  206. package/src/generators/slice/built-in-plan-database-lifecycle-files.js +44 -25
  207. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +20 -1
  208. package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
  209. package/src/generators/slice/built-in-plan-foundation-files.js +39 -18
  210. package/src/generators/slice/built-in-plan-frontend-files.js +7 -3
  211. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  212. package/src/generators/slice/built-in-plan-infrastructure-files.js +933 -729
  213. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +67 -11
  214. package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
  215. package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
  216. package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
  217. package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
  218. package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
  219. package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
  220. package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
  221. package/src/generators/slice/built-in-plan-key-value-delivery.js +137 -0
  222. package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
  223. package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
  224. package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
  225. package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
  226. package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
  227. package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
  228. package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
  229. package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
  230. package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
  231. package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
  232. package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
  233. package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
  234. package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
  235. package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
  236. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
  237. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
  238. package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
  239. package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
  240. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
  241. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
  242. package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
  243. package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
  244. package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
  245. package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
  246. package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
  247. package/src/generators/slice/built-in-plan-metadata-files.js +157 -28
  248. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
  249. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +324 -0
  250. package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
  251. package/src/generators/slice/built-in-plan-operations-files.js +585 -97
  252. package/src/generators/slice/built-in-plan-performance-files.d.ts +2 -1
  253. package/src/generators/slice/built-in-plan-performance-files.js +220 -1074
  254. package/src/generators/slice/built-in-plan-project-files.js +141 -135
  255. package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
  256. package/src/generators/slice/built-in-plan-release-files.js +310 -70
  257. package/src/generators/slice/built-in-plan-reliability-files.d.ts +1 -1
  258. package/src/generators/slice/built-in-plan-reliability-files.js +279 -43
  259. package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
  260. package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
  261. package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
  262. package/src/generators/slice/built-in-plan-shared.js +41 -19
  263. package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
  264. package/src/generators/slice/built-in-plan-sql-events.js +276 -0
  265. package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
  266. package/src/generators/slice/built-in-plan-testing-files.js +304 -172
  267. package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
  268. package/src/generators/slice/built-in-plan-testing-persistence-files.js +178 -0
  269. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
  270. package/src/generators/slice/built-in-plan-thin-release-files.js +162 -0
  271. package/src/generators/slice/built-in-plan-verification-files.js +76 -2
  272. package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
  273. package/src/generators/slice/built-in-plan-web-files.js +223 -16
  274. package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
  275. package/src/generators/slice/built-in-plan-workload-role-files.js +143 -279
  276. package/src/generators/slice/built-in-plan.d.ts +11 -1
  277. package/src/generators/slice/built-in-plan.js +80 -29
  278. package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
  279. package/src/generators/slice/data-policy-review-seed.js +22 -0
  280. package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
  281. package/src/generators/slice/deployed-smoke-readiness.js +214 -0
  282. package/src/generators/slice/local-source-identity.d.ts +2 -0
  283. package/src/generators/slice/local-source-identity.js +31 -0
  284. package/src/generators/slice/persistence-contract.d.ts +14 -0
  285. package/src/generators/slice/persistence-contract.js +32 -0
  286. package/src/generators/slice/slice.js +61 -50
  287. package/src/generators/sql/schema.d.ts +7 -0
  288. package/src/generators/sql/schema.json +38 -0
  289. package/src/generators/sql/sql.d.ts +6 -0
  290. package/src/generators/sql/sql.js +53 -0
  291. package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
  292. package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
  293. package/src/generators/upgrade/upgrade.d.ts +15 -1
  294. package/src/generators/upgrade/upgrade.js +435 -44
  295. package/src/generators/workload/performance-registration.d.ts +1 -0
  296. package/src/generators/workload/performance-registration.js +9 -11
  297. package/src/generators/workload/service-performance-files.d.ts +1 -0
  298. package/src/generators/workload/service-performance-files.js +27 -7
  299. package/src/generators/workload/workload.d.ts +1 -1
  300. package/src/generators/workload/workload.js +105 -29
  301. package/src/git-policy/action-pins.d.ts +5 -0
  302. package/src/git-policy/action-pins.js +5 -0
  303. package/src/git-policy/github-bootstrap.d.ts +39 -8
  304. package/src/git-policy/github-bootstrap.js +329 -175
  305. package/src/git-policy/routing.d.ts +7 -1
  306. package/src/git-policy/routing.js +62 -1
  307. package/src/index.d.ts +1 -0
  308. package/src/index.js +1 -0
  309. package/src/infrastructure-change/local-capability.d.ts +73 -0
  310. package/src/infrastructure-change/local-capability.js +114 -0
  311. package/src/infrastructure-change/model.d.ts +25 -4
  312. package/src/infrastructure-change/model.js +1 -0
  313. package/src/infrastructure-change/normalize.d.ts +4 -0
  314. package/src/infrastructure-change/normalize.js +47 -7
  315. package/src/infrastructure-change/plan.d.ts +30 -3
  316. package/src/infrastructure-change/plan.js +323 -13
  317. package/src/infrastructure-change/risk.d.ts +3 -1
  318. package/src/infrastructure-change/risk.js +96 -16
  319. package/src/local-dev/browser-verification.d.ts +37 -0
  320. package/src/local-dev/browser-verification.js +281 -0
  321. package/src/local-dev/contracts.d.ts +10 -1
  322. package/src/local-dev/contracts.js +114 -13
  323. package/src/local-dev/dev-command-core.js +24 -5
  324. package/src/local-dev/docker-credential-health.d.ts +14 -0
  325. package/src/local-dev/docker-credential-health.js +94 -0
  326. package/src/local-dev/environment-inspector.d.ts +7 -0
  327. package/src/local-dev/environment-inspector.js +42 -15
  328. package/src/local-dev/environment-state.js +2 -2
  329. package/src/local-dev/errors.d.ts +1 -1
  330. package/src/local-dev/errors.js +2 -0
  331. package/src/local-dev/fleet-client.js +2 -2
  332. package/src/local-dev/fleet-configuration.js +57 -25
  333. package/src/local-dev/fleet-inventory.js +46 -18
  334. package/src/local-dev/fleet-ipc.d.ts +7 -0
  335. package/src/local-dev/fleet-ipc.js +14 -2
  336. package/src/local-dev/fleet-launcher.d.ts +6 -0
  337. package/src/local-dev/fleet-launcher.js +14 -2
  338. package/src/local-dev/fleet-logs.js +50 -22
  339. package/src/local-dev/fleet-process.d.ts +20 -1
  340. package/src/local-dev/fleet-process.js +197 -41
  341. package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
  342. package/src/local-dev/fleet-runner-evidence.js +56 -0
  343. package/src/local-dev/fleet-runtime.js +268 -229
  344. package/src/local-dev/fleet-session.d.ts +2 -0
  345. package/src/local-dev/fleet-session.js +28 -11
  346. package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
  347. package/src/local-dev/fleet-state.d.ts +5 -2
  348. package/src/local-dev/fleet-state.js +25 -4
  349. package/src/local-dev/fleet-supervisor.d.ts +3 -0
  350. package/src/local-dev/fleet-supervisor.js +66 -11
  351. package/src/local-dev/fleet-web-start.d.ts +12 -0
  352. package/src/local-dev/fleet-web-start.js +48 -0
  353. package/src/local-dev/identity.js +3 -14
  354. package/src/local-dev/index.d.ts +1 -0
  355. package/src/local-dev/index.js +1 -0
  356. package/src/local-dev/native-completion.d.ts +9 -0
  357. package/src/local-dev/native-completion.js +130 -0
  358. package/src/local-dev/nx-workspace.d.ts +4 -2
  359. package/src/local-dev/nx-workspace.js +11 -6
  360. package/src/local-dev/personal-stage.d.ts +4 -5
  361. package/src/local-dev/personal-stage.js +6 -54
  362. package/src/local-dev/port-claims.d.ts +13 -0
  363. package/src/local-dev/port-claims.js +46 -0
  364. package/src/local-dev/ports.d.ts +14 -2
  365. package/src/local-dev/ports.js +78 -3
  366. package/src/local-dev/private-state.d.ts +11 -0
  367. package/src/local-dev/private-state.js +146 -40
  368. package/src/local-dev/process-group.d.ts +4 -0
  369. package/src/local-dev/process-group.js +29 -0
  370. package/src/local-dev/process-identity.d.ts +8 -0
  371. package/src/local-dev/process-identity.js +31 -1
  372. package/src/local-dev/proxy.js +11 -12
  373. package/src/local-dev/runtime-paths.js +1 -1
  374. package/src/local-dev/slice-claim.js +1 -1
  375. package/src/local-dev/slice-runner.d.ts +15 -6
  376. package/src/local-dev/slice-runner.js +189 -54
  377. package/src/local-dev/task-attachment.d.ts +17 -0
  378. package/src/local-dev/task-attachment.js +73 -0
  379. package/src/local-dev/task-authority.d.ts +10 -0
  380. package/src/local-dev/task-authority.js +27 -0
  381. package/src/local-dev/task-identity.d.ts +33 -0
  382. package/src/local-dev/task-identity.js +418 -0
  383. package/src/local-dev/task-native-writer.d.ts +18 -0
  384. package/src/local-dev/task-native-writer.js +329 -0
  385. package/src/local-dev/tls.js +8 -2
  386. package/src/local-dev/web-launch.d.ts +9 -0
  387. package/src/local-dev/web-launch.js +130 -0
  388. package/src/ownership/composition.d.ts +2 -1
  389. package/src/ownership/composition.js +1 -0
  390. package/src/performance/cost-collection.d.ts +1 -1
  391. package/src/performance/cost-collection.js +4 -2
  392. package/src/performance/cost-controls.d.ts +8 -4
  393. package/src/performance/cost-controls.js +39 -28
  394. package/src/performance/evidence.d.ts +1 -1
  395. package/src/performance/evidence.js +5 -3
  396. package/src/performance/load-safety.js +5 -3
  397. package/src/performance/model.d.ts +4 -4
  398. package/src/performance/model.js +4 -5
  399. package/src/performance/scenario.d.ts +22 -0
  400. package/src/performance/scenario.js +100 -92
  401. package/src/release/index.d.ts +0 -2
  402. package/src/release/index.js +0 -2
  403. package/src/release/source-authority.d.ts +5 -5
  404. package/src/release/source-authority.js +141 -124
  405. package/src/repository-policy/aurora-preflight.d.ts +1 -1
  406. package/src/repository-policy/aurora-preflight.js +4 -1
  407. package/src/repository-policy/capacity-migration.d.ts +3 -0
  408. package/src/repository-policy/capacity-migration.js +21 -0
  409. package/src/repository-policy/deployment-plan.d.ts +4 -1
  410. package/src/repository-policy/deployment-plan.js +9 -0
  411. package/src/repository-policy/foundation-profile.js +10 -1
  412. package/src/repository-policy/policy.d.ts +57 -3
  413. package/src/repository-policy/policy.js +497 -11
  414. package/src/schemas/blueprint-v1.json +5 -4
  415. package/src/schemas/foundation-requirement-v1.json +5 -4
  416. package/src/schemas/performance-policy-v1.json +3 -3
  417. package/src/schemas/repository-policy-v1.json +130 -6
  418. package/src/schemas/testing-evidence-result-v1.json +1 -1
  419. package/src/secrets/adapters.d.ts +7 -2
  420. package/src/secrets/adapters.js +34 -3
  421. package/src/secrets/aws-control-plane.d.ts +10 -1
  422. package/src/secrets/aws-control-plane.js +67 -0
  423. package/src/secrets/generated-aws-control-plane.d.ts +23 -0
  424. package/src/secrets/generated-aws-control-plane.js +259 -0
  425. package/src/secrets/metadata.js +38 -10
  426. package/src/secrets/model.d.ts +8 -1
  427. package/src/secrets/model.js +24 -3
  428. package/src/secrets/operator.d.ts +91 -3
  429. package/src/secrets/operator.js +463 -13
  430. package/src/secrets/registry.d.ts +2 -1
  431. package/src/secrets/registry.js +18 -1
  432. package/src/secrets/verification.js +9 -1
  433. package/src/secrets/workload-access.js +10 -2
  434. package/src/sst-environment-source-format.d.ts +6 -0
  435. package/src/sst-environment-source-format.js +199 -0
  436. package/src/supply-chain/action-pins.js +61 -7
  437. package/src/supply-chain/blueprint-trust-git.js +85 -24
  438. package/src/supply-chain/blueprint-verification-authority.js +55 -3
  439. package/src/supply-chain/build-output-bounds.d.ts +2 -0
  440. package/src/supply-chain/build-output-bounds.js +12 -0
  441. package/src/supply-chain/build-output.d.ts +7 -1
  442. package/src/supply-chain/build-output.js +177 -24
  443. package/src/supply-chain/ecr-scanning.d.ts +5 -3
  444. package/src/supply-chain/ecr-scanning.js +11 -7
  445. package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
  446. package/src/supply-chain/ecs-deployed-image.js +6 -4
  447. package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
  448. package/src/supply-chain/generated-command.js +1 -0
  449. package/src/supply-chain/generated-container-release-command.js +1285 -124
  450. package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
  451. package/src/supply-chain/generated-ecr-collector-command.js +200 -93
  452. package/src/supply-chain/generated-files.js +25 -14
  453. package/src/supply-chain/generated-scanner-command.js +2 -1
  454. package/src/supply-chain/index.d.ts +1 -1
  455. package/src/supply-chain/index.js +2 -1
  456. package/src/supply-chain/sbom.d.ts +1 -1
  457. package/src/supply-chain/sbom.js +30 -5
  458. package/src/supply-chain/scanner.js +3 -0
  459. package/src/testing-evidence/fixture-scope.d.ts +2 -1
  460. package/src/testing-evidence/fixture-scope.js +4 -2
  461. package/src/testing-evidence/result.d.ts +2 -1
  462. package/src/testing-evidence/result.js +18 -4
  463. package/src/workload-roles/account-baseline.d.ts +11 -0
  464. package/src/workload-roles/account-baseline.js +253 -16
  465. package/src/workload-roles/authority.d.ts +3 -1
  466. package/src/workload-roles/authority.js +48 -2
  467. package/src/workload-roles/aws-s3-state.js +27 -0
  468. package/src/workload-roles/boundary.d.ts +2 -1
  469. package/src/workload-roles/boundary.js +9 -2
  470. package/src/workload-roles/handler.js +52 -24
  471. package/src/workload-roles/index.d.ts +10 -17
  472. package/src/workload-roles/index.js +5 -18
  473. package/src/workload-roles/injection.js +1 -1
  474. package/src/workload-roles/provisioner.js +12 -4
  475. package/src/workload-roles/registration.d.ts +1 -0
  476. package/src/workload-roles/registration.js +5 -0
  477. package/src/workload-roles/stage-boundary.js +1 -1
  478. package/src/workload-roles/standard-slice.js +3 -3
  479. package/src/workspace-deployment/affected-lifecycle.d.ts +53 -0
  480. package/src/workspace-deployment/affected-lifecycle.js +84 -0
  481. package/src/workspace-deployment/identity.d.ts +3 -0
  482. package/src/workspace-deployment/identity.js +22 -0
  483. package/src/workspace-deployment/index.d.ts +4 -0
  484. package/src/workspace-deployment/index.js +8 -0
  485. package/src/workspace-deployment/migration-evidence.d.ts +29 -0
  486. package/src/workspace-deployment/migration-evidence.js +83 -0
  487. package/src/workspace-deployment/migration.d.ts +27 -0
  488. package/src/workspace-deployment/migration.js +109 -0
  489. package/src/workspace-deployment/ownership.d.ts +81 -0
  490. package/src/workspace-deployment/ownership.js +381 -0
  491. package/src/api-contract/baseline-update.js.map +0 -1
  492. package/src/api-contract/compatibility.js.map +0 -1
  493. package/src/api-contract/contract-graph.js.map +0 -1
  494. package/src/api-contract/evidence.js.map +0 -1
  495. package/src/api-contract/index.js.map +0 -1
  496. package/src/api-contract/model.fixtures.d.ts +0 -2
  497. package/src/api-contract/model.fixtures.js +0 -81
  498. package/src/api-contract/model.fixtures.js.map +0 -1
  499. package/src/api-contract/model.js.map +0 -1
  500. package/src/api-contract/rollout.js.map +0 -1
  501. package/src/authorization/compatibility.js.map +0 -1
  502. package/src/authorization/index.js.map +0 -1
  503. package/src/blueprints/execution.js.map +0 -1
  504. package/src/blueprints/external-sandbox.js.map +0 -1
  505. package/src/blueprints/index.js.map +0 -1
  506. package/src/blueprints/inputs.js.map +0 -1
  507. package/src/blueprints/manifest.js.map +0 -1
  508. package/src/blueprints/resolver.js.map +0 -1
  509. package/src/blueprints/transitions.js.map +0 -1
  510. package/src/cli/agent-command.js.map +0 -1
  511. package/src/cli/agent-runtime.js.map +0 -1
  512. package/src/cli/blueprint-authority.js.map +0 -1
  513. package/src/cli/blueprint-command.js.map +0 -1
  514. package/src/cli/bootstrap.js.map +0 -1
  515. package/src/cli/dev-command.js.map +0 -1
  516. package/src/cli/main.js.map +0 -1
  517. package/src/cli/output.js.map +0 -1
  518. package/src/cli/personal-secret-runtime.js.map +0 -1
  519. package/src/cli/secret-terminal.js.map +0 -1
  520. package/src/container-images.js.map +0 -1
  521. package/src/data-lifecycle/index.js.map +0 -1
  522. package/src/data-lifecycle/model.fixtures.d.ts +0 -2
  523. package/src/data-lifecycle/model.fixtures.js +0 -244
  524. package/src/data-lifecycle/model.fixtures.js.map +0 -1
  525. package/src/data-lifecycle/model.js.map +0 -1
  526. package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
  527. package/src/data-lifecycle/validation.js.map +0 -1
  528. package/src/database-retirement/contract.js.map +0 -1
  529. package/src/database-retirement/index.js.map +0 -1
  530. package/src/deterministic-order.js.map +0 -1
  531. package/src/developer-agent/context.js.map +0 -1
  532. package/src/developer-agent/generator-planning.js.map +0 -1
  533. package/src/developer-agent/generator-preview.js.map +0 -1
  534. package/src/developer-agent/git-inspection.js.map +0 -1
  535. package/src/developer-agent/handoff.js.map +0 -1
  536. package/src/developer-agent/index.js.map +0 -1
  537. package/src/developer-agent/model.js.map +0 -1
  538. package/src/developer-agent/operation-registry.js.map +0 -1
  539. package/src/developer-agent/ordering.js.map +0 -1
  540. package/src/developer-agent/planning.js.map +0 -1
  541. package/src/developer-agent/preview-changes.js.map +0 -1
  542. package/src/developer-agent/preview-source.js.map +0 -1
  543. package/src/developer-agent/validation.js.map +0 -1
  544. package/src/developer-agent/workspace-inspection.js.map +0 -1
  545. package/src/developer-agent/workspace-path.js.map +0 -1
  546. package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
  547. package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
  548. package/src/executors/deploy/deploy.js.map +0 -1
  549. package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
  550. package/src/executors/dev/dev.js.map +0 -1
  551. package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
  552. package/src/executors/dev-setup/dev-setup.js.map +0 -1
  553. package/src/executors/developer-context/developer-context.js.map +0 -1
  554. package/src/executors/fleet/fleet.js.map +0 -1
  555. package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
  556. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
  557. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
  558. package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
  559. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
  560. package/src/executors/refresh/refresh.js.map +0 -1
  561. package/src/executors/remove/remove.js.map +0 -1
  562. package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
  563. package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
  564. package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
  565. package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
  566. package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
  567. package/src/executors/unlock/unlock.js.map +0 -1
  568. package/src/executors/work-markers/work-markers.js.map +0 -1
  569. package/src/foundation/discovery.js.map +0 -1
  570. package/src/foundation/index.js.map +0 -1
  571. package/src/foundation/local-database-contract.js.map +0 -1
  572. package/src/foundation/logging-preflight.js.map +0 -1
  573. package/src/foundation/logging.js.map +0 -1
  574. package/src/foundation/preflight.js.map +0 -1
  575. package/src/foundation/provision-database-bindings.js.map +0 -1
  576. package/src/foundation/provision-logical-database.js.map +0 -1
  577. package/src/foundation/requirements.js.map +0 -1
  578. package/src/foundation/router-origin-proof.js.map +0 -1
  579. package/src/foundation/stages.js.map +0 -1
  580. package/src/frontend-security/index.js.map +0 -1
  581. package/src/frontend-security/security-headers.js.map +0 -1
  582. package/src/generators/feature-registry.js.map +0 -1
  583. package/src/generators/function/function.js.map +0 -1
  584. package/src/generators/job/job.js.map +0 -1
  585. package/src/generators/logging-registry.js.map +0 -1
  586. package/src/generators/post-generation-install.js.map +0 -1
  587. package/src/generators/preset/generator.js.map +0 -1
  588. package/src/generators/preset/tool-versions.js.map +0 -1
  589. package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
  590. package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
  591. package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
  592. package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
  593. package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
  594. package/src/generators/preset/workspace-files.js.map +0 -1
  595. package/src/generators/repository-policy/repository-policy.js.map +0 -1
  596. package/src/generators/service/service.js.map +0 -1
  597. package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
  598. package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
  599. package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
  600. package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
  601. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
  602. package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
  603. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
  604. package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
  605. package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
  606. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
  607. package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
  608. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
  609. package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
  610. package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
  611. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
  612. package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
  613. package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
  614. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
  615. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
  616. package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
  617. package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
  618. package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
  619. package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
  620. package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
  621. package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
  622. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
  623. package/src/generators/slice/built-in-plan-shared.js.map +0 -1
  624. package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
  625. package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
  626. package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
  627. package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
  628. package/src/generators/slice/built-in-plan.js.map +0 -1
  629. package/src/generators/slice/slice.js.map +0 -1
  630. package/src/generators/upgrade/upgrade.js.map +0 -1
  631. package/src/generators/workload/frozen-container.js.map +0 -1
  632. package/src/generators/workload/performance-registration.js.map +0 -1
  633. package/src/generators/workload/reliability-registration.js.map +0 -1
  634. package/src/generators/workload/service-performance-files.js.map +0 -1
  635. package/src/generators/workload/workload.js.map +0 -1
  636. package/src/git-policy/action-pins.js.map +0 -1
  637. package/src/git-policy/github-bootstrap.js.map +0 -1
  638. package/src/git-policy/index.js.map +0 -1
  639. package/src/git-policy/routing.js.map +0 -1
  640. package/src/index.js.map +0 -1
  641. package/src/infrastructure-change/convergence.js.map +0 -1
  642. package/src/infrastructure-change/drift.js.map +0 -1
  643. package/src/infrastructure-change/index.js.map +0 -1
  644. package/src/infrastructure-change/model.js.map +0 -1
  645. package/src/infrastructure-change/normalize.js.map +0 -1
  646. package/src/infrastructure-change/plan.js.map +0 -1
  647. package/src/infrastructure-change/risk.js.map +0 -1
  648. package/src/infrastructure-change/summary.js.map +0 -1
  649. package/src/local-dev/context-discovery.js.map +0 -1
  650. package/src/local-dev/contract-validation.js.map +0 -1
  651. package/src/local-dev/contracts.js.map +0 -1
  652. package/src/local-dev/control-contract.js.map +0 -1
  653. package/src/local-dev/dev-command-core.js.map +0 -1
  654. package/src/local-dev/effects.js.map +0 -1
  655. package/src/local-dev/environment-inspector.js.map +0 -1
  656. package/src/local-dev/environment-state.js.map +0 -1
  657. package/src/local-dev/errors.js.map +0 -1
  658. package/src/local-dev/fleet-client.js.map +0 -1
  659. package/src/local-dev/fleet-configuration.js.map +0 -1
  660. package/src/local-dev/fleet-inventory.js.map +0 -1
  661. package/src/local-dev/fleet-ipc.js.map +0 -1
  662. package/src/local-dev/fleet-launcher.js.map +0 -1
  663. package/src/local-dev/fleet-lock.js.map +0 -1
  664. package/src/local-dev/fleet-logs.js.map +0 -1
  665. package/src/local-dev/fleet-process.js.map +0 -1
  666. package/src/local-dev/fleet-runtime.js.map +0 -1
  667. package/src/local-dev/fleet-session.js.map +0 -1
  668. package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
  669. package/src/local-dev/fleet-startup.js.map +0 -1
  670. package/src/local-dev/fleet-state.js.map +0 -1
  671. package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
  672. package/src/local-dev/fleet-supervisor.js.map +0 -1
  673. package/src/local-dev/gateway-daemon.js.map +0 -1
  674. package/src/local-dev/gateway.js.map +0 -1
  675. package/src/local-dev/identity.js.map +0 -1
  676. package/src/local-dev/index.js.map +0 -1
  677. package/src/local-dev/local-context.js.map +0 -1
  678. package/src/local-dev/nx-workspace.js.map +0 -1
  679. package/src/local-dev/personal-secret-ledger.js.map +0 -1
  680. package/src/local-dev/personal-stage.js.map +0 -1
  681. package/src/local-dev/portless.js.map +0 -1
  682. package/src/local-dev/ports.js.map +0 -1
  683. package/src/local-dev/private-state.js.map +0 -1
  684. package/src/local-dev/process-identity.js.map +0 -1
  685. package/src/local-dev/proxy.js.map +0 -1
  686. package/src/local-dev/runtime-paths.js.map +0 -1
  687. package/src/local-dev/secret-slice-claim.js.map +0 -1
  688. package/src/local-dev/slice-claim.js.map +0 -1
  689. package/src/local-dev/slice-runner.js.map +0 -1
  690. package/src/local-dev/tls.js.map +0 -1
  691. package/src/ownership/composition.js.map +0 -1
  692. package/src/ownership/foundation-record.js.map +0 -1
  693. package/src/ownership/hash.js.map +0 -1
  694. package/src/ownership/index.js.map +0 -1
  695. package/src/ownership/json-ownership.js.map +0 -1
  696. package/src/ownership/record.js.map +0 -1
  697. package/src/ownership/workspace-record.js.map +0 -1
  698. package/src/performance/cost-collection.js.map +0 -1
  699. package/src/performance/cost-controls.js.map +0 -1
  700. package/src/performance/evidence.js.map +0 -1
  701. package/src/performance/index.js.map +0 -1
  702. package/src/performance/load-safety.js.map +0 -1
  703. package/src/performance/model.js.map +0 -1
  704. package/src/performance/pr-artifact-budget.js.map +0 -1
  705. package/src/performance/runner.js.map +0 -1
  706. package/src/performance/scenario-endpoint.js.map +0 -1
  707. package/src/performance/scenario.js.map +0 -1
  708. package/src/performance/test-fixtures.d.ts +0 -7
  709. package/src/performance/test-fixtures.js +0 -169
  710. package/src/performance/test-fixtures.js.map +0 -1
  711. package/src/performance/unit-cost.js.map +0 -1
  712. package/src/release/index.js.map +0 -1
  713. package/src/release/lifecycle.js.map +0 -1
  714. package/src/release/manifest.js.map +0 -1
  715. package/src/release/rollout.js.map +0 -1
  716. package/src/release/source-authority.js.map +0 -1
  717. package/src/repository-policy/aurora-preflight.js.map +0 -1
  718. package/src/repository-policy/deployment-plan.js.map +0 -1
  719. package/src/repository-policy/foundation-profile.js.map +0 -1
  720. package/src/repository-policy/index.js.map +0 -1
  721. package/src/repository-policy/policy.js.map +0 -1
  722. package/src/secrets/adapters.js.map +0 -1
  723. package/src/secrets/aws-control-plane.js.map +0 -1
  724. package/src/secrets/declaration-verification.js.map +0 -1
  725. package/src/secrets/guardrails.js.map +0 -1
  726. package/src/secrets/index.js.map +0 -1
  727. package/src/secrets/metadata.js.map +0 -1
  728. package/src/secrets/model.js.map +0 -1
  729. package/src/secrets/operator.js.map +0 -1
  730. package/src/secrets/permissions.js.map +0 -1
  731. package/src/secrets/personal-command.js.map +0 -1
  732. package/src/secrets/personal-ledger.js.map +0 -1
  733. package/src/secrets/registry.js.map +0 -1
  734. package/src/secrets/verification.js.map +0 -1
  735. package/src/secrets/workload-access.js.map +0 -1
  736. package/src/supply-chain/action-pins.js.map +0 -1
  737. package/src/supply-chain/blueprint-trust-git.js.map +0 -1
  738. package/src/supply-chain/blueprint-trust-process.js.map +0 -1
  739. package/src/supply-chain/blueprint-trust.js.map +0 -1
  740. package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
  741. package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
  742. package/src/supply-chain/build-output.js.map +0 -1
  743. package/src/supply-chain/common.js.map +0 -1
  744. package/src/supply-chain/container-artifact-contract.js.map +0 -1
  745. package/src/supply-chain/container-release.js.map +0 -1
  746. package/src/supply-chain/ecr-applicability.js.map +0 -1
  747. package/src/supply-chain/ecr-scanning.js.map +0 -1
  748. package/src/supply-chain/ecs-deployed-image.js.map +0 -1
  749. package/src/supply-chain/errors.js.map +0 -1
  750. package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
  751. package/src/supply-chain/generated-command.js.map +0 -1
  752. package/src/supply-chain/generated-container-release-command.js.map +0 -1
  753. package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
  754. package/src/supply-chain/generated-files.js.map +0 -1
  755. package/src/supply-chain/generated-scanner-command.js.map +0 -1
  756. package/src/supply-chain/index.js.map +0 -1
  757. package/src/supply-chain/inventory.js.map +0 -1
  758. package/src/supply-chain/license-expression.js.map +0 -1
  759. package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
  760. package/src/supply-chain/policy.js.map +0 -1
  761. package/src/supply-chain/publication.js.map +0 -1
  762. package/src/supply-chain/sbom.js.map +0 -1
  763. package/src/supply-chain/scanner.js.map +0 -1
  764. package/src/supply-chain/vendored-source.js.map +0 -1
  765. package/src/testing-evidence/fixture-scope.js.map +0 -1
  766. package/src/testing-evidence/index.js.map +0 -1
  767. package/src/testing-evidence/quarantine.js.map +0 -1
  768. package/src/testing-evidence/result.js.map +0 -1
  769. package/src/testing-evidence/runner-adapter.js.map +0 -1
  770. package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
  771. package/src/validation.js.map +0 -1
  772. package/src/work-markers/index.js.map +0 -1
  773. package/src/work-markers/work-markers.js.map +0 -1
  774. package/src/workload-roles/account-baseline.js.map +0 -1
  775. package/src/workload-roles/authority.js.map +0 -1
  776. package/src/workload-roles/aws-adapter.js.map +0 -1
  777. package/src/workload-roles/aws-internal-handler.js.map +0 -1
  778. package/src/workload-roles/aws-s3-state.js.map +0 -1
  779. package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
  780. package/src/workload-roles/boundary.js.map +0 -1
  781. package/src/workload-roles/convergence.js.map +0 -1
  782. package/src/workload-roles/effective-policy.js.map +0 -1
  783. package/src/workload-roles/handler.js.map +0 -1
  784. package/src/workload-roles/history.js.map +0 -1
  785. package/src/workload-roles/index.js.map +0 -1
  786. package/src/workload-roles/injection.js.map +0 -1
  787. package/src/workload-roles/manifest.js.map +0 -1
  788. package/src/workload-roles/provisioner.js.map +0 -1
  789. package/src/workload-roles/registration.js.map +0 -1
  790. package/src/workload-roles/stage-boundary.js.map +0 -1
  791. 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`,
565
- owner: name,
566
- requiredStages: ['staging', 'production'],
567
- rotation: { mode: 'manual' },
568
- source: 'operator',
569
- valueKind: 'json',
570
- },
571
- {
572
- logicalName: `${pascalName}PrimaryDatabaseCredential`,
195
+ generation: { kind: 'hmac-key-ring-v1' },
196
+ logicalName: 'GeneratedPerformanceLoadHmacKeys',
573
197
  owner: name,
574
- requiredStages: ['development', 'staging', 'production'],
198
+ requiredStages: protectedRuntimeStages,
575
199
  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:
258
+
259
+ \`\`\`bash
260
+ pnpm nx run ${name}:secret-initialize -- --logicalName=GeneratedPerformanceLoadHmacKeys --stage=<required-stage> --profile=<profile> --region=<region> --expectedRoleArn=<role-arn> --apply
261
+ \`\`\`
607
262
 
608
- Only a human at a local interactive terminal may set or remove an
609
- operator-declared personal value:
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
+ Only a human at a local interactive terminal may set or remove a
296
+ human-supplied operator-declared personal value:
610
297
 
611
298
  \`\`\`bash
612
299
  ebk secret set ${name} <logical-name>
@@ -623,7 +310,9 @@ to invoke either command.
623
310
 
624
311
  ## Development metadata
625
312
 
626
- Report first, using the exact development account profile and Region:
313
+ This target is only for human-supplied operator declarations. It never creates
314
+ or updates a generated declaration. Report first, using the exact development
315
+ account profile and Region:
627
316
 
628
317
  \`\`\`bash
629
318
  pnpm nx run ${name}:secret-metadata --stage=development --profile=<profile> --region=<region>
@@ -635,272 +324,52 @@ write a secret version, change a rotation label, or delete a secret.
635
324
 
636
325
  ## Protected metadata
637
326
 
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.
327
+ This workflow is only for human-supplied operator declarations. Run the
328
+ **Secret metadata** GitHub workflow from \`develop\` for staging or
329
+ \`main\` for production when the deployment profile requires protected GitHub
330
+ authority. Select this exact Slice and choose \`report\` first. After review,
331
+ dispatch \`apply\` from the same protected branch and environment. The workflow
332
+ assumes the protected deploy role through OIDC, verifies the expected AWS
333
+ account, and invokes the same value-blind Nx executor.
334
+
335
+ Profiles that admit local deployment may apply the reviewed empty-container
336
+ metadata with the same temporary federated profile and stage deployment role:
337
+
338
+ \`\`\`bash
339
+ pnpm nx run ${name}:secret-metadata -- --stage=<staging-or-production> --profile=<profile> --region=<region> --expectedRoleArn=<role-arn> --apply
340
+ \`\`\`
341
+
342
+ The local path binds the committed deployment profile, account, Region, and
343
+ exact assumed role. It does not permit a secret value. Never add an application
344
+ value to GitHub secrets, workflow input, argv, or agent-visible material.
644
345
 
645
- The protected deploy role needs metadata-only authority for the Slice prefix:
346
+ The protected deploy role needs metadata authority for the Slice prefix:
646
347
  \`ListSecrets\`, \`DescribeSecret\`, \`CreateSecret\`, and \`TagResource\`.
647
348
  It must be denied \`BatchGetSecretValue\`, \`GetSecretValue\`,
648
- \`PutSecretValue\`, \`UpdateSecretVersionStage\`, \`DeleteSecret\`, and
649
- application deployment outside its separately reviewed deploy policy.
349
+ \`PutSecretValue\`, \`UpdateSecret\`, \`UpdateSecretVersionStage\`,
350
+ and application deployment outside its separately reviewed deploy policy.
351
+ \`DeleteSecret\` is used only by the governed generated-secret retirement path
352
+ after native Slice removal succeeds; the executor binds that call to the exact
353
+ generated HMAC name and ownership tags described above.
650
354
  Account-level role materialization remains an adopter responsibility.
651
355
 
652
- ## Value ceremony
356
+ ## Human-supplied value ceremony
653
357
 
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.
358
+ After an empty human-supplied container exists, a human secret operator enters
359
+ or rotates the value through the approved hidden-input or provider-owned
360
+ ceremony. Do not delegate that human-supplied ceremony to an agent and do not
361
+ pass a value through argv, source, a file, a ticket, a work marker, GitHub,
362
+ logs, or evidence. Routine operator authority is write-only for exact approved
363
+ paths and has no application or Foundation deployment authority. Value reads
364
+ require a separate audited break-glass path. Machine-generated declarations
365
+ instead use \`secret-initialize\`; they never accept a human value.
661
366
 
662
367
  Run the report again and then deploy. Deployment performs only a read-only
663
368
  metadata preflight and refuses before SST mutation when a required container,
664
369
  \`AWSCURRENT\`, ownership tag, or rotation policy is invalid. Remove, unlock,
665
370
  retirement, and recovery do not depend on this preflight.
666
371
  `,
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" (
372
+ 'database/migrations/0000_initial.sql': `CREATE TABLE IF NOT EXISTS "data_lifecycle_outbox" (
904
373
  "idempotency_key" text PRIMARY KEY,
905
374
  "event_json" jsonb NOT NULL,
906
375
  "published_at" timestamptz,
@@ -909,113 +378,6 @@ CREATE TABLE IF NOT EXISTS "data_lifecycle_outbox" (
909
378
  "expires_at" timestamptz NOT NULL,
910
379
  "created_at" timestamptz NOT NULL DEFAULT now()
911
380
  );
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
381
  `,
1020
382
  'database/migrations/meta/_journal.json': (0, built_in_plan_shared_js_1.json)({
1021
383
  dialect: 'postgresql',
@@ -1036,222 +398,8 @@ CREATE TABLE IF NOT EXISTS "data_lifecycle_downstream_copies" (
1036
398
  version: '7',
1037
399
  dialect: 'postgresql',
1038
400
  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
401
  'public.data_lifecycle_outbox': snapshotTable('data_lifecycle_outbox', {
1254
- attempts: snapshotColumn('attempts', 'integer', { default: '0' }),
402
+ attempts: snapshotColumn('attempts', 'integer', { default: 0 }),
1255
403
  created_at: snapshotColumn('created_at', 'timestamp with time zone', {
1256
404
  default: 'now()',
1257
405
  }),
@@ -1265,213 +413,6 @@ CREATE TABLE IF NOT EXISTS "data_lifecycle_downstream_copies" (
1265
413
  }),
1266
414
  published_at: snapshotColumn('published_at', 'timestamp with time zone', { notNull: false }),
1267
415
  }),
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
416
  },
1476
417
  enums: {},
1477
418
  schemas: {},
@@ -1491,15 +432,20 @@ const plan = createDatabaseBindingPlan(databaseBindings, {
1491
432
  });
1492
433
  const activeDatabase = plan.active.primary;
1493
434
  if (!activeDatabase) throw new Error('Database binding "primary" is required.');
1494
- const localDatabase = resolveLocalDatabaseContract({
435
+ // Schema-only commands stay offline; connection commands require the owned allocation.
436
+ const schemaOnly = process.argv[2] === 'generate' || process.argv[2] === 'check';
437
+ const localDatabase = schemaOnly || process.env.DATABASE_URL ? undefined : resolveLocalDatabaseContract({
1495
438
  database: activeDatabase,
1496
439
  slice: '${name}',
1497
440
  });
441
+ const databaseUrl = process.env.DATABASE_URL ?? (localDatabase
442
+ ? \`postgresql://\${encodeURIComponent(localDatabase.username)}:\${encodeURIComponent(localDatabase.password)}@\${localDatabase.host}:\${localDatabase.port}/\${localDatabase.database}\`
443
+ : undefined);
1498
444
 
1499
445
  export default defineConfig({
1500
- dbCredentials: {
1501
- url: process.env.DATABASE_URL ?? \`postgresql://\${localDatabase.username}:\${localDatabase.password}@\${localDatabase.host}:\${localDatabase.port}/\${localDatabase.database}\`,
1502
- },
446
+ ...(!schemaOnly && databaseUrl ? {
447
+ dbCredentials: { url: databaseUrl },
448
+ } : {}),
1503
449
  dialect: 'postgresql',
1504
450
  out: './database/migrations',
1505
451
  schema: './database/schema.ts',
@@ -1508,6 +454,11 @@ export default defineConfig({
1508
454
  'database/docker-compose.yml': `services:
1509
455
  database:
1510
456
  image: postgres:17-alpine
457
+ container_name: \${EBK_LOCAL_DATABASE_PROJECT}-database
458
+ labels:
459
+ dev.ebk.task: \${EBK_LOCAL_DATABASE_TASK}
460
+ dev.ebk.slice: \${EBK_LOCAL_DATABASE_SLICE}
461
+ dev.ebk.database: \${EBK_LOCAL_DATABASE_LOGICAL}
1511
462
  environment:
1512
463
  POSTGRES_DB: \${EBK_LOCAL_DATABASE}
1513
464
  POSTGRES_PASSWORD: \${EBK_LOCAL_DATABASE_PASSWORD}
@@ -1518,13 +469,29 @@ export default defineConfig({
1518
469
  timeout: 3s
1519
470
  retries: 15
1520
471
  ports:
1521
- - '\${EBK_LOCAL_DATABASE_PORT}:5432'
472
+ - '127.0.0.1:\${EBK_LOCAL_DATABASE_PORT}:5432'
1522
473
  volumes:
1523
474
  - database-data:/var/lib/postgresql/data
1524
475
 
1525
476
  volumes:
1526
477
  database-data:
478
+ name: \${EBK_LOCAL_DATABASE_PROJECT}-data
479
+ labels:
480
+ dev.ebk.task: \${EBK_LOCAL_DATABASE_TASK}
481
+ dev.ebk.slice: \${EBK_LOCAL_DATABASE_SLICE}
482
+ dev.ebk.database: \${EBK_LOCAL_DATABASE_LOGICAL}
483
+
484
+ networks:
485
+ default:
486
+ name: \${EBK_LOCAL_DATABASE_PROJECT}-network
487
+ labels:
488
+ dev.ebk.task: \${EBK_LOCAL_DATABASE_TASK}
489
+ dev.ebk.slice: \${EBK_LOCAL_DATABASE_SLICE}
490
+ dev.ebk.database: \${EBK_LOCAL_DATABASE_LOGICAL}
1527
491
  `,
1528
492
  };
493
+ return Object.fromEntries(Object.entries(files).filter(([path]) => sql ||
494
+ (!path.startsWith('database/') &&
495
+ path !== 'docs/runbooks/database-credential-rotation.md')));
1529
496
  }
1530
497
  //# sourceMappingURL=built-in-plan-data-files.js.map