@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
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.materialNormalizedSstDiffResources = materialNormalizedSstDiffResources;
3
4
  exports.computeMaterialPlanDigest = computeMaterialPlanDigest;
4
5
  exports.createInfrastructurePlan = createInfrastructurePlan;
5
6
  exports.validateInfrastructurePlanForApply = validateInfrastructurePlanForApply;
7
+ exports.validateInfrastructurePlanForProtectedApply = validateInfrastructurePlanForProtectedApply;
6
8
  const deterministic_order_js_1 = require("../deterministic-order.js");
7
9
  const canonical_json_1 = require("@empire-builder-kit/runtime/canonical-json");
8
10
  const model_js_1 = require("./model.js");
@@ -85,15 +87,63 @@ function sortedFindings(findings) {
85
87
  (0, deterministic_order_js_1.compareUtf16)(left.code, right.code) ||
86
88
  (0, deterministic_order_js_1.compareUtf16)(left.class, right.class));
87
89
  }
90
+ const SST_BUCKET_FILES_RESOURCE_TYPE = 'pulumi-nodejs:dynamic:Resource';
91
+ const SST_BUCKET_FILES_LOGICAL_ID_SUFFIX = '.sst.aws.BucketFiles';
92
+ const SST_BUCKET_FILES_ENTRY_PATH = /^files\[(?:0|[1-9]\d*)\]\.(?:contentType|hash|key|source)$/u;
93
+ function materialChangedProperties(resource) {
94
+ const isSstBucketFilesUpdate = resource.logicalId.endsWith(SST_BUCKET_FILES_LOGICAL_ID_SUFFIX) &&
95
+ resource.operation === 'update' &&
96
+ resource.providerOperation === 'update' &&
97
+ !resource.replacement &&
98
+ resource.resourceType === SST_BUCKET_FILES_RESOURCE_TYPE;
99
+ const properties = resource.changedProperties.map((property) => isSstBucketFilesUpdate && SST_BUCKET_FILES_ENTRY_PATH.test(property.path)
100
+ ? { ...property, path: 'files[*]' }
101
+ : property);
102
+ return [
103
+ ...new Map(properties.map((property) => [
104
+ JSON.stringify([
105
+ property.inputDiff,
106
+ property.kind,
107
+ property.path,
108
+ property.sensitive,
109
+ ]),
110
+ property,
111
+ ])).values(),
112
+ ].sort((left, right) => (0, deterministic_order_js_1.compareUtf16)(JSON.stringify(left), JSON.stringify(right)));
113
+ }
114
+ /**
115
+ * Returns the value-free resource projection used by plan and drift digests.
116
+ * SST's BucketFiles dynamic provider reports rebuilt file arrays by ephemeral
117
+ * list index. The committed source and release-candidate authorities bind the
118
+ * bytes; the plan binds the mutation kind without turning array scheduling
119
+ * into a new approval identity. Every unrecognized path remains exact.
120
+ *
121
+ * @internal
122
+ */
123
+ function materialNormalizedSstDiffResources(diff) {
124
+ return diff.resources.map((resource) => ({
125
+ ...Object.fromEntries(Object.entries(resource).filter(([key]) => key !== 'sourceIndex')),
126
+ changedProperties: materialChangedProperties(resource),
127
+ }));
128
+ }
129
+ function materialDiff(diff) {
130
+ const withoutSourceIndex = (value) => Object.fromEntries(Object.entries(value).filter(([key]) => key !== 'sourceIndex'));
131
+ return {
132
+ ...diff,
133
+ failures: diff.failures.map(withoutSourceIndex),
134
+ resources: materialNormalizedSstDiffResources(diff),
135
+ };
136
+ }
137
+ function materialState(state) {
138
+ return Object.fromEntries(Object.entries(state).filter(([key]) => key !== 'expiresAt' && key !== 'observedAt'));
139
+ }
88
140
  function planMaterial(plan) {
89
141
  return {
90
142
  action: plan.action,
91
143
  aggregateRisk: plan.aggregateRisk,
92
144
  configurationMetadataDigest: plan.configurationMetadataDigest,
93
- diff: plan.diff,
145
+ diff: materialDiff(plan.diff),
94
146
  driftEvidenceDigest: plan.driftEvidenceDigest,
95
- driftEvidenceExpiresAt: plan.driftEvidenceExpiresAt,
96
- driftEvidenceGeneratedAt: plan.driftEvidenceGeneratedAt,
97
147
  driftStatus: plan.driftStatus,
98
148
  frameworkVersion: plan.frameworkVersion,
99
149
  kind: plan.kind,
@@ -102,16 +152,18 @@ function planMaterial(plan) {
102
152
  requiredApprovals: plan.requiredApprovals,
103
153
  resourceFindings: plan.resourceFindings,
104
154
  schemaVersion: plan.schemaVersion,
105
- state: plan.state,
155
+ state: materialState(plan.state),
106
156
  target: plan.target,
107
157
  tool: plan.tool,
108
158
  versions: plan.versions,
109
159
  };
110
160
  }
111
161
  /**
112
- * Hashes the material plan contract. generatedAt, expiresAt, repository,
113
- * sourceCommit, and approval-record contents are intentionally excluded and
114
- * validated independently immediately before apply.
162
+ * Hashes the material plan contract. Diagnostic source positions, observation
163
+ * timestamps, generatedAt, expiresAt, repository, sourceCommit, and
164
+ * approval-record contents are intentionally excluded. Freshness, repository,
165
+ * source, and approval authority are validated independently immediately
166
+ * before apply.
115
167
  */
116
168
  function computeMaterialPlanDigest(plan) {
117
169
  return (0, canonical_json_1.canonicalJsonSha256)(planMaterial(plan), {
@@ -120,8 +172,13 @@ function computeMaterialPlanDigest(plan) {
120
172
  }
121
173
  function createInfrastructurePlan(input) {
122
174
  validateCreationInput(input);
175
+ const action = input.action ?? 'deploy';
176
+ const requiredApprovals = new Set(input.risk.requiredApprovals);
177
+ if (action === 'refresh') {
178
+ requiredApprovals.add('deployment-review');
179
+ }
123
180
  const withoutDigest = {
124
- action: input.action ?? 'deploy',
181
+ action,
125
182
  aggregateRisk: input.risk.aggregate,
126
183
  configurationMetadataDigest: input.configurationMetadataDigest,
127
184
  diff: input.diff,
@@ -136,7 +193,7 @@ function createInfrastructurePlan(input) {
136
193
  policyProfileDigest: input.policyProfileDigest,
137
194
  projects: [...input.projects],
138
195
  repository: input.repository,
139
- requiredApprovals: [...input.risk.requiredApprovals].sort(),
196
+ requiredApprovals: [...requiredApprovals].sort(),
140
197
  resourceFindings: sortedFindings(input.risk.findings),
141
198
  schemaVersion: model_js_1.INFRASTRUCTURE_CHANGE_SCHEMA_VERSION,
142
199
  sourceCommit: input.sourceCommit,
@@ -157,7 +214,7 @@ function validDate(value) {
157
214
  const timestamp = Date.parse(value);
158
215
  return Number.isFinite(timestamp) ? timestamp : undefined;
159
216
  }
160
- function approvalFindings(plan, approval, now, plannedGeneratedAt) {
217
+ function approvalFindings(plan, approval, now, plannedGeneratedAt, allowInvocationLocalOperatorAcknowledgement) {
161
218
  if (approval === undefined) {
162
219
  return [
163
220
  {
@@ -193,10 +250,17 @@ function approvalFindings(plan, approval, now, plannedGeneratedAt) {
193
250
  }
194
251
  else if (approval.mode === 'standing-policy' ||
195
252
  approval.author === approval.approver ||
196
- !approval.codeownerReviewed) {
253
+ (approval.mode !== 'operator-acknowledgement' &&
254
+ !approval.codeownerReviewed) ||
255
+ (approval.mode === 'operator-acknowledgement' &&
256
+ (!allowInvocationLocalOperatorAcknowledgement ||
257
+ approval.codeownerReviewed ||
258
+ approval.recordPath !== undefined ||
259
+ approval.author !== 'ebk-infrastructure-plan' ||
260
+ !/^local-federated:[a-f0-9]{64}$/u.test(approval.approver)))) {
197
261
  findings.push({
198
262
  code: 'approval-invalid',
199
- detail: 'Additional approval requires a non-author CODEOWNER-reviewed decision.',
263
+ detail: 'Additional approval requires either an honest active-operator acknowledgement or a non-author CODEOWNER-reviewed decision.',
200
264
  });
201
265
  }
202
266
  for (const requirement of plan.requiredApprovals) {
@@ -335,13 +399,259 @@ function validateInfrastructurePlanForApply(input) {
335
399
  detail: 'Source changed beyond the exact approval-record file after planning.',
336
400
  });
337
401
  }
338
- findings.push(...approvalFindings(input.recomputed, input.approval, now, input.planned.generatedAt));
402
+ findings.push(...approvalFindings(input.recomputed, input.approval, now, input.planned.generatedAt, true));
403
+ const codes = new Set(findings.map(({ code }) => code));
404
+ const outcome = codes.has('state-locked')
405
+ ? 'state-locked'
406
+ : codes.has('state-lock-unverified')
407
+ ? 'state-lock-unverified'
408
+ : [...codes].some((code) => [
409
+ 'material-plan-changed',
410
+ 'plan-expired',
411
+ 'plan-schema-invalid',
412
+ 'plan-tool-version-invalid',
413
+ 'source-change-invalid',
414
+ ].includes(code))
415
+ ? 'plan-stale'
416
+ : findings.length > 0
417
+ ? 'plan-risk-blocked'
418
+ : 'plan-clean';
419
+ return {
420
+ allowed: findings.length === 0,
421
+ findings,
422
+ outcome,
423
+ };
424
+ }
425
+ function protectedAuthorityEnvelope(plan) {
426
+ return {
427
+ action: plan.action,
428
+ configurationMetadataDigest: plan.configurationMetadataDigest,
429
+ frameworkVersion: plan.frameworkVersion,
430
+ kind: plan.kind,
431
+ policyProfileDigest: plan.policyProfileDigest,
432
+ projects: plan.projects,
433
+ schemaVersion: plan.schemaVersion,
434
+ state: materialState(plan.state),
435
+ target: plan.target,
436
+ tool: plan.tool,
437
+ versions: plan.versions,
438
+ };
439
+ }
440
+ function isProviderObservation(resource) {
441
+ return (resource.changedProperties.length === 0 &&
442
+ !resource.replacement &&
443
+ ((resource.operation === 'read' && resource.providerOperation === 'read') ||
444
+ (resource.operation === 'discard' &&
445
+ resource.providerOperation === 'discard') ||
446
+ (resource.operation === 'delete' &&
447
+ resource.providerOperation === 'delete' &&
448
+ resource.resourceType.startsWith('pulumi:providers:'))));
449
+ }
450
+ function approvalRequiredPlanEntries(plan) {
451
+ const resourceIds = new Set(plan.diff.resources.map(({ logicalId }) => logicalId));
452
+ const findingsByResource = new Map();
453
+ for (const finding of plan.resourceFindings) {
454
+ if (!finding.resourceId)
455
+ continue;
456
+ findingsByResource.set(finding.resourceId, [
457
+ ...(findingsByResource.get(finding.resourceId) ?? []),
458
+ finding,
459
+ ]);
460
+ }
461
+ const entries = plan.diff.resources
462
+ .filter((resource) => {
463
+ if (isProviderObservation(resource))
464
+ return false;
465
+ const findings = findingsByResource.get(resource.logicalId) ?? [];
466
+ return (resource.operation === 'delete' ||
467
+ resource.operation === 'replace' ||
468
+ resource.operation === 'import' ||
469
+ resource.operation === 'unknown' ||
470
+ resource.resourceType.startsWith('aws:iam/') ||
471
+ findings.some(({ disposition }) => disposition !== 'allow-standing-policy'));
472
+ })
473
+ .map((resource) => (0, canonical_json_1.canonicalJsonSha256)({
474
+ changedProperties: materialChangedProperties(resource),
475
+ findings: (findingsByResource.get(resource.logicalId) ?? []).map(({ class: riskClass, code, disposition, propertyPath }) => ({
476
+ class: riskClass,
477
+ code,
478
+ disposition,
479
+ ...(propertyPath === undefined ? {} : { propertyPath }),
480
+ })),
481
+ logicalId: resource.logicalId,
482
+ operation: resource.operation,
483
+ replacement: resource.replacement,
484
+ replacementStrategy: resource.replacementStrategy,
485
+ resourceType: resource.resourceType,
486
+ }, { omitUndefinedObjectValues: true }));
487
+ for (const finding of plan.resourceFindings) {
488
+ if ((finding.resourceId && resourceIds.has(finding.resourceId)) ||
489
+ finding.disposition === 'allow-standing-policy') {
490
+ continue;
491
+ }
492
+ entries.push((0, canonical_json_1.canonicalJsonSha256)({
493
+ class: finding.class,
494
+ code: finding.code,
495
+ disposition: finding.disposition,
496
+ ...(finding.resourceId === undefined
497
+ ? {}
498
+ : { resourceId: finding.resourceId }),
499
+ ...(finding.propertyPath === undefined
500
+ ? {}
501
+ : { propertyPath: finding.propertyPath }),
502
+ }, { omitUndefinedObjectValues: true }));
503
+ }
504
+ return [...new Set(entries)].sort(deterministic_order_js_1.compareUtf16);
505
+ }
506
+ /**
507
+ * Validates a fresh protected-workflow plan against source-bound deployment
508
+ * authority. The retained provider preview remains review evidence, but
509
+ * provider observations are not treated as a replayable transaction. Every
510
+ * approval-required resource and operation in the fresh plan must have been
511
+ * present in the reviewed plan.
512
+ */
513
+ function validateInfrastructurePlanForProtectedApply(input) {
514
+ const findings = [];
515
+ const now = validDate(input.now);
516
+ if (now === undefined) {
517
+ throw new TypeError('now must be an ISO date-time.');
518
+ }
519
+ for (const [label, plan] of [
520
+ ['planned', input.planned],
521
+ ['recomputed', input.recomputed],
522
+ ]) {
523
+ if (plan.kind !== model_js_1.INFRASTRUCTURE_PLAN_KIND ||
524
+ plan.schemaVersion !== model_js_1.INFRASTRUCTURE_CHANGE_SCHEMA_VERSION) {
525
+ findings.push({
526
+ code: 'plan-schema-invalid',
527
+ detail: `${label} plan is not an infrastructure plan v1.`,
528
+ });
529
+ }
530
+ if (!SOURCE_COMMIT.test(plan.sourceCommit)) {
531
+ findings.push({
532
+ code: 'source-change-invalid',
533
+ detail: `${label} plan source commit is not a full Git object identifier.`,
534
+ });
535
+ }
536
+ if (plan.tool.name !== model_js_1.SST_DIFF_TOOL_NAME ||
537
+ plan.tool.version !== model_js_1.SST_DIFF_TOOL_VERSION) {
538
+ findings.push({
539
+ code: 'plan-tool-version-invalid',
540
+ detail: `${label} plan was not produced by SST ${model_js_1.SST_DIFF_TOOL_VERSION}.`,
541
+ });
542
+ }
543
+ if (computeMaterialPlanDigest(plan) !== plan.materialDigest) {
544
+ findings.push({
545
+ code: 'material-plan-changed',
546
+ detail: `${label} plan digest does not match its material contents.`,
547
+ });
548
+ }
549
+ if (!plan.diff.complete) {
550
+ findings.push({
551
+ code: 'diff-incomplete',
552
+ detail: `${label} plan contains an incomplete cloud-backed diff.`,
553
+ });
554
+ }
555
+ }
556
+ if ((0, canonical_json_1.canonicalJsonSha256)(protectedAuthorityEnvelope(input.planned)) !==
557
+ (0, canonical_json_1.canonicalJsonSha256)(protectedAuthorityEnvelope(input.recomputed))) {
558
+ findings.push({
559
+ code: 'authority-envelope-changed',
560
+ detail: 'The fresh plan changed the exact state, environment, tool, configuration, policy, or framework authority envelope.',
561
+ });
562
+ }
563
+ if (input.planned.repository !== input.recomputed.repository) {
564
+ findings.push({
565
+ code: 'source-change-invalid',
566
+ detail: 'The fresh plan targets a different repository.',
567
+ });
568
+ }
569
+ const reviewedEntries = new Set(approvalRequiredPlanEntries(input.planned));
570
+ const newApprovalRequiredEntries = approvalRequiredPlanEntries(input.recomputed).filter((entry) => !reviewedEntries.has(entry));
571
+ if (newApprovalRequiredEntries.length > 0) {
572
+ findings.push({
573
+ code: 'approval-required-change',
574
+ detail: `The fresh plan introduced ${newApprovalRequiredEntries.length} approval-required resource or operation not present in the reviewed preview.`,
575
+ });
576
+ }
577
+ const planExpiry = validDate(input.planned.expiresAt);
578
+ if (planExpiry === undefined || planExpiry <= now) {
579
+ findings.push({
580
+ code: 'plan-expired',
581
+ detail: 'The reviewed source-bound authority has expired.',
582
+ });
583
+ }
584
+ if (input.recomputed.state.locked === true) {
585
+ findings.push({
586
+ code: 'state-locked',
587
+ detail: 'The target state is locked.',
588
+ });
589
+ }
590
+ else if (input.recomputed.state.locked === 'unknown') {
591
+ findings.push({
592
+ code: 'state-lock-unverified',
593
+ detail: 'The read-only observer could not prove that the target state is unlocked.',
594
+ });
595
+ }
596
+ if (input.recomputed.aggregateRisk === 'unknown') {
597
+ findings.push({
598
+ code: 'unknown-risk',
599
+ detail: 'Unknown infrastructure risk blocks apply.',
600
+ });
601
+ }
602
+ const driftPermitted = input.recomputed.action === 'refresh'
603
+ ? input.recomputed.driftStatus === 'no-drift' ||
604
+ input.recomputed.driftStatus === 'drift-detected'
605
+ : input.recomputed.driftStatus === 'no-drift';
606
+ if (!driftPermitted) {
607
+ findings.push({
608
+ code: 'drift-unresolved',
609
+ detail: input.recomputed.action === 'refresh'
610
+ ? 'Protected refresh requires bounded no-drift or drift-detected evidence.'
611
+ : 'Protected apply requires a bounded read-only no-drift result.',
612
+ });
613
+ }
614
+ const recordPath = input.approval?.recordPath;
615
+ const allowedSourceChanges = input.approval?.mode === 'human-record' &&
616
+ recordPath !== undefined &&
617
+ input.planned.sourceCommit !== input.recomputed.sourceCommit
618
+ ? [recordPath]
619
+ : [];
620
+ const actualSourceChanges = [...new Set(input.sourceChangesSincePlan)].sort(deterministic_order_js_1.compareUtf16);
621
+ if (input.planned.sourceCommit !== input.recomputed.sourceCommit &&
622
+ actualSourceChanges.length === 0) {
623
+ findings.push({
624
+ code: 'source-change-invalid',
625
+ detail: 'Source commit changed without a declared path delta.',
626
+ });
627
+ }
628
+ if (actualSourceChanges.length !== allowedSourceChanges.length ||
629
+ actualSourceChanges.some((path, index) => path !== [...allowedSourceChanges].sort(deterministic_order_js_1.compareUtf16)[index])) {
630
+ findings.push({
631
+ code: 'source-change-invalid',
632
+ detail: 'Source changed beyond the exact approval-record file after planning.',
633
+ });
634
+ }
635
+ if (input.environmentReviewerApproved === true) {
636
+ if (input.approval !== undefined ||
637
+ input.planned.requiredApprovals.length === 0) {
638
+ findings.push({
639
+ code: 'approval-invalid',
640
+ detail: 'Environment reviewer admission is only valid for a reviewed plan awaiting external approval.',
641
+ });
642
+ }
643
+ }
644
+ else {
645
+ findings.push(...approvalFindings(input.planned, input.approval, now, input.planned.generatedAt, false));
646
+ }
339
647
  const codes = new Set(findings.map(({ code }) => code));
340
648
  const outcome = codes.has('state-locked')
341
649
  ? 'state-locked'
342
650
  : codes.has('state-lock-unverified')
343
651
  ? 'state-lock-unverified'
344
652
  : [...codes].some((code) => [
653
+ 'approval-required-change',
654
+ 'authority-envelope-changed',
345
655
  'material-plan-changed',
346
656
  'plan-expired',
347
657
  'plan-schema-invalid',
@@ -1,4 +1,6 @@
1
- import type { IamAccessAnalyzerValidationV1, InfrastructurePolicySignalV1, InfrastructureRiskAssessmentV1, InfrastructureRiskPolicyV1, NormalizedSstDiffV1 } from './model.js';
1
+ import type { IamAccessAnalyzerValidationV1, InfrastructurePolicySignalV1, InfrastructureRiskAssessmentV1, InfrastructureRiskPolicyV1, NormalizedInfrastructureResourceV1, NormalizedSstDiffV1 } from './model.js';
2
+ /** @internal */
3
+ export declare function requiresIamPolicyAnalysis(resource: NormalizedInfrastructureResourceV1): boolean;
2
4
  export declare function classifyInfrastructureRisk(input: {
3
5
  diff: NormalizedSstDiffV1;
4
6
  iamValidations?: readonly IamAccessAnalyzerValidationV1[];
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requiresIamPolicyAnalysis = requiresIamPolicyAnalysis;
3
4
  exports.classifyInfrastructureRisk = classifyInfrastructureRisk;
4
5
  const deterministic_order_js_1 = require("../deterministic-order.js");
5
6
  const RISK_PRECEDENCE = {
@@ -26,6 +27,23 @@ const DISPOSITIONS = {
26
27
  };
27
28
  const SENSITIVE_POLICY_PATH = /(?:iam|policy|principal|trust|assumeRole|public|ingress|egress|cidr|deletionProtection|retain|retention|backup|encrypt|kms|keyPolicy|objectLock|versioning|waf)/i;
28
29
  const COST_POLICY_PATH = /(?:desiredCount|instance|natGateway|provisionedConcurrency|retentionInDays|schedule|capacity|throughput|quota)/i;
30
+ const OPAQUE_POLICY_DIGEST_TAG_PATH = /^(?:tags|tagsAll)\["ebk:(?:policy-digest|cost-policy-digest|account-cost-policy-digest)"\]$/u;
31
+ const SECURITY_EXPANSION_CREATE_TYPES = new Map([
32
+ [
33
+ 'aws:lambda/eventSourceMapping:EventSourceMapping',
34
+ {
35
+ code: 'lambda-event-source-addition',
36
+ message: 'A Lambda event source mapping adds a new invocation path and requires explicit security review.',
37
+ },
38
+ ],
39
+ [
40
+ 'aws:lambda/functionUrl:FunctionUrl',
41
+ {
42
+ code: 'lambda-function-url-addition',
43
+ message: 'A Lambda Function URL adds a new ingress surface and requires explicit security review.',
44
+ },
45
+ ],
46
+ ]);
29
47
  function finding(riskClass, code, message, resource, propertyPath) {
30
48
  return {
31
49
  class: riskClass,
@@ -65,17 +83,38 @@ function riskForResource(resource, policy) {
65
83
  finding('stateful-or-destructive', 'stateful-delete-or-replacement', 'A durable resource is deleted or replaced.', resource),
66
84
  ];
67
85
  }
86
+ if (resource.operation === 'delete' &&
87
+ resource.resourceType.startsWith('pulumi:providers:')) {
88
+ return [
89
+ finding('in-place-reviewed', 'provider-bookkeeping-delete', 'A stale Pulumi provider registration is removed from deployment state without deleting a provider-managed cloud resource.', resource),
90
+ ];
91
+ }
68
92
  if (resource.operation === 'delete' || resource.operation === 'import') {
93
+ const adoptedImport = resource.operation === 'import' &&
94
+ policy.adoptedImports.some(({ logicalId, resourceType }) => logicalId === resource.logicalId &&
95
+ resourceType === resource.resourceType);
96
+ return [
97
+ finding(adoptedImport ? 'in-place-reviewed' : 'stateful-or-destructive', resource.operation === 'delete'
98
+ ? 'resource-delete'
99
+ : adoptedImport
100
+ ? 'adopted-resource-import'
101
+ : 'resource-import', adoptedImport
102
+ ? 'The exact import is bound to committed ownership, identity, retention, and recovery authority.'
103
+ : 'Deletion and import require an explicit ownership and recovery path.', resource),
104
+ ];
105
+ }
106
+ if (resource.operation === 'read') {
107
+ return [
108
+ finding('in-place-reviewed', 'provider-read', 'A provider read must be verified as intentional and non-mutating.', resource),
109
+ ];
110
+ }
111
+ if (resource.operation === 'discard') {
69
112
  return [
70
- finding('stateful-or-destructive', resource.operation === 'delete' ? 'resource-delete' : 'resource-import', 'Deletion and import require an explicit ownership and recovery path.', resource),
113
+ finding('in-place-reviewed', 'provider-read-discard', 'A provider read is removed from deployment state without deleting the external resource.', resource),
71
114
  ];
72
115
  }
73
116
  if (resource.resourceType.startsWith('aws:iam/')) {
74
- const policyBearing = [
75
- 'aws:iam/policy:Policy',
76
- 'aws:iam/role:Role',
77
- 'aws:iam/rolePolicy:RolePolicy',
78
- ].includes(resource.resourceType);
117
+ const policyBearing = requiresIamPolicyAnalysis(resource);
79
118
  return [
80
119
  finding('security-expansion', policyBearing
81
120
  ? 'iam-policy-document-change'
@@ -99,7 +138,18 @@ function riskForResource(resource, policy) {
99
138
  finding('stateless-replacement', 'stateless-replacement', 'A resource replacement requires rollout and recovery review.', resource),
100
139
  ];
101
140
  }
141
+ const securityExpansionCreate = resource.operation === 'create'
142
+ ? SECURITY_EXPANSION_CREATE_TYPES.get(resource.resourceType)
143
+ : undefined;
144
+ if (securityExpansionCreate) {
145
+ return [
146
+ finding('security-expansion', securityExpansionCreate.code, securityExpansionCreate.message, resource),
147
+ ];
148
+ }
102
149
  const propertyFindings = resource.changedProperties.flatMap((property) => {
150
+ if (OPAQUE_POLICY_DIGEST_TAG_PATH.test(property.path)) {
151
+ return [];
152
+ }
103
153
  if (property.sensitive) {
104
154
  return [
105
155
  finding('unknown', 'sensitive-property-change', 'A sensitive property changed; its value remains redacted.', resource, property.path),
@@ -110,6 +160,12 @@ function riskForResource(resource, policy) {
110
160
  finding('unknown', 'policy-direction-unproven', 'A security or protection property changed, but the value-free diff cannot prove its direction.', resource, property.path),
111
161
  ];
112
162
  }
163
+ if (resource.resourceType === 'aws:wafv2/webAcl:WebAcl' &&
164
+ /^(?:rules|defaultAction)(?:\[|\.|$)/u.test(property.path)) {
165
+ return [
166
+ finding('security-expansion', 'waf-access-policy-change', 'A WAF access-policy change requires explicit security review.', resource, property.path),
167
+ ];
168
+ }
113
169
  if (COST_POLICY_PATH.test(property.path)) {
114
170
  return [
115
171
  finding('material-cost-or-quota', 'cost-or-quota-shape-change', 'A property that can affect cost or quota changed.', resource, property.path),
@@ -132,14 +188,21 @@ function riskForResource(resource, policy) {
132
188
  finding('material-cost-or-quota', 'cost-or-quota-resource-change', 'The resource type can materially affect cost or quota.', resource),
133
189
  ];
134
190
  }
135
- if (resource.operation === 'update') {
191
+ if (resource.operation === 'create' &&
192
+ policy.statefulTypes.includes(resource.resourceType)) {
136
193
  return [
137
- finding('in-place-reviewed', 'in-place-update', 'An in-place resource update requires review and post-apply proof.', resource),
194
+ finding('in-place-reviewed', 'stateful-resource-addition', 'A policy-declared durable resource is added and requires explicit ownership and recovery review.', resource),
138
195
  ];
139
196
  }
140
- if (resource.operation === 'read') {
197
+ if (resource.operation === 'create' &&
198
+ policy.additiveReviewedTypes.includes(resource.resourceType)) {
141
199
  return [
142
- finding('in-place-reviewed', 'provider-read', 'A provider read must be verified as intentional and non-mutating.', resource),
200
+ finding('in-place-reviewed', 'reviewed-material-addition', 'A policy-declared material resource is added and requires explicit deployment review.', resource),
201
+ ];
202
+ }
203
+ if (resource.operation === 'update') {
204
+ return [
205
+ finding('in-place-reviewed', 'in-place-update', 'An in-place resource update requires review and post-apply proof.', resource),
143
206
  ];
144
207
  }
145
208
  return [
@@ -190,6 +253,25 @@ function iamFindings(validation) {
190
253
  }
191
254
  return findings;
192
255
  }
256
+ /** @internal */
257
+ function requiresIamPolicyAnalysis(resource) {
258
+ if (resource.operation === 'delete' ||
259
+ resource.operation === 'discard' ||
260
+ resource.operation === 'read' ||
261
+ ![
262
+ 'aws:iam/policy:Policy',
263
+ 'aws:iam/role:Role',
264
+ 'aws:iam/rolePolicy:RolePolicy',
265
+ ].includes(resource.resourceType)) {
266
+ return false;
267
+ }
268
+ if (resource.operation !== 'update' ||
269
+ resource.resourceType !== 'aws:iam/role:Role' ||
270
+ resource.changedProperties.length === 0) {
271
+ return true;
272
+ }
273
+ return resource.changedProperties.some(({ path }) => /(?:^|[./])(?:assumeRolePolicy|inlinePolicies|managedPolicyArns|permissionsBoundary|policy|trust)(?:[./]|$)/iu.test(path));
274
+ }
193
275
  function classifyInfrastructureRisk(input) {
194
276
  const findings = [];
195
277
  if (!input.diff.complete) {
@@ -214,12 +296,7 @@ function classifyInfrastructureRisk(input) {
214
296
  findings.push(...iamFindings(validation));
215
297
  }
216
298
  const validations = input.iamValidations ?? [];
217
- for (const resource of input.diff.resources.filter(({ operation, resourceType }) => operation !== 'delete' &&
218
- [
219
- 'aws:iam/policy:Policy',
220
- 'aws:iam/role:Role',
221
- 'aws:iam/rolePolicy:RolePolicy',
222
- ].includes(resourceType))) {
299
+ for (const resource of input.diff.resources.filter(requiresIamPolicyAnalysis)) {
223
300
  if (!validations.some(({ policyResourceId }) => policyResourceId === resource.logicalId)) {
224
301
  findings.push(finding('unknown', 'iam-access-analyzer-evidence-missing', 'An IAM change lacks resource-bound Access Analyzer evidence.', resource));
225
302
  }
@@ -251,6 +328,9 @@ function classifyInfrastructureRisk(input) {
251
328
  requiredApprovals.add('data-owner-and-recovery');
252
329
  requiredApprovals.add('point-of-no-return');
253
330
  }
331
+ if (item.code === 'stateful-resource-addition') {
332
+ requiredApprovals.add('data-owner-and-recovery');
333
+ }
254
334
  if (item.class === 'protection-reduction') {
255
335
  requiredApprovals.add('protection-exception');
256
336
  }
@@ -0,0 +1,37 @@
1
+ export interface LocalBrowserTarget {
2
+ fleetId: string;
3
+ origin: string;
4
+ routePrefix: string;
5
+ healthPath: string;
6
+ sessionGeneration: string;
7
+ slice: string;
8
+ stage: string;
9
+ spkiSha256: string;
10
+ }
11
+ /** Validate authenticated IPC state against independently resolved worktree coordinates. */
12
+ export declare function validateLocalBrowserTarget(input: {
13
+ certificatePem: string;
14
+ fleetId: string;
15
+ healthPath: string;
16
+ routePrefix: string;
17
+ sessionGeneration: string;
18
+ slice: string;
19
+ stage: string;
20
+ state: unknown;
21
+ workspaceRealpath: string;
22
+ now?: number;
23
+ }): LocalBrowserTarget;
24
+ export declare function resolveLocalBrowserTarget(input: {
25
+ workspaceRoot: string;
26
+ slice: string;
27
+ }): Promise<LocalBrowserTarget>;
28
+ /** Trust only the private leaf key in this disposable Chromium process, never the host. */
29
+ export declare function localBrowserLaunchArguments(target: LocalBrowserTarget): string[];
30
+ export declare function localBrowserRequestAllowed(origin: string, requested: string, websocket?: boolean): boolean;
31
+ export declare function validateLocalBrowserReport(value: unknown): number;
32
+ export declare function runLocalBrowserVerification(input: {
33
+ workspaceRoot: string;
34
+ slice: string;
35
+ }): Promise<void>;
36
+ /** @internal Only classify a known prerequisite; never echo test output or local paths. */
37
+ export declare function localBrowserFailureGuidance(error: unknown): string;