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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (805) hide show
  1. package/README.md +44 -10
  2. package/executors.json +21 -1
  3. package/generators.json +10 -0
  4. package/package.json +31 -7
  5. package/src/aws/child-environment.d.ts +10 -0
  6. package/src/aws/child-environment.js +77 -0
  7. package/src/aws/identity.d.ts +13 -0
  8. package/src/aws/identity.js +41 -0
  9. package/src/aws-authority/index.d.ts +2 -0
  10. package/src/aws-authority/index.js +6 -0
  11. package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
  12. package/src/aws-authority/lambda-policy-ordering.js +56 -0
  13. package/src/aws-authority/stage-authority.d.ts +248 -0
  14. package/src/aws-authority/stage-authority.js +3558 -0
  15. package/src/blueprints/external-sandbox.d.ts +1 -1
  16. package/src/blueprints/external-sandbox.js +21 -9
  17. package/src/blueprints/manifest.d.ts +1 -1
  18. package/src/blueprints/resolver.js +28 -15
  19. package/src/cli/bootstrap.d.ts +1 -1
  20. package/src/cli/deploy-runtime.d.ts +30 -0
  21. package/src/cli/deploy-runtime.js +174 -0
  22. package/src/cli/dev-command.d.ts +18 -4
  23. package/src/cli/dev-command.js +71 -0
  24. package/src/cli/main.d.ts +9 -1
  25. package/src/cli/main.js +157 -24
  26. package/src/cli/output.d.ts +1 -1
  27. package/src/cli/output.js +1 -1
  28. package/src/cli/personal-secret-runtime.d.ts +12 -0
  29. package/src/cli/personal-secret-runtime.js +18 -3
  30. package/src/cli/secret-terminal.js +1 -1
  31. package/src/container-images.d.ts +1 -1
  32. package/src/container-images.js +1 -1
  33. package/src/developer-agent/context.js +41 -9
  34. package/src/developer-agent/generator-planning.js +20 -6
  35. package/src/developer-agent/git-inspection.d.ts +6 -2
  36. package/src/developer-agent/git-inspection.js +78 -6
  37. package/src/developer-agent/model.d.ts +5 -3
  38. package/src/developer-agent/model.js +4 -4
  39. package/src/developer-agent/operation-registry.d.ts +15 -0
  40. package/src/developer-agent/operation-registry.js +342 -49
  41. package/src/developer-agent/planning.d.ts +8 -1
  42. package/src/developer-agent/planning.js +39 -16
  43. package/src/developer-agent/preview-changes.d.ts +2 -0
  44. package/src/developer-agent/preview-changes.js +14 -2
  45. package/src/developer-agent/preview-source.js +3 -0
  46. package/src/developer-agent/validation.js +25 -9
  47. package/src/developer-agent/workspace-inspection.js +60 -5
  48. package/src/executors/blueprint-trust/blueprint-trust.js +6 -0
  49. package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
  50. package/src/executors/deployment-plan/deployment-plan.js +57 -2
  51. package/src/executors/dev-doctor/dev-doctor.js +13 -6
  52. package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
  53. package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
  54. package/src/executors/dev-task-cleanup/schema.json +9 -0
  55. package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
  56. package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
  57. package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
  58. package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
  59. package/src/executors/fleet/fleet.js +1 -1
  60. package/src/executors/foundation-preflight/foundation-preflight.d.ts +1 -0
  61. package/src/executors/foundation-preflight/foundation-preflight.js +6 -2
  62. package/src/executors/foundation-preflight/schema.json +5 -0
  63. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +13 -2
  64. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -31
  65. package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +65 -0
  66. package/src/executors/foundation-profile-preflight/production-database-safeguard.js +223 -0
  67. package/src/executors/foundation-profile-preflight/schema.json +15 -4
  68. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
  69. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +70 -20
  70. package/src/executors/foundation-remove-preflight/schema.json +6 -1
  71. package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
  72. package/src/executors/github-bootstrap/github-bootstrap.js +3 -0
  73. package/src/executors/github-bootstrap/schema.json +7 -1
  74. package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +29 -136
  75. package/src/executors/infrastructure-plan/infrastructure-plan.js +230 -3282
  76. package/src/executors/infrastructure-plan/schema.json +12 -52
  77. package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
  78. package/src/executors/local-deploy/federated-credential-transport.js +252 -0
  79. package/src/executors/local-deploy/local-approval.d.ts +18 -0
  80. package/src/executors/local-deploy/local-approval.js +39 -0
  81. package/src/executors/local-deploy/local-deploy.d.ts +112 -0
  82. package/src/executors/local-deploy/local-deploy.js +1404 -0
  83. package/src/executors/local-deploy/schema.json +70 -0
  84. package/src/executors/refresh/refresh.js +2 -2
  85. package/src/executors/remove/remove.js +2 -2
  86. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +42 -0
  87. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +1229 -0
  88. package/src/executors/router-waf-rehearsal/schema.json +29 -0
  89. package/src/executors/secret-initialize/schema.json +42 -0
  90. package/src/executors/secret-initialize/secret-initialize.d.ts +34 -0
  91. package/src/executors/secret-initialize/secret-initialize.js +297 -0
  92. package/src/executors/secret-metadata/schema.json +5 -0
  93. package/src/executors/secret-metadata/secret-metadata.d.ts +16 -2
  94. package/src/executors/secret-metadata/secret-metadata.js +129 -30
  95. package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
  96. package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
  97. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +48 -0
  98. package/src/executors/sst-lifecycle/governed-native-operation.js +163 -0
  99. package/src/executors/sst-lifecycle/logging-preflight.d.ts +5 -0
  100. package/src/executors/sst-lifecycle/logging-preflight.js +23 -13
  101. package/src/executors/sst-lifecycle/run-sst-command.d.ts +46 -6
  102. package/src/executors/sst-lifecycle/run-sst-command.js +750 -71
  103. package/src/executors/sst-lifecycle/schema.json +8 -1
  104. package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
  105. package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
  106. package/src/executors/sst-lifecycle/sst-environment-source.d.ts +33 -0
  107. package/src/executors/sst-lifecycle/sst-environment-source.js +267 -0
  108. package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
  109. package/src/executors/sst-lifecycle/task-unlock.js +126 -0
  110. package/src/executors/unlock/unlock.js +2 -2
  111. package/src/foundation/capability-plan.d.ts +43 -0
  112. package/src/foundation/capability-plan.js +168 -0
  113. package/src/foundation/cost-estimate.d.ts +170 -0
  114. package/src/foundation/cost-estimate.js +683 -0
  115. package/src/foundation/discovery.d.ts +14 -11
  116. package/src/foundation/discovery.js +32 -6
  117. package/src/foundation/index.d.ts +4 -0
  118. package/src/foundation/index.js +11 -0
  119. package/src/foundation/local-database-contract.d.ts +20 -0
  120. package/src/foundation/local-database-contract.js +262 -13
  121. package/src/foundation/local-private-smoke-access.d.ts +20 -0
  122. package/src/foundation/local-private-smoke-access.js +197 -0
  123. package/src/foundation/logging-preflight.js +1 -1
  124. package/src/foundation/logging.d.ts +3 -1
  125. package/src/foundation/logging.js +1 -1
  126. package/src/foundation/partial-state.d.ts +10 -0
  127. package/src/foundation/partial-state.js +21 -0
  128. package/src/foundation/preflight.js +37 -18
  129. package/src/foundation/private-smoke-access.d.ts +25 -0
  130. package/src/foundation/private-smoke-access.js +135 -0
  131. package/src/foundation/private-smoke-admission.d.ts +45 -0
  132. package/src/foundation/private-smoke-admission.js +180 -0
  133. package/src/foundation/private-smoke-control-plane.d.ts +18 -0
  134. package/src/foundation/private-smoke-control-plane.js +184 -0
  135. package/src/foundation/provision-database-bindings.d.ts +5 -0
  136. package/src/foundation/provision-database-bindings.js +41 -8
  137. package/src/foundation/provision-logical-database.js +15 -8
  138. package/src/foundation/requirements.d.ts +3 -3
  139. package/src/foundation/requirements.js +24 -12
  140. package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
  141. package/src/foundation/router-waf-rate-rehearsal.js +210 -0
  142. package/src/foundation/router-waf.d.ts +149 -0
  143. package/src/foundation/router-waf.js +809 -0
  144. package/src/foundation/stages.d.ts +1 -0
  145. package/src/foundation/stages.js +11 -0
  146. package/src/generators/blueprint/blueprint.d.ts +5 -0
  147. package/src/generators/blueprint/blueprint.js +102 -0
  148. package/src/generators/blueprint/files.d.ts +6 -0
  149. package/src/generators/blueprint/files.js +217 -0
  150. package/src/generators/blueprint/schema.d.ts +4 -0
  151. package/src/generators/blueprint/schema.json +18 -0
  152. package/src/generators/formatting.d.ts +8 -0
  153. package/src/generators/formatting.js +141 -0
  154. package/src/generators/function/function.js +38 -17
  155. package/src/generators/logging-registry.d.ts +2 -0
  156. package/src/generators/logging-registry.js +22 -0
  157. package/src/generators/post-generation-install.js +2 -2
  158. package/src/generators/preset/dependency-overrides.d.ts +8 -0
  159. package/src/generators/preset/dependency-overrides.js +55 -0
  160. package/src/generators/preset/generator.js +43 -3
  161. package/src/generators/preset/schema.d.ts +10 -0
  162. package/src/generators/preset/schema.json +47 -0
  163. package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
  164. package/src/generators/preset/workspace-files-adopter-skills.js +324 -0
  165. package/src/generators/preset/workspace-files-ci-acceptance.d.ts +1 -0
  166. package/src/generators/preset/workspace-files-ci-acceptance.js +791 -0
  167. package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
  168. package/src/generators/preset/workspace-files-ci-install.js +196 -0
  169. package/src/generators/preset/workspace-files-developer-agent.d.ts +2 -0
  170. package/src/generators/preset/workspace-files-developer-agent.js +162 -44
  171. package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
  172. package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
  173. package/src/generators/preset/workspace-files-foundation-workload-roles.js +5 -2
  174. package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
  175. package/src/generators/preset/workspace-files-performance-cost.js +8 -8
  176. package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
  177. package/src/generators/preset/workspace-files-performance-load.js +39 -25
  178. package/src/generators/preset/workspace-files-shared-operation-claims.d.ts +10 -0
  179. package/src/generators/preset/workspace-files-shared-operation-claims.js +59 -0
  180. package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
  181. package/src/generators/preset/workspace-files-stage-authority.js +529 -0
  182. package/src/generators/preset/workspace-files-thin-deploy.d.ts +65 -0
  183. package/src/generators/preset/workspace-files-thin-deploy.js +2507 -0
  184. package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
  185. package/src/generators/preset/workspace-files-thin-docs.js +370 -0
  186. package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
  187. package/src/generators/preset/workspace-files-thin-release.js +26 -0
  188. package/src/generators/preset/workspace-files-workload-role-baseline.js +254 -42
  189. package/src/generators/preset/workspace-files.d.ts +18 -2
  190. package/src/generators/preset/workspace-files.js +1525 -609
  191. package/src/generators/repository-policy/repository-policy.js +235 -5
  192. package/src/generators/repository-policy/schema.d.ts +10 -0
  193. package/src/generators/repository-policy/schema.json +80 -4
  194. package/src/generators/repository-policy/tree-policy.d.ts +3 -0
  195. package/src/generators/repository-policy/tree-policy.js +25 -0
  196. package/src/generators/slice/built-in-plan-api-contract-files.js +49 -11
  197. package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
  198. package/src/generators/slice/built-in-plan-api-files.js +130 -414
  199. package/src/generators/slice/built-in-plan-async-work-files.js +166 -1969
  200. package/src/generators/slice/built-in-plan-authorization-files.js +102 -334
  201. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +975 -233
  202. package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
  203. package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
  204. package/src/generators/slice/built-in-plan-background-work-files.d.ts +2 -0
  205. package/src/generators/slice/built-in-plan-background-work-files.js +99 -0
  206. package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
  207. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
  208. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  209. package/src/generators/slice/built-in-plan-data-files.js +176 -1200
  210. package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
  211. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +37 -2
  212. package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2443
  213. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +50 -8
  214. package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
  215. package/src/generators/slice/built-in-plan-database-lifecycle-files.js +44 -25
  216. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +25 -2
  217. package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
  218. package/src/generators/slice/built-in-plan-foundation-files.js +39 -18
  219. package/src/generators/slice/built-in-plan-frontend-files.js +14 -3
  220. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  221. package/src/generators/slice/built-in-plan-infrastructure-files.js +933 -730
  222. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +75 -14
  223. package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
  224. package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
  225. package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
  226. package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
  227. package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
  228. package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
  229. package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
  230. package/src/generators/slice/built-in-plan-key-value-delivery.js +137 -0
  231. package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
  232. package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
  233. package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
  234. package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
  235. package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
  236. package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
  237. package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
  238. package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
  239. package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
  240. package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
  241. package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
  242. package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
  243. package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
  244. package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
  245. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
  246. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
  247. package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
  248. package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
  249. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
  250. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
  251. package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
  252. package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
  253. package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
  254. package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
  255. package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
  256. package/src/generators/slice/built-in-plan-metadata-files.js +159 -29
  257. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
  258. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +324 -0
  259. package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
  260. package/src/generators/slice/built-in-plan-operations-files.js +585 -97
  261. package/src/generators/slice/built-in-plan-performance-files.d.ts +2 -1
  262. package/src/generators/slice/built-in-plan-performance-files.js +220 -1074
  263. package/src/generators/slice/built-in-plan-project-files.js +141 -135
  264. package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
  265. package/src/generators/slice/built-in-plan-release-files.js +310 -70
  266. package/src/generators/slice/built-in-plan-reliability-files.d.ts +1 -1
  267. package/src/generators/slice/built-in-plan-reliability-files.js +283 -44
  268. package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
  269. package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
  270. package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
  271. package/src/generators/slice/built-in-plan-shared.js +41 -19
  272. package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
  273. package/src/generators/slice/built-in-plan-sql-events.js +276 -0
  274. package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
  275. package/src/generators/slice/built-in-plan-testing-files.js +304 -172
  276. package/src/generators/slice/built-in-plan-testing-persistence-event-files.d.ts +7 -0
  277. package/src/generators/slice/built-in-plan-testing-persistence-event-files.js +487 -0
  278. package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
  279. package/src/generators/slice/built-in-plan-testing-persistence-files.js +180 -0
  280. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
  281. package/src/generators/slice/built-in-plan-thin-release-files.js +162 -0
  282. package/src/generators/slice/built-in-plan-verification-files.js +76 -2
  283. package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
  284. package/src/generators/slice/built-in-plan-web-files.js +223 -16
  285. package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
  286. package/src/generators/slice/built-in-plan-workload-role-files.js +143 -279
  287. package/src/generators/slice/built-in-plan.d.ts +11 -1
  288. package/src/generators/slice/built-in-plan.js +83 -30
  289. package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
  290. package/src/generators/slice/data-policy-review-seed.js +22 -0
  291. package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
  292. package/src/generators/slice/deployed-smoke-readiness.js +214 -0
  293. package/src/generators/slice/local-source-identity.d.ts +2 -0
  294. package/src/generators/slice/local-source-identity.js +31 -0
  295. package/src/generators/slice/persistence-contract.d.ts +14 -0
  296. package/src/generators/slice/persistence-contract.js +32 -0
  297. package/src/generators/slice/slice.js +61 -50
  298. package/src/generators/sql/schema.d.ts +7 -0
  299. package/src/generators/sql/schema.json +38 -0
  300. package/src/generators/sql/sql.d.ts +6 -0
  301. package/src/generators/sql/sql.js +53 -0
  302. package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
  303. package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
  304. package/src/generators/upgrade/upgrade.d.ts +15 -1
  305. package/src/generators/upgrade/upgrade.js +435 -44
  306. package/src/generators/workload/frozen-container.d.ts +1 -1
  307. package/src/generators/workload/performance-registration.d.ts +1 -0
  308. package/src/generators/workload/performance-registration.js +9 -11
  309. package/src/generators/workload/service-performance-files.d.ts +1 -0
  310. package/src/generators/workload/service-performance-files.js +27 -7
  311. package/src/generators/workload/workload.d.ts +1 -1
  312. package/src/generators/workload/workload.js +105 -29
  313. package/src/git-policy/action-pins.d.ts +5 -0
  314. package/src/git-policy/action-pins.js +5 -0
  315. package/src/git-policy/github-bootstrap.d.ts +48 -8
  316. package/src/git-policy/github-bootstrap.js +344 -176
  317. package/src/git-policy/routing.d.ts +7 -1
  318. package/src/git-policy/routing.js +62 -1
  319. package/src/index.d.ts +1 -0
  320. package/src/index.js +1 -0
  321. package/src/infrastructure-change/local-capability.d.ts +73 -0
  322. package/src/infrastructure-change/local-capability.js +114 -0
  323. package/src/infrastructure-change/model.d.ts +25 -4
  324. package/src/infrastructure-change/model.js +1 -0
  325. package/src/infrastructure-change/normalize.d.ts +4 -0
  326. package/src/infrastructure-change/normalize.js +47 -7
  327. package/src/infrastructure-change/plan.d.ts +30 -3
  328. package/src/infrastructure-change/plan.js +323 -13
  329. package/src/infrastructure-change/risk.d.ts +3 -1
  330. package/src/infrastructure-change/risk.js +96 -16
  331. package/src/local-dev/browser-verification.d.ts +37 -0
  332. package/src/local-dev/browser-verification.js +281 -0
  333. package/src/local-dev/contracts.d.ts +10 -1
  334. package/src/local-dev/contracts.js +114 -13
  335. package/src/local-dev/dev-command-core.js +24 -5
  336. package/src/local-dev/docker-credential-health.d.ts +14 -0
  337. package/src/local-dev/docker-credential-health.js +94 -0
  338. package/src/local-dev/environment-inspector.d.ts +7 -0
  339. package/src/local-dev/environment-inspector.js +42 -15
  340. package/src/local-dev/environment-state.js +2 -2
  341. package/src/local-dev/errors.d.ts +1 -1
  342. package/src/local-dev/errors.js +2 -0
  343. package/src/local-dev/fleet-client.js +2 -2
  344. package/src/local-dev/fleet-configuration.js +57 -25
  345. package/src/local-dev/fleet-inventory.js +58 -22
  346. package/src/local-dev/fleet-ipc.d.ts +7 -0
  347. package/src/local-dev/fleet-ipc.js +14 -2
  348. package/src/local-dev/fleet-launcher.d.ts +6 -0
  349. package/src/local-dev/fleet-launcher.js +16 -4
  350. package/src/local-dev/fleet-logs.js +50 -22
  351. package/src/local-dev/fleet-process.d.ts +20 -1
  352. package/src/local-dev/fleet-process.js +197 -41
  353. package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
  354. package/src/local-dev/fleet-runner-evidence.js +56 -0
  355. package/src/local-dev/fleet-runtime.js +268 -229
  356. package/src/local-dev/fleet-session.d.ts +2 -0
  357. package/src/local-dev/fleet-session.js +28 -11
  358. package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
  359. package/src/local-dev/fleet-state.d.ts +5 -2
  360. package/src/local-dev/fleet-state.js +25 -4
  361. package/src/local-dev/fleet-supervisor.d.ts +3 -0
  362. package/src/local-dev/fleet-supervisor.js +66 -11
  363. package/src/local-dev/fleet-web-start.d.ts +12 -0
  364. package/src/local-dev/fleet-web-start.js +48 -0
  365. package/src/local-dev/identity.js +3 -14
  366. package/src/local-dev/index.d.ts +1 -0
  367. package/src/local-dev/index.js +1 -0
  368. package/src/local-dev/native-completion.d.ts +9 -0
  369. package/src/local-dev/native-completion.js +130 -0
  370. package/src/local-dev/nx-workspace.d.ts +4 -2
  371. package/src/local-dev/nx-workspace.js +11 -6
  372. package/src/local-dev/personal-stage.d.ts +4 -5
  373. package/src/local-dev/personal-stage.js +6 -54
  374. package/src/local-dev/port-claims.d.ts +13 -0
  375. package/src/local-dev/port-claims.js +46 -0
  376. package/src/local-dev/ports.d.ts +14 -2
  377. package/src/local-dev/ports.js +78 -3
  378. package/src/local-dev/private-state.d.ts +11 -0
  379. package/src/local-dev/private-state.js +146 -40
  380. package/src/local-dev/process-group.d.ts +4 -0
  381. package/src/local-dev/process-group.js +29 -0
  382. package/src/local-dev/process-identity.d.ts +8 -0
  383. package/src/local-dev/process-identity.js +31 -1
  384. package/src/local-dev/proxy.js +11 -12
  385. package/src/local-dev/runtime-paths.js +1 -1
  386. package/src/local-dev/slice-claim.js +1 -1
  387. package/src/local-dev/slice-runner.d.ts +15 -6
  388. package/src/local-dev/slice-runner.js +189 -54
  389. package/src/local-dev/task-attachment.d.ts +17 -0
  390. package/src/local-dev/task-attachment.js +73 -0
  391. package/src/local-dev/task-authority.d.ts +10 -0
  392. package/src/local-dev/task-authority.js +27 -0
  393. package/src/local-dev/task-identity.d.ts +33 -0
  394. package/src/local-dev/task-identity.js +418 -0
  395. package/src/local-dev/task-native-writer.d.ts +18 -0
  396. package/src/local-dev/task-native-writer.js +329 -0
  397. package/src/local-dev/tls.js +8 -2
  398. package/src/local-dev/web-launch.d.ts +9 -0
  399. package/src/local-dev/web-launch.js +130 -0
  400. package/src/ownership/composition.d.ts +2 -1
  401. package/src/ownership/composition.js +1 -0
  402. package/src/performance/cost-collection.d.ts +1 -1
  403. package/src/performance/cost-collection.js +4 -2
  404. package/src/performance/cost-controls.d.ts +8 -4
  405. package/src/performance/cost-controls.js +39 -28
  406. package/src/performance/evidence.d.ts +1 -1
  407. package/src/performance/evidence.js +5 -3
  408. package/src/performance/load-safety.js +5 -3
  409. package/src/performance/model.d.ts +4 -4
  410. package/src/performance/model.js +4 -5
  411. package/src/performance/scenario.d.ts +22 -0
  412. package/src/performance/scenario.js +100 -92
  413. package/src/release/index.d.ts +0 -2
  414. package/src/release/index.js +0 -2
  415. package/src/release/source-authority.d.ts +5 -5
  416. package/src/release/source-authority.js +141 -124
  417. package/src/repository-policy/aurora-preflight.d.ts +1 -1
  418. package/src/repository-policy/aurora-preflight.js +4 -1
  419. package/src/repository-policy/capacity-migration.d.ts +3 -0
  420. package/src/repository-policy/capacity-migration.js +21 -0
  421. package/src/repository-policy/deployment-plan.d.ts +4 -1
  422. package/src/repository-policy/deployment-plan.js +9 -0
  423. package/src/repository-policy/foundation-profile.js +10 -1
  424. package/src/repository-policy/policy.d.ts +57 -3
  425. package/src/repository-policy/policy.js +497 -11
  426. package/src/schemas/blueprint-v1.json +5 -4
  427. package/src/schemas/foundation-requirement-v1.json +5 -4
  428. package/src/schemas/performance-policy-v1.json +3 -3
  429. package/src/schemas/repository-policy-v1.json +130 -6
  430. package/src/schemas/testing-evidence-result-v1.json +1 -1
  431. package/src/secrets/adapters.d.ts +7 -2
  432. package/src/secrets/adapters.js +34 -3
  433. package/src/secrets/aws-control-plane.d.ts +10 -1
  434. package/src/secrets/aws-control-plane.js +67 -0
  435. package/src/secrets/generated-aws-control-plane.d.ts +23 -0
  436. package/src/secrets/generated-aws-control-plane.js +259 -0
  437. package/src/secrets/metadata.js +38 -10
  438. package/src/secrets/model.d.ts +8 -1
  439. package/src/secrets/model.js +24 -3
  440. package/src/secrets/operator.d.ts +91 -3
  441. package/src/secrets/operator.js +463 -13
  442. package/src/secrets/personal-command.d.ts +18 -2
  443. package/src/secrets/personal-command.js +66 -12
  444. package/src/secrets/registry.d.ts +2 -1
  445. package/src/secrets/registry.js +18 -1
  446. package/src/secrets/verification.js +15 -2
  447. package/src/secrets/workload-access.js +10 -2
  448. package/src/sst-environment-source-format.d.ts +6 -0
  449. package/src/sst-environment-source-format.js +199 -0
  450. package/src/supply-chain/action-pins.js +61 -7
  451. package/src/supply-chain/blueprint-trust-git.js +85 -24
  452. package/src/supply-chain/blueprint-verification-authority.js +55 -3
  453. package/src/supply-chain/build-output-bounds.d.ts +2 -0
  454. package/src/supply-chain/build-output-bounds.js +12 -0
  455. package/src/supply-chain/build-output.d.ts +7 -1
  456. package/src/supply-chain/build-output.js +177 -24
  457. package/src/supply-chain/ecr-scanning.d.ts +5 -3
  458. package/src/supply-chain/ecr-scanning.js +11 -7
  459. package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
  460. package/src/supply-chain/ecs-deployed-image.js +6 -4
  461. package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
  462. package/src/supply-chain/generated-command.js +1 -0
  463. package/src/supply-chain/generated-container-release-command.js +1285 -124
  464. package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
  465. package/src/supply-chain/generated-ecr-collector-command.js +200 -93
  466. package/src/supply-chain/generated-files.js +25 -14
  467. package/src/supply-chain/generated-scanner-command.js +2 -1
  468. package/src/supply-chain/index.d.ts +1 -1
  469. package/src/supply-chain/index.js +2 -1
  470. package/src/supply-chain/sbom.d.ts +1 -1
  471. package/src/supply-chain/sbom.js +30 -5
  472. package/src/supply-chain/scanner.js +3 -0
  473. package/src/testing-evidence/fixture-scope.d.ts +2 -1
  474. package/src/testing-evidence/fixture-scope.js +4 -2
  475. package/src/testing-evidence/result.d.ts +2 -1
  476. package/src/testing-evidence/result.js +18 -4
  477. package/src/workload-roles/account-baseline.d.ts +11 -0
  478. package/src/workload-roles/account-baseline.js +253 -16
  479. package/src/workload-roles/authority.d.ts +3 -1
  480. package/src/workload-roles/authority.js +48 -2
  481. package/src/workload-roles/aws-s3-state.js +27 -0
  482. package/src/workload-roles/boundary.d.ts +2 -1
  483. package/src/workload-roles/boundary.js +9 -2
  484. package/src/workload-roles/handler.js +52 -24
  485. package/src/workload-roles/index.d.ts +10 -17
  486. package/src/workload-roles/index.js +5 -18
  487. package/src/workload-roles/injection.js +1 -1
  488. package/src/workload-roles/provisioner.js +12 -4
  489. package/src/workload-roles/registration.d.ts +1 -0
  490. package/src/workload-roles/registration.js +5 -0
  491. package/src/workload-roles/stage-boundary.js +1 -1
  492. package/src/workload-roles/standard-slice.js +3 -3
  493. package/src/workspace-deployment/affected-lifecycle.d.ts +53 -0
  494. package/src/workspace-deployment/affected-lifecycle.js +84 -0
  495. package/src/workspace-deployment/identity.d.ts +3 -0
  496. package/src/workspace-deployment/identity.js +22 -0
  497. package/src/workspace-deployment/index.d.ts +4 -0
  498. package/src/workspace-deployment/index.js +8 -0
  499. package/src/workspace-deployment/migration-evidence.d.ts +29 -0
  500. package/src/workspace-deployment/migration-evidence.js +83 -0
  501. package/src/workspace-deployment/migration.d.ts +27 -0
  502. package/src/workspace-deployment/migration.js +109 -0
  503. package/src/workspace-deployment/ownership.d.ts +81 -0
  504. package/src/workspace-deployment/ownership.js +381 -0
  505. package/src/api-contract/baseline-update.js.map +0 -1
  506. package/src/api-contract/compatibility.js.map +0 -1
  507. package/src/api-contract/contract-graph.js.map +0 -1
  508. package/src/api-contract/evidence.js.map +0 -1
  509. package/src/api-contract/index.js.map +0 -1
  510. package/src/api-contract/model.fixtures.d.ts +0 -2
  511. package/src/api-contract/model.fixtures.js +0 -81
  512. package/src/api-contract/model.fixtures.js.map +0 -1
  513. package/src/api-contract/model.js.map +0 -1
  514. package/src/api-contract/rollout.js.map +0 -1
  515. package/src/authorization/compatibility.js.map +0 -1
  516. package/src/authorization/index.js.map +0 -1
  517. package/src/blueprints/execution.js.map +0 -1
  518. package/src/blueprints/external-sandbox.js.map +0 -1
  519. package/src/blueprints/index.js.map +0 -1
  520. package/src/blueprints/inputs.js.map +0 -1
  521. package/src/blueprints/manifest.js.map +0 -1
  522. package/src/blueprints/resolver.js.map +0 -1
  523. package/src/blueprints/transitions.js.map +0 -1
  524. package/src/cli/agent-command.js.map +0 -1
  525. package/src/cli/agent-runtime.js.map +0 -1
  526. package/src/cli/blueprint-authority.js.map +0 -1
  527. package/src/cli/blueprint-command.js.map +0 -1
  528. package/src/cli/bootstrap.js.map +0 -1
  529. package/src/cli/dev-command.js.map +0 -1
  530. package/src/cli/main.js.map +0 -1
  531. package/src/cli/output.js.map +0 -1
  532. package/src/cli/personal-secret-runtime.js.map +0 -1
  533. package/src/cli/secret-terminal.js.map +0 -1
  534. package/src/container-images.js.map +0 -1
  535. package/src/data-lifecycle/index.js.map +0 -1
  536. package/src/data-lifecycle/model.fixtures.d.ts +0 -2
  537. package/src/data-lifecycle/model.fixtures.js +0 -244
  538. package/src/data-lifecycle/model.fixtures.js.map +0 -1
  539. package/src/data-lifecycle/model.js.map +0 -1
  540. package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
  541. package/src/data-lifecycle/validation.js.map +0 -1
  542. package/src/database-retirement/contract.js.map +0 -1
  543. package/src/database-retirement/index.js.map +0 -1
  544. package/src/deterministic-order.js.map +0 -1
  545. package/src/developer-agent/context.js.map +0 -1
  546. package/src/developer-agent/generator-planning.js.map +0 -1
  547. package/src/developer-agent/generator-preview.js.map +0 -1
  548. package/src/developer-agent/git-inspection.js.map +0 -1
  549. package/src/developer-agent/handoff.js.map +0 -1
  550. package/src/developer-agent/index.js.map +0 -1
  551. package/src/developer-agent/model.js.map +0 -1
  552. package/src/developer-agent/operation-registry.js.map +0 -1
  553. package/src/developer-agent/ordering.js.map +0 -1
  554. package/src/developer-agent/planning.js.map +0 -1
  555. package/src/developer-agent/preview-changes.js.map +0 -1
  556. package/src/developer-agent/preview-source.js.map +0 -1
  557. package/src/developer-agent/validation.js.map +0 -1
  558. package/src/developer-agent/workspace-inspection.js.map +0 -1
  559. package/src/developer-agent/workspace-path.js.map +0 -1
  560. package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
  561. package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
  562. package/src/executors/deploy/deploy.js.map +0 -1
  563. package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
  564. package/src/executors/dev/dev.js.map +0 -1
  565. package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
  566. package/src/executors/dev-setup/dev-setup.js.map +0 -1
  567. package/src/executors/developer-context/developer-context.js.map +0 -1
  568. package/src/executors/fleet/fleet.js.map +0 -1
  569. package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
  570. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
  571. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
  572. package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
  573. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
  574. package/src/executors/refresh/refresh.js.map +0 -1
  575. package/src/executors/remove/remove.js.map +0 -1
  576. package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
  577. package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
  578. package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
  579. package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
  580. package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
  581. package/src/executors/unlock/unlock.js.map +0 -1
  582. package/src/executors/work-markers/work-markers.js.map +0 -1
  583. package/src/foundation/discovery.js.map +0 -1
  584. package/src/foundation/index.js.map +0 -1
  585. package/src/foundation/local-database-contract.js.map +0 -1
  586. package/src/foundation/logging-preflight.js.map +0 -1
  587. package/src/foundation/logging.js.map +0 -1
  588. package/src/foundation/preflight.js.map +0 -1
  589. package/src/foundation/provision-database-bindings.js.map +0 -1
  590. package/src/foundation/provision-logical-database.js.map +0 -1
  591. package/src/foundation/requirements.js.map +0 -1
  592. package/src/foundation/router-origin-proof.js.map +0 -1
  593. package/src/foundation/stages.js.map +0 -1
  594. package/src/frontend-security/index.js.map +0 -1
  595. package/src/frontend-security/security-headers.js.map +0 -1
  596. package/src/generators/feature-registry.js.map +0 -1
  597. package/src/generators/function/function.js.map +0 -1
  598. package/src/generators/job/job.js.map +0 -1
  599. package/src/generators/logging-registry.js.map +0 -1
  600. package/src/generators/post-generation-install.js.map +0 -1
  601. package/src/generators/preset/generator.js.map +0 -1
  602. package/src/generators/preset/tool-versions.js.map +0 -1
  603. package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
  604. package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
  605. package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
  606. package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
  607. package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
  608. package/src/generators/preset/workspace-files.js.map +0 -1
  609. package/src/generators/repository-policy/repository-policy.js.map +0 -1
  610. package/src/generators/service/service.js.map +0 -1
  611. package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
  612. package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
  613. package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
  614. package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
  615. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
  616. package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
  617. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
  618. package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
  619. package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
  620. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
  621. package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
  622. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
  623. package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
  624. package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
  625. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
  626. package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
  627. package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
  628. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
  629. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
  630. package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
  631. package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
  632. package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
  633. package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
  634. package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
  635. package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
  636. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
  637. package/src/generators/slice/built-in-plan-shared.js.map +0 -1
  638. package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
  639. package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
  640. package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
  641. package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
  642. package/src/generators/slice/built-in-plan.js.map +0 -1
  643. package/src/generators/slice/slice.js.map +0 -1
  644. package/src/generators/upgrade/upgrade.js.map +0 -1
  645. package/src/generators/workload/frozen-container.js.map +0 -1
  646. package/src/generators/workload/performance-registration.js.map +0 -1
  647. package/src/generators/workload/reliability-registration.js.map +0 -1
  648. package/src/generators/workload/service-performance-files.js.map +0 -1
  649. package/src/generators/workload/workload.js.map +0 -1
  650. package/src/git-policy/action-pins.js.map +0 -1
  651. package/src/git-policy/github-bootstrap.js.map +0 -1
  652. package/src/git-policy/index.js.map +0 -1
  653. package/src/git-policy/routing.js.map +0 -1
  654. package/src/index.js.map +0 -1
  655. package/src/infrastructure-change/convergence.js.map +0 -1
  656. package/src/infrastructure-change/drift.js.map +0 -1
  657. package/src/infrastructure-change/index.js.map +0 -1
  658. package/src/infrastructure-change/model.js.map +0 -1
  659. package/src/infrastructure-change/normalize.js.map +0 -1
  660. package/src/infrastructure-change/plan.js.map +0 -1
  661. package/src/infrastructure-change/risk.js.map +0 -1
  662. package/src/infrastructure-change/summary.js.map +0 -1
  663. package/src/local-dev/context-discovery.js.map +0 -1
  664. package/src/local-dev/contract-validation.js.map +0 -1
  665. package/src/local-dev/contracts.js.map +0 -1
  666. package/src/local-dev/control-contract.js.map +0 -1
  667. package/src/local-dev/dev-command-core.js.map +0 -1
  668. package/src/local-dev/effects.js.map +0 -1
  669. package/src/local-dev/environment-inspector.js.map +0 -1
  670. package/src/local-dev/environment-state.js.map +0 -1
  671. package/src/local-dev/errors.js.map +0 -1
  672. package/src/local-dev/fleet-client.js.map +0 -1
  673. package/src/local-dev/fleet-configuration.js.map +0 -1
  674. package/src/local-dev/fleet-inventory.js.map +0 -1
  675. package/src/local-dev/fleet-ipc.js.map +0 -1
  676. package/src/local-dev/fleet-launcher.js.map +0 -1
  677. package/src/local-dev/fleet-lock.js.map +0 -1
  678. package/src/local-dev/fleet-logs.js.map +0 -1
  679. package/src/local-dev/fleet-process.js.map +0 -1
  680. package/src/local-dev/fleet-runtime.js.map +0 -1
  681. package/src/local-dev/fleet-session.js.map +0 -1
  682. package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
  683. package/src/local-dev/fleet-startup.js.map +0 -1
  684. package/src/local-dev/fleet-state.js.map +0 -1
  685. package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
  686. package/src/local-dev/fleet-supervisor.js.map +0 -1
  687. package/src/local-dev/gateway-daemon.js.map +0 -1
  688. package/src/local-dev/gateway.js.map +0 -1
  689. package/src/local-dev/identity.js.map +0 -1
  690. package/src/local-dev/index.js.map +0 -1
  691. package/src/local-dev/local-context.js.map +0 -1
  692. package/src/local-dev/nx-workspace.js.map +0 -1
  693. package/src/local-dev/personal-secret-ledger.js.map +0 -1
  694. package/src/local-dev/personal-stage.js.map +0 -1
  695. package/src/local-dev/portless.js.map +0 -1
  696. package/src/local-dev/ports.js.map +0 -1
  697. package/src/local-dev/private-state.js.map +0 -1
  698. package/src/local-dev/process-identity.js.map +0 -1
  699. package/src/local-dev/proxy.js.map +0 -1
  700. package/src/local-dev/runtime-paths.js.map +0 -1
  701. package/src/local-dev/secret-slice-claim.js.map +0 -1
  702. package/src/local-dev/slice-claim.js.map +0 -1
  703. package/src/local-dev/slice-runner.js.map +0 -1
  704. package/src/local-dev/tls.js.map +0 -1
  705. package/src/ownership/composition.js.map +0 -1
  706. package/src/ownership/foundation-record.js.map +0 -1
  707. package/src/ownership/hash.js.map +0 -1
  708. package/src/ownership/index.js.map +0 -1
  709. package/src/ownership/json-ownership.js.map +0 -1
  710. package/src/ownership/record.js.map +0 -1
  711. package/src/ownership/workspace-record.js.map +0 -1
  712. package/src/performance/cost-collection.js.map +0 -1
  713. package/src/performance/cost-controls.js.map +0 -1
  714. package/src/performance/evidence.js.map +0 -1
  715. package/src/performance/index.js.map +0 -1
  716. package/src/performance/load-safety.js.map +0 -1
  717. package/src/performance/model.js.map +0 -1
  718. package/src/performance/pr-artifact-budget.js.map +0 -1
  719. package/src/performance/runner.js.map +0 -1
  720. package/src/performance/scenario-endpoint.js.map +0 -1
  721. package/src/performance/scenario.js.map +0 -1
  722. package/src/performance/test-fixtures.d.ts +0 -7
  723. package/src/performance/test-fixtures.js +0 -169
  724. package/src/performance/test-fixtures.js.map +0 -1
  725. package/src/performance/unit-cost.js.map +0 -1
  726. package/src/release/index.js.map +0 -1
  727. package/src/release/lifecycle.js.map +0 -1
  728. package/src/release/manifest.js.map +0 -1
  729. package/src/release/rollout.js.map +0 -1
  730. package/src/release/source-authority.js.map +0 -1
  731. package/src/repository-policy/aurora-preflight.js.map +0 -1
  732. package/src/repository-policy/deployment-plan.js.map +0 -1
  733. package/src/repository-policy/foundation-profile.js.map +0 -1
  734. package/src/repository-policy/index.js.map +0 -1
  735. package/src/repository-policy/policy.js.map +0 -1
  736. package/src/secrets/adapters.js.map +0 -1
  737. package/src/secrets/aws-control-plane.js.map +0 -1
  738. package/src/secrets/declaration-verification.js.map +0 -1
  739. package/src/secrets/guardrails.js.map +0 -1
  740. package/src/secrets/index.js.map +0 -1
  741. package/src/secrets/metadata.js.map +0 -1
  742. package/src/secrets/model.js.map +0 -1
  743. package/src/secrets/operator.js.map +0 -1
  744. package/src/secrets/permissions.js.map +0 -1
  745. package/src/secrets/personal-command.js.map +0 -1
  746. package/src/secrets/personal-ledger.js.map +0 -1
  747. package/src/secrets/registry.js.map +0 -1
  748. package/src/secrets/verification.js.map +0 -1
  749. package/src/secrets/workload-access.js.map +0 -1
  750. package/src/supply-chain/action-pins.js.map +0 -1
  751. package/src/supply-chain/blueprint-trust-git.js.map +0 -1
  752. package/src/supply-chain/blueprint-trust-process.js.map +0 -1
  753. package/src/supply-chain/blueprint-trust.js.map +0 -1
  754. package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
  755. package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
  756. package/src/supply-chain/build-output.js.map +0 -1
  757. package/src/supply-chain/common.js.map +0 -1
  758. package/src/supply-chain/container-artifact-contract.js.map +0 -1
  759. package/src/supply-chain/container-release.js.map +0 -1
  760. package/src/supply-chain/ecr-applicability.js.map +0 -1
  761. package/src/supply-chain/ecr-scanning.js.map +0 -1
  762. package/src/supply-chain/ecs-deployed-image.js.map +0 -1
  763. package/src/supply-chain/errors.js.map +0 -1
  764. package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
  765. package/src/supply-chain/generated-command.js.map +0 -1
  766. package/src/supply-chain/generated-container-release-command.js.map +0 -1
  767. package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
  768. package/src/supply-chain/generated-files.js.map +0 -1
  769. package/src/supply-chain/generated-scanner-command.js.map +0 -1
  770. package/src/supply-chain/index.js.map +0 -1
  771. package/src/supply-chain/inventory.js.map +0 -1
  772. package/src/supply-chain/license-expression.js.map +0 -1
  773. package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
  774. package/src/supply-chain/policy.js.map +0 -1
  775. package/src/supply-chain/publication.js.map +0 -1
  776. package/src/supply-chain/sbom.js.map +0 -1
  777. package/src/supply-chain/scanner.js.map +0 -1
  778. package/src/supply-chain/vendored-source.js.map +0 -1
  779. package/src/testing-evidence/fixture-scope.js.map +0 -1
  780. package/src/testing-evidence/index.js.map +0 -1
  781. package/src/testing-evidence/quarantine.js.map +0 -1
  782. package/src/testing-evidence/result.js.map +0 -1
  783. package/src/testing-evidence/runner-adapter.js.map +0 -1
  784. package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
  785. package/src/validation.js.map +0 -1
  786. package/src/work-markers/index.js.map +0 -1
  787. package/src/work-markers/work-markers.js.map +0 -1
  788. package/src/workload-roles/account-baseline.js.map +0 -1
  789. package/src/workload-roles/authority.js.map +0 -1
  790. package/src/workload-roles/aws-adapter.js.map +0 -1
  791. package/src/workload-roles/aws-internal-handler.js.map +0 -1
  792. package/src/workload-roles/aws-s3-state.js.map +0 -1
  793. package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
  794. package/src/workload-roles/boundary.js.map +0 -1
  795. package/src/workload-roles/convergence.js.map +0 -1
  796. package/src/workload-roles/effective-policy.js.map +0 -1
  797. package/src/workload-roles/handler.js.map +0 -1
  798. package/src/workload-roles/history.js.map +0 -1
  799. package/src/workload-roles/index.js.map +0 -1
  800. package/src/workload-roles/injection.js.map +0 -1
  801. package/src/workload-roles/manifest.js.map +0 -1
  802. package/src/workload-roles/provisioner.js.map +0 -1
  803. package/src/workload-roles/registration.js.map +0 -1
  804. package/src/workload-roles/stage-boundary.js.map +0 -1
  805. package/src/workload-roles/standard-slice.js.map +0 -1
@@ -0,0 +1,477 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderKeyValueRetentionWorkerFiles = renderKeyValueRetentionWorkerFiles;
4
+ const built_in_plan_shared_js_1 = require("./built-in-plan-shared.js");
5
+ /** Native bounded retention execution; no database credential, SQL adapter, or container prerequisite. */
6
+ function renderKeyValueRetentionWorkerFiles(name, pascalName) {
7
+ const prefix = (0, built_in_plan_shared_js_1.lowerCamelIdentifier)(pascalName);
8
+ return {
9
+ 'jobs/data-retention/src/adapter.ts': `import type { DataLifecycleRetentionCandidateV1 } from '@empire-builder-kit/runtime/data-lifecycle';
10
+ import type { KeyValueRecord } from '@empire-builder-kit/runtime/key-value';
11
+ import { productRecordReference } from '../../../data/pseudonymous-reference.js';
12
+ import { readProductRecord } from '../../../data/records.js';
13
+ import { RETENTION_DAYS } from '../../../data/retention-state.js';
14
+
15
+ export interface RetentionCandidate extends DataLifecycleRetentionCandidateV1 { recordId: string; recordVersion: number }
16
+ /** Adopter-owned selection of due Standard records; test-run cleanup is separate. */
17
+ export function selectRetentionCandidate(row: KeyValueRecord & { id: string }, asOf: string): RetentionCandidate | null {
18
+ const record = readProductRecord(row.value, row.id);
19
+ const dueAt = new Date(Date.parse(record.lastActivityAt) + RETENTION_DAYS * 86_400_000).toISOString();
20
+ if (record.testExpiresAt !== null || Date.parse(dueAt) > Date.parse(asOf)) return null;
21
+ return { categoryId: 'product-record', locationId: 'primary-database', dueAt,
22
+ recordRef: productRecordReference(row.id), recordId: row.id, recordVersion: row.version };
23
+ }
24
+ `,
25
+ 'data/retention-worker.ts': `import { createHash } from 'node:crypto';
26
+ import {
27
+ assertAuthorizationAllowed, beginApprovalExecution, completeApprovalExecution,
28
+ createAuthorizationEvaluator, defineCoarseAdmission, digestApprovalRequest,
29
+ type AuthorizationPrincipal,
30
+ } from '@empire-builder-kit/runtime/authorization';
31
+ import { buildEventEntry } from '@empire-builder-kit/runtime/events';
32
+ import {
33
+ createDataLifecycleEvidence, createDataLifecycleLedgerEntry, createDataLifecycleRetentionCheckpoint,
34
+ runDataLifecycleRetention, type DataLifecycleRetentionCheckpointV1,
35
+ } from '@empire-builder-kit/runtime/data-lifecycle';
36
+ import { ${prefix}AuthorizationActions, ${prefix}AuthorizationPolicy } from '../authorization/policy.js';
37
+ import { ${pascalName}DataLifecycleChanged } from '../contracts/events.js';
38
+ import { dispatchEventIntent } from '../async/key-value-delivery.js';
39
+ import { selectRetentionCandidate, type RetentionCandidate } from '../jobs/data-retention/src/adapter.js';
40
+ import { dataStore } from './key-value.js';
41
+ import { dataRightsAuditChange, canonicalDataRightsNow, plusDataRightsDays } from './data-rights-shared.js';
42
+ import { approvalReference, productRecordReference } from './pseudonymous-reference.js';
43
+ import { loadActiveRecordHolds } from './record-holds.js';
44
+ import { create${pascalName}DataLifecycleChanged } from './lifecycle-event.js';
45
+ import { createReportedRetentionRun, loadRetentionRun, retentionApprovalInput, retentionRunChange,
46
+ retentionRunReference, retentionStage, RETENTION_RUNS, RETENTION_POLICY, RETENTION_DAYS,
47
+ RETENTION_AUTHORIZATION_POLICY, type RetentionRun, type ${pascalName}RetentionPlanV1 } from './retention-state.js';
48
+
49
+ const TENANT = 'application';
50
+ const SNAPSHOTS = 'data-retention-snapshots';
51
+ const CANDIDATES = 'data-retention-candidates';
52
+ const EXECUTIONS = 'data-retention-executions';
53
+ const RECEIPTS = 'data-retention-receipts';
54
+ const CHUNK_SIZE = 50;
55
+ const MAX_ITEMS = 10000;
56
+ const REPORT_PAGES_PER_INVOCATION = 20;
57
+ const WORKLOAD = '${name}:data-retention-job';
58
+ const sha = (value: unknown) => 'sha256:' + createHash('sha256').update(JSON.stringify(value)).digest('hex');
59
+ const planDigest = (run: RetentionRun) => digestApprovalRequest(retentionApprovalInput(run.plan));
60
+ const chunkId = (runId: string, index: number) => runId + ':' + String(index).padStart(4, '0');
61
+ const now = () => new Date().toISOString();
62
+ class DeliveryPending extends Error {}
63
+ interface Snapshot {
64
+ kind: 'retention-snapshot'; runId: string; slice: '${name}'; stage: string;
65
+ status: 'building' | 'completed'; createdAt: string; expiresAt: string;
66
+ pages: string[]; due: number; scanned: number; queryPages: number; planDigest: string | null;
67
+ binding: string; afterId: string | null; tail: RetentionCandidate[]; scanComplete: boolean;
68
+ command: RetentionInput;
69
+ }
70
+ interface Execution {
71
+ kind: 'retention-execution'; runId: string; planDigest: string; approvalId: string;
72
+ checkpoint: DataLifecycleRetentionCheckpointV1;
73
+ pageAttempts: number; replays: number; completedAt: string | null;
74
+ }
75
+ interface Receipt {
76
+ kind: 'retention-receipt'; runId: string; planDigest: string; candidateDigest: string;
77
+ eventId: string; appliedAt: string; publishedAt: string | null; expiresAt: string;
78
+ }
79
+ export interface RetentionInput {
80
+ mode: 'report' | 'apply'; runId: string; approvalRequestId: string;
81
+ asOf: string; correlationId: string; slice: string; stage: string; sourceCommit: string;
82
+ resume?: true;
83
+ }
84
+ function reportBinding(command: RetentionInput) {
85
+ // Stored JSON is canonicalized; never bind to incidental object-key order.
86
+ return sha({ mode: command.mode, runId: command.runId, approvalRequestId: command.approvalRequestId,
87
+ asOf: command.asOf, correlationId: command.correlationId, slice: command.slice, stage: command.stage,
88
+ sourceCommit: command.sourceCommit, policy: RETENTION_POLICY, retentionDays: RETENTION_DAYS });
89
+ }
90
+ function input(value: RetentionInput) {
91
+ if (!value || (value.mode !== 'report' && value.mode !== 'apply') || value.slice !== '${name}' ||
92
+ value.stage !== retentionStage() || typeof value.asOf !== 'string' ||
93
+ !/^[a-f0-9]{40,64}$/.test(value.sourceCommit ?? '') ||
94
+ !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(value.correlationId ?? ''))
95
+ throw new Error('Retention invocation identity or mode is invalid.');
96
+ retentionRunReference(value.runId); canonicalDataRightsNow(value.asOf);
97
+ if (value.resume !== undefined && (value.resume !== true || value.mode !== 'report'))
98
+ throw new Error('Only a report may resume its original selection.');
99
+ if (value.mode === 'apply') retentionRunReference(value.approvalRequestId);
100
+ else if (value.approvalRequestId !== '') throw new Error('A report cannot select mutation approval.');
101
+ }
102
+ export async function authorizeRetentionOperation(mode: 'report' | 'apply', at: string, runId: string): Promise<AuthorizationPrincipal> {
103
+ if (process.env.EBK_WORKLOAD_IDENTITY !== WORKLOAD) throw new Error('Retention Job workload identity is invalid.');
104
+ const principal: AuthorizationPrincipal = { actor: { id: WORKLOAD, type: 'service' }, audience: WORKLOAD,
105
+ authority: { machineIdentityId: WORKLOAD, mode: 'machine' }, kind: 'agent', roles: [], scopes: [], subject: { id: WORKLOAD, type: 'service' } };
106
+ await createAuthorizationEvaluator({ admission: defineCoarseAdmission({ anyOf: [{ kinds: ['agent'], subjectTypes: ['service'] }] }),
107
+ policy: ${prefix}AuthorizationPolicy, requiredPolicyVersion: RETENTION_AUTHORIZATION_POLICY }).authorize({
108
+ action: mode === 'report' ? ${prefix}AuthorizationActions.retentionReport : ${prefix}AuthorizationActions.retentionApply,
109
+ context: { facts: { operationId: runId }, now: at, stage: retentionStage() }, principal,
110
+ resource: { attributes: { collection: true }, type: 'slice' },
111
+ });
112
+ return principal;
113
+ }
114
+ function audit(command: RetentionInput, principal: AuthorizationPrincipal, purposeCode: string, at: string) {
115
+ return dataRightsAuditChange({ action: command.mode === 'report' ? 'retention-report' : 'retention-apply',
116
+ ...(command.approvalRequestId ? { approvalRequestId: command.approvalRequestId } : {}),
117
+ correlationId: command.correlationId, now: at, principal, resourceReference: retentionRunReference(command.runId),
118
+ purposeCode, outcome: 'succeeded', summary: 'A bounded native retention transition was committed.' });
119
+ }
120
+ function validateCandidate(value: RetentionCandidate, asOf: string): RetentionCandidate {
121
+ if (!value || typeof value.recordId !== 'string' || !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(value.recordId) ||
122
+ !Number.isSafeInteger(value.recordVersion) || value.recordVersion < 1 || value.categoryId !== 'product-record' ||
123
+ value.locationId !== 'primary-database' || value.recordRef !== productRecordReference(value.recordId) || typeof value.dueAt !== 'string' ||
124
+ Object.keys(value).sort().join(',') !== 'categoryId,dueAt,locationId,recordId,recordRef,recordVersion')
125
+ throw new Error('Retention candidate does not belong to the exact record contract.');
126
+ canonicalDataRightsNow(value.dueAt);
127
+ if (Date.parse(value.dueAt) > Date.parse(asOf)) throw new Error('Retention candidate is not due.');
128
+ // Construct a deterministic projection independent of object property order.
129
+ return { categoryId: value.categoryId, locationId: value.locationId, dueAt: value.dueAt,
130
+ recordRef: value.recordRef, recordId: value.recordId, recordVersion: value.recordVersion };
131
+ }
132
+ function inventoryDigest(pages: readonly string[], due: number) { return sha({ pages, due, chunkSize: CHUNK_SIZE }); }
133
+ function bounded(deadline: number) {
134
+ if (Date.now() >= deadline) throw new Error('Retention invocation time budget exhausted; retained state requires retry, not success.');
135
+ }
136
+ async function report(command: RetentionInput, principal: AuthorizationPrincipal, startedAt: string, deadline: number) {
137
+ if (Date.parse(command.asOf) > Date.parse(startedAt)) throw new Error('Retention report cannot select future records.');
138
+ const store = dataStore();
139
+ const binding = reportBinding(command);
140
+ const retained = await store.get(TENANT, SNAPSHOTS, command.runId);
141
+ let version = retained?.version ?? 0;
142
+ let building: Snapshot = retained ? retained.value as Snapshot : {
143
+ kind: 'retention-snapshot', runId: command.runId, slice: '${name}', stage: retentionStage(),
144
+ status: 'building', createdAt: startedAt, expiresAt: plusDataRightsDays(startedAt, 400),
145
+ pages: [], due: 0, scanned: 0, queryPages: 0, planDigest: null,
146
+ binding, command: { ...command }, afterId: null, tail: [], scanComplete: false };
147
+ if (!building || building.kind !== 'retention-snapshot' || building.runId !== command.runId ||
148
+ building.slice !== '${name}' || building.stage !== retentionStage() || building.binding !== binding ||
149
+ !building.command || reportBinding(building.command) !== binding ||
150
+ !['building', 'completed'].includes(building.status) || !Array.isArray(building.pages) ||
151
+ building.pages.some(page => !/^sha256:[a-f0-9]{64}$/.test(page)) || !Array.isArray(building.tail) ||
152
+ building.tail.length >= CHUNK_SIZE || typeof building.scanComplete !== 'boolean' ||
153
+ !Number.isSafeInteger(building.due) || building.due < 0 || building.due > MAX_ITEMS ||
154
+ !Number.isSafeInteger(building.scanned) || building.scanned < building.due ||
155
+ !Number.isSafeInteger(building.queryPages) || building.queryPages < 0 ||
156
+ typeof building.createdAt !== 'string' || typeof building.expiresAt !== 'string' ||
157
+ (building.afterId !== null && !/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(building.afterId)) ||
158
+ building.expiresAt !== plusDataRightsDays(canonicalDataRightsNow(building.createdAt), 400) ||
159
+ Date.parse(startedAt) >= Date.parse(building.expiresAt))
160
+ throw new Error('Retention report checkpoint differs from this invocation or has expired.');
161
+ building.tail = building.tail.map(candidate => validateCandidate(candidate, command.asOf));
162
+ if (building.scanComplete ? building.tail.length !== 0 || building.pages.length !== Math.ceil(building.due / CHUNK_SIZE)
163
+ : building.pages.length * CHUNK_SIZE + building.tail.length !== building.due)
164
+ throw new Error('Retention report checkpoint has inconsistent candidate counts.');
165
+ if (building.status === 'completed') {
166
+ const { run } = await loadRetentionRun(command.runId, startedAt);
167
+ if (run.status !== 'reported')
168
+ throw new Error('Retention report cannot be resumed after approval or execution; retained apply evidence is unchanged.');
169
+ await snapshotFor(run);
170
+ return finishEvidence(command, run, { applied: 0, alreadyApplied: 0, applyPages: 0,
171
+ due: building.due, reportPages: building.queryPages }, building.createdAt, run.createdAt);
172
+ }
173
+ if (!retained) {
174
+ await store.commit({ tenantId: TENANT, changes: [
175
+ { action: 'check', collection: RETENTION_RUNS, id: command.runId, expectedVersion: 0 },
176
+ { action: 'put', collection: SNAPSHOTS, id: command.runId, expectedVersion: 0, value: building },
177
+ ] });
178
+ version++;
179
+ }
180
+ // Each invocation scans at most 1,000 rows. The 10,000 bound applies to the
181
+ // reviewed deletion batch, not to unrelated healthy records in the table.
182
+ for (let queries = 0; !building.scanComplete && queries < REPORT_PAGES_PER_INVOCATION; queries++) {
183
+ if (Date.now() >= deadline) return { complete: false as const, runRef: command.runId, checkpointComplete: false };
184
+ const page = await store.list(TENANT, 'records', { limit: CHUNK_SIZE,
185
+ ...(building.afterId ? { afterId: building.afterId } : {}) });
186
+ let afterId = building.afterId, scanned = building.scanned, due = building.due;
187
+ const candidates = [...building.tail];
188
+ for (const row of page.records) {
189
+ if (afterId && row.id <= afterId) throw new Error('Retention inventory did not advance.');
190
+ scanned++; afterId = row.id;
191
+ const selected = selectRetentionCandidate(row, command.asOf);
192
+ if (selected) {
193
+ const candidate = validateCandidate(selected, command.asOf);
194
+ if (candidate.recordId !== row.id || candidate.recordVersion !== row.version) throw new Error('Retention adapter substituted the record identity.');
195
+ candidates.push(candidate); due++;
196
+ }
197
+ if (due === MAX_ITEMS) break;
198
+ }
199
+ if (page.nextId && due < MAX_ITEMS && (page.records.length === 0 || page.nextId !== afterId))
200
+ throw new Error('Retention inventory is incomplete or its cursor is invalid.');
201
+ const scanComplete = !page.nextId || due === MAX_ITEMS;
202
+ const pages = [...building.pages], chunks = [];
203
+ while (candidates.length >= CHUNK_SIZE || (scanComplete && candidates.length)) {
204
+ const records = candidates.splice(0, CHUNK_SIZE), index = pages.length;
205
+ pages.push(sha(records));
206
+ chunks.push({ action: 'put' as const, collection: CANDIDATES, id: chunkId(command.runId, index), expectedVersion: 0,
207
+ value: { runId: command.runId, stage: retentionStage(), slice: '${name}', index, records, expiresAt: building.expiresAt } });
208
+ }
209
+ const next = { ...building, pages, due, scanned, queryPages: building.queryPages + 1,
210
+ afterId, tail: candidates, scanComplete };
211
+ bounded(deadline);
212
+ await store.commit({ tenantId: TENANT, changes: [
213
+ { action: 'check', collection: RETENTION_RUNS, id: command.runId, expectedVersion: 0 },
214
+ { action: 'put', collection: SNAPSHOTS, id: command.runId, expectedVersion: version, value: next }, ...chunks,
215
+ ] });
216
+ building = next; version++;
217
+ }
218
+ if (!building.scanComplete) return { complete: false as const, runRef: command.runId, checkpointComplete: false };
219
+ bounded(deadline);
220
+ const completedAt = now();
221
+ const plan: ${pascalName}RetentionPlanV1 = { asOf: command.asOf, candidateDigest: inventoryDigest(building.pages, building.due),
222
+ categoryId: 'product-record', due: building.due, locationId: 'primary-database', maxItems: 10000,
223
+ pageSize: 100, policyVersion: RETENTION_POLICY, retentionDays: RETENTION_DAYS, runId: command.runId };
224
+ const run = createReportedRetentionRun(plan, completedAt);
225
+ const snapshot: Snapshot = { ...building, status: 'completed', planDigest: planDigest(run) };
226
+ await store.commit({ tenantId: TENANT, changes: [retentionRunChange(run, 0),
227
+ { action: 'put', collection: SNAPSHOTS, id: command.runId, expectedVersion: version, value: snapshot },
228
+ audit(command, principal, 'report-completed', completedAt),
229
+ ] });
230
+ return finishEvidence(command, run, { applied: 0, alreadyApplied: 0, applyPages: 0, due: building.due, reportPages: building.queryPages }, building.createdAt, completedAt);
231
+ }
232
+ async function snapshotFor(run: RetentionRun) {
233
+ const row = await dataStore().get(TENANT, SNAPSHOTS, run.plan.runId);
234
+ const value = row?.value as Snapshot | undefined;
235
+ if (!value || value.kind !== 'retention-snapshot' || value.status !== 'completed' || value.runId !== run.plan.runId ||
236
+ value.stage !== run.stage || value.slice !== '${name}' || value.planDigest !== planDigest(run) || value.due !== run.plan.due ||
237
+ !Array.isArray(value.pages) || value.pages.length !== Math.ceil(value.due / CHUNK_SIZE) ||
238
+ value.pages.some(digest => typeof digest !== 'string' || !/^sha256:[a-f0-9]{64}$/.test(digest)) ||
239
+ inventoryDigest(value.pages, value.due) !== run.plan.candidateDigest ||
240
+ !Number.isSafeInteger(value.scanned) || value.scanned < value.due ||
241
+ !Number.isSafeInteger(value.queryPages) || value.queryPages < 1 ||
242
+ value.scanComplete !== true || value.tail?.length !== 0 ||
243
+ typeof value.createdAt !== 'string' || typeof value.expiresAt !== 'string')
244
+ throw new Error('The approved retention snapshot is missing or inconsistent.');
245
+ canonicalDataRightsNow(value.createdAt); canonicalDataRightsNow(value.expiresAt);
246
+ if (value.expiresAt !== plusDataRightsDays(value.createdAt, 400) || Date.parse(now()) >= Date.parse(value.expiresAt))
247
+ throw new Error('The approved retention snapshot is expired.');
248
+ return { snapshot: value, version: row!.version };
249
+ }
250
+ async function candidatePage(run: RetentionRun, snapshot: Snapshot, offset: number, limit: number) {
251
+ const result: RetentionCandidate[] = [];
252
+ for (let index = Math.floor(offset / CHUNK_SIZE); index < Math.ceil(Math.min(offset + limit, snapshot.due) / CHUNK_SIZE); index++) {
253
+ const row = await dataStore().get(TENANT, CANDIDATES, chunkId(run.plan.runId, index));
254
+ const value = row?.value as { runId: string; stage: string; slice: string; index: number; records: RetentionCandidate[]; expiresAt: string } | undefined;
255
+ if (!value || value.runId !== run.plan.runId || value.stage !== run.stage || value.slice !== '${name}' || value.index !== index ||
256
+ !Array.isArray(value.records) || value.records.length !== Math.min(CHUNK_SIZE, snapshot.due - index * CHUNK_SIZE) ||
257
+ value.expiresAt !== snapshot.expiresAt)
258
+ throw new Error('Retention candidate page is missing or outside its approved snapshot.');
259
+ const records = value.records.map(record => validateCandidate(record, run.plan.asOf));
260
+ if (sha(records) !== snapshot.pages[index]) throw new Error('Retention candidate page changed after approval.');
261
+ result.push(...records);
262
+ }
263
+ const selected = result.slice(offset % CHUNK_SIZE, offset % CHUNK_SIZE + limit);
264
+ if (new Set(selected.map(record => record.recordId)).size !== selected.length) throw new Error('Retention candidate page has duplicate records.');
265
+ return selected;
266
+ }
267
+ function offsetFor(checkpoint: DataLifecycleRetentionCheckpointV1, due: number) {
268
+ if (!checkpoint || checkpoint.version !== 1 || checkpoint.policyVersion !== RETENTION_POLICY || typeof checkpoint.complete !== 'boolean')
269
+ throw new Error('Retention execution checkpoint is malformed.');
270
+ if (checkpoint.complete) {
271
+ if (checkpoint.cursor !== undefined) throw new Error('Completed retention cannot retain a cursor.');
272
+ return due;
273
+ }
274
+ if (checkpoint.cursor === undefined) return 0;
275
+ if (!/^offset_[1-9][0-9]*$/.test(checkpoint.cursor)) throw new Error('Retention execution cursor is invalid.');
276
+ const offset = Number(checkpoint.cursor.slice(7));
277
+ if (!Number.isSafeInteger(offset) || offset % 100 || offset >= due) throw new Error('Retention execution cursor is outside its approved plan.');
278
+ return offset;
279
+ }
280
+ async function executionFor(run: RetentionRun) {
281
+ const row = await dataStore().get(TENANT, EXECUTIONS, run.plan.runId);
282
+ const value = row?.value as Execution | undefined;
283
+ if (!row || !value || value.kind !== 'retention-execution' || value.runId !== run.plan.runId || value.planDigest !== planDigest(run) ||
284
+ value.approvalId !== run.approval?.id || !Number.isSafeInteger(value.pageAttempts) || value.pageAttempts < 0 ||
285
+ !Number.isSafeInteger(value.replays) || value.replays < 0)
286
+ throw new Error('Retention execution is missing or no longer matches its approval.');
287
+ offsetFor(value.checkpoint, run.plan.due);
288
+ if (value.completedAt !== null) {
289
+ if (typeof value.completedAt !== 'string') throw new Error('Retention completion time is invalid.');
290
+ canonicalDataRightsNow(value.completedAt);
291
+ if (!value.checkpoint.complete || run.status !== 'completed' || value.completedAt !== run.approval?.execution?.completedAt)
292
+ throw new Error('Retention lacks matching completed execution evidence.');
293
+ } else if (run.status === 'completed') throw new Error('Retention completion evidence is missing.');
294
+ return { execution: value, version: row.version };
295
+ }
296
+ async function applyCandidate(command: RetentionInput, principal: AuthorizationPrincipal, run: RetentionRun, runVersion: number,
297
+ candidate: RetentionCandidate, idempotencyKey: string) {
298
+ const store = dataStore();
299
+ const eventId = 'retention-' + createHash('sha256').update(command.runId + '\\0' + idempotencyKey).digest('hex');
300
+ const receiptId = command.runId + ':' + eventId;
301
+ let row = await store.get(TENANT, RECEIPTS, receiptId);
302
+ let receipt = row?.value as Receipt | undefined;
303
+ const prior = !!row;
304
+ if (!row) {
305
+ const record = await store.get(TENANT, 'records', candidate.recordId);
306
+ if (!record || record.version !== candidate.recordVersion) throw new Error('A reviewed record changed; create and approve a new retention report.');
307
+ const current = selectRetentionCandidate({ ...record, id: candidate.recordId }, run.plan.asOf);
308
+ if (!current || sha(validateCandidate(current, run.plan.asOf)) !== sha(candidate)) throw new Error('The reviewed record is no longer due.');
309
+ const at = now();
310
+ const holds = await loadActiveRecordHolds(candidate.recordId, at, 'deletion');
311
+ if (holds.evaluation.blocked) throw new Error('Retention deletion is blocked by an active hold.');
312
+ receipt = { kind: 'retention-receipt', runId: command.runId, planDigest: planDigest(run), candidateDigest: sha(candidate),
313
+ eventId, appliedAt: at, publishedAt: null, expiresAt: plusDataRightsDays(at, 400) };
314
+ const ledger = createDataLifecycleLedgerEntry({ action: 'deletion', categoryId: 'product-record', effectiveAt: at,
315
+ expiresAt: receipt.expiresAt, policyVersion: RETENTION_POLICY, pseudonymousKey: candidate.recordRef });
316
+ const entry = buildEventEntry(${pascalName}DataLifecycleChanged,
317
+ create${pascalName}DataLifecycleChanged({ action: 'deletion', occurredAt: at, policyVersion: RETENTION_POLICY,
318
+ recordId: candidate.recordId, requestRef: approvalReference(command.approvalRequestId) }),
319
+ { busName: process.env.EVENT_BUS_NAME ?? '', stage: retentionStage(), eventId, occurredAt: at,
320
+ context: { correlationId: command.correlationId, tenantId: TENANT } }).entry;
321
+ await store.commit({ tenantId: TENANT, changes: [
322
+ { action: 'check', collection: RETENTION_RUNS, id: command.runId, expectedVersion: runVersion },
323
+ { action: 'delete', collection: 'records', id: candidate.recordId, expectedVersion: candidate.recordVersion },
324
+ holds.check,
325
+ { action: 'put', collection: RECEIPTS, id: receiptId, expectedVersion: 0, value: receipt },
326
+ { action: 'put', collection: 'data-lifecycle-ledger', id: eventId, expectedVersion: 0, value: ledger },
327
+ audit(command, principal, 'primary-deleted', at),
328
+ ], events: [entry], retainEventsUntilAcknowledged: true });
329
+ row = await store.get(TENANT, RECEIPTS, receiptId); receipt = row?.value as Receipt | undefined;
330
+ }
331
+ if (!row || !receipt || receipt.kind !== 'retention-receipt' || receipt.runId !== command.runId ||
332
+ receipt.planDigest !== planDigest(run) || receipt.candidateDigest !== sha(candidate) || receipt.eventId !== eventId ||
333
+ typeof receipt.appliedAt !== 'string' || receipt.expiresAt !== plusDataRightsDays(receipt.appliedAt, 400))
334
+ throw new Error('Retention receipt is missing or differs from the approved effect.');
335
+ canonicalDataRightsNow(receipt.appliedAt);
336
+ if (Date.parse(receipt.appliedAt) > Date.parse(now()) || Date.parse(now()) >= Date.parse(receipt.expiresAt)) throw new Error('Retention receipt is expired or future-dated.');
337
+ if (receipt.publishedAt !== null) {
338
+ if (typeof receipt.publishedAt !== 'string') throw new Error('Retention delivery evidence is invalid.');
339
+ canonicalDataRightsNow(receipt.publishedAt);
340
+ if (Date.parse(receipt.publishedAt) < Date.parse(receipt.appliedAt) || Date.parse(receipt.publishedAt) > Date.parse(now())) throw new Error('Retention delivery time is invalid.');
341
+ return 'already-applied' as const;
342
+ }
343
+ const delivery = await dispatchEventIntent(eventId);
344
+ if (delivery === 'delivery-pending') throw new DeliveryPending('Another worker holds the durable delivery lease.');
345
+ if (delivery !== 'published') throw new Error('Retention event remains unacknowledged; retry the exact approved run.');
346
+ await store.commit({ tenantId: TENANT, changes: [
347
+ { action: 'check', collection: RETENTION_RUNS, id: command.runId, expectedVersion: runVersion },
348
+ { action: 'put', collection: RECEIPTS, id: receiptId, expectedVersion: row.version, value: { ...receipt, publishedAt: now() } },
349
+ ], acknowledgeEvents: [eventId] });
350
+ return prior ? 'already-applied' as const : 'applied' as const;
351
+ }
352
+ function finishEvidence(command: RetentionInput, run: RetentionRun, counts: {
353
+ applied: number; alreadyApplied: number; applyPages: number; due: number; reportPages: number;
354
+ }, startedAt: string, completedAt: string) {
355
+ return { complete: true as const, runRef: command.runId, counts, planDigest: 'sha256:' + planDigest(run),
356
+ ...(command.mode === 'apply' ? { approvalRequestId: command.approvalRequestId, checkpointComplete: true } : {}),
357
+ evidence: createDataLifecycleEvidence({ categoryId: 'product-record', completedAt, counts,
358
+ operation: command.mode === 'apply' ? 'retention-apply' : 'retention-report', outcome: 'succeeded',
359
+ policyVersion: RETENTION_POLICY, ...(command.approvalRequestId ? { requestRef: approvalReference(command.approvalRequestId) } : {}),
360
+ startedAt, summary: command.mode === 'report' ? 'Bounded native retention report completed without product-data mutation.'
361
+ : 'Bounded native retention apply and durable event delivery completed under non-author approval.',
362
+ systemIds: ['primary-database', 'lifecycle-control'] }),
363
+ };
364
+ }
365
+ export async function runNativeRetention(command: RetentionInput, budgetMs = 240_000) {
366
+ input(command);
367
+ if (!Number.isSafeInteger(budgetMs) || budgetMs < 1 || budgetMs > 240_000) throw new Error('Retention requires a bounded invocation budget.');
368
+ const startedAt = now(), deadline = Date.now() + budgetMs;
369
+ const principal = await authorizeRetentionOperation(command.mode, startedAt, command.runId);
370
+ bounded(deadline);
371
+ if (command.resume) {
372
+ const row = await dataStore().get(TENANT, SNAPSHOTS, command.runId);
373
+ const original = (row?.value as Snapshot | undefined)?.command;
374
+ if (!original) throw new Error('Retention report resume requires its existing checkpoint.');
375
+ input(original);
376
+ if (original.mode !== 'report' || original.resume !== undefined || original.runId !== command.runId ||
377
+ original.slice !== command.slice || original.stage !== command.stage || original.sourceCommit !== command.sourceCommit)
378
+ throw new Error('Retention report resume differs from the original source or scope. Resume with the original checkout/artifacts and EBK_SOURCE_COMMIT=' + original.sourceCommit + '.');
379
+ // The new execution's clock/correlation cannot select additional records.
380
+ // report() revalidates the retained policy binding, expiry and checkpoint.
381
+ command = original;
382
+ }
383
+ if (command.mode === 'report') return report(command, principal, startedAt, deadline);
384
+ const store = dataStore();
385
+ let { run, version: runVersion } = await loadRetentionRun(command.runId, startedAt);
386
+ if (!run.approval || run.approval.id !== command.approvalRequestId) throw new Error('Retention apply requires its exact report approval.');
387
+ const { snapshot } = await snapshotFor(run);
388
+ if (run.status === 'completed') {
389
+ const { execution } = await executionFor(run);
390
+ if (!execution.completedAt) throw new Error('Retention completion is missing.');
391
+ return finishEvidence(command, run, { applied: run.plan.due, alreadyApplied: execution.replays,
392
+ applyPages: execution.pageAttempts, due: run.plan.due, reportPages: snapshot.queryPages }, run.approval.execution!.startedAt, execution.completedAt);
393
+ }
394
+ if (!['approval-approved', 'applying', 'retry-required'].includes(run.status)) throw new Error('Retention run is not approved for apply.');
395
+ const begun = beginApprovalExecution(run.approval, { ...retentionApprovalInput(run.plan), executionId: command.runId,
396
+ now: startedAt, requiredPolicyVersion: RETENTION_AUTHORIZATION_POLICY });
397
+ assertAuthorizationAllowed(begun.decision);
398
+ if (run.status === 'approval-approved') {
399
+ // Only the retained, approved candidates are mutation targets. Each target
400
+ // is revalidated with its exact version and hold set at the deletion below;
401
+ // later unrelated inserts cannot expand or invalidate this bounded approval.
402
+ const execution: Execution = { kind: 'retention-execution', runId: command.runId, planDigest: planDigest(run),
403
+ approvalId: command.approvalRequestId, checkpoint: createDataLifecycleRetentionCheckpoint(RETENTION_POLICY), pageAttempts: 0, replays: 0, completedAt: null };
404
+ bounded(deadline);
405
+ await store.commit({ tenantId: TENANT, changes: [
406
+ retentionRunChange({ ...run, approval: begun.request, status: 'applying', updatedAt: now() }, runVersion),
407
+ { action: 'put', collection: EXECUTIONS, id: command.runId, expectedVersion: 0, value: execution },
408
+ audit(command, principal, 'execution-started', now()),
409
+ ] });
410
+ ({ run, version: runVersion } = await loadRetentionRun(command.runId, now()));
411
+ }
412
+ let { execution, version: executionVersion } = await executionFor(run);
413
+ if (!execution.checkpoint.complete) {
414
+ const offset = offsetFor(execution.checkpoint, run.plan.due);
415
+ const candidates = await candidatePage(run, snapshot, offset, 100);
416
+ const lookup = new Map(candidates.map(candidate => [candidate.recordRef, candidate]));
417
+ let deliveryPending = false;
418
+ const result = await runDataLifecycleRetention({ asOf: run.plan.asOf, checkpoint: execution.checkpoint,
419
+ limit: 100, mode: 'apply', policyVersion: RETENTION_POLICY, adapter: {
420
+ scan: async () => ({ items: candidates, ...(offset + candidates.length < run.plan.due ? { nextCursor: 'offset_' + (offset + candidates.length) } : {}) }),
421
+ apply: async ({ candidate, idempotencyKey }) => {
422
+ bounded(deadline);
423
+ const retained = lookup.get(candidate.recordRef);
424
+ if (!retained) throw new Error('Retention candidate was not part of this reviewed page.');
425
+ try { return await applyCandidate(command, principal, run, runVersion, retained, idempotencyKey); }
426
+ catch (error) { deliveryPending = error instanceof DeliveryPending; throw error; }
427
+ },
428
+ } });
429
+ execution = { ...execution, checkpoint: result.checkpoint, pageAttempts: execution.pageAttempts + 1, replays: execution.replays + result.alreadyApplied };
430
+ await store.commit({ tenantId: TENANT, changes: [
431
+ { action: 'check', collection: RETENTION_RUNS, id: command.runId, expectedVersion: runVersion },
432
+ { action: 'put', collection: EXECUTIONS, id: command.runId, expectedVersion: executionVersion, value: execution },
433
+ ] });
434
+ executionVersion++;
435
+ if (result.status === 'retry-required') {
436
+ if (deliveryPending) return { complete: false as const, runRef: command.runId, checkpointComplete: false, deliveryPending: true };
437
+ throw new Error('Retention apply needs an exact-run retry; no success evidence was issued.');
438
+ }
439
+ if (!execution.checkpoint.complete) return { complete: false as const, runRef: command.runId, checkpointComplete: false };
440
+ }
441
+ bounded(deadline);
442
+ const completedAt = now();
443
+ const completed = completeApprovalExecution(run.approval!, { executionId: command.runId, now: completedAt, requiredPolicyVersion: RETENTION_AUTHORIZATION_POLICY });
444
+ assertAuthorizationAllowed(completed.decision);
445
+ run = { ...run, approval: completed.request, status: 'completed', updatedAt: completedAt };
446
+ await store.commit({ tenantId: TENANT, changes: [retentionRunChange(run, runVersion),
447
+ { action: 'put', collection: EXECUTIONS, id: command.runId, expectedVersion: executionVersion, value: { ...execution, completedAt } },
448
+ audit(command, principal, 'execution-completed', completedAt),
449
+ ] });
450
+ return finishEvidence(command, run, { applied: run.plan.due, alreadyApplied: execution.replays,
451
+ applyPages: execution.pageAttempts, due: run.plan.due, reportPages: snapshot.queryPages }, run.approval!.execution!.startedAt, completedAt);
452
+ }
453
+ `,
454
+ 'jobs/data-retention/src/run.ts': `import { createLogger } from '@empire-builder-kit/runtime/logging';
455
+ import { runNativeRetention, type RetentionInput } from '../../../data/retention-worker.js';
456
+ export { authorizeRetentionOperation } from '../../../data/retention-worker.js';
457
+
458
+ /** Step Functions invokes one bounded native page; only complete=true carries success evidence. */
459
+ export async function handler(event: RetentionInput, context?: { getRemainingTimeInMillis(): number }) {
460
+ const logger = createLogger({ component: 'job-data-retention', feature: 'data-lifecycle', operation: 'retention',
461
+ slice: '${name}', stage: process.env.EBK_STAGE ?? 'unknown', workspace: process.env.EBK_WORKSPACE ?? '${name}' });
462
+ try {
463
+ const remaining = context?.getRemainingTimeInMillis() ?? 250_000;
464
+ const result = await runNativeRetention(event, Math.min(240_000, remaining - 10_000));
465
+ logger.info('Native retention invocation completed', { attributes: { complete: result.complete },
466
+ outcome: result.complete ? 'success' : 'unknown' });
467
+ return result;
468
+ } catch (error) {
469
+ // No record values, secret material, snapshot identifiers or provider body is logged.
470
+ logger.error('Native retention invocation failed', { outcome: 'failure', attributes: { retryRequired: true } });
471
+ throw error;
472
+ }
473
+ }
474
+ `,
475
+ };
476
+ }
477
+ //# sourceMappingURL=built-in-plan-key-value-retention-worker.js.map
@@ -0,0 +1,2 @@
1
+ /** Framework retention control records remain in DynamoDB, including for SQL-enabled Slices. */
2
+ export declare function renderKeyValueRetentionFiles(name: string, pascalName: string): Readonly<Record<string, string>>;