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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (805) hide show
  1. package/README.md +44 -10
  2. package/executors.json +21 -1
  3. package/generators.json +10 -0
  4. package/package.json +31 -7
  5. package/src/aws/child-environment.d.ts +10 -0
  6. package/src/aws/child-environment.js +77 -0
  7. package/src/aws/identity.d.ts +13 -0
  8. package/src/aws/identity.js +41 -0
  9. package/src/aws-authority/index.d.ts +2 -0
  10. package/src/aws-authority/index.js +6 -0
  11. package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
  12. package/src/aws-authority/lambda-policy-ordering.js +56 -0
  13. package/src/aws-authority/stage-authority.d.ts +248 -0
  14. package/src/aws-authority/stage-authority.js +3558 -0
  15. package/src/blueprints/external-sandbox.d.ts +1 -1
  16. package/src/blueprints/external-sandbox.js +21 -9
  17. package/src/blueprints/manifest.d.ts +1 -1
  18. package/src/blueprints/resolver.js +28 -15
  19. package/src/cli/bootstrap.d.ts +1 -1
  20. package/src/cli/deploy-runtime.d.ts +30 -0
  21. package/src/cli/deploy-runtime.js +174 -0
  22. package/src/cli/dev-command.d.ts +18 -4
  23. package/src/cli/dev-command.js +71 -0
  24. package/src/cli/main.d.ts +9 -1
  25. package/src/cli/main.js +157 -24
  26. package/src/cli/output.d.ts +1 -1
  27. package/src/cli/output.js +1 -1
  28. package/src/cli/personal-secret-runtime.d.ts +12 -0
  29. package/src/cli/personal-secret-runtime.js +18 -3
  30. package/src/cli/secret-terminal.js +1 -1
  31. package/src/container-images.d.ts +1 -1
  32. package/src/container-images.js +1 -1
  33. package/src/developer-agent/context.js +41 -9
  34. package/src/developer-agent/generator-planning.js +20 -6
  35. package/src/developer-agent/git-inspection.d.ts +6 -2
  36. package/src/developer-agent/git-inspection.js +78 -6
  37. package/src/developer-agent/model.d.ts +5 -3
  38. package/src/developer-agent/model.js +4 -4
  39. package/src/developer-agent/operation-registry.d.ts +15 -0
  40. package/src/developer-agent/operation-registry.js +342 -49
  41. package/src/developer-agent/planning.d.ts +8 -1
  42. package/src/developer-agent/planning.js +39 -16
  43. package/src/developer-agent/preview-changes.d.ts +2 -0
  44. package/src/developer-agent/preview-changes.js +14 -2
  45. package/src/developer-agent/preview-source.js +3 -0
  46. package/src/developer-agent/validation.js +25 -9
  47. package/src/developer-agent/workspace-inspection.js +60 -5
  48. package/src/executors/blueprint-trust/blueprint-trust.js +6 -0
  49. package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
  50. package/src/executors/deployment-plan/deployment-plan.js +57 -2
  51. package/src/executors/dev-doctor/dev-doctor.js +13 -6
  52. package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
  53. package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
  54. package/src/executors/dev-task-cleanup/schema.json +9 -0
  55. package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
  56. package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
  57. package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
  58. package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
  59. package/src/executors/fleet/fleet.js +1 -1
  60. package/src/executors/foundation-preflight/foundation-preflight.d.ts +1 -0
  61. package/src/executors/foundation-preflight/foundation-preflight.js +6 -2
  62. package/src/executors/foundation-preflight/schema.json +5 -0
  63. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +13 -2
  64. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -31
  65. package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +65 -0
  66. package/src/executors/foundation-profile-preflight/production-database-safeguard.js +223 -0
  67. package/src/executors/foundation-profile-preflight/schema.json +15 -4
  68. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
  69. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +70 -20
  70. package/src/executors/foundation-remove-preflight/schema.json +6 -1
  71. package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
  72. package/src/executors/github-bootstrap/github-bootstrap.js +3 -0
  73. package/src/executors/github-bootstrap/schema.json +7 -1
  74. package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +29 -136
  75. package/src/executors/infrastructure-plan/infrastructure-plan.js +230 -3282
  76. package/src/executors/infrastructure-plan/schema.json +12 -52
  77. package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
  78. package/src/executors/local-deploy/federated-credential-transport.js +252 -0
  79. package/src/executors/local-deploy/local-approval.d.ts +18 -0
  80. package/src/executors/local-deploy/local-approval.js +39 -0
  81. package/src/executors/local-deploy/local-deploy.d.ts +112 -0
  82. package/src/executors/local-deploy/local-deploy.js +1404 -0
  83. package/src/executors/local-deploy/schema.json +70 -0
  84. package/src/executors/refresh/refresh.js +2 -2
  85. package/src/executors/remove/remove.js +2 -2
  86. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +42 -0
  87. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +1229 -0
  88. package/src/executors/router-waf-rehearsal/schema.json +29 -0
  89. package/src/executors/secret-initialize/schema.json +42 -0
  90. package/src/executors/secret-initialize/secret-initialize.d.ts +34 -0
  91. package/src/executors/secret-initialize/secret-initialize.js +297 -0
  92. package/src/executors/secret-metadata/schema.json +5 -0
  93. package/src/executors/secret-metadata/secret-metadata.d.ts +16 -2
  94. package/src/executors/secret-metadata/secret-metadata.js +129 -30
  95. package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
  96. package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
  97. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +48 -0
  98. package/src/executors/sst-lifecycle/governed-native-operation.js +163 -0
  99. package/src/executors/sst-lifecycle/logging-preflight.d.ts +5 -0
  100. package/src/executors/sst-lifecycle/logging-preflight.js +23 -13
  101. package/src/executors/sst-lifecycle/run-sst-command.d.ts +46 -6
  102. package/src/executors/sst-lifecycle/run-sst-command.js +750 -71
  103. package/src/executors/sst-lifecycle/schema.json +8 -1
  104. package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
  105. package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
  106. package/src/executors/sst-lifecycle/sst-environment-source.d.ts +33 -0
  107. package/src/executors/sst-lifecycle/sst-environment-source.js +267 -0
  108. package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
  109. package/src/executors/sst-lifecycle/task-unlock.js +126 -0
  110. package/src/executors/unlock/unlock.js +2 -2
  111. package/src/foundation/capability-plan.d.ts +43 -0
  112. package/src/foundation/capability-plan.js +168 -0
  113. package/src/foundation/cost-estimate.d.ts +170 -0
  114. package/src/foundation/cost-estimate.js +683 -0
  115. package/src/foundation/discovery.d.ts +14 -11
  116. package/src/foundation/discovery.js +32 -6
  117. package/src/foundation/index.d.ts +4 -0
  118. package/src/foundation/index.js +11 -0
  119. package/src/foundation/local-database-contract.d.ts +20 -0
  120. package/src/foundation/local-database-contract.js +262 -13
  121. package/src/foundation/local-private-smoke-access.d.ts +20 -0
  122. package/src/foundation/local-private-smoke-access.js +197 -0
  123. package/src/foundation/logging-preflight.js +1 -1
  124. package/src/foundation/logging.d.ts +3 -1
  125. package/src/foundation/logging.js +1 -1
  126. package/src/foundation/partial-state.d.ts +10 -0
  127. package/src/foundation/partial-state.js +21 -0
  128. package/src/foundation/preflight.js +37 -18
  129. package/src/foundation/private-smoke-access.d.ts +25 -0
  130. package/src/foundation/private-smoke-access.js +135 -0
  131. package/src/foundation/private-smoke-admission.d.ts +45 -0
  132. package/src/foundation/private-smoke-admission.js +180 -0
  133. package/src/foundation/private-smoke-control-plane.d.ts +18 -0
  134. package/src/foundation/private-smoke-control-plane.js +184 -0
  135. package/src/foundation/provision-database-bindings.d.ts +5 -0
  136. package/src/foundation/provision-database-bindings.js +41 -8
  137. package/src/foundation/provision-logical-database.js +15 -8
  138. package/src/foundation/requirements.d.ts +3 -3
  139. package/src/foundation/requirements.js +24 -12
  140. package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
  141. package/src/foundation/router-waf-rate-rehearsal.js +210 -0
  142. package/src/foundation/router-waf.d.ts +149 -0
  143. package/src/foundation/router-waf.js +809 -0
  144. package/src/foundation/stages.d.ts +1 -0
  145. package/src/foundation/stages.js +11 -0
  146. package/src/generators/blueprint/blueprint.d.ts +5 -0
  147. package/src/generators/blueprint/blueprint.js +102 -0
  148. package/src/generators/blueprint/files.d.ts +6 -0
  149. package/src/generators/blueprint/files.js +217 -0
  150. package/src/generators/blueprint/schema.d.ts +4 -0
  151. package/src/generators/blueprint/schema.json +18 -0
  152. package/src/generators/formatting.d.ts +8 -0
  153. package/src/generators/formatting.js +141 -0
  154. package/src/generators/function/function.js +38 -17
  155. package/src/generators/logging-registry.d.ts +2 -0
  156. package/src/generators/logging-registry.js +22 -0
  157. package/src/generators/post-generation-install.js +2 -2
  158. package/src/generators/preset/dependency-overrides.d.ts +8 -0
  159. package/src/generators/preset/dependency-overrides.js +55 -0
  160. package/src/generators/preset/generator.js +43 -3
  161. package/src/generators/preset/schema.d.ts +10 -0
  162. package/src/generators/preset/schema.json +47 -0
  163. package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
  164. package/src/generators/preset/workspace-files-adopter-skills.js +324 -0
  165. package/src/generators/preset/workspace-files-ci-acceptance.d.ts +1 -0
  166. package/src/generators/preset/workspace-files-ci-acceptance.js +791 -0
  167. package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
  168. package/src/generators/preset/workspace-files-ci-install.js +196 -0
  169. package/src/generators/preset/workspace-files-developer-agent.d.ts +2 -0
  170. package/src/generators/preset/workspace-files-developer-agent.js +162 -44
  171. package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
  172. package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
  173. package/src/generators/preset/workspace-files-foundation-workload-roles.js +5 -2
  174. package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
  175. package/src/generators/preset/workspace-files-performance-cost.js +8 -8
  176. package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
  177. package/src/generators/preset/workspace-files-performance-load.js +39 -25
  178. package/src/generators/preset/workspace-files-shared-operation-claims.d.ts +10 -0
  179. package/src/generators/preset/workspace-files-shared-operation-claims.js +59 -0
  180. package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
  181. package/src/generators/preset/workspace-files-stage-authority.js +529 -0
  182. package/src/generators/preset/workspace-files-thin-deploy.d.ts +65 -0
  183. package/src/generators/preset/workspace-files-thin-deploy.js +2507 -0
  184. package/src/generators/preset/workspace-files-thin-docs.d.ts +7 -0
  185. package/src/generators/preset/workspace-files-thin-docs.js +370 -0
  186. package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
  187. package/src/generators/preset/workspace-files-thin-release.js +26 -0
  188. package/src/generators/preset/workspace-files-workload-role-baseline.js +254 -42
  189. package/src/generators/preset/workspace-files.d.ts +18 -2
  190. package/src/generators/preset/workspace-files.js +1525 -609
  191. package/src/generators/repository-policy/repository-policy.js +235 -5
  192. package/src/generators/repository-policy/schema.d.ts +10 -0
  193. package/src/generators/repository-policy/schema.json +80 -4
  194. package/src/generators/repository-policy/tree-policy.d.ts +3 -0
  195. package/src/generators/repository-policy/tree-policy.js +25 -0
  196. package/src/generators/slice/built-in-plan-api-contract-files.js +49 -11
  197. package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
  198. package/src/generators/slice/built-in-plan-api-files.js +130 -414
  199. package/src/generators/slice/built-in-plan-async-work-files.js +166 -1969
  200. package/src/generators/slice/built-in-plan-authorization-files.js +102 -334
  201. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +975 -233
  202. package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
  203. package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
  204. package/src/generators/slice/built-in-plan-background-work-files.d.ts +2 -0
  205. package/src/generators/slice/built-in-plan-background-work-files.js +99 -0
  206. package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
  207. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
  208. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  209. package/src/generators/slice/built-in-plan-data-files.js +176 -1200
  210. package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
  211. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +37 -2
  212. package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2443
  213. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +50 -8
  214. package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
  215. package/src/generators/slice/built-in-plan-database-lifecycle-files.js +44 -25
  216. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +25 -2
  217. package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
  218. package/src/generators/slice/built-in-plan-foundation-files.js +39 -18
  219. package/src/generators/slice/built-in-plan-frontend-files.js +14 -3
  220. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  221. package/src/generators/slice/built-in-plan-infrastructure-files.js +933 -730
  222. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js +75 -14
  223. package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
  224. package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
  225. package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
  226. package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
  227. package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
  228. package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
  229. package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
  230. package/src/generators/slice/built-in-plan-key-value-delivery.js +137 -0
  231. package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
  232. package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
  233. package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
  234. package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
  235. package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
  236. package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
  237. package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
  238. package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
  239. package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
  240. package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
  241. package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
  242. package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
  243. package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
  244. package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
  245. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
  246. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
  247. package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
  248. package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
  249. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
  250. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
  251. package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
  252. package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
  253. package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
  254. package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
  255. package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
  256. package/src/generators/slice/built-in-plan-metadata-files.js +159 -29
  257. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
  258. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +324 -0
  259. package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
  260. package/src/generators/slice/built-in-plan-operations-files.js +585 -97
  261. package/src/generators/slice/built-in-plan-performance-files.d.ts +2 -1
  262. package/src/generators/slice/built-in-plan-performance-files.js +220 -1074
  263. package/src/generators/slice/built-in-plan-project-files.js +141 -135
  264. package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
  265. package/src/generators/slice/built-in-plan-release-files.js +310 -70
  266. package/src/generators/slice/built-in-plan-reliability-files.d.ts +1 -1
  267. package/src/generators/slice/built-in-plan-reliability-files.js +283 -44
  268. package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
  269. package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
  270. package/src/generators/slice/built-in-plan-shared.d.ts +4 -2
  271. package/src/generators/slice/built-in-plan-shared.js +41 -19
  272. package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
  273. package/src/generators/slice/built-in-plan-sql-events.js +276 -0
  274. package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
  275. package/src/generators/slice/built-in-plan-testing-files.js +304 -172
  276. package/src/generators/slice/built-in-plan-testing-persistence-event-files.d.ts +7 -0
  277. package/src/generators/slice/built-in-plan-testing-persistence-event-files.js +487 -0
  278. package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
  279. package/src/generators/slice/built-in-plan-testing-persistence-files.js +180 -0
  280. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
  281. package/src/generators/slice/built-in-plan-thin-release-files.js +162 -0
  282. package/src/generators/slice/built-in-plan-verification-files.js +76 -2
  283. package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
  284. package/src/generators/slice/built-in-plan-web-files.js +223 -16
  285. package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
  286. package/src/generators/slice/built-in-plan-workload-role-files.js +143 -279
  287. package/src/generators/slice/built-in-plan.d.ts +11 -1
  288. package/src/generators/slice/built-in-plan.js +83 -30
  289. package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
  290. package/src/generators/slice/data-policy-review-seed.js +22 -0
  291. package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
  292. package/src/generators/slice/deployed-smoke-readiness.js +214 -0
  293. package/src/generators/slice/local-source-identity.d.ts +2 -0
  294. package/src/generators/slice/local-source-identity.js +31 -0
  295. package/src/generators/slice/persistence-contract.d.ts +14 -0
  296. package/src/generators/slice/persistence-contract.js +32 -0
  297. package/src/generators/slice/slice.js +61 -50
  298. package/src/generators/sql/schema.d.ts +7 -0
  299. package/src/generators/sql/schema.json +38 -0
  300. package/src/generators/sql/sql.d.ts +6 -0
  301. package/src/generators/sql/sql.js +53 -0
  302. package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
  303. package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
  304. package/src/generators/upgrade/upgrade.d.ts +15 -1
  305. package/src/generators/upgrade/upgrade.js +435 -44
  306. package/src/generators/workload/frozen-container.d.ts +1 -1
  307. package/src/generators/workload/performance-registration.d.ts +1 -0
  308. package/src/generators/workload/performance-registration.js +9 -11
  309. package/src/generators/workload/service-performance-files.d.ts +1 -0
  310. package/src/generators/workload/service-performance-files.js +27 -7
  311. package/src/generators/workload/workload.d.ts +1 -1
  312. package/src/generators/workload/workload.js +105 -29
  313. package/src/git-policy/action-pins.d.ts +5 -0
  314. package/src/git-policy/action-pins.js +5 -0
  315. package/src/git-policy/github-bootstrap.d.ts +48 -8
  316. package/src/git-policy/github-bootstrap.js +344 -176
  317. package/src/git-policy/routing.d.ts +7 -1
  318. package/src/git-policy/routing.js +62 -1
  319. package/src/index.d.ts +1 -0
  320. package/src/index.js +1 -0
  321. package/src/infrastructure-change/local-capability.d.ts +73 -0
  322. package/src/infrastructure-change/local-capability.js +114 -0
  323. package/src/infrastructure-change/model.d.ts +25 -4
  324. package/src/infrastructure-change/model.js +1 -0
  325. package/src/infrastructure-change/normalize.d.ts +4 -0
  326. package/src/infrastructure-change/normalize.js +47 -7
  327. package/src/infrastructure-change/plan.d.ts +30 -3
  328. package/src/infrastructure-change/plan.js +323 -13
  329. package/src/infrastructure-change/risk.d.ts +3 -1
  330. package/src/infrastructure-change/risk.js +96 -16
  331. package/src/local-dev/browser-verification.d.ts +37 -0
  332. package/src/local-dev/browser-verification.js +281 -0
  333. package/src/local-dev/contracts.d.ts +10 -1
  334. package/src/local-dev/contracts.js +114 -13
  335. package/src/local-dev/dev-command-core.js +24 -5
  336. package/src/local-dev/docker-credential-health.d.ts +14 -0
  337. package/src/local-dev/docker-credential-health.js +94 -0
  338. package/src/local-dev/environment-inspector.d.ts +7 -0
  339. package/src/local-dev/environment-inspector.js +42 -15
  340. package/src/local-dev/environment-state.js +2 -2
  341. package/src/local-dev/errors.d.ts +1 -1
  342. package/src/local-dev/errors.js +2 -0
  343. package/src/local-dev/fleet-client.js +2 -2
  344. package/src/local-dev/fleet-configuration.js +57 -25
  345. package/src/local-dev/fleet-inventory.js +58 -22
  346. package/src/local-dev/fleet-ipc.d.ts +7 -0
  347. package/src/local-dev/fleet-ipc.js +14 -2
  348. package/src/local-dev/fleet-launcher.d.ts +6 -0
  349. package/src/local-dev/fleet-launcher.js +16 -4
  350. package/src/local-dev/fleet-logs.js +50 -22
  351. package/src/local-dev/fleet-process.d.ts +20 -1
  352. package/src/local-dev/fleet-process.js +197 -41
  353. package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
  354. package/src/local-dev/fleet-runner-evidence.js +56 -0
  355. package/src/local-dev/fleet-runtime.js +268 -229
  356. package/src/local-dev/fleet-session.d.ts +2 -0
  357. package/src/local-dev/fleet-session.js +28 -11
  358. package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
  359. package/src/local-dev/fleet-state.d.ts +5 -2
  360. package/src/local-dev/fleet-state.js +25 -4
  361. package/src/local-dev/fleet-supervisor.d.ts +3 -0
  362. package/src/local-dev/fleet-supervisor.js +66 -11
  363. package/src/local-dev/fleet-web-start.d.ts +12 -0
  364. package/src/local-dev/fleet-web-start.js +48 -0
  365. package/src/local-dev/identity.js +3 -14
  366. package/src/local-dev/index.d.ts +1 -0
  367. package/src/local-dev/index.js +1 -0
  368. package/src/local-dev/native-completion.d.ts +9 -0
  369. package/src/local-dev/native-completion.js +130 -0
  370. package/src/local-dev/nx-workspace.d.ts +4 -2
  371. package/src/local-dev/nx-workspace.js +11 -6
  372. package/src/local-dev/personal-stage.d.ts +4 -5
  373. package/src/local-dev/personal-stage.js +6 -54
  374. package/src/local-dev/port-claims.d.ts +13 -0
  375. package/src/local-dev/port-claims.js +46 -0
  376. package/src/local-dev/ports.d.ts +14 -2
  377. package/src/local-dev/ports.js +78 -3
  378. package/src/local-dev/private-state.d.ts +11 -0
  379. package/src/local-dev/private-state.js +146 -40
  380. package/src/local-dev/process-group.d.ts +4 -0
  381. package/src/local-dev/process-group.js +29 -0
  382. package/src/local-dev/process-identity.d.ts +8 -0
  383. package/src/local-dev/process-identity.js +31 -1
  384. package/src/local-dev/proxy.js +11 -12
  385. package/src/local-dev/runtime-paths.js +1 -1
  386. package/src/local-dev/slice-claim.js +1 -1
  387. package/src/local-dev/slice-runner.d.ts +15 -6
  388. package/src/local-dev/slice-runner.js +189 -54
  389. package/src/local-dev/task-attachment.d.ts +17 -0
  390. package/src/local-dev/task-attachment.js +73 -0
  391. package/src/local-dev/task-authority.d.ts +10 -0
  392. package/src/local-dev/task-authority.js +27 -0
  393. package/src/local-dev/task-identity.d.ts +33 -0
  394. package/src/local-dev/task-identity.js +418 -0
  395. package/src/local-dev/task-native-writer.d.ts +18 -0
  396. package/src/local-dev/task-native-writer.js +329 -0
  397. package/src/local-dev/tls.js +8 -2
  398. package/src/local-dev/web-launch.d.ts +9 -0
  399. package/src/local-dev/web-launch.js +130 -0
  400. package/src/ownership/composition.d.ts +2 -1
  401. package/src/ownership/composition.js +1 -0
  402. package/src/performance/cost-collection.d.ts +1 -1
  403. package/src/performance/cost-collection.js +4 -2
  404. package/src/performance/cost-controls.d.ts +8 -4
  405. package/src/performance/cost-controls.js +39 -28
  406. package/src/performance/evidence.d.ts +1 -1
  407. package/src/performance/evidence.js +5 -3
  408. package/src/performance/load-safety.js +5 -3
  409. package/src/performance/model.d.ts +4 -4
  410. package/src/performance/model.js +4 -5
  411. package/src/performance/scenario.d.ts +22 -0
  412. package/src/performance/scenario.js +100 -92
  413. package/src/release/index.d.ts +0 -2
  414. package/src/release/index.js +0 -2
  415. package/src/release/source-authority.d.ts +5 -5
  416. package/src/release/source-authority.js +141 -124
  417. package/src/repository-policy/aurora-preflight.d.ts +1 -1
  418. package/src/repository-policy/aurora-preflight.js +4 -1
  419. package/src/repository-policy/capacity-migration.d.ts +3 -0
  420. package/src/repository-policy/capacity-migration.js +21 -0
  421. package/src/repository-policy/deployment-plan.d.ts +4 -1
  422. package/src/repository-policy/deployment-plan.js +9 -0
  423. package/src/repository-policy/foundation-profile.js +10 -1
  424. package/src/repository-policy/policy.d.ts +57 -3
  425. package/src/repository-policy/policy.js +497 -11
  426. package/src/schemas/blueprint-v1.json +5 -4
  427. package/src/schemas/foundation-requirement-v1.json +5 -4
  428. package/src/schemas/performance-policy-v1.json +3 -3
  429. package/src/schemas/repository-policy-v1.json +130 -6
  430. package/src/schemas/testing-evidence-result-v1.json +1 -1
  431. package/src/secrets/adapters.d.ts +7 -2
  432. package/src/secrets/adapters.js +34 -3
  433. package/src/secrets/aws-control-plane.d.ts +10 -1
  434. package/src/secrets/aws-control-plane.js +67 -0
  435. package/src/secrets/generated-aws-control-plane.d.ts +23 -0
  436. package/src/secrets/generated-aws-control-plane.js +259 -0
  437. package/src/secrets/metadata.js +38 -10
  438. package/src/secrets/model.d.ts +8 -1
  439. package/src/secrets/model.js +24 -3
  440. package/src/secrets/operator.d.ts +91 -3
  441. package/src/secrets/operator.js +463 -13
  442. package/src/secrets/personal-command.d.ts +18 -2
  443. package/src/secrets/personal-command.js +66 -12
  444. package/src/secrets/registry.d.ts +2 -1
  445. package/src/secrets/registry.js +18 -1
  446. package/src/secrets/verification.js +15 -2
  447. package/src/secrets/workload-access.js +10 -2
  448. package/src/sst-environment-source-format.d.ts +6 -0
  449. package/src/sst-environment-source-format.js +199 -0
  450. package/src/supply-chain/action-pins.js +61 -7
  451. package/src/supply-chain/blueprint-trust-git.js +85 -24
  452. package/src/supply-chain/blueprint-verification-authority.js +55 -3
  453. package/src/supply-chain/build-output-bounds.d.ts +2 -0
  454. package/src/supply-chain/build-output-bounds.js +12 -0
  455. package/src/supply-chain/build-output.d.ts +7 -1
  456. package/src/supply-chain/build-output.js +177 -24
  457. package/src/supply-chain/ecr-scanning.d.ts +5 -3
  458. package/src/supply-chain/ecr-scanning.js +11 -7
  459. package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
  460. package/src/supply-chain/ecs-deployed-image.js +6 -4
  461. package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
  462. package/src/supply-chain/generated-command.js +1 -0
  463. package/src/supply-chain/generated-container-release-command.js +1285 -124
  464. package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
  465. package/src/supply-chain/generated-ecr-collector-command.js +200 -93
  466. package/src/supply-chain/generated-files.js +25 -14
  467. package/src/supply-chain/generated-scanner-command.js +2 -1
  468. package/src/supply-chain/index.d.ts +1 -1
  469. package/src/supply-chain/index.js +2 -1
  470. package/src/supply-chain/sbom.d.ts +1 -1
  471. package/src/supply-chain/sbom.js +30 -5
  472. package/src/supply-chain/scanner.js +3 -0
  473. package/src/testing-evidence/fixture-scope.d.ts +2 -1
  474. package/src/testing-evidence/fixture-scope.js +4 -2
  475. package/src/testing-evidence/result.d.ts +2 -1
  476. package/src/testing-evidence/result.js +18 -4
  477. package/src/workload-roles/account-baseline.d.ts +11 -0
  478. package/src/workload-roles/account-baseline.js +253 -16
  479. package/src/workload-roles/authority.d.ts +3 -1
  480. package/src/workload-roles/authority.js +48 -2
  481. package/src/workload-roles/aws-s3-state.js +27 -0
  482. package/src/workload-roles/boundary.d.ts +2 -1
  483. package/src/workload-roles/boundary.js +9 -2
  484. package/src/workload-roles/handler.js +52 -24
  485. package/src/workload-roles/index.d.ts +10 -17
  486. package/src/workload-roles/index.js +5 -18
  487. package/src/workload-roles/injection.js +1 -1
  488. package/src/workload-roles/provisioner.js +12 -4
  489. package/src/workload-roles/registration.d.ts +1 -0
  490. package/src/workload-roles/registration.js +5 -0
  491. package/src/workload-roles/stage-boundary.js +1 -1
  492. package/src/workload-roles/standard-slice.js +3 -3
  493. package/src/workspace-deployment/affected-lifecycle.d.ts +53 -0
  494. package/src/workspace-deployment/affected-lifecycle.js +84 -0
  495. package/src/workspace-deployment/identity.d.ts +3 -0
  496. package/src/workspace-deployment/identity.js +22 -0
  497. package/src/workspace-deployment/index.d.ts +4 -0
  498. package/src/workspace-deployment/index.js +8 -0
  499. package/src/workspace-deployment/migration-evidence.d.ts +29 -0
  500. package/src/workspace-deployment/migration-evidence.js +83 -0
  501. package/src/workspace-deployment/migration.d.ts +27 -0
  502. package/src/workspace-deployment/migration.js +109 -0
  503. package/src/workspace-deployment/ownership.d.ts +81 -0
  504. package/src/workspace-deployment/ownership.js +381 -0
  505. package/src/api-contract/baseline-update.js.map +0 -1
  506. package/src/api-contract/compatibility.js.map +0 -1
  507. package/src/api-contract/contract-graph.js.map +0 -1
  508. package/src/api-contract/evidence.js.map +0 -1
  509. package/src/api-contract/index.js.map +0 -1
  510. package/src/api-contract/model.fixtures.d.ts +0 -2
  511. package/src/api-contract/model.fixtures.js +0 -81
  512. package/src/api-contract/model.fixtures.js.map +0 -1
  513. package/src/api-contract/model.js.map +0 -1
  514. package/src/api-contract/rollout.js.map +0 -1
  515. package/src/authorization/compatibility.js.map +0 -1
  516. package/src/authorization/index.js.map +0 -1
  517. package/src/blueprints/execution.js.map +0 -1
  518. package/src/blueprints/external-sandbox.js.map +0 -1
  519. package/src/blueprints/index.js.map +0 -1
  520. package/src/blueprints/inputs.js.map +0 -1
  521. package/src/blueprints/manifest.js.map +0 -1
  522. package/src/blueprints/resolver.js.map +0 -1
  523. package/src/blueprints/transitions.js.map +0 -1
  524. package/src/cli/agent-command.js.map +0 -1
  525. package/src/cli/agent-runtime.js.map +0 -1
  526. package/src/cli/blueprint-authority.js.map +0 -1
  527. package/src/cli/blueprint-command.js.map +0 -1
  528. package/src/cli/bootstrap.js.map +0 -1
  529. package/src/cli/dev-command.js.map +0 -1
  530. package/src/cli/main.js.map +0 -1
  531. package/src/cli/output.js.map +0 -1
  532. package/src/cli/personal-secret-runtime.js.map +0 -1
  533. package/src/cli/secret-terminal.js.map +0 -1
  534. package/src/container-images.js.map +0 -1
  535. package/src/data-lifecycle/index.js.map +0 -1
  536. package/src/data-lifecycle/model.fixtures.d.ts +0 -2
  537. package/src/data-lifecycle/model.fixtures.js +0 -244
  538. package/src/data-lifecycle/model.fixtures.js.map +0 -1
  539. package/src/data-lifecycle/model.js.map +0 -1
  540. package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
  541. package/src/data-lifecycle/validation.js.map +0 -1
  542. package/src/database-retirement/contract.js.map +0 -1
  543. package/src/database-retirement/index.js.map +0 -1
  544. package/src/deterministic-order.js.map +0 -1
  545. package/src/developer-agent/context.js.map +0 -1
  546. package/src/developer-agent/generator-planning.js.map +0 -1
  547. package/src/developer-agent/generator-preview.js.map +0 -1
  548. package/src/developer-agent/git-inspection.js.map +0 -1
  549. package/src/developer-agent/handoff.js.map +0 -1
  550. package/src/developer-agent/index.js.map +0 -1
  551. package/src/developer-agent/model.js.map +0 -1
  552. package/src/developer-agent/operation-registry.js.map +0 -1
  553. package/src/developer-agent/ordering.js.map +0 -1
  554. package/src/developer-agent/planning.js.map +0 -1
  555. package/src/developer-agent/preview-changes.js.map +0 -1
  556. package/src/developer-agent/preview-source.js.map +0 -1
  557. package/src/developer-agent/validation.js.map +0 -1
  558. package/src/developer-agent/workspace-inspection.js.map +0 -1
  559. package/src/developer-agent/workspace-path.js.map +0 -1
  560. package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
  561. package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
  562. package/src/executors/deploy/deploy.js.map +0 -1
  563. package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
  564. package/src/executors/dev/dev.js.map +0 -1
  565. package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
  566. package/src/executors/dev-setup/dev-setup.js.map +0 -1
  567. package/src/executors/developer-context/developer-context.js.map +0 -1
  568. package/src/executors/fleet/fleet.js.map +0 -1
  569. package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
  570. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
  571. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
  572. package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
  573. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
  574. package/src/executors/refresh/refresh.js.map +0 -1
  575. package/src/executors/remove/remove.js.map +0 -1
  576. package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
  577. package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
  578. package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
  579. package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
  580. package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
  581. package/src/executors/unlock/unlock.js.map +0 -1
  582. package/src/executors/work-markers/work-markers.js.map +0 -1
  583. package/src/foundation/discovery.js.map +0 -1
  584. package/src/foundation/index.js.map +0 -1
  585. package/src/foundation/local-database-contract.js.map +0 -1
  586. package/src/foundation/logging-preflight.js.map +0 -1
  587. package/src/foundation/logging.js.map +0 -1
  588. package/src/foundation/preflight.js.map +0 -1
  589. package/src/foundation/provision-database-bindings.js.map +0 -1
  590. package/src/foundation/provision-logical-database.js.map +0 -1
  591. package/src/foundation/requirements.js.map +0 -1
  592. package/src/foundation/router-origin-proof.js.map +0 -1
  593. package/src/foundation/stages.js.map +0 -1
  594. package/src/frontend-security/index.js.map +0 -1
  595. package/src/frontend-security/security-headers.js.map +0 -1
  596. package/src/generators/feature-registry.js.map +0 -1
  597. package/src/generators/function/function.js.map +0 -1
  598. package/src/generators/job/job.js.map +0 -1
  599. package/src/generators/logging-registry.js.map +0 -1
  600. package/src/generators/post-generation-install.js.map +0 -1
  601. package/src/generators/preset/generator.js.map +0 -1
  602. package/src/generators/preset/tool-versions.js.map +0 -1
  603. package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
  604. package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
  605. package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
  606. package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
  607. package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
  608. package/src/generators/preset/workspace-files.js.map +0 -1
  609. package/src/generators/repository-policy/repository-policy.js.map +0 -1
  610. package/src/generators/service/service.js.map +0 -1
  611. package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
  612. package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
  613. package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
  614. package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
  615. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
  616. package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
  617. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
  618. package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
  619. package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
  620. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
  621. package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
  622. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
  623. package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
  624. package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
  625. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
  626. package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
  627. package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
  628. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
  629. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
  630. package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
  631. package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
  632. package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
  633. package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
  634. package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
  635. package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
  636. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
  637. package/src/generators/slice/built-in-plan-shared.js.map +0 -1
  638. package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
  639. package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
  640. package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
  641. package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
  642. package/src/generators/slice/built-in-plan.js.map +0 -1
  643. package/src/generators/slice/slice.js.map +0 -1
  644. package/src/generators/upgrade/upgrade.js.map +0 -1
  645. package/src/generators/workload/frozen-container.js.map +0 -1
  646. package/src/generators/workload/performance-registration.js.map +0 -1
  647. package/src/generators/workload/reliability-registration.js.map +0 -1
  648. package/src/generators/workload/service-performance-files.js.map +0 -1
  649. package/src/generators/workload/workload.js.map +0 -1
  650. package/src/git-policy/action-pins.js.map +0 -1
  651. package/src/git-policy/github-bootstrap.js.map +0 -1
  652. package/src/git-policy/index.js.map +0 -1
  653. package/src/git-policy/routing.js.map +0 -1
  654. package/src/index.js.map +0 -1
  655. package/src/infrastructure-change/convergence.js.map +0 -1
  656. package/src/infrastructure-change/drift.js.map +0 -1
  657. package/src/infrastructure-change/index.js.map +0 -1
  658. package/src/infrastructure-change/model.js.map +0 -1
  659. package/src/infrastructure-change/normalize.js.map +0 -1
  660. package/src/infrastructure-change/plan.js.map +0 -1
  661. package/src/infrastructure-change/risk.js.map +0 -1
  662. package/src/infrastructure-change/summary.js.map +0 -1
  663. package/src/local-dev/context-discovery.js.map +0 -1
  664. package/src/local-dev/contract-validation.js.map +0 -1
  665. package/src/local-dev/contracts.js.map +0 -1
  666. package/src/local-dev/control-contract.js.map +0 -1
  667. package/src/local-dev/dev-command-core.js.map +0 -1
  668. package/src/local-dev/effects.js.map +0 -1
  669. package/src/local-dev/environment-inspector.js.map +0 -1
  670. package/src/local-dev/environment-state.js.map +0 -1
  671. package/src/local-dev/errors.js.map +0 -1
  672. package/src/local-dev/fleet-client.js.map +0 -1
  673. package/src/local-dev/fleet-configuration.js.map +0 -1
  674. package/src/local-dev/fleet-inventory.js.map +0 -1
  675. package/src/local-dev/fleet-ipc.js.map +0 -1
  676. package/src/local-dev/fleet-launcher.js.map +0 -1
  677. package/src/local-dev/fleet-lock.js.map +0 -1
  678. package/src/local-dev/fleet-logs.js.map +0 -1
  679. package/src/local-dev/fleet-process.js.map +0 -1
  680. package/src/local-dev/fleet-runtime.js.map +0 -1
  681. package/src/local-dev/fleet-session.js.map +0 -1
  682. package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
  683. package/src/local-dev/fleet-startup.js.map +0 -1
  684. package/src/local-dev/fleet-state.js.map +0 -1
  685. package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
  686. package/src/local-dev/fleet-supervisor.js.map +0 -1
  687. package/src/local-dev/gateway-daemon.js.map +0 -1
  688. package/src/local-dev/gateway.js.map +0 -1
  689. package/src/local-dev/identity.js.map +0 -1
  690. package/src/local-dev/index.js.map +0 -1
  691. package/src/local-dev/local-context.js.map +0 -1
  692. package/src/local-dev/nx-workspace.js.map +0 -1
  693. package/src/local-dev/personal-secret-ledger.js.map +0 -1
  694. package/src/local-dev/personal-stage.js.map +0 -1
  695. package/src/local-dev/portless.js.map +0 -1
  696. package/src/local-dev/ports.js.map +0 -1
  697. package/src/local-dev/private-state.js.map +0 -1
  698. package/src/local-dev/process-identity.js.map +0 -1
  699. package/src/local-dev/proxy.js.map +0 -1
  700. package/src/local-dev/runtime-paths.js.map +0 -1
  701. package/src/local-dev/secret-slice-claim.js.map +0 -1
  702. package/src/local-dev/slice-claim.js.map +0 -1
  703. package/src/local-dev/slice-runner.js.map +0 -1
  704. package/src/local-dev/tls.js.map +0 -1
  705. package/src/ownership/composition.js.map +0 -1
  706. package/src/ownership/foundation-record.js.map +0 -1
  707. package/src/ownership/hash.js.map +0 -1
  708. package/src/ownership/index.js.map +0 -1
  709. package/src/ownership/json-ownership.js.map +0 -1
  710. package/src/ownership/record.js.map +0 -1
  711. package/src/ownership/workspace-record.js.map +0 -1
  712. package/src/performance/cost-collection.js.map +0 -1
  713. package/src/performance/cost-controls.js.map +0 -1
  714. package/src/performance/evidence.js.map +0 -1
  715. package/src/performance/index.js.map +0 -1
  716. package/src/performance/load-safety.js.map +0 -1
  717. package/src/performance/model.js.map +0 -1
  718. package/src/performance/pr-artifact-budget.js.map +0 -1
  719. package/src/performance/runner.js.map +0 -1
  720. package/src/performance/scenario-endpoint.js.map +0 -1
  721. package/src/performance/scenario.js.map +0 -1
  722. package/src/performance/test-fixtures.d.ts +0 -7
  723. package/src/performance/test-fixtures.js +0 -169
  724. package/src/performance/test-fixtures.js.map +0 -1
  725. package/src/performance/unit-cost.js.map +0 -1
  726. package/src/release/index.js.map +0 -1
  727. package/src/release/lifecycle.js.map +0 -1
  728. package/src/release/manifest.js.map +0 -1
  729. package/src/release/rollout.js.map +0 -1
  730. package/src/release/source-authority.js.map +0 -1
  731. package/src/repository-policy/aurora-preflight.js.map +0 -1
  732. package/src/repository-policy/deployment-plan.js.map +0 -1
  733. package/src/repository-policy/foundation-profile.js.map +0 -1
  734. package/src/repository-policy/index.js.map +0 -1
  735. package/src/repository-policy/policy.js.map +0 -1
  736. package/src/secrets/adapters.js.map +0 -1
  737. package/src/secrets/aws-control-plane.js.map +0 -1
  738. package/src/secrets/declaration-verification.js.map +0 -1
  739. package/src/secrets/guardrails.js.map +0 -1
  740. package/src/secrets/index.js.map +0 -1
  741. package/src/secrets/metadata.js.map +0 -1
  742. package/src/secrets/model.js.map +0 -1
  743. package/src/secrets/operator.js.map +0 -1
  744. package/src/secrets/permissions.js.map +0 -1
  745. package/src/secrets/personal-command.js.map +0 -1
  746. package/src/secrets/personal-ledger.js.map +0 -1
  747. package/src/secrets/registry.js.map +0 -1
  748. package/src/secrets/verification.js.map +0 -1
  749. package/src/secrets/workload-access.js.map +0 -1
  750. package/src/supply-chain/action-pins.js.map +0 -1
  751. package/src/supply-chain/blueprint-trust-git.js.map +0 -1
  752. package/src/supply-chain/blueprint-trust-process.js.map +0 -1
  753. package/src/supply-chain/blueprint-trust.js.map +0 -1
  754. package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
  755. package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
  756. package/src/supply-chain/build-output.js.map +0 -1
  757. package/src/supply-chain/common.js.map +0 -1
  758. package/src/supply-chain/container-artifact-contract.js.map +0 -1
  759. package/src/supply-chain/container-release.js.map +0 -1
  760. package/src/supply-chain/ecr-applicability.js.map +0 -1
  761. package/src/supply-chain/ecr-scanning.js.map +0 -1
  762. package/src/supply-chain/ecs-deployed-image.js.map +0 -1
  763. package/src/supply-chain/errors.js.map +0 -1
  764. package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
  765. package/src/supply-chain/generated-command.js.map +0 -1
  766. package/src/supply-chain/generated-container-release-command.js.map +0 -1
  767. package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
  768. package/src/supply-chain/generated-files.js.map +0 -1
  769. package/src/supply-chain/generated-scanner-command.js.map +0 -1
  770. package/src/supply-chain/index.js.map +0 -1
  771. package/src/supply-chain/inventory.js.map +0 -1
  772. package/src/supply-chain/license-expression.js.map +0 -1
  773. package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
  774. package/src/supply-chain/policy.js.map +0 -1
  775. package/src/supply-chain/publication.js.map +0 -1
  776. package/src/supply-chain/sbom.js.map +0 -1
  777. package/src/supply-chain/scanner.js.map +0 -1
  778. package/src/supply-chain/vendored-source.js.map +0 -1
  779. package/src/testing-evidence/fixture-scope.js.map +0 -1
  780. package/src/testing-evidence/index.js.map +0 -1
  781. package/src/testing-evidence/quarantine.js.map +0 -1
  782. package/src/testing-evidence/result.js.map +0 -1
  783. package/src/testing-evidence/runner-adapter.js.map +0 -1
  784. package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
  785. package/src/validation.js.map +0 -1
  786. package/src/work-markers/index.js.map +0 -1
  787. package/src/work-markers/work-markers.js.map +0 -1
  788. package/src/workload-roles/account-baseline.js.map +0 -1
  789. package/src/workload-roles/authority.js.map +0 -1
  790. package/src/workload-roles/aws-adapter.js.map +0 -1
  791. package/src/workload-roles/aws-internal-handler.js.map +0 -1
  792. package/src/workload-roles/aws-s3-state.js.map +0 -1
  793. package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
  794. package/src/workload-roles/boundary.js.map +0 -1
  795. package/src/workload-roles/convergence.js.map +0 -1
  796. package/src/workload-roles/effective-policy.js.map +0 -1
  797. package/src/workload-roles/handler.js.map +0 -1
  798. package/src/workload-roles/history.js.map +0 -1
  799. package/src/workload-roles/index.js.map +0 -1
  800. package/src/workload-roles/injection.js.map +0 -1
  801. package/src/workload-roles/manifest.js.map +0 -1
  802. package/src/workload-roles/provisioner.js.map +0 -1
  803. package/src/workload-roles/registration.js.map +0 -1
  804. package/src/workload-roles/stage-boundary.js.map +0 -1
  805. package/src/workload-roles/standard-slice.js.map +0 -1
@@ -1,30 +1,28 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EBK_CODE_OWNER_PLACEHOLDER = exports.EBK_STAGING_PLAN_REPOSITORY_VARIABLES = exports.EBK_PRODUCTION_PLAN_REPOSITORY_VARIABLES = exports.EBK_PROTECTED_ENVIRONMENT_VARIABLES = exports.EBK_PROTECTED_ENVIRONMENT_SECRETS = exports.EBK_STAGING_PROMOTION_PULL_ROLE_SECRET = exports.EBK_SMOKE_ROLE_SECRET = exports.EBK_RELIABILITY_READ_ROLE_SECRET = exports.EBK_PERFORMANCE_ORIGINS_VARIABLE = exports.EBK_PERFORMANCE_LOAD_ROLE_SECRET = exports.EBK_PERFORMANCE_COST_ROLE_SECRET = exports.EBK_PERFORMANCE_AGGREGATE_ROLE_SECRET = exports.EBK_ASYNC_RECOVERY_ROLE_SECRET = exports.EBK_ECR_INSPECTOR_EVIDENCE_ROLE_SECRET = exports.EBK_DEPLOYMENT_ROLE_SECRET = exports.EBK_REQUIRED_CHECKS = exports.EBK_PROTECTED_BRANCH_RULESET_NAME = void 0;
3
+ exports.EBK_CODE_OWNER_PLACEHOLDER = exports.EBK_OPTIONAL_STAGE_ENVIRONMENT_VARIABLES = exports.EBK_PROTECTED_ENVIRONMENT_VARIABLES = exports.EBK_PROTECTED_ENVIRONMENT_SECRETS = exports.EBK_STAGING_PROMOTION_PULL_ROLE_SECRET = exports.EBK_PROTECTED_MAIN_RULESET_NAME = exports.EBK_RECORD_MAIN_TOKEN_SECRET = exports.EBK_PERFORMANCE_ORIGINS_VARIABLE = exports.EBK_PERFORMANCE_LOAD_ROLE_SECRET = exports.EBK_PERFORMANCE_COST_ROLE_SECRET = exports.EBK_PERFORMANCE_AGGREGATE_ROLE_SECRET = exports.EBK_ASYNC_RECOVERY_ROLE_SECRET = exports.EBK_ECR_INSPECTOR_EVIDENCE_ROLE_SECRET = exports.EBK_RETIRED_DEPLOYMENT_ROLE_SECRET = exports.EBK_REQUIRED_CHECKS = exports.EBK_PROTECTED_BRANCH_RULESET_NAME = void 0;
4
+ exports.githubEnvironmentTopology = githubEnvironmentTopology;
4
5
  exports.runGitHubBootstrap = runGitHubBootstrap;
5
6
  const index_js_1 = require("../repository-policy/index.js");
6
7
  const deterministic_order_js_1 = require("../deterministic-order.js");
7
8
  exports.EBK_PROTECTED_BRANCH_RULESET_NAME = 'Empire Builder Kit protected branches';
8
9
  exports.EBK_REQUIRED_CHECKS = ['policy', 'verify'];
9
- exports.EBK_DEPLOYMENT_ROLE_SECRET = 'AWS_DEPLOY_ROLE_ARN';
10
+ exports.EBK_RETIRED_DEPLOYMENT_ROLE_SECRET = 'AWS_DEPLOY_ROLE_ARN';
10
11
  exports.EBK_ECR_INSPECTOR_EVIDENCE_ROLE_SECRET = 'AWS_ECR_INSPECTOR_EVIDENCE_ROLE_ARN';
11
12
  exports.EBK_ASYNC_RECOVERY_ROLE_SECRET = 'AWS_ASYNC_RECOVERY_ROLE_ARN';
12
13
  exports.EBK_PERFORMANCE_AGGREGATE_ROLE_SECRET = 'AWS_PERFORMANCE_AGGREGATE_ROLE_ARN';
13
14
  exports.EBK_PERFORMANCE_COST_ROLE_SECRET = 'AWS_PERFORMANCE_COST_ROLE_ARN';
14
15
  exports.EBK_PERFORMANCE_LOAD_ROLE_SECRET = 'AWS_PERFORMANCE_LOAD_ROLE_ARN';
15
16
  exports.EBK_PERFORMANCE_ORIGINS_VARIABLE = 'EBK_PERFORMANCE_ORIGINS_JSON';
16
- exports.EBK_RELIABILITY_READ_ROLE_SECRET = 'AWS_RELIABILITY_READ_ROLE_ARN';
17
- exports.EBK_SMOKE_ROLE_SECRET = 'AWS_SMOKE_ROLE_ARN';
17
+ /** Production environment secret that lets trunk promotion fast-forward main. */
18
+ exports.EBK_RECORD_MAIN_TOKEN_SECRET = 'EBK_RECORD_MAIN_TOKEN';
19
+ /** Trunk promotion keeps main behind status checks and fast-forward pushes only. */
20
+ exports.EBK_PROTECTED_MAIN_RULESET_NAME = 'EBK protected main (trunk promotion)';
18
21
  exports.EBK_STAGING_PROMOTION_PULL_ROLE_SECRET = 'AWS_STAGING_PROMOTION_PULL_ROLE_ARN';
19
22
  exports.EBK_PROTECTED_ENVIRONMENT_SECRETS = [
20
23
  exports.EBK_ASYNC_RECOVERY_ROLE_SECRET,
21
- exports.EBK_DEPLOYMENT_ROLE_SECRET,
22
24
  exports.EBK_ECR_INSPECTOR_EVIDENCE_ROLE_SECRET,
23
- exports.EBK_PERFORMANCE_AGGREGATE_ROLE_SECRET,
24
- exports.EBK_PERFORMANCE_COST_ROLE_SECRET,
25
- exports.EBK_PERFORMANCE_LOAD_ROLE_SECRET,
26
- exports.EBK_RELIABILITY_READ_ROLE_SECRET,
27
- exports.EBK_SMOKE_ROLE_SECRET,
25
+ exports.EBK_RETIRED_DEPLOYMENT_ROLE_SECRET,
28
26
  exports.EBK_STAGING_PROMOTION_PULL_ROLE_SECRET,
29
27
  ];
30
28
  exports.EBK_PROTECTED_ENVIRONMENT_VARIABLES = [
@@ -34,128 +32,133 @@ exports.EBK_PROTECTED_ENVIRONMENT_VARIABLES = [
34
32
  'AWS_STAGING_PROMOTION_REGION',
35
33
  'EBK_ALLOW_PRODUCTION_REMOVE',
36
34
  'EBK_FLEET_ORIGIN',
37
- exports.EBK_PERFORMANCE_ORIGINS_VARIABLE,
38
- 'EBK_SMOKE_AUTHORITY_VERSION',
39
- 'EBK_SMOKE_TARGETS',
35
+ ];
36
+ /**
37
+ * Non-secret stage environment variables an operator may set to request a
38
+ * machine credential generation or its retirement on a workflow deploy. They
39
+ * are never required, and a repository- or organization-scoped copy would
40
+ * silently apply to every stage, so only the stage environment may hold them.
41
+ */
42
+ exports.EBK_OPTIONAL_STAGE_ENVIRONMENT_VARIABLES = [
43
+ 'EBK_MACHINE_CREDENTIAL_GENERATION',
44
+ 'EBK_MACHINE_RETIRE_PREVIOUS_GENERATION',
40
45
  ];
41
46
  const FORBIDDEN_NPM_TOKEN_NAMES = [
42
47
  'NODE_AUTH_TOKEN',
43
48
  'NPM_CONFIG_TOKEN',
44
49
  'NPM_TOKEN',
45
50
  ];
46
- exports.EBK_PRODUCTION_PLAN_REPOSITORY_VARIABLES = [
47
- 'AWS_PRODUCTION_PLAN_EXPECTED_ACCOUNT_ID',
48
- 'AWS_PRODUCTION_PLAN_GENERATED_OBJECT_ARNS_JSON',
49
- 'AWS_PRODUCTION_PLAN_GENERATED_PARAMETER_ARNS_JSON',
50
- 'AWS_PRODUCTION_PLAN_GENERATED_SECRET_ARNS_JSON',
51
- 'AWS_PRODUCTION_PLAN_PROVIDER_REFRESH_POLICY_JSON',
52
- 'AWS_PRODUCTION_PLAN_REGION',
53
- 'AWS_PRODUCTION_PLAN_ROLE_ARN',
54
- 'AWS_PRODUCTION_PLAN_SST_APPS_JSON',
55
- 'AWS_PRODUCTION_PLAN_STATE_BUCKET_ARN',
56
- 'AWS_PRODUCTION_PLAN_STATE_KMS_KEY_ARN',
57
- 'EBK_PRODUCTION_FLEET_ORIGIN',
58
- ];
59
- exports.EBK_STAGING_PLAN_REPOSITORY_VARIABLES = [
60
- 'AWS_STAGING_PLAN_EXPECTED_ACCOUNT_ID',
61
- 'AWS_STAGING_PLAN_GENERATED_OBJECT_ARNS_JSON',
62
- 'AWS_STAGING_PLAN_GENERATED_PARAMETER_ARNS_JSON',
63
- 'AWS_STAGING_PLAN_GENERATED_SECRET_ARNS_JSON',
64
- 'AWS_STAGING_PLAN_PROVIDER_REFRESH_POLICY_JSON',
65
- 'AWS_STAGING_PLAN_REGION',
66
- 'AWS_STAGING_PLAN_ROLE_ARN',
67
- 'AWS_STAGING_PLAN_SST_APPS_JSON',
68
- 'AWS_STAGING_PLAN_STATE_BUCKET_ARN',
69
- 'AWS_STAGING_PLAN_STATE_KMS_KEY_ARN',
70
- 'EBK_STAGING_FLEET_ORIGIN',
71
- ];
72
51
  exports.EBK_CODE_OWNER_PLACEHOLDER = '@REPLACE_WITH_GITHUB_CODE_OWNER';
73
- const GITHUB_API_VERSION = '2022-11-28';
52
+ const GITHUB_API_VERSION = '2026-03-10';
53
+ const GITHUB_IMMUTABLE_OIDC_CHANGE = 'Use the default immutable GitHub OIDC repository subject.';
54
+ const GITHUB_IMMUTABLE_OIDC_TRUST_ACKNOWLEDGEMENT_PREFIX = 'aws-trust-ready:';
74
55
  const PROTECTED_BRANCHES = ['develop', 'main'];
75
- const ENVIRONMENT_BRANCHES = {
76
- 'async-recovery-production': 'main',
77
- 'async-recovery-staging': 'develop',
78
- 'infrastructure-plan-production': 'main',
79
- 'infrastructure-plan-staging': 'develop',
80
- 'performance-cost-production': 'main',
81
- 'performance-cost-staging': 'develop',
82
- 'performance-aggregate-production': 'main',
83
- 'performance-aggregate-staging': 'develop',
84
- 'performance-load-production': 'main',
85
- 'performance-load-staging': 'develop',
86
- 'npm-prerelease': 'main',
87
- production: 'main',
88
- 'reliability-read-production': 'main',
89
- 'reliability-read-staging': 'develop',
90
- staging: 'develop',
91
- };
92
- const ENVIRONMENT_SECRET_REQUIREMENTS = {
93
- 'async-recovery-production': [exports.EBK_ASYNC_RECOVERY_ROLE_SECRET],
94
- 'async-recovery-staging': [exports.EBK_ASYNC_RECOVERY_ROLE_SECRET],
95
- 'infrastructure-plan-production': [],
96
- 'infrastructure-plan-staging': [],
97
- 'performance-cost-production': [exports.EBK_PERFORMANCE_COST_ROLE_SECRET],
98
- 'performance-cost-staging': [exports.EBK_PERFORMANCE_COST_ROLE_SECRET],
99
- 'performance-aggregate-production': [exports.EBK_PERFORMANCE_AGGREGATE_ROLE_SECRET],
100
- 'performance-aggregate-staging': [exports.EBK_PERFORMANCE_AGGREGATE_ROLE_SECRET],
101
- 'performance-load-production': [exports.EBK_PERFORMANCE_LOAD_ROLE_SECRET],
102
- 'performance-load-staging': [exports.EBK_PERFORMANCE_LOAD_ROLE_SECRET],
103
- 'npm-prerelease': [],
104
- production: [
105
- exports.EBK_DEPLOYMENT_ROLE_SECRET,
106
- exports.EBK_ECR_INSPECTOR_EVIDENCE_ROLE_SECRET,
107
- exports.EBK_SMOKE_ROLE_SECRET,
108
- exports.EBK_STAGING_PROMOTION_PULL_ROLE_SECRET,
109
- ],
110
- 'reliability-read-production': [exports.EBK_RELIABILITY_READ_ROLE_SECRET],
111
- 'reliability-read-staging': [exports.EBK_RELIABILITY_READ_ROLE_SECRET],
112
- staging: [
113
- exports.EBK_DEPLOYMENT_ROLE_SECRET,
114
- exports.EBK_ECR_INSPECTOR_EVIDENCE_ROLE_SECRET,
115
- exports.EBK_SMOKE_ROLE_SECRET,
116
- ],
117
- };
56
+ /** The trunk lane protects main alone; the protected pair protects both. */
57
+ function protectedBranchesFor(deliveryLane = 'protected-pair') {
58
+ return deliveryLane === 'trunk' ? ['main'] : PROTECTED_BRANCHES;
59
+ }
118
60
  const BASE_STAGE_VARIABLES = exports.EBK_PROTECTED_ENVIRONMENT_VARIABLES.filter((variable) => variable !== 'EBK_ALLOW_PRODUCTION_REMOVE' &&
119
- variable !== exports.EBK_PERFORMANCE_ORIGINS_VARIABLE &&
120
61
  !variable.startsWith('AWS_STAGING_PROMOTION_'));
121
- const PRODUCTION_STAGE_VARIABLES = exports.EBK_PROTECTED_ENVIRONMENT_VARIABLES.filter((variable) => variable !== exports.EBK_PERFORMANCE_ORIGINS_VARIABLE);
122
- const ENVIRONMENT_VARIABLE_REQUIREMENTS = {
123
- 'async-recovery-production': ['AWS_EXPECTED_ACCOUNT_ID', 'AWS_REGION'],
124
- 'async-recovery-staging': ['AWS_EXPECTED_ACCOUNT_ID', 'AWS_REGION'],
125
- 'infrastructure-plan-production': [],
126
- 'infrastructure-plan-staging': [],
127
- 'performance-cost-production': ['AWS_EXPECTED_ACCOUNT_ID', 'AWS_REGION'],
128
- 'performance-cost-staging': ['AWS_EXPECTED_ACCOUNT_ID', 'AWS_REGION'],
129
- 'performance-aggregate-production': ['AWS_EXPECTED_ACCOUNT_ID', 'AWS_REGION'],
130
- 'performance-aggregate-staging': ['AWS_EXPECTED_ACCOUNT_ID', 'AWS_REGION'],
131
- 'performance-load-production': [
132
- 'AWS_EXPECTED_ACCOUNT_ID',
133
- 'AWS_REGION',
134
- exports.EBK_PERFORMANCE_ORIGINS_VARIABLE,
135
- ],
136
- 'performance-load-staging': [
137
- 'AWS_EXPECTED_ACCOUNT_ID',
138
- 'AWS_REGION',
139
- exports.EBK_PERFORMANCE_ORIGINS_VARIABLE,
140
- ],
141
- 'npm-prerelease': [],
142
- production: PRODUCTION_STAGE_VARIABLES,
143
- 'reliability-read-production': [],
144
- 'reliability-read-staging': [],
145
- staging: BASE_STAGE_VARIABLES,
146
- };
147
- function environmentStage(environment) {
148
- return environment.endsWith('-production') ||
149
- environment === 'npm-prerelease' ||
150
- environment === 'production'
151
- ? 'production'
152
- : 'staging';
62
+ const PRODUCTION_STAGE_VARIABLES = exports.EBK_PROTECTED_ENVIRONMENT_VARIABLES;
63
+ const AUXILIARY_ENVIRONMENTS = Object.freeze([
64
+ {
65
+ name: 'async-recovery',
66
+ requiredSecrets: [exports.EBK_ASYNC_RECOVERY_ROLE_SECRET],
67
+ requiredVariables: ['AWS_EXPECTED_ACCOUNT_ID', 'AWS_REGION'],
68
+ },
69
+ ]);
70
+ function stageEnvironmentTopology(stage, deploymentProfile) {
71
+ const production = stage === 'production';
72
+ return Object.freeze({
73
+ branch: production ? 'main' : 'develop',
74
+ name: stage,
75
+ optionalVariables: exports.EBK_OPTIONAL_STAGE_ENVIRONMENT_VARIABLES,
76
+ requiredSecrets: Object.freeze(production
77
+ ? deploymentProfile === 'starter'
78
+ ? []
79
+ : [exports.EBK_STAGING_PROMOTION_PULL_ROLE_SECRET]
80
+ : []),
81
+ requiredVariables: Object.freeze(production
82
+ ? deploymentProfile === 'starter'
83
+ ? PRODUCTION_STAGE_VARIABLES.filter((variable) => !variable.startsWith('AWS_STAGING_PROMOTION_'))
84
+ : PRODUCTION_STAGE_VARIABLES
85
+ : BASE_STAGE_VARIABLES),
86
+ stage,
87
+ });
88
+ }
89
+ /**
90
+ * Exact generated GitHub environment contract for one deployment profile.
91
+ * Starter uses development as its rehearsal stage; isolated profiles use
92
+ * staging. Production and npm publication remain present for every profile.
93
+ */
94
+ function githubEnvironmentTopology(deploymentProfile, deliveryLane = 'protected-pair', productionApprovalMode = 'promotion-pr') {
95
+ if (deliveryLane === 'trunk') {
96
+ // Trunk lane: development stays local; only production-stage
97
+ // environments exist and every one of them binds to main.
98
+ return githubEnvironmentTopology(deploymentProfile).filter(({ stage }) => stage === 'production');
99
+ }
100
+ if (productionApprovalMode === 'trunk-promotion') {
101
+ // Trunk promotion: the develop run itself promotes and deploys
102
+ // production, so every production-stage environment also admits
103
+ // develop, and the production stage holds the record-main token.
104
+ return githubEnvironmentTopology(deploymentProfile).map((entry) => entry.stage === 'production'
105
+ ? Object.freeze({
106
+ ...entry,
107
+ additionalBranches: Object.freeze(['develop']),
108
+ requiredSecrets: Object.freeze(entry.name === 'production'
109
+ ? [...entry.requiredSecrets, exports.EBK_RECORD_MAIN_TOKEN_SECRET]
110
+ : [...entry.requiredSecrets]),
111
+ })
112
+ : entry);
113
+ }
114
+ const rehearsalStage = deploymentProfile === 'starter' ? 'development' : 'staging';
115
+ const stages = [
116
+ 'production',
117
+ rehearsalStage,
118
+ ];
119
+ const topology = [];
120
+ for (const auxiliary of AUXILIARY_ENVIRONMENTS) {
121
+ for (const stage of stages) {
122
+ topology.push(Object.freeze({
123
+ branch: stage === 'production' ? 'main' : 'develop',
124
+ name: `${auxiliary.name}-${stage}`,
125
+ requiredSecrets: Object.freeze([...auxiliary.requiredSecrets]),
126
+ requiredVariables: Object.freeze([...auxiliary.requiredVariables]),
127
+ stage,
128
+ }));
129
+ }
130
+ }
131
+ const ecrStages = deploymentProfile === 'starter'
132
+ ? ['production']
133
+ : ['staging', 'production'];
134
+ for (const stage of ecrStages) {
135
+ topology.push(Object.freeze({
136
+ branch: stage === 'production' ? 'main' : 'develop',
137
+ name: `ecr-inspector-${stage}`,
138
+ requiredSecrets: Object.freeze([
139
+ exports.EBK_ECR_INSPECTOR_EVIDENCE_ROLE_SECRET,
140
+ ]),
141
+ requiredVariables: Object.freeze([
142
+ 'AWS_EXPECTED_ACCOUNT_ID',
143
+ 'AWS_REGION',
144
+ ]),
145
+ stage,
146
+ }));
147
+ }
148
+ topology.push(Object.freeze({
149
+ branch: 'main',
150
+ name: 'npm-prerelease',
151
+ requiredSecrets: Object.freeze([]),
152
+ requiredVariables: Object.freeze([]),
153
+ stage: 'production',
154
+ }), stageEnvironmentTopology('production', deploymentProfile), stageEnvironmentTopology(rehearsalStage, deploymentProfile));
155
+ return Object.freeze(topology);
153
156
  }
154
157
  function desiredEnvironmentProtection(environment, state, productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds) {
155
- const current = state.environments[environment];
156
- const stage = environmentStage(environment);
158
+ const current = state.environments[environment.name];
159
+ const stage = environment.stage;
157
160
  const stageEnvironment = state.environments[stage];
158
- if (environment === 'npm-prerelease') {
161
+ if (environment.name === 'npm-prerelease') {
159
162
  if (productionApprovalMode === 'promotion-pr') {
160
163
  return {
161
164
  preventSelfReview: false,
@@ -177,19 +180,29 @@ function desiredEnvironmentProtection(environment, state, productionApprovalMode
177
180
  preventSelfReview: stage === 'production' &&
178
181
  productionApprovalMode === 'environment-reviewer'
179
182
  ? true
180
- : environment === stage
183
+ : environment.name === stage
181
184
  ? current.preventSelfReview
182
185
  : stageEnvironment.preventSelfReview,
183
186
  reviewers: stage === 'production' &&
184
187
  productionApprovalMode === 'environment-reviewer' &&
185
188
  productionReviewerIds.length > 0
186
189
  ? existingReviewerPayload(productionReviewerIds)
187
- : environment === stage
190
+ : environment.name === stage
188
191
  ? current.reviewers
189
192
  : stageEnvironment.reviewers,
190
- waitTimer: environment === stage ? current.waitTimer : stageEnvironment.waitTimer,
193
+ waitTimer: environment.name === stage
194
+ ? current.waitTimer
195
+ : stageEnvironment.waitTimer,
191
196
  };
192
197
  }
198
+ function requiresImmutableOidcSubjectCutover(state) {
199
+ return Boolean(state.oidcSubjectCustomization &&
200
+ (!state.oidcSubjectCustomization.useDefault ||
201
+ !state.oidcSubjectCustomization.useImmutableSubject));
202
+ }
203
+ function immutableOidcTrustAcknowledgement(identity) {
204
+ return `${GITHUB_IMMUTABLE_OIDC_TRUST_ACKNOWLEDGEMENT_PREFIX}${identity.subjectPrefix}`;
205
+ }
193
206
  const PRIVATE_ENVIRONMENT_REVIEWER_PLANS = new Set([
194
207
  'business_plus',
195
208
  'enterprise',
@@ -231,9 +244,10 @@ class GitHubApi {
231
244
  }
232
245
  throw new GitHubApiError(response.status, `GitHub ${method} ${path} failed (${response.status}): ${detail}`);
233
246
  }
234
- if (response.status === 204)
247
+ const responseBody = await response.text();
248
+ if (!responseBody)
235
249
  return undefined;
236
- return (await response.json());
250
+ return JSON.parse(responseBody);
237
251
  }
238
252
  }
239
253
  function parseRepository(repository) {
@@ -243,6 +257,58 @@ function parseRepository(repository) {
243
257
  }
244
258
  return { owner: match[1], repo: match[2] };
245
259
  }
260
+ function inspectRepositoryIdentity(repo) {
261
+ const owner = typeof repo.owner === 'object' && repo.owner !== null
262
+ ? repo.owner
263
+ : undefined;
264
+ const ownerLogin = owner?.login;
265
+ const ownerId = owner?.id;
266
+ const repositoryName = repo.name;
267
+ const repositoryId = repo.id;
268
+ const fullName = repo.full_name;
269
+ if (typeof ownerLogin !== 'string' ||
270
+ !/^[A-Za-z0-9_.-]+$/u.test(ownerLogin) ||
271
+ typeof ownerId !== 'number' ||
272
+ !Number.isSafeInteger(ownerId) ||
273
+ ownerId <= 0 ||
274
+ typeof repositoryName !== 'string' ||
275
+ !/^[A-Za-z0-9_.-]+$/u.test(repositoryName) ||
276
+ typeof repositoryId !== 'number' ||
277
+ !Number.isSafeInteger(repositoryId) ||
278
+ repositoryId <= 0 ||
279
+ typeof fullName !== 'string' ||
280
+ fullName !== `${ownerLogin}/${repositoryName}`) {
281
+ return undefined;
282
+ }
283
+ const ownerIdString = String(ownerId);
284
+ const repositoryIdString = String(repositoryId);
285
+ return {
286
+ fullName,
287
+ ownerId: ownerIdString,
288
+ repositoryId: repositoryIdString,
289
+ subjectPrefix: `repo:${ownerLogin}@${ownerIdString}/${repositoryName}@${repositoryIdString}`,
290
+ };
291
+ }
292
+ function inspectOidcSubjectCustomization(value) {
293
+ const includeClaimKeys = value.include_claim_keys;
294
+ const useDefault = value.use_default;
295
+ const useImmutableSubject = value.use_immutable_subject;
296
+ if (typeof useDefault !== 'boolean' ||
297
+ (useImmutableSubject !== undefined &&
298
+ typeof useImmutableSubject !== 'boolean') ||
299
+ (includeClaimKeys !== undefined &&
300
+ (!Array.isArray(includeClaimKeys) ||
301
+ includeClaimKeys.some((key) => typeof key !== 'string')))) {
302
+ return undefined;
303
+ }
304
+ return {
305
+ includeClaimKeys: Array.isArray(includeClaimKeys)
306
+ ? [...new Set(includeClaimKeys)].sort(deterministic_order_js_1.compareUtf16)
307
+ : [],
308
+ useDefault,
309
+ useImmutableSubject: useImmutableSubject === true,
310
+ };
311
+ }
246
312
  function asObjects(value) {
247
313
  return Array.isArray(value)
248
314
  ? value.filter((item) => typeof item === 'object' && item !== null && !Array.isArray(item))
@@ -306,7 +372,7 @@ function refPatternMatches(pattern, ref) {
306
372
  .replace(/\?/g, '.');
307
373
  return new RegExp(`^${expression}$`).test(ref);
308
374
  }
309
- function rulesetTouchesProtectedBranches(ruleset) {
375
+ function rulesetTouchesProtectedBranches(ruleset, deliveryLane = 'protected-pair') {
310
376
  const conditions = typeof ruleset.conditions === 'object' && ruleset.conditions !== null
311
377
  ? ruleset.conditions
312
378
  : {};
@@ -317,7 +383,7 @@ function rulesetTouchesProtectedBranches(ruleset) {
317
383
  return true;
318
384
  const include = asStrings(refName.include);
319
385
  const exclude = asStrings(refName.exclude);
320
- return PROTECTED_BRANCHES.some((branch) => {
386
+ return protectedBranchesFor(deliveryLane).some((branch) => {
321
387
  const ref = `refs/heads/${branch}`;
322
388
  const included = include.length === 0 ||
323
389
  include.some((pattern) => refPatternMatches(pattern, ref));
@@ -325,9 +391,9 @@ function rulesetTouchesProtectedBranches(ruleset) {
325
391
  return included && !excluded;
326
392
  });
327
393
  }
328
- function conflictsWithMergeCommitContract(ruleset) {
394
+ function conflictsWithMergeCommitContract(ruleset, deliveryLane = 'protected-pair') {
329
395
  if (!activeBranchRuleset(ruleset) ||
330
- !rulesetTouchesProtectedBranches(ruleset)) {
396
+ !rulesetTouchesProtectedBranches(ruleset, deliveryLane)) {
331
397
  return [];
332
398
  }
333
399
  const conflicts = [];
@@ -389,13 +455,19 @@ function hasValidCatchAllCodeOwner(contents) {
389
455
  effectiveOwners.length > 0 &&
390
456
  effectiveOwners.every((owner) => owner.startsWith('@') && owner !== exports.EBK_CODE_OWNER_PLACEHOLDER));
391
457
  }
392
- function desiredRuleset() {
458
+ function desiredRuleset(deliveryLane = 'protected-pair', productionApprovalMode = 'promotion-pr') {
459
+ // Trunk promotion records main by fast-forward from the deploy run, so
460
+ // the pull-request rule applies to develop alone and main keeps its own
461
+ // status-check and fast-forward-only ruleset.
462
+ const branches = productionApprovalMode === 'trunk-promotion' && deliveryLane !== 'trunk'
463
+ ? ['develop']
464
+ : protectedBranchesFor(deliveryLane);
393
465
  return {
394
466
  bypass_actors: [],
395
467
  conditions: {
396
468
  ref_name: {
397
469
  exclude: [],
398
- include: PROTECTED_BRANCHES.map((branch) => `refs/heads/${branch}`),
470
+ include: branches.map((branch) => `refs/heads/${branch}`),
399
471
  },
400
472
  },
401
473
  enforcement: 'active',
@@ -427,6 +499,30 @@ function desiredRuleset() {
427
499
  target: 'branch',
428
500
  };
429
501
  }
502
+ function desiredMainRuleset() {
503
+ return {
504
+ bypass_actors: [],
505
+ conditions: {
506
+ ref_name: { exclude: [], include: ['refs/heads/main'] },
507
+ },
508
+ enforcement: 'active',
509
+ name: exports.EBK_PROTECTED_MAIN_RULESET_NAME,
510
+ rules: [
511
+ { type: 'deletion' },
512
+ { type: 'non_fast_forward' },
513
+ {
514
+ parameters: {
515
+ required_status_checks: exports.EBK_REQUIRED_CHECKS.map((context) => ({
516
+ context,
517
+ })),
518
+ strict_required_status_checks_policy: true,
519
+ },
520
+ type: 'required_status_checks',
521
+ },
522
+ ],
523
+ target: 'branch',
524
+ };
525
+ }
430
526
  async function inspectEnvironment(api, repositoryPath, name) {
431
527
  const encoded = encodeURIComponent(name);
432
528
  let environment;
@@ -486,9 +582,24 @@ async function inspectEnvironment(api, repositoryPath, name) {
486
582
  waitTimer: environmentWaitTimer(environment),
487
583
  };
488
584
  }
489
- async function inspect(api, repositoryPath, productionApprovalMode) {
585
+ async function inspect(api, repositoryPath, productionApprovalMode, deploymentProfile, deliveryLane = 'protected-pair') {
490
586
  const blockers = [];
491
587
  const repo = await api.request('GET', repositoryPath);
588
+ const repositoryIdentity = inspectRepositoryIdentity(repo);
589
+ if (!repositoryIdentity) {
590
+ blockers.push('GitHub repository identity must expose one canonical full name and positive immutable owner and repository IDs.');
591
+ }
592
+ let oidcSubjectCustomization;
593
+ try {
594
+ const oidcState = await api.request('GET', `${repositoryPath}/actions/oidc/customization/sub`);
595
+ oidcSubjectCustomization = inspectOidcSubjectCustomization(oidcState);
596
+ if (!oidcSubjectCustomization) {
597
+ blockers.push('GitHub repository OIDC subject customization returned an invalid response.');
598
+ }
599
+ }
600
+ catch (error) {
601
+ blockers.push(`GitHub repository OIDC subject customization could not be inspected: ${error instanceof Error ? error.message : String(error)}`);
602
+ }
492
603
  let ownerPlanName;
493
604
  if (productionApprovalMode === 'environment-reviewer' &&
494
605
  requiresPrivateEnvironmentCapabilities(repo)) {
@@ -518,7 +629,7 @@ async function inspect(api, repositoryPath, productionApprovalMode) {
518
629
  }
519
630
  }
520
631
  }
521
- for (const branch of PROTECTED_BRANCHES) {
632
+ for (const branch of protectedBranchesFor(deliveryLane)) {
522
633
  try {
523
634
  const codeOwners = await api.request('GET', `${repositoryPath}/contents/.github/CODEOWNERS?ref=${branch}`);
524
635
  const content = codeOwners.content;
@@ -551,7 +662,7 @@ async function inspect(api, repositoryPath, productionApprovalMode) {
551
662
  catch (error) {
552
663
  blockers.push(`Ruleset enforcement could not be inspected: ${error instanceof Error ? error.message : String(error)}`);
553
664
  }
554
- for (const branch of PROTECTED_BRANCHES) {
665
+ for (const branch of protectedBranchesFor(deliveryLane)) {
555
666
  try {
556
667
  const branchState = await api.request('GET', `${repositoryPath}/branches/${branch}`);
557
668
  const commit = typeof branchState.commit === 'object' && branchState.commit !== null
@@ -643,7 +754,7 @@ async function inspect(api, repositoryPath, productionApprovalMode) {
643
754
  };
644
755
  }
645
756
  };
646
- const environments = Object.fromEntries(await Promise.all(Object.keys(ENVIRONMENT_BRANCHES).map(async (name) => [name, await inspectNamedEnvironment(name)])));
757
+ const environments = Object.fromEntries(await Promise.all(githubEnvironmentTopology(deploymentProfile, deliveryLane, productionApprovalMode).map(async ({ name }) => [name, await inspectNamedEnvironment(name)])));
647
758
  return {
648
759
  blockers,
649
760
  state: {
@@ -652,17 +763,21 @@ async function inspect(api, repositoryPath, productionApprovalMode) {
652
763
  environments,
653
764
  orgSecretNames,
654
765
  orgVariableNames,
766
+ oidcSubjectCustomization,
655
767
  ownerPlanName,
768
+ ownedMainRuleset: rulesets.find((ruleset) => ruleset.name === exports.EBK_PROTECTED_MAIN_RULESET_NAME &&
769
+ ruleset.source_type !== 'Organization'),
656
770
  ownedRuleset: rulesets.find((ruleset) => ruleset.name === exports.EBK_PROTECTED_BRANCH_RULESET_NAME &&
657
771
  ruleset.source_type !== 'Organization'),
658
772
  repo,
773
+ repositoryIdentity,
659
774
  repositorySecretNames,
660
775
  repositoryVariableNames,
661
776
  rulesets,
662
777
  },
663
778
  };
664
779
  }
665
- function evaluate(repository, state, inspectionBlockers, productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds) {
780
+ function evaluate(repository, state, inspectionBlockers, productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds, deploymentProfile = 'fully-isolated', deliveryLane = 'protected-pair') {
666
781
  const blockers = [...inspectionBlockers];
667
782
  const changes = [];
668
783
  const warnings = [];
@@ -682,6 +797,9 @@ function evaluate(repository, state, inspectionBlockers, productionApprovalMode,
682
797
  if (state.repo.allow_rebase_merge !== false) {
683
798
  changes.push('Disable repository rebase merging.');
684
799
  }
800
+ if (requiresImmutableOidcSubjectCutover(state)) {
801
+ changes.push(GITHUB_IMMUTABLE_OIDC_CHANGE);
802
+ }
685
803
  if (state.actionsCanApprovePullRequests !== true) {
686
804
  blockers.push('GitHub Actions is not permitted to create or approve pull requests for managed sync-back.');
687
805
  }
@@ -701,6 +819,7 @@ function evaluate(repository, state, inspectionBlockers, productionApprovalMode,
701
819
  }
702
820
  for (const variable of [
703
821
  ...exports.EBK_PROTECTED_ENVIRONMENT_VARIABLES,
822
+ ...exports.EBK_OPTIONAL_STAGE_ENVIRONMENT_VARIABLES,
704
823
  ...FORBIDDEN_NPM_TOKEN_NAMES,
705
824
  ]) {
706
825
  if (state.repositoryVariableNames.includes(variable)) {
@@ -710,19 +829,8 @@ function evaluate(repository, state, inspectionBlockers, productionApprovalMode,
710
829
  blockers.push(`${variable} is exposed from organization variable scope instead of its protected environment.`);
711
830
  }
712
831
  }
713
- for (const variable of [
714
- ...exports.EBK_STAGING_PLAN_REPOSITORY_VARIABLES,
715
- ...exports.EBK_PRODUCTION_PLAN_REPOSITORY_VARIABLES,
716
- ]) {
717
- if (!state.repositoryVariableNames.includes(variable)) {
718
- blockers.push(`Repository variable ${variable} is required for a protected read-only plan job; bootstrap never creates variable values.`);
719
- }
720
- if (state.orgVariableNames?.includes(variable)) {
721
- blockers.push(`${variable} must be repository-bound instead of inherited from organization scope.`);
722
- }
723
- }
724
832
  for (const ruleset of state.rulesets) {
725
- const conflicts = conflictsWithMergeCommitContract(ruleset);
833
+ const conflicts = conflictsWithMergeCommitContract(ruleset, deliveryLane);
726
834
  if (conflicts.length > 0) {
727
835
  blockers.push(`Active ruleset ${String(ruleset.name ?? ruleset.id ?? 'unknown')} ${conflicts.join(' and ')}.`);
728
836
  }
@@ -730,27 +838,44 @@ function evaluate(repository, state, inspectionBlockers, productionApprovalMode,
730
838
  if (!state.ownedRuleset) {
731
839
  changes.push(`Create ruleset ${exports.EBK_PROTECTED_BRANCH_RULESET_NAME}.`);
732
840
  }
733
- else if (JSON.stringify(normalizeRuleset(state.ownedRuleset)) !==
734
- JSON.stringify(normalizeRuleset(desiredRuleset()))) {
841
+ else if (!rulesetMatchesDesired(state.ownedRuleset, deliveryLane, productionApprovalMode)) {
735
842
  changes.push(`Update ruleset ${exports.EBK_PROTECTED_BRANCH_RULESET_NAME}.`);
736
843
  }
737
- for (const [environment, branch] of Object.entries(ENVIRONMENT_BRANCHES)) {
844
+ if (productionApprovalMode === 'trunk-promotion') {
845
+ if (!state.ownedMainRuleset) {
846
+ changes.push(`Create ruleset ${exports.EBK_PROTECTED_MAIN_RULESET_NAME}.`);
847
+ }
848
+ else if (JSON.stringify(normalizeRuleset(state.ownedMainRuleset)) !==
849
+ JSON.stringify(normalizeRuleset(desiredMainRuleset()))) {
850
+ changes.push(`Update ruleset ${exports.EBK_PROTECTED_MAIN_RULESET_NAME}.`);
851
+ }
852
+ warnings.push('Trunk promotion keeps main behind required status checks and fast-forward-only updates without a pull-request rule; the production environment secret EBK_RECORD_MAIN_TOKEN is the intended writer, and any other contents-write actor could push an already verified commit.');
853
+ }
854
+ else if (state.ownedMainRuleset) {
855
+ changes.push(`Delete ruleset ${exports.EBK_PROTECTED_MAIN_RULESET_NAME}.`);
856
+ }
857
+ for (const topology of githubEnvironmentTopology(deploymentProfile, deliveryLane, productionApprovalMode)) {
858
+ const { branch, name: environment, stage } = topology;
859
+ const allowedBranches = [branch, ...(topology.additionalBranches ?? [])];
738
860
  const current = state.environments[environment];
739
861
  if (!current.exists)
740
862
  changes.push(`Create ${environment} environment.`);
741
863
  if (!current.customBranchPolicies) {
742
864
  changes.push(`Enable custom deployment branch policy for ${environment}.`);
743
865
  }
744
- const extras = current.branchPolicies.filter(({ name, type }) => name !== branch || type !== 'branch');
866
+ const extras = current.branchPolicies.filter(({ name, type }) => type !== 'branch' ||
867
+ !allowedBranches.includes(name));
745
868
  if (extras.length > 0) {
746
869
  blockers.push(`${environment} permits unexpected deployment refs: ${extras
747
870
  .map(({ name, type }) => `${type}:${name}`)
748
871
  .join(', ')}.`);
749
872
  }
750
- if (!current.branchPolicies.some(({ name, type }) => name === branch && type === 'branch')) {
751
- changes.push(`Restrict ${environment} deployment to ${branch}.`);
873
+ for (const allowed of allowedBranches) {
874
+ if (!current.branchPolicies.some(({ name, type }) => name === allowed && type === 'branch')) {
875
+ changes.push(`Restrict ${environment} deployment to ${allowed}.`);
876
+ }
752
877
  }
753
- const requiredSecrets = ENVIRONMENT_SECRET_REQUIREMENTS[environment];
878
+ const requiredSecrets = topology.requiredSecrets;
754
879
  for (const secret of requiredSecrets) {
755
880
  if (!current.secretNames.includes(secret)) {
756
881
  blockers.push(`${environment} environment is missing ${secret}; bootstrap never creates secret values.`);
@@ -761,20 +886,21 @@ function evaluate(repository, state, inspectionBlockers, productionApprovalMode,
761
886
  blockers.push(`${environment} environment exposes ${secret} outside its exact capability boundary.`);
762
887
  }
763
888
  }
764
- const requiredVariables = ENVIRONMENT_VARIABLE_REQUIREMENTS[environment];
889
+ const requiredVariables = topology.requiredVariables;
765
890
  for (const variable of requiredVariables) {
766
891
  if (!current.variableNames.includes(variable)) {
767
892
  blockers.push(`${environment} environment is missing required variable ${variable}; bootstrap never creates variable values.`);
768
893
  }
769
894
  }
895
+ const optionalVariables = topology.optionalVariables ?? [];
770
896
  for (const variable of current.variableNames) {
771
- if (!requiredVariables.includes(variable)) {
897
+ if (!requiredVariables.includes(variable) &&
898
+ !optionalVariables.includes(variable)) {
772
899
  blockers.push(`${environment} environment exposes ${variable} outside its exact capability boundary.`);
773
900
  }
774
901
  }
775
- const stage = environmentStage(environment);
776
902
  if (environment !== stage) {
777
- const desired = desiredEnvironmentProtection(environment, state, productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds);
903
+ const desired = desiredEnvironmentProtection(topology, state, productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds);
778
904
  if (environment === 'npm-prerelease' &&
779
905
  productionApprovalMode === 'environment-reviewer' &&
780
906
  desired.reviewers.length === 0) {
@@ -816,14 +942,19 @@ function evaluate(repository, state, inspectionBlockers, productionApprovalMode,
816
942
  }
817
943
  }
818
944
  }
819
- if (state.environments.staging.reviewers.length > 0) {
820
- warnings.push('Staging has additional reviewer protection; bootstrap will preserve it.');
945
+ const rehearsalStage = deploymentProfile === 'starter' ? 'development' : 'staging';
946
+ if (state.environments[rehearsalStage].reviewers.length > 0) {
947
+ warnings.push(`${rehearsalStage === 'development' ? 'Development' : 'Staging'} has additional reviewer protection; bootstrap will preserve it.`);
821
948
  }
822
949
  return {
823
950
  blockers: [...new Set(blockers)].sort(),
824
951
  changes: [...new Set(changes)].sort(),
952
+ deploymentProfile,
825
953
  ready: blockers.length === 0 && changes.length === 0,
826
954
  repository,
955
+ ...(state.repositoryIdentity
956
+ ? { repositoryIdentity: state.repositoryIdentity }
957
+ : {}),
827
958
  productionApprovalMode,
828
959
  warnings: [...new Set(warnings)].sort(),
829
960
  };
@@ -885,11 +1016,14 @@ function normalizeRuleset(ruleset) {
885
1016
  function existingReviewerPayload(ids) {
886
1017
  return ids.map((id) => ({ id, type: 'User' }));
887
1018
  }
888
- function rulesetMatchesDesired(ruleset) {
1019
+ function rulesetMatchesDesired(ruleset, deliveryLane = 'protected-pair', productionApprovalMode = 'promotion-pr') {
889
1020
  return (JSON.stringify(normalizeRuleset(ruleset)) ===
890
- JSON.stringify(normalizeRuleset(desiredRuleset())));
1021
+ JSON.stringify(normalizeRuleset(desiredRuleset(deliveryLane, productionApprovalMode))));
891
1022
  }
892
- async function applyChanges(api, repositoryPath, state, productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds) {
1023
+ async function applyChanges(api, repositoryPath, state, productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds, deploymentProfile, deliveryLane = 'protected-pair') {
1024
+ if (requiresImmutableOidcSubjectCutover(state)) {
1025
+ await api.request('PUT', `${repositoryPath}/actions/oidc/customization/sub`, { use_default: true, use_immutable_subject: true });
1026
+ }
893
1027
  if (state.repo.allow_merge_commit !== true ||
894
1028
  state.repo.allow_rebase_merge !== false ||
895
1029
  state.repo.allow_squash_merge !== false) {
@@ -899,19 +1033,36 @@ async function applyChanges(api, repositoryPath, state, productionApprovalMode,
899
1033
  allow_squash_merge: false,
900
1034
  });
901
1035
  }
902
- const desired = desiredRuleset();
1036
+ const desired = desiredRuleset(deliveryLane, productionApprovalMode);
903
1037
  if (state.ownedRuleset &&
904
1038
  typeof state.ownedRuleset.id === 'number' &&
905
- !rulesetMatchesDesired(state.ownedRuleset)) {
1039
+ !rulesetMatchesDesired(state.ownedRuleset, deliveryLane, productionApprovalMode)) {
906
1040
  await api.request('PUT', `${repositoryPath}/rulesets/${state.ownedRuleset.id}`, desired);
907
1041
  }
908
1042
  else if (!state.ownedRuleset) {
909
1043
  await api.request('POST', `${repositoryPath}/rulesets`, desired);
910
1044
  }
911
- for (const [environment, branch] of Object.entries(ENVIRONMENT_BRANCHES)) {
1045
+ if (productionApprovalMode === 'trunk-promotion') {
1046
+ const desiredMain = desiredMainRuleset();
1047
+ if (state.ownedMainRuleset &&
1048
+ typeof state.ownedMainRuleset.id === 'number' &&
1049
+ JSON.stringify(normalizeRuleset(state.ownedMainRuleset)) !==
1050
+ JSON.stringify(normalizeRuleset(desiredMain))) {
1051
+ await api.request('PUT', `${repositoryPath}/rulesets/${state.ownedMainRuleset.id}`, desiredMain);
1052
+ }
1053
+ else if (!state.ownedMainRuleset) {
1054
+ await api.request('POST', `${repositoryPath}/rulesets`, desiredMain);
1055
+ }
1056
+ }
1057
+ else if (state.ownedMainRuleset &&
1058
+ typeof state.ownedMainRuleset.id === 'number') {
1059
+ await api.request('DELETE', `${repositoryPath}/rulesets/${state.ownedMainRuleset.id}`);
1060
+ }
1061
+ for (const topology of githubEnvironmentTopology(deploymentProfile, deliveryLane, productionApprovalMode)) {
1062
+ const { branch, name: environment, stage } = topology;
1063
+ const allowedBranches = [branch, ...(topology.additionalBranches ?? [])];
912
1064
  const current = state.environments[environment];
913
- const stage = environmentStage(environment);
914
- const desiredProtection = desiredEnvironmentProtection(environment, state, productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds);
1065
+ const desiredProtection = desiredEnvironmentProtection(topology, state, productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds);
915
1066
  const reviewers = desiredProtection.reviewers;
916
1067
  const desiredPreventSelfReview = desiredProtection.preventSelfReview;
917
1068
  const desiredWaitTimer = desiredProtection.waitTimer;
@@ -941,19 +1092,25 @@ async function applyChanges(api, repositoryPath, state, productionApprovalMode,
941
1092
  : {}),
942
1093
  });
943
1094
  }
944
- if (!current.branchPolicies.some(({ name, type }) => name === branch && type === 'branch')) {
945
- await api.request('POST', `${repositoryPath}/environments/${encodeURIComponent(environment)}/deployment-branch-policies`, { name: branch, type: 'branch' });
1095
+ for (const allowed of allowedBranches) {
1096
+ if (!current.branchPolicies.some(({ name, type }) => name === allowed && type === 'branch')) {
1097
+ await api.request('POST', `${repositoryPath}/environments/${encodeURIComponent(environment)}/deployment-branch-policies`, { name: allowed, type: 'branch' });
1098
+ }
946
1099
  }
947
1100
  }
948
1101
  }
949
1102
  async function runGitHubBootstrap(options) {
950
1103
  const repository = options.repository.trim();
1104
+ const deploymentProfile = options.deploymentProfile ?? 'fully-isolated';
951
1105
  const { owner, repo } = parseRepository(repository);
952
1106
  if (!options.token.trim()) {
953
1107
  throw new Error('GH_TOKEN or GITHUB_TOKEN is required for GitHub bootstrap.');
954
1108
  }
955
1109
  if (!index_js_1.PRODUCTION_APPROVAL_MODES.includes(options.productionApprovalMode)) {
956
- throw new Error('Production approval mode must be the explicit committed value promotion-pr or environment-reviewer.');
1110
+ throw new Error('Production approval mode must be the explicit committed value promotion-pr, environment-reviewer, or trunk-promotion.');
1111
+ }
1112
+ if (!index_js_1.DEPLOYMENT_PROFILES.includes(deploymentProfile)) {
1113
+ throw new Error('Deployment profile must be starter, production-isolated, or fully-isolated.');
957
1114
  }
958
1115
  const productionReviewerIds = [
959
1116
  ...new Set(options.productionReviewerIds ?? []),
@@ -973,15 +1130,26 @@ async function runGitHubBootstrap(options) {
973
1130
  }
974
1131
  const api = new GitHubApi(options.apiBaseUrl?.trim() || 'https://api.github.com', options.token);
975
1132
  const repositoryPath = `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}`;
976
- const initial = await inspect(api, repositoryPath, options.productionApprovalMode);
977
- const report = evaluate(repository, initial.state, initial.blockers, options.productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds);
1133
+ const deliveryLane = options.deliveryLane ?? 'protected-pair';
1134
+ const initial = await inspect(api, repositoryPath, options.productionApprovalMode, deploymentProfile, deliveryLane);
1135
+ const report = evaluate(repository, initial.state, initial.blockers, options.productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds, deploymentProfile, deliveryLane);
978
1136
  if (!options.apply)
979
1137
  return report;
980
1138
  if (report.blockers.length > 0) {
981
1139
  throw new Error(`GitHub bootstrap apply is blocked:\n- ${report.blockers.join('\n- ')}`);
982
1140
  }
983
- await applyChanges(api, repositoryPath, initial.state, options.productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds);
984
- const completed = await inspect(api, repositoryPath, options.productionApprovalMode);
985
- return evaluate(repository, completed.state, completed.blockers, options.productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds);
1141
+ if (requiresImmutableOidcSubjectCutover(initial.state)) {
1142
+ const identity = initial.state.repositoryIdentity;
1143
+ if (!identity) {
1144
+ throw new Error('GitHub bootstrap cannot acknowledge immutable OIDC trust without the inspected repository identity.');
1145
+ }
1146
+ const expectedAcknowledgement = immutableOidcTrustAcknowledgement(identity);
1147
+ if (options.immutableOidcTrustAcknowledgement !== expectedAcknowledgement) {
1148
+ throw new Error(`GitHub bootstrap immutable OIDC subject cutover requires the exact AWS-trust readiness acknowledgement ${JSON.stringify(expectedAcknowledgement)}. Apply the matching immutable repository-subject AWS trusts, read them back, and rerun with --immutableOidcTrustAcknowledgement=${JSON.stringify(expectedAcknowledgement)}. No GitHub settings were changed.`);
1149
+ }
1150
+ }
1151
+ await applyChanges(api, repositoryPath, initial.state, options.productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds, deploymentProfile, deliveryLane);
1152
+ const completed = await inspect(api, repositoryPath, options.productionApprovalMode, deploymentProfile, deliveryLane);
1153
+ return evaluate(repository, completed.state, completed.blockers, options.productionApprovalMode, productionReviewerIds, npmPrereleaseReviewerIds, deploymentProfile, deliveryLane);
986
1154
  }
987
1155
  //# sourceMappingURL=github-bootstrap.js.map