@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
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FOUNDATION_CAPABILITY_VOCABULARY = exports.FOUNDATION_BASE_CAPABILITIES = exports.LEGACY_STANDARD_FOUNDATION_CAPABILITIES = exports.FOUNDATION_CAPABILITY_CONTRACT_VERSION = void 0;
4
+ exports.readStandardSqlDeclaration = readStandardSqlDeclaration;
5
+ exports.standardPersistenceRequirement = standardPersistenceRequirement;
6
+ exports.planFoundationCapabilities = planFoundationCapabilities;
7
+ const semver_1 = require("semver");
8
+ const validation_js_1 = require("../validation.js");
9
+ /** Resource capability version, independent of the requirement-document schema. */
10
+ exports.FOUNDATION_CAPABILITY_CONTRACT_VERSION = '2.0.0';
11
+ /** Known generated-source migration only; never accepted as a live v2 contract. */
12
+ exports.LEGACY_STANDARD_FOUNDATION_CAPABILITIES = [
13
+ 'network',
14
+ 'routing',
15
+ 'container-compute',
16
+ 'postgres',
17
+ 'identity',
18
+ 'events',
19
+ 'observability',
20
+ 'configuration',
21
+ 'deployment',
22
+ ];
23
+ exports.FOUNDATION_BASE_CAPABILITIES = [
24
+ 'key-value',
25
+ 'routing',
26
+ 'identity',
27
+ 'events',
28
+ 'observability',
29
+ 'configuration',
30
+ 'deployment',
31
+ ];
32
+ exports.FOUNDATION_CAPABILITY_VOCABULARY = [
33
+ ...exports.FOUNDATION_BASE_CAPABILITIES,
34
+ 'network',
35
+ 'container-compute',
36
+ 'postgres',
37
+ ];
38
+ function requireCapabilities(value, label) {
39
+ if (!Array.isArray(value))
40
+ throw new Error(`${label} must be an array.`);
41
+ const seen = new Set();
42
+ for (const capability of value) {
43
+ if (typeof capability !== 'string' ||
44
+ !exports.FOUNDATION_CAPABILITY_VOCABULARY.some((known) => known === capability) ||
45
+ seen.has(capability)) {
46
+ throw new Error(`${label} contains an unknown or duplicate capability.`);
47
+ }
48
+ seen.add(capability);
49
+ }
50
+ return [...value];
51
+ }
52
+ function requireExactKeys(value, keys, label) {
53
+ if (Object.keys(value).some((key) => !keys.includes(key))) {
54
+ throw new Error(`${label} contains unsupported properties.`);
55
+ }
56
+ }
57
+ /** Absence means DynamoDB-first; false/null is never a database retirement instruction. */
58
+ function readStandardSqlDeclaration(inputs) {
59
+ if (!(0, validation_js_1.isRecord)(inputs))
60
+ throw new Error('Standard Blueprint inputs must be an object.');
61
+ if (!Object.prototype.hasOwnProperty.call(inputs, 'sql'))
62
+ return null;
63
+ const sql = inputs.sql;
64
+ if (!(0, validation_js_1.isRecord)(sql))
65
+ throw new Error('Standard Blueprint inputs.sql must declare a relational reason.');
66
+ requireExactKeys(sql, ['reason'], 'Standard Blueprint inputs.sql');
67
+ if (typeof sql.reason !== 'string' ||
68
+ sql.reason.trim().length === 0 ||
69
+ sql.reason.length > 512 ||
70
+ [...sql.reason].some((character) => {
71
+ const code = character.charCodeAt(0);
72
+ return code < 0x20 || code === 0x7f;
73
+ })) {
74
+ throw new Error('Standard Blueprint inputs.sql.reason must be a non-empty single-line rationale of at most 512 characters.');
75
+ }
76
+ return { reason: sql.reason.trim() };
77
+ }
78
+ function standardPersistenceRequirement(inputs, compositions = []) {
79
+ const sql = readStandardSqlDeclaration(inputs);
80
+ const containers = sql !== null ||
81
+ compositions.some(({ kind }) => kind === 'service' || kind === 'job');
82
+ return {
83
+ contract: '^2.0.0',
84
+ capabilities: [
85
+ ...exports.FOUNDATION_BASE_CAPABILITIES,
86
+ ...(containers ? ['network', 'container-compute'] : []),
87
+ ...(sql ? ['postgres'] : []),
88
+ ],
89
+ };
90
+ }
91
+ function readCurrentDescriptor(value) {
92
+ if (!(0, validation_js_1.isRecord)(value))
93
+ throw new Error('Existing Foundation descriptor must be an object.');
94
+ requireExactKeys(value, ['contractVersion', 'capabilities'], 'Existing Foundation descriptor');
95
+ const capabilities = requireCapabilities(value.capabilities, 'Existing Foundation capabilities');
96
+ const available = new Set(capabilities);
97
+ if (value.contractVersion === '1.0.0') {
98
+ // This is an explicit generated-source upgrade, not a live discovery fallback.
99
+ // The old Standard Foundation always provisioned all nine capabilities.
100
+ if (capabilities.length !== exports.LEGACY_STANDARD_FOUNDATION_CAPABILITIES.length ||
101
+ exports.LEGACY_STANDARD_FOUNDATION_CAPABILITIES.some((capability) => !available.has(capability))) {
102
+ throw new Error('Existing v1 Standard Foundation must retain its complete capability declaration before upgrade.');
103
+ }
104
+ return { capabilities, migratedFromContract: '1.0.0' };
105
+ }
106
+ if (value.contractVersion !== exports.FOUNDATION_CAPABILITY_CONTRACT_VERSION ||
107
+ exports.FOUNDATION_BASE_CAPABILITIES.some((capability) => !available.has(capability)) ||
108
+ (available.has('postgres') &&
109
+ (!available.has('network') || !available.has('container-compute'))) ||
110
+ (available.has('container-compute') && !available.has('network'))) {
111
+ throw new Error('Existing Foundation descriptor must use contract 2.0.0 with complete capability dependencies.');
112
+ }
113
+ return { capabilities, migratedFromContract: null };
114
+ }
115
+ /**
116
+ * Pure generation plan. Existing declarations are monotonic: removing a Slice
117
+ * cannot remove a database, network, or cluster. Retirement is a separate operation.
118
+ * This function never reads AWS and does not attest that resources are deployed.
119
+ */
120
+ function planFoundationCapabilities(options) {
121
+ const current = options.current === undefined
122
+ ? {
123
+ capabilities: [],
124
+ migratedFromContract: null,
125
+ }
126
+ : readCurrentDescriptor(options.current);
127
+ const selected = new Set([
128
+ ...exports.FOUNDATION_BASE_CAPABILITIES,
129
+ ...current.capabilities,
130
+ ]);
131
+ for (const requirement of options.requirements) {
132
+ if (!(0, validation_js_1.isRecord)(requirement))
133
+ throw new Error('Foundation requirement must be an object.');
134
+ requireExactKeys(requirement, ['contract', 'capabilities'], 'Foundation requirement');
135
+ if (typeof requirement.contract !== 'string' ||
136
+ !requirement.contract.trim() ||
137
+ (0, semver_1.validRange)(requirement.contract) === null ||
138
+ !(0, semver_1.satisfies)(exports.FOUNDATION_CAPABILITY_CONTRACT_VERSION, requirement.contract)) {
139
+ throw new Error('Foundation requirement must admit contract 2.0.0; regenerate older Blueprint requirements explicitly.');
140
+ }
141
+ for (const capability of requireCapabilities(requirement.capabilities, 'Foundation requirement capabilities')) {
142
+ selected.add(capability);
143
+ }
144
+ }
145
+ // The current SQL migration implementation uses private container compute.
146
+ // Keep its resource dependency explicit rather than allocating NAT for every Slice.
147
+ if (selected.has('postgres'))
148
+ selected.add('container-compute');
149
+ if (selected.has('container-compute'))
150
+ selected.add('network');
151
+ const capabilities = exports.FOUNDATION_CAPABILITY_VOCABULARY.filter((capability) => selected.has(capability));
152
+ const retained = new Set(current.capabilities);
153
+ return {
154
+ descriptor: {
155
+ contractVersion: exports.FOUNDATION_CAPABILITY_CONTRACT_VERSION,
156
+ capabilities,
157
+ },
158
+ added: capabilities.filter((capability) => !retained.has(capability)),
159
+ retained: capabilities.filter((capability) => retained.has(capability)),
160
+ migratedFromContract: current.migratedFromContract,
161
+ resources: {
162
+ containerCompute: selected.has('container-compute'),
163
+ network: selected.has('network'),
164
+ postgres: selected.has('postgres'),
165
+ },
166
+ };
167
+ }
168
+ //# sourceMappingURL=capability-plan.js.map
@@ -1,6 +1,6 @@
1
1
  import { type FoundationRequirement, type StandardFoundationCapability } from './requirements.js';
2
2
  export declare const FOUNDATION_SSM_NAMESPACE: "/ebk";
3
- export declare const FOUNDATION_SSM_SCHEMA_VERSION: 6;
3
+ export declare const FOUNDATION_SSM_SCHEMA_VERSION: 7;
4
4
  export declare const FOUNDATION_SSM_KEYS: {
5
5
  readonly accountCostPolicyDigest: "accountCostPolicyDigest";
6
6
  readonly accountMonthlyMaximumUsd: "accountMonthlyMaximumUsd";
@@ -28,22 +28,25 @@ export declare const FOUNDATION_SSM_KEYS: {
28
28
  readonly vpcId: "vpcId";
29
29
  };
30
30
  export type FoundationSsmKey = keyof typeof FOUNDATION_SSM_KEYS;
31
- export declare const FOUNDATION_REQUIRED_SSM_KEYS: FoundationSsmKey[];
31
+ export declare const FOUNDATION_POSTGRES_SSM_KEYS: readonly ["databaseClusterArn", "databaseClusterEndpoint", "databaseClusterId", "databaseClusterResourceId", "databaseHost", "databaseMasterSecretArn", "databasePort"];
32
+ /** Required for every Foundation; optional resource capabilities add their own keys. */
33
+ export declare const FOUNDATION_REQUIRED_SSM_KEYS: ("contractVersion" | "capabilities" | "accountCostPolicyDigest" | "accountMonthlyMaximumUsd" | "alertTopicArn" | "clusterId" | "databaseClusterArn" | "databaseClusterEndpoint" | "databaseClusterId" | "databaseClusterResourceId" | "databaseHost" | "databaseMasterSecretArn" | "databasePort" | "eventBusArn" | "eventBusName" | "hasPublicDomain" | "identityUserPoolArn" | "identityUserPoolId" | "identityTokenEndpoint" | "rootDomain" | "routerDistributionId" | "routerUrl" | "schemaVersion" | "vpcId")[];
34
+ export declare function foundationSsmKeysForCapabilities(capabilities: readonly StandardFoundationCapability[]): FoundationSsmKey[];
32
35
  export declare const STANDARD_FOUNDATION_REQUIREMENT: FoundationRequirement;
33
36
  export interface FoundationDiscovery {
34
37
  accountCostPolicyDigest: `sha256:${string}`;
35
38
  accountMonthlyMaximumUsd: number;
36
39
  alertTopicArn: string;
37
40
  capabilities: StandardFoundationCapability[];
38
- clusterId: string;
41
+ clusterId?: string;
39
42
  contractVersion: string;
40
- databaseClusterArn: string;
41
- databaseClusterEndpoint: string;
42
- databaseClusterId: string;
43
- databaseClusterResourceId: string;
44
- databaseHost: string;
45
- databaseMasterSecretArn: string;
46
- databasePort: number;
43
+ databaseClusterArn?: string;
44
+ databaseClusterEndpoint?: string;
45
+ databaseClusterId?: string;
46
+ databaseClusterResourceId?: string;
47
+ databaseHost?: string;
48
+ databaseMasterSecretArn?: string;
49
+ databasePort?: number;
47
50
  eventBusArn: string;
48
51
  eventBusName: string;
49
52
  hasPublicDomain: boolean;
@@ -54,7 +57,7 @@ export interface FoundationDiscovery {
54
57
  routerDistributionId: string;
55
58
  routerUrl: string;
56
59
  schemaVersion: typeof FOUNDATION_SSM_SCHEMA_VERSION;
57
- vpcId: string;
60
+ vpcId?: string;
58
61
  }
59
62
  export interface ProductSliceRegistration {
60
63
  consumerStage: string;
@@ -1,16 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.STANDARD_FOUNDATION_REQUIREMENT = exports.FOUNDATION_REQUIRED_SSM_KEYS = exports.FOUNDATION_SSM_KEYS = exports.FOUNDATION_SSM_SCHEMA_VERSION = exports.FOUNDATION_SSM_NAMESPACE = void 0;
3
+ exports.STANDARD_FOUNDATION_REQUIREMENT = exports.FOUNDATION_REQUIRED_SSM_KEYS = exports.FOUNDATION_POSTGRES_SSM_KEYS = exports.FOUNDATION_SSM_KEYS = exports.FOUNDATION_SSM_SCHEMA_VERSION = exports.FOUNDATION_SSM_NAMESPACE = void 0;
4
+ exports.foundationSsmKeysForCapabilities = foundationSsmKeysForCapabilities;
4
5
  exports.foundationSsmStageRoot = foundationSsmStageRoot;
5
6
  exports.foundationSsmPath = foundationSsmPath;
6
7
  exports.productSliceRegistrationRoot = productSliceRegistrationRoot;
7
8
  exports.productSliceRegistrationPath = productSliceRegistrationPath;
8
9
  exports.productSliceMigrationPath = productSliceMigrationPath;
9
10
  exports.productSliceRetentionPath = productSliceRetentionPath;
10
- const requirements_js_1 = require("./requirements.js");
11
+ const capability_plan_js_1 = require("./capability-plan.js");
11
12
  const stages_js_1 = require("./stages.js");
12
13
  exports.FOUNDATION_SSM_NAMESPACE = '/ebk';
13
- exports.FOUNDATION_SSM_SCHEMA_VERSION = 6;
14
+ exports.FOUNDATION_SSM_SCHEMA_VERSION = 7;
14
15
  exports.FOUNDATION_SSM_KEYS = {
15
16
  accountCostPolicyDigest: 'accountCostPolicyDigest',
16
17
  accountMonthlyMaximumUsd: 'accountMonthlyMaximumUsd',
@@ -37,10 +38,35 @@ exports.FOUNDATION_SSM_KEYS = {
37
38
  schemaVersion: 'schemaVersion',
38
39
  vpcId: 'vpcId',
39
40
  };
40
- exports.FOUNDATION_REQUIRED_SSM_KEYS = Object.keys(exports.FOUNDATION_SSM_KEYS);
41
+ exports.FOUNDATION_POSTGRES_SSM_KEYS = [
42
+ 'databaseClusterArn',
43
+ 'databaseClusterEndpoint',
44
+ 'databaseClusterId',
45
+ 'databaseClusterResourceId',
46
+ 'databaseHost',
47
+ 'databaseMasterSecretArn',
48
+ 'databasePort',
49
+ ];
50
+ const conditionalKeys = new Set([
51
+ ...exports.FOUNDATION_POSTGRES_SSM_KEYS,
52
+ 'vpcId',
53
+ 'clusterId',
54
+ ]);
55
+ /** Required for every Foundation; optional resource capabilities add their own keys. */
56
+ exports.FOUNDATION_REQUIRED_SSM_KEYS = Object.keys(exports.FOUNDATION_SSM_KEYS).filter((key) => !conditionalKeys.has(key));
57
+ function foundationSsmKeysForCapabilities(capabilities) {
58
+ return [
59
+ ...exports.FOUNDATION_REQUIRED_SSM_KEYS,
60
+ ...(capabilities.includes('network') ? ['vpcId'] : []),
61
+ ...(capabilities.includes('container-compute')
62
+ ? ['clusterId']
63
+ : []),
64
+ ...(capabilities.includes('postgres') ? exports.FOUNDATION_POSTGRES_SSM_KEYS : []),
65
+ ];
66
+ }
41
67
  exports.STANDARD_FOUNDATION_REQUIREMENT = {
42
- capabilities: [...requirements_js_1.STANDARD_FOUNDATION_CAPABILITIES],
43
- contract: '^1.0.0',
68
+ capabilities: [...capability_plan_js_1.FOUNDATION_BASE_CAPABILITIES],
69
+ contract: '^2.0.0',
44
70
  };
45
71
  function requirePathSegment(value, label) {
46
72
  const normalized = value.trim();
@@ -1,9 +1,13 @@
1
1
  export * from './discovery.js';
2
+ export * from './capability-plan.js';
2
3
  export * from './local-database-contract.js';
3
4
  export * from './logging.js';
4
5
  export * from './logging-preflight.js';
6
+ export * from './partial-state.js';
5
7
  export * from './provision-database-bindings.js';
6
8
  export * from './provision-logical-database.js';
7
9
  export * from './requirements.js';
8
10
  export * from './router-origin-proof.js';
11
+ export * from './router-waf.js';
12
+ export declare function cleanupGithubPrivateSmoke(...args: Parameters<typeof import('./private-smoke-access.js').cleanupGithubPrivateSmoke>): Promise<void>;
9
13
  export * from './stages.js';
@@ -1,13 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cleanupGithubPrivateSmoke = cleanupGithubPrivateSmoke;
3
4
  const tslib_1 = require("tslib");
4
5
  tslib_1.__exportStar(require("./discovery.js"), exports);
6
+ tslib_1.__exportStar(require("./capability-plan.js"), exports);
5
7
  tslib_1.__exportStar(require("./local-database-contract.js"), exports);
6
8
  tslib_1.__exportStar(require("./logging.js"), exports);
7
9
  tslib_1.__exportStar(require("./logging-preflight.js"), exports);
10
+ tslib_1.__exportStar(require("./partial-state.js"), exports);
8
11
  tslib_1.__exportStar(require("./provision-database-bindings.js"), exports);
9
12
  tslib_1.__exportStar(require("./provision-logical-database.js"), exports);
10
13
  tslib_1.__exportStar(require("./requirements.js"), exports);
11
14
  tslib_1.__exportStar(require("./router-origin-proof.js"), exports);
15
+ tslib_1.__exportStar(require("./router-waf.js"), exports);
16
+ // SST bundles this infrastructure entry point. Keep the workflow-only AWS
17
+ // control plane lazy: its external SDK resolves from the installed package
18
+ // when the generated GitHub finalizer calls it, not from an SST config bundle.
19
+ async function cleanupGithubPrivateSmoke(...args) {
20
+ const { cleanupGithubPrivateSmoke: cleanup } = await Promise.resolve().then(() => require('./private-smoke-access.js'));
21
+ return cleanup(...args);
22
+ }
12
23
  tslib_1.__exportStar(require("./stages.js"), exports);
13
24
  //# sourceMappingURL=index.js.map
@@ -3,6 +3,8 @@ export interface LocalDatabaseContractOptions {
3
3
  password?: string;
4
4
  port?: number;
5
5
  slice: string;
6
+ stage?: string;
7
+ workspaceRoot?: string;
6
8
  }
7
9
  export interface LocalDatabaseContract {
8
10
  database: string;
@@ -28,4 +30,22 @@ export declare function resolveLogicalDatabaseIdentifiers(options: {
28
30
  slice: string;
29
31
  stage: string;
30
32
  }): LogicalDatabaseIdentifiers;
33
+ /** Read the same private allocation used by Docker, Drizzle, and SST links. */
31
34
  export declare function resolveLocalDatabaseContract(options: LocalDatabaseContractOptions): LocalDatabaseContract;
35
+ /** Prepare coordinates only; Docker's bind remains authoritative against races. */
36
+ export declare function prepareLocalDatabaseContract(options: LocalDatabaseContractOptions, isAvailable?: (port: number) => Promise<boolean>): Promise<LocalDatabaseContract>;
37
+ export type LocalDatabaseDockerCommand = (args: string[], env: NodeJS.ProcessEnv) => {
38
+ status: number | null;
39
+ stdout: string;
40
+ stderr: string;
41
+ error?: Error;
42
+ };
43
+ /** Exact-owned local Docker lifecycle. Volumes and allocation survive down. */
44
+ export declare function runLocalDatabaseLifecycle(options: LocalDatabaseContractOptions & {
45
+ action: 'up' | 'down';
46
+ composeFile: string;
47
+ }, dependencies?: {
48
+ docker?: LocalDatabaseDockerCommand;
49
+ environment?: NodeJS.ProcessEnv;
50
+ isAvailable?: (port: number) => Promise<boolean>;
51
+ }): Promise<void>;
@@ -6,6 +6,15 @@ exports.postgresIdentifierByteLength = postgresIdentifierByteLength;
6
6
  exports.assertPostgresIdentifierLength = assertPostgresIdentifierLength;
7
7
  exports.resolveLogicalDatabaseIdentifiers = resolveLogicalDatabaseIdentifiers;
8
8
  exports.resolveLocalDatabaseContract = resolveLocalDatabaseContract;
9
+ exports.prepareLocalDatabaseContract = prepareLocalDatabaseContract;
10
+ exports.runLocalDatabaseLifecycle = runLocalDatabaseLifecycle;
11
+ const node_child_process_1 = require("node:child_process");
12
+ const node_crypto_1 = require("node:crypto");
13
+ const node_fs_1 = require("node:fs");
14
+ const node_path_1 = require("node:path");
15
+ const ports_js_1 = require("../local-dev/ports.js");
16
+ const private_state_js_1 = require("../local-dev/private-state.js");
17
+ const task_identity_js_1 = require("../local-dev/task-identity.js");
9
18
  exports.POSTGRES_IDENTIFIER_MAX_BYTES = 63;
10
19
  function normalizePostgresIdentifier(input) {
11
20
  const sanitized = input.replace(/[^A-Za-z0-9_]/g, '_');
@@ -22,7 +31,7 @@ function postgresIdentifierByteLength(identifier) {
22
31
  function assertPostgresIdentifierLength(identifier, label) {
23
32
  const bytes = postgresIdentifierByteLength(identifier);
24
33
  if (bytes > exports.POSTGRES_IDENTIFIER_MAX_BYTES) {
25
- throw new Error(`${label} "${identifier}" is ${bytes} UTF-8 bytes; PostgreSQL identifiers must be ${exports.POSTGRES_IDENTIFIER_MAX_BYTES} bytes or fewer. Choose a shorter stage, Slice, or database identifier. Identifiers are never truncated.`);
34
+ throw new Error(`${label} "${identifier}" is ${bytes} UTF-8 bytes; PostgreSQL identifiers must be ${exports.POSTGRES_IDENTIFIER_MAX_BYTES} bytes or fewer. Shorten a user-selected Slice or database identifier before deployment; framework task stages are not user-selectable. Identifiers are never truncated.`);
26
35
  }
27
36
  }
28
37
  function resolveLogicalDatabaseIdentifiers(options) {
@@ -54,25 +63,265 @@ function resolveLogicalDatabaseIdentifiers(options) {
54
63
  readwriteRole,
55
64
  };
56
65
  }
57
- function deterministicLocalDatabasePort(key) {
58
- let hash = 5381;
59
- for (let index = 0; index < key.length; index += 1) {
60
- hash = (hash * 33) ^ key.charCodeAt(index);
66
+ function databaseIdentity(options) {
67
+ if (!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(options.slice)) {
68
+ throw new Error('Local Slice must be a DNS-safe identifier.');
61
69
  }
62
- return 54320 + (Math.abs(hash) % 100);
63
- }
64
- function resolveLocalDatabaseContract(options) {
65
- const database = normalizePostgresIdentifier(`${options.slice}_${options.database}`);
70
+ if (!/^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*$/.test(options.database)) {
71
+ throw new Error('Local database must be a logical database identifier.');
72
+ }
73
+ const workspaceRoot = (0, node_fs_1.realpathSync)(options.workspaceRoot ??
74
+ (0, node_child_process_1.execFileSync)('git', [
75
+ '--no-optional-locks',
76
+ '-c',
77
+ 'core.fsmonitor=false',
78
+ 'rev-parse',
79
+ '--show-toplevel',
80
+ ], {
81
+ cwd: process.cwd(),
82
+ encoding: 'utf8',
83
+ timeout: 5_000,
84
+ env: Object.fromEntries(Object.entries(process.env).filter(([key]) => !key.startsWith('GIT_'))),
85
+ stdio: ['ignore', 'pipe', 'pipe'],
86
+ }).trim());
87
+ const { taskId } = (0, task_identity_js_1.resolveTaskIdentity)(workspaceRoot);
88
+ const stage = (0, task_identity_js_1.taskStage)(taskId);
89
+ if (options.stage !== undefined && options.stage !== stage) {
90
+ throw new Error(`Local database stage does not match this worktree's task (${stage}).`);
91
+ }
92
+ const readableDatabase = normalizePostgresIdentifier(`t_${taskId}_${options.slice.length}_${options.slice}_${options.database}`);
93
+ // Preserve every previously valid allocation. Overlength names were never
94
+ // accepted, so use a bounded task + tuple digest only for that new domain.
95
+ const database = postgresIdentifierByteLength(`${readableDatabase}_readwrite`) <=
96
+ exports.POSTGRES_IDENTIFIER_MAX_BYTES
97
+ ? readableDatabase
98
+ : `t_${taskId}_${(0, node_crypto_1.createHash)('sha256')
99
+ .update(JSON.stringify([options.slice, options.database]))
100
+ .digest('hex')
101
+ .slice(0, 24)}`;
66
102
  const username = `${database}_readwrite`;
67
103
  assertPostgresIdentifierLength(database, 'Local database identifier');
68
104
  assertPostgresIdentifierLength(username, 'Local read-write role identifier');
105
+ const directory = (0, node_path_1.join)((0, node_path_1.dirname)((0, task_identity_js_1.taskIdentityPath)(workspaceRoot)), 'databases', taskId);
69
106
  return {
107
+ taskId,
108
+ stage,
109
+ directory,
110
+ path: (0, node_path_1.join)(directory, `${options.slice.length}-${options.slice}-${options.database}.json`),
111
+ project: `ebk-${taskId}-${options.slice.length}-${options.slice}-${options.database}`,
70
112
  database,
71
- host: '127.0.0.1',
72
- password: options.password ?? `${options.slice}-local-dev`,
73
- port: options.port ??
74
- deterministicLocalDatabasePort(`${options.slice}_${options.database}`),
75
113
  username,
76
114
  };
77
115
  }
116
+ function readDatabaseContract(options, identity) {
117
+ if (!allocationExists(identity.path)) {
118
+ throw new Error(`Local database allocation is missing. Run the ${options.slice} local-database up target before connecting.`);
119
+ }
120
+ const record = JSON.parse((0, private_state_js_1.readPrivateFile)(identity.path).toString('utf8'));
121
+ if (record.schemaVersion !== 1 ||
122
+ record.taskId !== identity.taskId ||
123
+ record.slice !== options.slice ||
124
+ record.logicalDatabase !== options.database ||
125
+ record.database !== identity.database ||
126
+ record.username !== identity.username ||
127
+ record.host !== '127.0.0.1' ||
128
+ typeof record.password !== 'string' ||
129
+ !record.password ||
130
+ !Number.isSafeInteger(record.port) ||
131
+ record.port < 1024 ||
132
+ record.port > 65535 ||
133
+ (options.port !== undefined && options.port !== record.port) ||
134
+ (options.password !== undefined && options.password !== record.password)) {
135
+ throw new Error('Local database allocation ownership or connection coordinates do not match; refusing to connect.');
136
+ }
137
+ return {
138
+ database: record.database,
139
+ host: '127.0.0.1',
140
+ password: record.password,
141
+ port: record.port,
142
+ username: record.username,
143
+ };
144
+ }
145
+ function allocationExists(path) {
146
+ try {
147
+ (0, node_fs_1.lstatSync)(path);
148
+ return true;
149
+ }
150
+ catch (error) {
151
+ if (error.code === 'ENOENT')
152
+ return false;
153
+ throw error;
154
+ }
155
+ }
156
+ /** Read the same private allocation used by Docker, Drizzle, and SST links. */
157
+ function resolveLocalDatabaseContract(options) {
158
+ return readDatabaseContract(options, databaseIdentity(options));
159
+ }
160
+ /** Prepare coordinates only; Docker's bind remains authoritative against races. */
161
+ async function prepareLocalDatabaseContract(options, isAvailable = ports_js_1.canBindLoopbackPort) {
162
+ const identity = databaseIdentity(options);
163
+ if (allocationExists(identity.path))
164
+ return readDatabaseContract(options, identity);
165
+ const reserved = new Set();
166
+ if ((0, node_fs_1.existsSync)(identity.directory)) {
167
+ for (const name of (0, node_fs_1.readdirSync)(identity.directory)) {
168
+ if (name.endsWith('.json')) {
169
+ const sibling = JSON.parse((0, private_state_js_1.readPrivateFile)((0, node_path_1.join)(identity.directory, name)).toString('utf8'));
170
+ if (Number.isSafeInteger(sibling.port))
171
+ reserved.add(sibling.port);
172
+ }
173
+ }
174
+ }
175
+ let port = options.port;
176
+ if (port !== undefined) {
177
+ if (!Number.isSafeInteger(port) ||
178
+ port < 1024 ||
179
+ port > 65535 ||
180
+ reserved.has(port) ||
181
+ !(await isAvailable(port))) {
182
+ throw new Error('Requested local database port is invalid, reserved, or occupied.');
183
+ }
184
+ }
185
+ else {
186
+ port = await (0, ports_js_1.allocateFleetPort)(identity.project, { isAvailable, reserved });
187
+ }
188
+ (0, private_state_js_1.publishPrivateFileExclusive)(identity.path, `${JSON.stringify({
189
+ schemaVersion: 1,
190
+ taskId: identity.taskId,
191
+ slice: options.slice,
192
+ logicalDatabase: options.database,
193
+ database: identity.database,
194
+ host: '127.0.0.1',
195
+ password: options.password ?? `${identity.taskId}-local-dev`,
196
+ port,
197
+ username: identity.username,
198
+ })}\n`);
199
+ return readDatabaseContract(options, identity);
200
+ }
201
+ /** Exact-owned local Docker lifecycle. Volumes and allocation survive down. */
202
+ async function runLocalDatabaseLifecycle(options, dependencies = {}) {
203
+ const environment = dependencies.environment ?? process.env;
204
+ const overrides = Object.keys(environment).filter((key) => key.startsWith('COMPOSE_') && environment[key] !== undefined);
205
+ if (overrides.length)
206
+ throw new Error(`Ambient Compose overrides are not allowed: ${overrides.join(', ')}.`);
207
+ const identity = databaseIdentity(options);
208
+ let local = allocationExists(identity.path)
209
+ ? readDatabaseContract(options, identity)
210
+ : undefined;
211
+ const env = {
212
+ ...environment,
213
+ ...(local
214
+ ? {
215
+ EBK_LOCAL_DATABASE: local.database,
216
+ EBK_LOCAL_DATABASE_PASSWORD: local.password,
217
+ EBK_LOCAL_DATABASE_PORT: String(local.port),
218
+ EBK_LOCAL_DATABASE_USERNAME: local.username,
219
+ }
220
+ : {}),
221
+ EBK_LOCAL_DATABASE_PROJECT: identity.project,
222
+ EBK_LOCAL_DATABASE_TASK: identity.taskId,
223
+ EBK_LOCAL_DATABASE_SLICE: options.slice,
224
+ EBK_LOCAL_DATABASE_LOGICAL: options.database,
225
+ };
226
+ const docker = dependencies.docker ??
227
+ ((args, childEnvironment) => (0, node_child_process_1.spawnSync)('docker', args, {
228
+ env: childEnvironment,
229
+ encoding: 'utf8',
230
+ timeout: 120_000,
231
+ windowsHide: true,
232
+ }));
233
+ const run = (args) => {
234
+ const result = docker(args, env);
235
+ if (result.error)
236
+ throw result.error;
237
+ return result;
238
+ };
239
+ const inspect = (kind, name) => {
240
+ const result = run([kind, 'inspect', name]);
241
+ if (result.status !== 0) {
242
+ if (/No such (?:object|container|volume|network)/i.test(result.stderr) ||
243
+ (kind === 'network' &&
244
+ result.stderr.includes(`network ${name} not found`)))
245
+ return undefined;
246
+ throw new Error(`Unable to inspect exact local database ${kind}; check Docker availability before retrying.`);
247
+ }
248
+ const records = JSON.parse(result.stdout);
249
+ if (!Array.isArray(records) || records.length !== 1)
250
+ throw new Error('Ambiguous local database Docker ownership.');
251
+ const record = records[0];
252
+ const labels = kind === 'container' ? record.Config?.Labels : record.Labels;
253
+ if (labels?.['dev.ebk.task'] !== identity.taskId ||
254
+ labels?.['dev.ebk.slice'] !== options.slice ||
255
+ labels?.['dev.ebk.database'] !== options.database ||
256
+ labels?.['com.docker.compose.project'] !== identity.project) {
257
+ throw new Error(`Local database ${kind} ownership mismatch; refusing creation or cleanup.`);
258
+ }
259
+ if (kind === 'container' && local) {
260
+ const bindings = record.HostConfig?.PortBindings?.['5432/tcp'];
261
+ if (!Array.isArray(bindings) ||
262
+ bindings.length !== 1 ||
263
+ bindings[0].HostIp !== '127.0.0.1' ||
264
+ bindings[0].HostPort !== String(local.port)) {
265
+ throw new Error('Local database container port ownership mismatch; refusing to connect.');
266
+ }
267
+ }
268
+ return record;
269
+ };
270
+ const container = inspect('container', `${identity.project}-database`);
271
+ const volume = inspect('volume', `${identity.project}-data`);
272
+ const network = inspect('network', `${identity.project}-network`);
273
+ if (!local) {
274
+ if (container || volume || network) {
275
+ throw new Error('Local database allocation is missing while exact Docker resources remain. Restore the original private allocation before up or down; no coordinates were created and no resources were removed.');
276
+ }
277
+ // Missing coordinates are not absence evidence; exact Docker inspection is.
278
+ if (options.action === 'down')
279
+ return;
280
+ local = await prepareLocalDatabaseContract(options, dependencies.isAvailable);
281
+ Object.assign(env, {
282
+ EBK_LOCAL_DATABASE: local.database,
283
+ EBK_LOCAL_DATABASE_PASSWORD: local.password,
284
+ EBK_LOCAL_DATABASE_PORT: String(local.port),
285
+ EBK_LOCAL_DATABASE_USERNAME: local.username,
286
+ });
287
+ }
288
+ if (options.action === 'down') {
289
+ // Never issue project-wide cleanup; use the verified immutable container ID.
290
+ if (container) {
291
+ if (typeof container.Id !== 'string' ||
292
+ !/^[a-f0-9]{64}$/.test(container.Id))
293
+ throw new Error('Invalid owned container ID.');
294
+ if (run(['container', 'rm', '--force', container.Id]).status !== 0)
295
+ throw new Error('Owned local database container cleanup failed; retry down.');
296
+ }
297
+ if (network) {
298
+ if (typeof network.Id !== 'string' || !/^[a-f0-9]{64}$/.test(network.Id))
299
+ throw new Error('Invalid owned network ID.');
300
+ if (run(['network', 'rm', network.Id]).status !== 0)
301
+ throw new Error('Owned local database network cleanup failed; inspect its remaining endpoints.');
302
+ }
303
+ return;
304
+ }
305
+ if (!container &&
306
+ !(await (dependencies.isAvailable ?? ports_js_1.canBindLoopbackPort)(local.port))) {
307
+ throw new Error(`Task database port ${local.port} is occupied by another service. Free that exact port and retry; no connection was made.`);
308
+ }
309
+ const result = run([
310
+ 'compose',
311
+ '--env-file',
312
+ process.platform === 'win32' ? 'NUL' : '/dev/null',
313
+ '--project-name',
314
+ identity.project,
315
+ '-f',
316
+ options.composeFile,
317
+ 'up',
318
+ '-d',
319
+ '--wait',
320
+ ]);
321
+ if (result.status !== 0) {
322
+ throw new Error(`Task database startup failed (possible port bind race). Run this task's local-database down, resolve the Docker/port conflict, then retry up.`);
323
+ }
324
+ if (!inspect('container', `${identity.project}-database`))
325
+ throw new Error('Docker reported success without the exact owned local database container.');
326
+ }
78
327
  //# sourceMappingURL=local-database-contract.js.map