@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,20 @@
1
+ import { type FleetProcessIdentity, type ProcessIdentityProbe } from '../local-dev/fleet-lock.js';
2
+ import { type PrivateStateSecurity } from '../local-dev/private-state.js';
3
+ import { openPrivateSmokeControlPlane } from './private-smoke-control-plane.js';
4
+ import type { GithubPrivateSmokeInput } from './private-smoke-access.js';
5
+ export interface LocalPrivateSmokeInput extends GithubPrivateSmokeInput {
6
+ /** Already verified invocation-private transport, never ambient credentials. */
7
+ credentialEnvironment: NodeJS.ProcessEnv;
8
+ }
9
+ interface Dependencies {
10
+ fetch?: typeof fetch;
11
+ open?: typeof openPrivateSmokeControlPlane;
12
+ capture?: () => FleetProcessIdentity;
13
+ probe?: (owner: FleetProcessIdentity) => ProcessIdentityProbe;
14
+ security?: PrivateStateSecurity;
15
+ wait?: (milliseconds: number) => Promise<void>;
16
+ }
17
+ /** Used after the local lifecycle verifies source, policy and federated role.
18
+ * A private process receipt proves recovery ownership, not deployment authority. */
19
+ export declare function runLocalPrivateSmoke(input: LocalPrivateSmokeInput, dependencies?: Dependencies): Promise<void>;
20
+ export {};
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runLocalPrivateSmoke = runLocalPrivateSmoke;
4
+ const client_cloudfront_1 = require("@aws-sdk/client-cloudfront");
5
+ const client_wafv2_1 = require("@aws-sdk/client-wafv2");
6
+ const credential_providers_1 = require("@aws-sdk/credential-providers");
7
+ const node_crypto_1 = require("node:crypto");
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = require("node:path");
10
+ const process_identity_js_1 = require("../local-dev/process-identity.js");
11
+ const fleet_lock_js_1 = require("../local-dev/fleet-lock.js");
12
+ const private_state_js_1 = require("../local-dev/private-state.js");
13
+ const index_js_1 = require("../repository-policy/index.js");
14
+ const federated_credential_transport_js_1 = require("../executors/local-deploy/federated-credential-transport.js");
15
+ const router_waf_js_1 = require("./router-waf.js");
16
+ const private_smoke_control_plane_js_1 = require("./private-smoke-control-plane.js");
17
+ const private_smoke_admission_js_1 = require("./private-smoke-admission.js");
18
+ function check(value, message) {
19
+ if (!value)
20
+ throw new Error(`Local private smoke: ${message}`);
21
+ }
22
+ /** Used after the local lifecycle verifies source, policy and federated role.
23
+ * A private process receipt proves recovery ownership, not deployment authority. */
24
+ async function runLocalPrivateSmoke(input, dependencies = {}) {
25
+ check(!(0, index_js_1.requiresGithubDeployment)(input.deploymentProfile, input.stage), 'stage requires protected GitHub authority');
26
+ const policy = (0, router_waf_js_1.normalizeRouterWafPolicy)(JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(input.root, 'packages/foundation/security/router-waf.json'), 'utf8')));
27
+ check(policy.deploymentProfile === input.deploymentProfile, 'deployment profile differs');
28
+ const stagePolicy = policy.stages[input.stage];
29
+ check(stagePolicy, 'stage is inactive');
30
+ if (stagePolicy.access === 'public' || stagePolicy.mode === 'count') {
31
+ await input.run();
32
+ return;
33
+ }
34
+ const allowedCidrs = stagePolicy.allowedCidrs.filter((cidr) => !cidr.includes(':'));
35
+ // Temporary admission has its own empty set; never update the baseline.
36
+ const baseline = [];
37
+ check(/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(input.source), 'source identity is invalid');
38
+ const policyDigest = (0, router_waf_js_1.routerWafPolicyDigest)(policy);
39
+ const identity = {
40
+ account: input.account,
41
+ stage: input.stage,
42
+ workspace: input.workspace,
43
+ policyDigest,
44
+ };
45
+ const open = dependencies.open ??
46
+ (async (resourceIdentity, url) => {
47
+ const environment = input.credentialEnvironment;
48
+ check(environment.AWS_PROFILE &&
49
+ environment.AWS_CONFIG_FILE &&
50
+ environment.AWS_SHARED_CREDENTIALS_FILE, 'verified private credential transport is missing');
51
+ const credentials = (0, credential_providers_1.fromIni)({
52
+ profile: environment.AWS_PROFILE,
53
+ configFilepath: environment.AWS_CONFIG_FILE,
54
+ filepath: environment.AWS_SHARED_CREDENTIALS_FILE,
55
+ // The invocation refreshes this same file before smoke. Ownership
56
+ // checks may already have populated Smithy's shared ini-file cache.
57
+ ignoreCache: true,
58
+ });
59
+ const options = {
60
+ credentials,
61
+ region: 'us-east-1',
62
+ maxAttempts: 3,
63
+ requestHandler: { connectionTimeout: 10_000, requestTimeout: 30_000 },
64
+ };
65
+ return (0, private_smoke_control_plane_js_1.openPrivateSmokeControlPlane)(resourceIdentity, url, {
66
+ waf: new client_wafv2_1.WAFV2Client({
67
+ ...options,
68
+ endpoint: 'https://wafv2.us-east-1.amazonaws.com',
69
+ }),
70
+ cloudfront: new client_cloudfront_1.CloudFrontClient({
71
+ ...options,
72
+ endpoint: 'https://cloudfront.amazonaws.com',
73
+ }),
74
+ });
75
+ });
76
+ const store = await open(identity, input.url);
77
+ const request = dependencies.fetch ?? fetch;
78
+ const wait = dependencies.wait ??
79
+ ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
80
+ const path = (0, node_path_1.join)((0, node_fs_1.realpathSync)(input.root), '.ebk/evidence/local-smoke', `${input.stage}.json`);
81
+ const security = dependencies.security;
82
+ const readOwner = () => {
83
+ const value = JSON.parse((0, private_state_js_1.readPrivateFile)(path, security).toString('utf8'));
84
+ check(value?.kind === 'ebk-local-smoke-owner' &&
85
+ value.schemaVersion === 1 &&
86
+ value.account === input.account &&
87
+ value.stage === input.stage &&
88
+ value.workspace === input.workspace &&
89
+ value.policyDigest === policyDigest, 'retained owner or policy differs; preserve recovery evidence');
90
+ (0, fleet_lock_js_1.validateFleetProcessIdentity)(value.owner);
91
+ check(value.context?.authority === 'local' &&
92
+ /^[a-f0-9]{32}$/.test(value.context.run) &&
93
+ /^[1-9]\d*$/.test(value.context.attempt) &&
94
+ /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(value.context.source) &&
95
+ JSON.stringify(value.context.baseline) === JSON.stringify(baseline), 'retained admission context is invalid');
96
+ return value;
97
+ };
98
+ const releaseOwner = (expected) => {
99
+ check(JSON.stringify(readOwner()) === JSON.stringify(expected), 'private owner changed; cleanup not accepted');
100
+ const retired = `${path}.${expected.context.run}.completed`;
101
+ check(!(0, node_fs_1.existsSync)(retired), 'prior recovery completion is unresolved');
102
+ (0, node_fs_1.renameSync)(path, retired);
103
+ if ((0, private_state_js_1.readPrivateFile)(retired, security).toString('utf8') !==
104
+ JSON.stringify(expected)) {
105
+ if (!(0, node_fs_1.existsSync)(path))
106
+ (0, node_fs_1.renameSync)(retired, path);
107
+ throw new Error('Local private smoke: owner changed during retirement');
108
+ }
109
+ (0, node_fs_1.unlinkSync)(retired);
110
+ };
111
+ if ((0, node_fs_1.existsSync)(path)) {
112
+ (0, private_state_js_1.assertPrivatePath)((0, node_path_1.join)(input.root, '.ebk/evidence/local-smoke'), 'directory', security);
113
+ const previous = readOwner();
114
+ check((dependencies.probe ?? process_identity_js_1.probeProcessIdentity)(previous.owner) === 'absent', 'prior smoke process is active or ambiguous');
115
+ await (0, private_smoke_admission_js_1.recoverSmokeAdmission)(store, baseline, async (lease) => lease.authority === 'local' &&
116
+ lease.run === previous.context.run &&
117
+ lease.attempt === previous.context.attempt &&
118
+ lease.source === previous.context.source);
119
+ releaseOwner(previous);
120
+ }
121
+ else {
122
+ // Foreign/local-without-receipt and hosted leases must not be claimed.
123
+ await (0, private_smoke_admission_js_1.recoverSmokeAdmission)(store, baseline, async () => false);
124
+ }
125
+ const ipResponse = await request('https://checkip.amazonaws.com', {
126
+ redirect: 'error',
127
+ signal: AbortSignal.timeout(15_000),
128
+ });
129
+ check(ipResponse.ok, 'operator IPv4 lookup failed');
130
+ const address = await ipResponse.text();
131
+ check(address.length <= 64, 'operator IPv4 response exceeds bound');
132
+ const cidr = (0, private_smoke_admission_js_1.publicRunnerIpv4)(address.trim());
133
+ if ((0, private_smoke_admission_js_1.runnerAlreadyAllowed)(cidr, allowedCidrs)) {
134
+ await input.run();
135
+ return;
136
+ }
137
+ const owner = (dependencies.capture ?? process_identity_js_1.captureProcessIdentity)();
138
+ const context = {
139
+ authority: 'local',
140
+ run: (0, node_crypto_1.randomBytes)(16).toString('hex'),
141
+ attempt: String(owner.pid),
142
+ source: input.source,
143
+ baseline,
144
+ };
145
+ const record = {
146
+ kind: 'ebk-local-smoke-owner',
147
+ schemaVersion: 1,
148
+ ...identity,
149
+ owner,
150
+ context,
151
+ };
152
+ check((0, private_state_js_1.createPrivateFileExclusive)(path, JSON.stringify(record), security), 'another invocation owns local smoke');
153
+ async function observe(allowed, signal) {
154
+ for (let i = 0; i < 24; i++) {
155
+ signal?.throwIfAborted();
156
+ const response = await request(input.url, {
157
+ redirect: 'manual',
158
+ signal: signal
159
+ ? AbortSignal.any([signal, AbortSignal.timeout(15_000)])
160
+ : AbortSignal.timeout(15_000),
161
+ });
162
+ await response.body?.cancel();
163
+ if (allowed
164
+ ? response.status >= 200 && response.status < 400
165
+ : response.status === 403)
166
+ return;
167
+ if (i < 23)
168
+ await wait(5_000);
169
+ }
170
+ throw new Error(`Local private smoke: ${allowed ? 'admission' : 'revocation'} not observed; deployment acceptance prohibited`);
171
+ }
172
+ const unregister = (0, federated_credential_transport_js_1.registerGovernedSignalCleanup)(async () => {
173
+ await (0, private_smoke_admission_js_1.cleanupSmokeAdmission)(store, context);
174
+ }, 90);
175
+ try {
176
+ await (0, private_smoke_admission_js_1.withPrivateSmokeAdmission)({
177
+ store,
178
+ context,
179
+ cidr,
180
+ run: input.run,
181
+ awaitAdmission: (signal) => observe(true, signal),
182
+ awaitRevocation: () => observe(false),
183
+ });
184
+ }
185
+ finally {
186
+ try {
187
+ // A failed smoke may still have cleaned up correctly. Retain this receipt
188
+ // only when remote cleanup is unproved, for exact next-run recovery.
189
+ await (0, private_smoke_admission_js_1.cleanupSmokeAdmission)(store, context);
190
+ releaseOwner(record);
191
+ }
192
+ finally {
193
+ unregister();
194
+ }
195
+ }
196
+ }
197
+ //# sourceMappingURL=local-private-smoke-access.js.map
@@ -13,7 +13,7 @@ function record(value) {
13
13
  }
14
14
  function stateResources(value) {
15
15
  const root = record(value);
16
- const deployment = record(root?.deployment);
16
+ const deployment = record(root?.deployment) ?? record(root?.latest) ?? root;
17
17
  const resources = deployment?.resources ?? root?.resources;
18
18
  if (!Array.isArray(resources)) {
19
19
  throw new Error('SST state export does not contain a Pulumi deployment resource list.');
@@ -24,7 +24,9 @@ export interface ManagedLogGroupContract {
24
24
  {
25
25
  DataIdentifier: string[];
26
26
  Operation: {
27
- Audit: Record<string, never>;
27
+ Audit: {
28
+ FindingsDestination: Record<string, never>;
29
+ };
28
30
  };
29
31
  Sid: 'AuditSensitiveData';
30
32
  },
@@ -66,7 +66,7 @@ function createManagedLogGroupContract(input) {
66
66
  Statement: [
67
67
  {
68
68
  DataIdentifier: identifiers,
69
- Operation: { Audit: {} },
69
+ Operation: { Audit: { FindingsDestination: {} } },
70
70
  Sid: 'AuditSensitiveData',
71
71
  },
72
72
  {
@@ -0,0 +1,10 @@
1
+ export declare const FOUNDATION_PENDING_DATABASE_ENDPOINT: "pending.invalid";
2
+ /**
3
+ * Pulumi can evaluate a refresh program against an interrupted first deploy
4
+ * before the Aurora cluster has ever existed. SST currently resolves that
5
+ * absent endpoint as `undefined` and its Aurora link implementation calls
6
+ * `.split()` unconditionally. Keep the refresh program total without
7
+ * publishing a routable cross-stage value. A subsequent deploy receives the
8
+ * real provider output and replaces this sentinel before creating discovery.
9
+ */
10
+ export declare function foundationDatabaseEndpointHost(endpoint: unknown): string;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FOUNDATION_PENDING_DATABASE_ENDPOINT = void 0;
4
+ exports.foundationDatabaseEndpointHost = foundationDatabaseEndpointHost;
5
+ exports.FOUNDATION_PENDING_DATABASE_ENDPOINT = 'pending.invalid';
6
+ /**
7
+ * Pulumi can evaluate a refresh program against an interrupted first deploy
8
+ * before the Aurora cluster has ever existed. SST currently resolves that
9
+ * absent endpoint as `undefined` and its Aurora link implementation calls
10
+ * `.split()` unconditionally. Keep the refresh program total without
11
+ * publishing a routable cross-stage value. A subsequent deploy receives the
12
+ * real provider output and replaces this sentinel before creating discovery.
13
+ */
14
+ function foundationDatabaseEndpointHost(endpoint) {
15
+ if (typeof endpoint !== 'string') {
16
+ return exports.FOUNDATION_PENDING_DATABASE_ENDPOINT;
17
+ }
18
+ const host = endpoint.trim().split(':', 1)[0]?.trim() ?? '';
19
+ return host.length > 0 ? host : exports.FOUNDATION_PENDING_DATABASE_ENDPOINT;
20
+ }
21
+ //# sourceMappingURL=partial-state.js.map
@@ -73,19 +73,34 @@ async function evaluateFoundationPreflight(options) {
73
73
  result.invalidNames.forEach((name) => invalidNames.add(name));
74
74
  result.values.forEach((value, name) => values.set(name, value));
75
75
  }
76
+ const value = (key) => values.get((0, discovery_js_1.foundationSsmPath)(foundationStage, key)) ?? '';
77
+ const capabilities = value('capabilities')
78
+ .split(',')
79
+ .map((capability) => capability.trim())
80
+ .filter(Boolean);
81
+ const hasPostgres = capabilities.includes('postgres');
82
+ const resourceNames = (0, discovery_js_1.foundationSsmKeysForCapabilities)(capabilities.filter(requirements_js_1.isStandardFoundationCapability))
83
+ .map((key) => (0, discovery_js_1.foundationSsmPath)(foundationStage, key))
84
+ .filter((name) => !names.includes(name));
85
+ for (const batch of chunks(resourceNames, 10)) {
86
+ const result = await options.readParameters(batch);
87
+ result.invalidNames.forEach((name) => invalidNames.add(name));
88
+ result.values.forEach((value, name) => values.set(name, value));
89
+ }
90
+ names.push(...resourceNames);
76
91
  const issues = names
77
92
  .filter((name) => invalidNames.has(name) || !values.get(name))
78
93
  .map((name) => `missing required parameter ${name}`);
79
94
  const allRequiredParametersMissing = names.every((name) => invalidNames.has(name) || !values.has(name));
80
- const value = (key) => values.get((0, discovery_js_1.foundationSsmPath)(foundationStage, key)) ?? '';
81
95
  const schemaVersion = Number(value('schemaVersion'));
82
96
  if (schemaVersion !== discovery_js_1.FOUNDATION_SSM_SCHEMA_VERSION) {
83
97
  issues.push(`Foundation discovery schema ${value('schemaVersion') || 'missing'} does not match ${discovery_js_1.FOUNDATION_SSM_SCHEMA_VERSION}`);
84
98
  }
85
99
  const databasePort = Number(value('databasePort'));
86
- if (!Number.isSafeInteger(databasePort) ||
87
- databasePort < 1 ||
88
- databasePort > 65535) {
100
+ if (hasPostgres &&
101
+ (!Number.isSafeInteger(databasePort) ||
102
+ databasePort < 1 ||
103
+ databasePort > 65535)) {
89
104
  issues.push('Foundation discovery databasePort must be from 1 through 65535');
90
105
  }
91
106
  const accountMonthlyMaximumUsd = Number(value('accountMonthlyMaximumUsd'));
@@ -103,10 +118,6 @@ async function evaluateFoundationPreflight(options) {
103
118
  if (!isExactCognitoTokenEndpoint(value('identityTokenEndpoint'), options.region)) {
104
119
  issues.push('Foundation discovery identityTokenEndpoint must be the exact Cognito HTTPS token endpoint for the selected AWS Region');
105
120
  }
106
- const capabilities = value('capabilities')
107
- .split(',')
108
- .map((capability) => capability.trim())
109
- .filter(Boolean);
110
121
  const compatibility = (0, requirements_js_1.validateFoundationCompatibility)(options.requirement, {
111
122
  capabilities,
112
123
  contractVersion: value('contractVersion'),
@@ -128,15 +139,21 @@ async function evaluateFoundationPreflight(options) {
128
139
  accountMonthlyMaximumUsd,
129
140
  alertTopicArn: value('alertTopicArn'),
130
141
  capabilities: compatibility.value.capabilities,
131
- clusterId: value('clusterId'),
142
+ ...(capabilities.includes('container-compute')
143
+ ? { clusterId: value('clusterId') }
144
+ : {}),
132
145
  contractVersion: compatibility.value.contractVersion,
133
- databaseClusterArn: value('databaseClusterArn'),
134
- databaseClusterEndpoint: value('databaseClusterEndpoint'),
135
- databaseClusterId: value('databaseClusterId'),
136
- databaseClusterResourceId: value('databaseClusterResourceId'),
137
- databaseHost: value('databaseHost'),
138
- databaseMasterSecretArn: value('databaseMasterSecretArn'),
139
- databasePort,
146
+ ...(hasPostgres
147
+ ? {
148
+ databaseClusterArn: value('databaseClusterArn'),
149
+ databaseClusterEndpoint: value('databaseClusterEndpoint'),
150
+ databaseClusterId: value('databaseClusterId'),
151
+ databaseClusterResourceId: value('databaseClusterResourceId'),
152
+ databaseHost: value('databaseHost'),
153
+ databaseMasterSecretArn: value('databaseMasterSecretArn'),
154
+ databasePort,
155
+ }
156
+ : {}),
140
157
  eventBusArn: value('eventBusArn'),
141
158
  eventBusName: value('eventBusName'),
142
159
  hasPublicDomain: value('hasPublicDomain') === 'true',
@@ -147,7 +164,7 @@ async function evaluateFoundationPreflight(options) {
147
164
  routerDistributionId: value('routerDistributionId'),
148
165
  routerUrl: value('routerUrl'),
149
166
  schemaVersion: discovery_js_1.FOUNDATION_SSM_SCHEMA_VERSION,
150
- vpcId: value('vpcId'),
167
+ ...(capabilities.includes('network') ? { vpcId: value('vpcId') } : {}),
151
168
  },
152
169
  consumerStage,
153
170
  foundationStage,
@@ -163,7 +180,9 @@ function formatFoundationPreflightReport(report) {
163
180
  ];
164
181
  report.issues.forEach((issue) => lines.push(` - ${issue}`));
165
182
  if (!report.ok) {
166
- lines.push(` Deploy the Foundation first: pnpm nx run foundation:deploy --stage=${report.foundationStage}`);
183
+ lines.push(report.foundationStage === 'development'
184
+ ? ' Establish Foundation through ebk deploy development --profile=<approved-profile> --expectedRoleArn=<approved-development-role>; the governed stage lifecycle deploys Foundation before eligible Slices.'
185
+ : ` Establish Foundation through the governed ${report.foundationStage} stage lifecycle under the repository deployment profile; follow its protected deployment runbook.`);
167
186
  }
168
187
  return lines.join('\n');
169
188
  }
@@ -0,0 +1,25 @@
1
+ import { openPrivateSmokeControlPlane } from './private-smoke-control-plane.js';
2
+ import { type SmokeAdmissionLease } from './private-smoke-admission.js';
3
+ import type { CanonicalDeploymentStage, DeploymentProfile } from '../repository-policy/index.js';
4
+ export interface GithubPrivateSmokeInput {
5
+ account: string;
6
+ deploymentProfile: DeploymentProfile;
7
+ root: string;
8
+ source: string;
9
+ stage: CanonicalDeploymentStage;
10
+ url: string;
11
+ workspace: string;
12
+ /** Receives the admission lease when the runner was admitted; undefined when no admission was needed. */
13
+ run: (lease?: SmokeAdmissionLease) => Promise<void>;
14
+ }
15
+ interface PrivateSmokeDependencies {
16
+ environment?: NodeJS.ProcessEnv;
17
+ fetch?: typeof fetch;
18
+ open?: typeof openPrivateSmokeControlPlane;
19
+ wait?: (milliseconds: number) => Promise<void>;
20
+ }
21
+ /** Called only inside the source/role-verified protected stage lifecycle. */
22
+ export declare function runGithubPrivateSmoke(input: GithubPrivateSmokeInput, dependencies?: PrivateSmokeDependencies): Promise<void>;
23
+ /** Generated protected workflow finalizer. It can only remove an exact admission. */
24
+ export declare function cleanupGithubPrivateSmoke(input: Omit<GithubPrivateSmokeInput, 'url' | 'run'>, dependencies?: PrivateSmokeDependencies): Promise<void>;
25
+ export {};
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runGithubPrivateSmoke = runGithubPrivateSmoke;
4
+ exports.cleanupGithubPrivateSmoke = cleanupGithubPrivateSmoke;
5
+ const node_fs_1 = require("node:fs");
6
+ const node_path_1 = require("node:path");
7
+ const router_waf_js_1 = require("./router-waf.js");
8
+ const private_smoke_control_plane_js_1 = require("./private-smoke-control-plane.js");
9
+ const private_smoke_admission_js_1 = require("./private-smoke-admission.js");
10
+ function check(condition, message) {
11
+ if (!condition)
12
+ throw new Error(`Private smoke access: ${message}`);
13
+ }
14
+ /** Called only inside the source/role-verified protected stage lifecycle. */
15
+ async function runGithubPrivateSmoke(input, dependencies = {}) {
16
+ return privateSmokeOperation(input, dependencies, false);
17
+ }
18
+ /** Generated protected workflow finalizer. It can only remove an exact admission. */
19
+ async function cleanupGithubPrivateSmoke(input, dependencies = {}) {
20
+ return privateSmokeOperation({ ...input, url: '', run: async () => undefined }, dependencies, true);
21
+ }
22
+ async function privateSmokeOperation(input, dependencies, cleanupOnly) {
23
+ const environment = dependencies.environment ?? process.env;
24
+ const request = dependencies.fetch ?? fetch;
25
+ const policy = (0, router_waf_js_1.normalizeRouterWafPolicy)(JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(input.root, 'packages/foundation/security/router-waf.json'), 'utf8')));
26
+ check(policy.deploymentProfile === input.deploymentProfile, 'WAF deployment profile differs from repository policy');
27
+ const stagePolicy = policy.stages[input.stage];
28
+ check(stagePolicy, 'inactive WAF stage');
29
+ if (stagePolicy.access === 'public' || stagePolicy.mode === 'count') {
30
+ await input.run();
31
+ return;
32
+ }
33
+ const allowedCidrs = stagePolicy.allowedCidrs.filter((cidr) => !cidr.includes(':'));
34
+ // Temporary admission has its own empty set; never update the baseline.
35
+ const baseline = [];
36
+ const repository = environment.GITHUB_REPOSITORY ?? '';
37
+ const ref = `refs/heads/${input.stage === 'production' ? 'main' : 'develop'}`;
38
+ const workflow = `${repository}/.github/workflows/deploy.yml@${ref}`;
39
+ check(environment.GITHUB_ACTIONS === 'true' &&
40
+ /^[\w.-]+\/[\w.-]+$/.test(repository) &&
41
+ environment.GITHUB_REF === ref &&
42
+ environment.GITHUB_SHA === input.source &&
43
+ environment.EBK_GITHUB_JOB_WORKFLOW_REF === workflow &&
44
+ ((environment.GITHUB_EVENT_NAME === 'workflow_dispatch' &&
45
+ environment.GITHUB_WORKFLOW_REF === workflow) ||
46
+ (environment.GITHUB_EVENT_NAME === 'push' &&
47
+ input.deploymentProfile !== 'starter' &&
48
+ environment.GITHUB_WORKFLOW_REF ===
49
+ `${repository}/.github/workflows/ci.yml@${ref}`)), 'exact protected deployment workflow/source required');
50
+ const run = environment.GITHUB_RUN_ID ?? '';
51
+ const attempt = environment.GITHUB_RUN_ATTEMPT ?? '';
52
+ check(/^[1-9]\d*$/.test(run) &&
53
+ /^[1-9]\d*$/.test(attempt) &&
54
+ /^(?:[a-f0-9]{40}|[a-f0-9]{64})$/.test(input.source), 'invalid protected invocation identity');
55
+ const store = await (dependencies.open ?? private_smoke_control_plane_js_1.openPrivateSmokeControlPlane)({
56
+ account: input.account,
57
+ stage: input.stage,
58
+ workspace: input.workspace,
59
+ policyDigest: (0, router_waf_js_1.routerWafPolicyDigest)(policy),
60
+ }, cleanupOnly ? undefined : input.url);
61
+ await (0, private_smoke_admission_js_1.recoverSmokeAdmission)(store, baseline, async (lease) => {
62
+ // A local process lease has no GitHub run authority; never infer one.
63
+ if (lease.authority === 'local')
64
+ return false;
65
+ // An old attempt of this run can be recovered only after GitHub confirms it ended.
66
+ if (lease.run === run && lease.attempt === attempt)
67
+ return cleanupOnly && lease.source === input.source;
68
+ const token = environment.GITHUB_TOKEN;
69
+ check(token, 'stale admission requires actions:read to confirm the exact prior run completed');
70
+ const response = await request(`https://api.github.com/repos/${repository}/actions/runs/${lease.run}/attempts/${lease.attempt}`, {
71
+ headers: {
72
+ Authorization: `Bearer ${token}`,
73
+ Accept: 'application/vnd.github+json',
74
+ },
75
+ redirect: 'error',
76
+ signal: AbortSignal.timeout(15_000),
77
+ });
78
+ check(response.ok, 'prior workflow status unavailable; admission retained for protected recovery');
79
+ const prior = (await response.json());
80
+ const headRepository = prior.head_repository;
81
+ return (String(prior.id) === lease.run &&
82
+ String(prior.run_attempt) === lease.attempt &&
83
+ prior.status === 'completed' &&
84
+ prior.head_sha === lease.source &&
85
+ prior.head_branch === ref.slice('refs/heads/'.length) &&
86
+ headRepository?.full_name === repository &&
87
+ ((prior.path === '.github/workflows/deploy.yml' &&
88
+ prior.event === 'workflow_dispatch') ||
89
+ (input.deploymentProfile !== 'starter' &&
90
+ prior.path === '.github/workflows/ci.yml' &&
91
+ prior.event === 'push')));
92
+ });
93
+ if (cleanupOnly)
94
+ return;
95
+ const ipResponse = await request('https://checkip.amazonaws.com', {
96
+ redirect: 'error',
97
+ signal: AbortSignal.timeout(15_000),
98
+ });
99
+ check(ipResponse.ok, 'runner IPv4 lookup failed');
100
+ const address = await ipResponse.text();
101
+ check(address.length <= 64, 'runner IPv4 response exceeds bound');
102
+ const cidr = (0, private_smoke_admission_js_1.publicRunnerIpv4)(address.trim());
103
+ if ((0, private_smoke_admission_js_1.runnerAlreadyAllowed)(cidr, allowedCidrs)) {
104
+ await input.run();
105
+ return;
106
+ }
107
+ const wait = dependencies.wait ??
108
+ ((milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)));
109
+ async function observe(allowed) {
110
+ for (let poll = 0; poll < 24; poll += 1) {
111
+ const response = await request(input.url, {
112
+ redirect: 'manual',
113
+ signal: AbortSignal.timeout(15_000),
114
+ });
115
+ // Do not consume or retain an application response body.
116
+ await response.body?.cancel();
117
+ if (allowed
118
+ ? response.status >= 200 && response.status < 400
119
+ : response.status === 403)
120
+ return;
121
+ if (poll < 23)
122
+ await wait(5_000);
123
+ }
124
+ throw new Error(`Private smoke access: ${allowed ? 'admission' : 'revocation'} was not observed; deployment acceptance prohibited`);
125
+ }
126
+ await (0, private_smoke_admission_js_1.withPrivateSmokeAdmission)({
127
+ store,
128
+ context: { run, attempt, source: input.source, baseline },
129
+ cidr,
130
+ run: input.run,
131
+ awaitAdmission: () => observe(true),
132
+ awaitRevocation: () => observe(false),
133
+ });
134
+ }
135
+ //# sourceMappingURL=private-smoke-access.js.map
@@ -0,0 +1,45 @@
1
+ export interface SmokeAdmissionContext {
2
+ authority?: 'local';
3
+ run: string;
4
+ attempt: string;
5
+ source: string;
6
+ baseline: readonly string[];
7
+ }
8
+ export interface SmokeIpSet {
9
+ addresses: readonly string[];
10
+ description: string;
11
+ lockToken: string;
12
+ }
13
+ export interface SmokeIpSetStore {
14
+ read(): Promise<SmokeIpSet>;
15
+ update(previous: SmokeIpSet, next: Pick<SmokeIpSet, 'addresses' | 'description'>): Promise<void>;
16
+ }
17
+ export interface SmokeAdmissionLease {
18
+ authority?: 'local';
19
+ run: string;
20
+ attempt: string;
21
+ source: string;
22
+ cidr: string;
23
+ baseline: string;
24
+ expiresAt: number;
25
+ }
26
+ export declare function runnerAlreadyAllowed(cidr: string, baseline: readonly string[]): boolean;
27
+ export declare function publicRunnerIpv4(value: string): string;
28
+ export declare function parseSmokeAdmissionLease(description: string): SmokeAdmissionLease | undefined;
29
+ /** Remove only this lease's address. Never replace unrelated addresses with a baseline. */
30
+ export declare function cleanupSmokeAdmission(store: SmokeIpSetStore, context: SmokeAdmissionContext): Promise<void>;
31
+ /** A retained lease alone, or its expiry, is not proof that a different run ended. */
32
+ export declare function recoverSmokeAdmission(store: SmokeIpSetStore, baseline: readonly string[], completedRun: (lease: SmokeAdmissionLease) => Promise<boolean>): Promise<void>;
33
+ export declare function withPrivateSmokeAdmission<T>(input: {
34
+ store: SmokeIpSetStore;
35
+ context: SmokeAdmissionContext;
36
+ cidr: string;
37
+ run: (lease: SmokeAdmissionLease) => Promise<T>;
38
+ awaitAdmission: (signal: AbortSignal) => Promise<void>;
39
+ awaitRevocation: () => Promise<void>;
40
+ now?: () => number;
41
+ signals?: {
42
+ on(event: 'SIGINT' | 'SIGTERM', listener: () => void): unknown;
43
+ removeListener(event: 'SIGINT' | 'SIGTERM', listener: () => void): unknown;
44
+ };
45
+ }): Promise<T>;