@empire-builder-kit/nx 1.0.0-rc.38 → 1.0.0-rc.39

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 (637) hide show
  1. package/README.md +18 -0
  2. package/executors.json +5 -0
  3. package/generators.json +10 -0
  4. package/package.json +20 -3
  5. package/src/aws-authority/index.d.ts +1 -0
  6. package/src/aws-authority/index.js +1 -0
  7. package/src/aws-authority/lambda-policy-ordering.d.ts +38 -0
  8. package/src/aws-authority/lambda-policy-ordering.js +56 -0
  9. package/src/aws-authority/stage-authority.d.ts +11 -3
  10. package/src/aws-authority/stage-authority.js +615 -29
  11. package/src/blueprints/external-sandbox.js +21 -9
  12. package/src/blueprints/manifest.d.ts +1 -1
  13. package/src/blueprints/resolver.js +28 -15
  14. package/src/cli/bootstrap.d.ts +1 -1
  15. package/src/cli/deploy-runtime.d.ts +6 -0
  16. package/src/cli/deploy-runtime.js +58 -0
  17. package/src/cli/dev-command.d.ts +16 -4
  18. package/src/cli/dev-command.js +63 -0
  19. package/src/cli/main.d.ts +7 -1
  20. package/src/cli/main.js +128 -20
  21. package/src/cli/output.d.ts +1 -1
  22. package/src/developer-agent/context.js +41 -9
  23. package/src/developer-agent/generator-planning.js +16 -2
  24. package/src/developer-agent/git-inspection.d.ts +6 -2
  25. package/src/developer-agent/git-inspection.js +78 -6
  26. package/src/developer-agent/model.d.ts +4 -2
  27. package/src/developer-agent/operation-registry.d.ts +5 -0
  28. package/src/developer-agent/operation-registry.js +179 -23
  29. package/src/developer-agent/preview-changes.d.ts +2 -0
  30. package/src/developer-agent/preview-changes.js +14 -2
  31. package/src/developer-agent/preview-source.js +3 -0
  32. package/src/developer-agent/validation.js +20 -8
  33. package/src/developer-agent/workspace-inspection.js +37 -3
  34. package/src/executors/deployment-plan/deployment-plan.d.ts +2 -0
  35. package/src/executors/deployment-plan/deployment-plan.js +51 -4
  36. package/src/executors/dev-doctor/dev-doctor.js +13 -6
  37. package/src/executors/dev-task-cleanup/dev-task-cleanup.d.ts +23 -0
  38. package/src/executors/dev-task-cleanup/dev-task-cleanup.js +145 -0
  39. package/src/executors/dev-task-cleanup/schema.json +9 -0
  40. package/src/executors/dev-task-cleanup/task-stack-absence.d.ts +27 -0
  41. package/src/executors/dev-task-cleanup/task-stack-absence.js +281 -0
  42. package/src/executors/dev-task-cleanup/task-stack-checkpoint.d.ts +12 -0
  43. package/src/executors/dev-task-cleanup/task-stack-checkpoint.js +92 -0
  44. package/src/executors/fleet/fleet.js +1 -1
  45. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +28 -1
  46. package/src/executors/local-deploy/local-deploy.d.ts +8 -1
  47. package/src/executors/local-deploy/local-deploy.js +97 -24
  48. package/src/executors/local-deploy/schema.json +8 -0
  49. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +30 -18
  50. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +2 -0
  51. package/src/executors/sst-lifecycle/governed-native-operation.js +9 -0
  52. package/src/executors/sst-lifecycle/run-sst-command.d.ts +5 -0
  53. package/src/executors/sst-lifecycle/run-sst-command.js +220 -32
  54. package/src/executors/sst-lifecycle/sst-environment-source.d.ts +8 -0
  55. package/src/executors/sst-lifecycle/sst-environment-source.js +54 -0
  56. package/src/executors/sst-lifecycle/task-unlock.d.ts +15 -0
  57. package/src/executors/sst-lifecycle/task-unlock.js +126 -0
  58. package/src/foundation/capability-plan.d.ts +43 -0
  59. package/src/foundation/capability-plan.js +168 -0
  60. package/src/foundation/discovery.d.ts +14 -11
  61. package/src/foundation/discovery.js +32 -6
  62. package/src/foundation/index.d.ts +1 -0
  63. package/src/foundation/index.js +1 -0
  64. package/src/foundation/local-database-contract.d.ts +20 -0
  65. package/src/foundation/local-database-contract.js +262 -13
  66. package/src/foundation/local-private-smoke-access.d.ts +20 -0
  67. package/src/foundation/local-private-smoke-access.js +197 -0
  68. package/src/foundation/preflight.js +37 -18
  69. package/src/foundation/private-smoke-access.js +10 -2
  70. package/src/foundation/private-smoke-admission.d.ts +3 -1
  71. package/src/foundation/private-smoke-admission.js +29 -8
  72. package/src/foundation/private-smoke-control-plane.js +17 -6
  73. package/src/foundation/provision-database-bindings.d.ts +5 -0
  74. package/src/foundation/provision-database-bindings.js +41 -8
  75. package/src/foundation/provision-logical-database.js +13 -8
  76. package/src/foundation/requirements.d.ts +3 -3
  77. package/src/foundation/requirements.js +24 -12
  78. package/src/foundation/router-waf.d.ts +1 -0
  79. package/src/foundation/router-waf.js +14 -1
  80. package/src/generators/blueprint/blueprint.d.ts +5 -0
  81. package/src/generators/blueprint/blueprint.js +102 -0
  82. package/src/generators/blueprint/files.d.ts +6 -0
  83. package/src/generators/blueprint/files.js +217 -0
  84. package/src/generators/blueprint/schema.d.ts +4 -0
  85. package/src/generators/blueprint/schema.json +18 -0
  86. package/src/generators/formatting.js +24 -1
  87. package/src/generators/logging-registry.d.ts +2 -0
  88. package/src/generators/logging-registry.js +22 -0
  89. package/src/generators/preset/workspace-files-adopter-skills.d.ts +7 -0
  90. package/src/generators/preset/workspace-files-adopter-skills.js +301 -0
  91. package/src/generators/preset/workspace-files-ci-install.d.ts +2 -0
  92. package/src/generators/preset/workspace-files-ci-install.js +196 -0
  93. package/src/generators/preset/workspace-files-developer-agent.js +40 -13
  94. package/src/generators/preset/workspace-files-performance-load.js +8 -0
  95. package/src/generators/preset/workspace-files-stage-authority.js +40 -1
  96. package/src/generators/preset/workspace-files-thin-deploy.js +66 -34
  97. package/src/generators/preset/workspace-files-thin-docs.js +64 -18
  98. package/src/generators/preset/workspace-files.d.ts +4 -0
  99. package/src/generators/preset/workspace-files.js +159 -91
  100. package/src/generators/repository-policy/repository-policy.js +37 -0
  101. package/src/generators/slice/built-in-plan-api-contract-files.js +42 -7
  102. package/src/generators/slice/built-in-plan-api-files.d.ts +1 -1
  103. package/src/generators/slice/built-in-plan-api-files.js +47 -389
  104. package/src/generators/slice/built-in-plan-async-work-files.js +19 -1912
  105. package/src/generators/slice/built-in-plan-authorization-files.js +92 -329
  106. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +36 -2
  107. package/src/generators/slice/built-in-plan-authorization-storage.d.ts +3 -0
  108. package/src/generators/slice/built-in-plan-authorization-storage.js +119 -0
  109. package/src/generators/slice/built-in-plan-background-work-files.d.ts +1 -1
  110. package/src/generators/slice/built-in-plan-background-work-files.js +15 -5
  111. package/src/generators/slice/built-in-plan-data-deletion-files.js +2 -830
  112. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  113. package/src/generators/slice/built-in-plan-data-files.js +61 -1164
  114. package/src/generators/slice/built-in-plan-data-lifecycle-files.js +53 -28
  115. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +18 -2
  116. package/src/generators/slice/built-in-plan-data-retention-job-files.js +7 -2446
  117. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +30 -6
  118. package/src/generators/slice/built-in-plan-data-rights-files.js +6 -4482
  119. package/src/generators/slice/built-in-plan-database-lifecycle-files.js +4 -15
  120. package/src/generators/slice/built-in-plan-foundation-files.d.ts +2 -1
  121. package/src/generators/slice/built-in-plan-foundation-files.js +34 -10
  122. package/src/generators/slice/built-in-plan-frontend-files.js +2 -2
  123. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  124. package/src/generators/slice/built-in-plan-infrastructure-files.js +180 -522
  125. package/src/generators/slice/built-in-plan-key-value-cleanup.d.ts +4 -0
  126. package/src/generators/slice/built-in-plan-key-value-cleanup.js +100 -0
  127. package/src/generators/slice/built-in-plan-key-value-consumer.d.ts +4 -0
  128. package/src/generators/slice/built-in-plan-key-value-consumer.js +151 -0
  129. package/src/generators/slice/built-in-plan-key-value-deletion.d.ts +2 -0
  130. package/src/generators/slice/built-in-plan-key-value-deletion.js +377 -0
  131. package/src/generators/slice/built-in-plan-key-value-delivery.d.ts +2 -0
  132. package/src/generators/slice/built-in-plan-key-value-delivery.js +120 -0
  133. package/src/generators/slice/built-in-plan-key-value-export.d.ts +2 -0
  134. package/src/generators/slice/built-in-plan-key-value-export.js +595 -0
  135. package/src/generators/slice/built-in-plan-key-value-files.d.ts +2 -0
  136. package/src/generators/slice/built-in-plan-key-value-files.js +31 -0
  137. package/src/generators/slice/built-in-plan-key-value-holds.d.ts +2 -0
  138. package/src/generators/slice/built-in-plan-key-value-holds.js +189 -0
  139. package/src/generators/slice/built-in-plan-key-value-infrastructure.d.ts +2 -0
  140. package/src/generators/slice/built-in-plan-key-value-infrastructure.js +102 -0
  141. package/src/generators/slice/built-in-plan-key-value-performance.d.ts +5 -0
  142. package/src/generators/slice/built-in-plan-key-value-performance.js +530 -0
  143. package/src/generators/slice/built-in-plan-key-value-provider.d.ts +4 -0
  144. package/src/generators/slice/built-in-plan-key-value-provider.js +366 -0
  145. package/src/generators/slice/built-in-plan-key-value-records.d.ts +3 -0
  146. package/src/generators/slice/built-in-plan-key-value-records.js +232 -0
  147. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.d.ts +2 -0
  148. package/src/generators/slice/built-in-plan-key-value-retention-infrastructure.js +103 -0
  149. package/src/generators/slice/built-in-plan-key-value-retention-job-files.d.ts +2 -0
  150. package/src/generators/slice/built-in-plan-key-value-retention-job-files.js +160 -0
  151. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.d.ts +2 -0
  152. package/src/generators/slice/built-in-plan-key-value-retention-maintenance.js +329 -0
  153. package/src/generators/slice/built-in-plan-key-value-retention-worker.d.ts +2 -0
  154. package/src/generators/slice/built-in-plan-key-value-retention-worker.js +477 -0
  155. package/src/generators/slice/built-in-plan-key-value-retention.d.ts +2 -0
  156. package/src/generators/slice/built-in-plan-key-value-retention.js +184 -0
  157. package/src/generators/slice/built-in-plan-metadata-files.d.ts +1 -1
  158. package/src/generators/slice/built-in-plan-metadata-files.js +140 -28
  159. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +1 -1
  160. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +36 -19
  161. package/src/generators/slice/built-in-plan-operations-files.d.ts +1 -1
  162. package/src/generators/slice/built-in-plan-operations-files.js +89 -50
  163. package/src/generators/slice/built-in-plan-performance-files.js +84 -1010
  164. package/src/generators/slice/built-in-plan-project-files.js +116 -67
  165. package/src/generators/slice/built-in-plan-release-files.d.ts +1 -1
  166. package/src/generators/slice/built-in-plan-release-files.js +64 -15
  167. package/src/generators/slice/built-in-plan-reliability-files.js +54 -28
  168. package/src/generators/slice/built-in-plan-shared.d.ts +3 -1
  169. package/src/generators/slice/built-in-plan-shared.js +40 -18
  170. package/src/generators/slice/built-in-plan-sql-events.d.ts +2 -0
  171. package/src/generators/slice/built-in-plan-sql-events.js +257 -0
  172. package/src/generators/slice/built-in-plan-testing-files.d.ts +1 -1
  173. package/src/generators/slice/built-in-plan-testing-files.js +184 -132
  174. package/src/generators/slice/built-in-plan-testing-persistence-files.d.ts +2 -0
  175. package/src/generators/slice/built-in-plan-testing-persistence-files.js +178 -0
  176. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +1 -1
  177. package/src/generators/slice/built-in-plan-thin-release-files.js +35 -2
  178. package/src/generators/slice/built-in-plan-verification-files.js +70 -0
  179. package/src/generators/slice/built-in-plan-web-files.d.ts +1 -1
  180. package/src/generators/slice/built-in-plan-web-files.js +191 -14
  181. package/src/generators/slice/built-in-plan-workload-role-files.d.ts +1 -1
  182. package/src/generators/slice/built-in-plan-workload-role-files.js +113 -274
  183. package/src/generators/slice/built-in-plan.d.ts +9 -1
  184. package/src/generators/slice/built-in-plan.js +49 -21
  185. package/src/generators/slice/data-policy-review-seed.d.ts +2 -0
  186. package/src/generators/slice/data-policy-review-seed.js +22 -0
  187. package/src/generators/slice/deployed-smoke-readiness.d.ts +2 -0
  188. package/src/generators/slice/deployed-smoke-readiness.js +214 -0
  189. package/src/generators/slice/local-source-identity.d.ts +2 -0
  190. package/src/generators/slice/local-source-identity.js +31 -0
  191. package/src/generators/slice/persistence-contract.d.ts +14 -0
  192. package/src/generators/slice/persistence-contract.js +32 -0
  193. package/src/generators/slice/slice.js +29 -24
  194. package/src/generators/sql/schema.d.ts +7 -0
  195. package/src/generators/sql/schema.json +38 -0
  196. package/src/generators/sql/sql.d.ts +6 -0
  197. package/src/generators/sql/sql.js +53 -0
  198. package/src/generators/upgrade/sql-seeded-reconciliation.d.ts +2 -0
  199. package/src/generators/upgrade/sql-seeded-reconciliation.js +170 -0
  200. package/src/generators/upgrade/upgrade.d.ts +2 -0
  201. package/src/generators/upgrade/upgrade.js +136 -9
  202. package/src/generators/workload/workload.js +51 -2
  203. package/src/local-dev/browser-verification.d.ts +37 -0
  204. package/src/local-dev/browser-verification.js +281 -0
  205. package/src/local-dev/contracts.d.ts +10 -1
  206. package/src/local-dev/contracts.js +114 -13
  207. package/src/local-dev/dev-command-core.js +24 -5
  208. package/src/local-dev/docker-credential-health.d.ts +14 -0
  209. package/src/local-dev/docker-credential-health.js +94 -0
  210. package/src/local-dev/environment-inspector.d.ts +7 -0
  211. package/src/local-dev/environment-inspector.js +42 -15
  212. package/src/local-dev/environment-state.js +2 -2
  213. package/src/local-dev/errors.d.ts +1 -1
  214. package/src/local-dev/errors.js +2 -0
  215. package/src/local-dev/fleet-client.js +2 -2
  216. package/src/local-dev/fleet-configuration.js +57 -25
  217. package/src/local-dev/fleet-inventory.js +46 -18
  218. package/src/local-dev/fleet-ipc.d.ts +7 -0
  219. package/src/local-dev/fleet-ipc.js +14 -2
  220. package/src/local-dev/fleet-launcher.d.ts +6 -0
  221. package/src/local-dev/fleet-launcher.js +14 -2
  222. package/src/local-dev/fleet-logs.js +50 -22
  223. package/src/local-dev/fleet-process.d.ts +20 -1
  224. package/src/local-dev/fleet-process.js +197 -41
  225. package/src/local-dev/fleet-runner-evidence.d.ts +5 -0
  226. package/src/local-dev/fleet-runner-evidence.js +56 -0
  227. package/src/local-dev/fleet-runtime.js +268 -229
  228. package/src/local-dev/fleet-session.d.ts +2 -0
  229. package/src/local-dev/fleet-session.js +28 -11
  230. package/src/local-dev/fleet-slice-runner-daemon.js +4 -0
  231. package/src/local-dev/fleet-state.d.ts +5 -2
  232. package/src/local-dev/fleet-state.js +25 -4
  233. package/src/local-dev/fleet-supervisor.d.ts +3 -0
  234. package/src/local-dev/fleet-supervisor.js +66 -11
  235. package/src/local-dev/fleet-web-start.d.ts +12 -0
  236. package/src/local-dev/fleet-web-start.js +48 -0
  237. package/src/local-dev/identity.js +3 -14
  238. package/src/local-dev/index.d.ts +1 -0
  239. package/src/local-dev/index.js +1 -0
  240. package/src/local-dev/native-completion.d.ts +9 -0
  241. package/src/local-dev/native-completion.js +130 -0
  242. package/src/local-dev/nx-workspace.d.ts +4 -2
  243. package/src/local-dev/nx-workspace.js +11 -6
  244. package/src/local-dev/personal-stage.d.ts +4 -5
  245. package/src/local-dev/personal-stage.js +6 -54
  246. package/src/local-dev/port-claims.d.ts +13 -0
  247. package/src/local-dev/port-claims.js +46 -0
  248. package/src/local-dev/ports.d.ts +14 -2
  249. package/src/local-dev/ports.js +78 -3
  250. package/src/local-dev/private-state.d.ts +6 -0
  251. package/src/local-dev/private-state.js +126 -34
  252. package/src/local-dev/process-group.d.ts +4 -0
  253. package/src/local-dev/process-group.js +29 -0
  254. package/src/local-dev/process-identity.d.ts +8 -0
  255. package/src/local-dev/process-identity.js +31 -1
  256. package/src/local-dev/proxy.js +11 -12
  257. package/src/local-dev/runtime-paths.js +1 -1
  258. package/src/local-dev/slice-claim.js +1 -1
  259. package/src/local-dev/slice-runner.d.ts +15 -6
  260. package/src/local-dev/slice-runner.js +189 -54
  261. package/src/local-dev/task-attachment.d.ts +17 -0
  262. package/src/local-dev/task-attachment.js +73 -0
  263. package/src/local-dev/task-authority.d.ts +10 -0
  264. package/src/local-dev/task-authority.js +27 -0
  265. package/src/local-dev/task-identity.d.ts +33 -0
  266. package/src/local-dev/task-identity.js +418 -0
  267. package/src/local-dev/task-native-writer.d.ts +18 -0
  268. package/src/local-dev/task-native-writer.js +329 -0
  269. package/src/local-dev/tls.js +3 -1
  270. package/src/local-dev/web-launch.d.ts +9 -0
  271. package/src/local-dev/web-launch.js +130 -0
  272. package/src/ownership/composition.d.ts +2 -1
  273. package/src/ownership/composition.js +1 -0
  274. package/src/performance/scenario.d.ts +22 -0
  275. package/src/performance/scenario.js +100 -92
  276. package/src/repository-policy/deployment-plan.d.ts +2 -2
  277. package/src/repository-policy/deployment-plan.js +2 -1
  278. package/src/repository-policy/policy.js +38 -3
  279. package/src/schemas/blueprint-v1.json +5 -4
  280. package/src/schemas/foundation-requirement-v1.json +5 -4
  281. package/src/schemas/testing-evidence-result-v1.json +1 -1
  282. package/src/secrets/operator.d.ts +3 -1
  283. package/src/secrets/operator.js +22 -3
  284. package/src/sst-environment-source-format.d.ts +3 -0
  285. package/src/sst-environment-source-format.js +20 -0
  286. package/src/supply-chain/blueprint-trust-git.js +13 -3
  287. package/src/supply-chain/build-output.js +15 -0
  288. package/src/supply-chain/generated-blueprint-trust-command.js +18 -1
  289. package/src/testing-evidence/fixture-scope.d.ts +2 -1
  290. package/src/testing-evidence/fixture-scope.js +4 -2
  291. package/src/testing-evidence/result.d.ts +2 -1
  292. package/src/testing-evidence/result.js +18 -4
  293. package/src/workload-roles/standard-slice.js +2 -3
  294. package/src/api-contract/baseline-update.js.map +0 -1
  295. package/src/api-contract/compatibility.js.map +0 -1
  296. package/src/api-contract/contract-graph.js.map +0 -1
  297. package/src/api-contract/evidence.js.map +0 -1
  298. package/src/api-contract/index.js.map +0 -1
  299. package/src/api-contract/model.fixtures.d.ts +0 -2
  300. package/src/api-contract/model.fixtures.js +0 -81
  301. package/src/api-contract/model.fixtures.js.map +0 -1
  302. package/src/api-contract/model.js.map +0 -1
  303. package/src/api-contract/rollout.js.map +0 -1
  304. package/src/authorization/compatibility.js.map +0 -1
  305. package/src/authorization/index.js.map +0 -1
  306. package/src/aws/child-environment.js.map +0 -1
  307. package/src/aws/identity.js.map +0 -1
  308. package/src/aws-authority/index.js.map +0 -1
  309. package/src/aws-authority/stage-authority.js.map +0 -1
  310. package/src/blueprints/execution.js.map +0 -1
  311. package/src/blueprints/external-sandbox.js.map +0 -1
  312. package/src/blueprints/index.js.map +0 -1
  313. package/src/blueprints/inputs.js.map +0 -1
  314. package/src/blueprints/manifest.js.map +0 -1
  315. package/src/blueprints/resolver.js.map +0 -1
  316. package/src/blueprints/transitions.js.map +0 -1
  317. package/src/cli/agent-command.js.map +0 -1
  318. package/src/cli/agent-runtime.js.map +0 -1
  319. package/src/cli/blueprint-authority.js.map +0 -1
  320. package/src/cli/blueprint-command.js.map +0 -1
  321. package/src/cli/bootstrap.js.map +0 -1
  322. package/src/cli/dev-command.js.map +0 -1
  323. package/src/cli/main.js.map +0 -1
  324. package/src/cli/output.js.map +0 -1
  325. package/src/cli/personal-secret-runtime.js.map +0 -1
  326. package/src/cli/secret-terminal.js.map +0 -1
  327. package/src/container-images.js.map +0 -1
  328. package/src/data-lifecycle/index.js.map +0 -1
  329. package/src/data-lifecycle/model.fixtures.d.ts +0 -2
  330. package/src/data-lifecycle/model.fixtures.js +0 -244
  331. package/src/data-lifecycle/model.fixtures.js.map +0 -1
  332. package/src/data-lifecycle/model.js.map +0 -1
  333. package/src/data-lifecycle/sensitive-artifacts.js.map +0 -1
  334. package/src/data-lifecycle/validation.js.map +0 -1
  335. package/src/database-retirement/contract.js.map +0 -1
  336. package/src/database-retirement/index.js.map +0 -1
  337. package/src/deterministic-order.js.map +0 -1
  338. package/src/developer-agent/context.js.map +0 -1
  339. package/src/developer-agent/generator-planning.js.map +0 -1
  340. package/src/developer-agent/generator-preview.js.map +0 -1
  341. package/src/developer-agent/git-inspection.js.map +0 -1
  342. package/src/developer-agent/handoff.js.map +0 -1
  343. package/src/developer-agent/index.js.map +0 -1
  344. package/src/developer-agent/model.js.map +0 -1
  345. package/src/developer-agent/operation-registry.js.map +0 -1
  346. package/src/developer-agent/ordering.js.map +0 -1
  347. package/src/developer-agent/planning.js.map +0 -1
  348. package/src/developer-agent/preview-changes.js.map +0 -1
  349. package/src/developer-agent/preview-source.js.map +0 -1
  350. package/src/developer-agent/validation.js.map +0 -1
  351. package/src/developer-agent/workspace-inspection.js.map +0 -1
  352. package/src/developer-agent/workspace-path.js.map +0 -1
  353. package/src/executors/blueprint-trust/blueprint-trust.js.map +0 -1
  354. package/src/executors/blueprint-verification/blueprint-verification.js.map +0 -1
  355. package/src/executors/deploy/deploy.js.map +0 -1
  356. package/src/executors/deployment-plan/deployment-plan.js.map +0 -1
  357. package/src/executors/dev/dev.js.map +0 -1
  358. package/src/executors/dev-doctor/dev-doctor.js.map +0 -1
  359. package/src/executors/dev-setup/dev-setup.js.map +0 -1
  360. package/src/executors/developer-context/developer-context.js.map +0 -1
  361. package/src/executors/fleet/fleet.js.map +0 -1
  362. package/src/executors/foundation-preflight/foundation-preflight.js.map +0 -1
  363. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +0 -1
  364. package/src/executors/foundation-profile-preflight/production-database-safeguard.js.map +0 -1
  365. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +0 -1
  366. package/src/executors/github-bootstrap/github-bootstrap.js.map +0 -1
  367. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +0 -1
  368. package/src/executors/local-deploy/federated-credential-transport.js.map +0 -1
  369. package/src/executors/local-deploy/fixtures/local-deploy-state-machine.mjs +0 -53
  370. package/src/executors/local-deploy/local-approval.js.map +0 -1
  371. package/src/executors/local-deploy/local-deploy.js.map +0 -1
  372. package/src/executors/refresh/refresh.js.map +0 -1
  373. package/src/executors/remove/remove.js.map +0 -1
  374. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js.map +0 -1
  375. package/src/executors/secret-guardrails/secret-guardrails.js.map +0 -1
  376. package/src/executors/secret-initialize/secret-initialize.js.map +0 -1
  377. package/src/executors/secret-metadata/secret-metadata.js.map +0 -1
  378. package/src/executors/sst-lifecycle/generated-secret-retirement.js.map +0 -1
  379. package/src/executors/sst-lifecycle/governed-native-operation.js.map +0 -1
  380. package/src/executors/sst-lifecycle/logging-preflight.js.map +0 -1
  381. package/src/executors/sst-lifecycle/run-sst-command.js.map +0 -1
  382. package/src/executors/sst-lifecycle/secret-preflight.js.map +0 -1
  383. package/src/executors/sst-lifecycle/sst-environment-source.js.map +0 -1
  384. package/src/executors/unlock/unlock.js.map +0 -1
  385. package/src/executors/work-markers/work-markers.js.map +0 -1
  386. package/src/foundation/discovery.js.map +0 -1
  387. package/src/foundation/index.js.map +0 -1
  388. package/src/foundation/local-database-contract.js.map +0 -1
  389. package/src/foundation/logging-preflight.js.map +0 -1
  390. package/src/foundation/logging.js.map +0 -1
  391. package/src/foundation/partial-state.js.map +0 -1
  392. package/src/foundation/preflight.js.map +0 -1
  393. package/src/foundation/private-smoke-access.js.map +0 -1
  394. package/src/foundation/private-smoke-admission.js.map +0 -1
  395. package/src/foundation/private-smoke-control-plane.js.map +0 -1
  396. package/src/foundation/provision-database-bindings.js.map +0 -1
  397. package/src/foundation/provision-logical-database.js.map +0 -1
  398. package/src/foundation/requirements.js.map +0 -1
  399. package/src/foundation/router-origin-proof.js.map +0 -1
  400. package/src/foundation/router-waf-rate-rehearsal.js.map +0 -1
  401. package/src/foundation/router-waf.js.map +0 -1
  402. package/src/foundation/stages.js.map +0 -1
  403. package/src/frontend-security/index.js.map +0 -1
  404. package/src/frontend-security/security-headers.js.map +0 -1
  405. package/src/generators/feature-registry.js.map +0 -1
  406. package/src/generators/formatting.js.map +0 -1
  407. package/src/generators/function/function.js.map +0 -1
  408. package/src/generators/job/job.js.map +0 -1
  409. package/src/generators/logging-registry.js.map +0 -1
  410. package/src/generators/post-generation-install.js.map +0 -1
  411. package/src/generators/preset/dependency-overrides.js.map +0 -1
  412. package/src/generators/preset/generator.js.map +0 -1
  413. package/src/generators/preset/tool-versions.js.map +0 -1
  414. package/src/generators/preset/workspace-files-ci-acceptance.js.map +0 -1
  415. package/src/generators/preset/workspace-files-developer-agent.js.map +0 -1
  416. package/src/generators/preset/workspace-files-ecr-inspector.js.map +0 -1
  417. package/src/generators/preset/workspace-files-foundation-workload-roles.js.map +0 -1
  418. package/src/generators/preset/workspace-files-performance-cost.js.map +0 -1
  419. package/src/generators/preset/workspace-files-performance-load.js.map +0 -1
  420. package/src/generators/preset/workspace-files-stage-authority.js.map +0 -1
  421. package/src/generators/preset/workspace-files-thin-deploy.js.map +0 -1
  422. package/src/generators/preset/workspace-files-thin-docs.js.map +0 -1
  423. package/src/generators/preset/workspace-files-thin-release.js.map +0 -1
  424. package/src/generators/preset/workspace-files-workload-role-baseline.js.map +0 -1
  425. package/src/generators/preset/workspace-files.js.map +0 -1
  426. package/src/generators/repository-policy/repository-policy.js.map +0 -1
  427. package/src/generators/repository-policy/tree-policy.js.map +0 -1
  428. package/src/generators/service/service.js.map +0 -1
  429. package/src/generators/slice/built-in-plan-api-contract-files.js.map +0 -1
  430. package/src/generators/slice/built-in-plan-api-files.js.map +0 -1
  431. package/src/generators/slice/built-in-plan-async-work-files.js.map +0 -1
  432. package/src/generators/slice/built-in-plan-authorization-files.js.map +0 -1
  433. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +0 -1
  434. package/src/generators/slice/built-in-plan-background-work-files.js.map +0 -1
  435. package/src/generators/slice/built-in-plan-data-deletion-files.js.map +0 -1
  436. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +0 -1
  437. package/src/generators/slice/built-in-plan-data-files.js.map +0 -1
  438. package/src/generators/slice/built-in-plan-data-lifecycle-files.js.map +0 -1
  439. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +0 -1
  440. package/src/generators/slice/built-in-plan-data-retention-job-files.js.map +0 -1
  441. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +0 -1
  442. package/src/generators/slice/built-in-plan-data-rights-files.js.map +0 -1
  443. package/src/generators/slice/built-in-plan-database-lifecycle-files.js.map +0 -1
  444. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +0 -1
  445. package/src/generators/slice/built-in-plan-foundation-files.js.map +0 -1
  446. package/src/generators/slice/built-in-plan-frontend-files.js.map +0 -1
  447. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +0 -1
  448. package/src/generators/slice/built-in-plan-infrastructure-safety-files.js.map +0 -1
  449. package/src/generators/slice/built-in-plan-metadata-files.js.map +0 -1
  450. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js.map +0 -1
  451. package/src/generators/slice/built-in-plan-operations-files.js.map +0 -1
  452. package/src/generators/slice/built-in-plan-performance-files.js.map +0 -1
  453. package/src/generators/slice/built-in-plan-project-files.js.map +0 -1
  454. package/src/generators/slice/built-in-plan-release-files.js.map +0 -1
  455. package/src/generators/slice/built-in-plan-reliability-files.js.map +0 -1
  456. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +0 -1
  457. package/src/generators/slice/built-in-plan-shared.js.map +0 -1
  458. package/src/generators/slice/built-in-plan-testing-files.js.map +0 -1
  459. package/src/generators/slice/built-in-plan-thin-release-files.js.map +0 -1
  460. package/src/generators/slice/built-in-plan-verification-files.js.map +0 -1
  461. package/src/generators/slice/built-in-plan-web-files.js.map +0 -1
  462. package/src/generators/slice/built-in-plan-workload-role-files.js.map +0 -1
  463. package/src/generators/slice/built-in-plan.js.map +0 -1
  464. package/src/generators/slice/slice.js.map +0 -1
  465. package/src/generators/upgrade/upgrade.js.map +0 -1
  466. package/src/generators/workload/frozen-container.js.map +0 -1
  467. package/src/generators/workload/performance-registration.js.map +0 -1
  468. package/src/generators/workload/reliability-registration.js.map +0 -1
  469. package/src/generators/workload/service-performance-files.js.map +0 -1
  470. package/src/generators/workload/workload.js.map +0 -1
  471. package/src/git-policy/action-pins.js.map +0 -1
  472. package/src/git-policy/github-bootstrap.js.map +0 -1
  473. package/src/git-policy/index.js.map +0 -1
  474. package/src/git-policy/routing.js.map +0 -1
  475. package/src/index.js.map +0 -1
  476. package/src/infrastructure-change/convergence.js.map +0 -1
  477. package/src/infrastructure-change/drift.js.map +0 -1
  478. package/src/infrastructure-change/index.js.map +0 -1
  479. package/src/infrastructure-change/local-capability.js.map +0 -1
  480. package/src/infrastructure-change/model.js.map +0 -1
  481. package/src/infrastructure-change/normalize.js.map +0 -1
  482. package/src/infrastructure-change/plan.js.map +0 -1
  483. package/src/infrastructure-change/risk.js.map +0 -1
  484. package/src/infrastructure-change/summary.js.map +0 -1
  485. package/src/local-dev/context-discovery.js.map +0 -1
  486. package/src/local-dev/contract-validation.js.map +0 -1
  487. package/src/local-dev/contracts.js.map +0 -1
  488. package/src/local-dev/control-contract.js.map +0 -1
  489. package/src/local-dev/dev-command-core.js.map +0 -1
  490. package/src/local-dev/effects.js.map +0 -1
  491. package/src/local-dev/environment-inspector.js.map +0 -1
  492. package/src/local-dev/environment-state.js.map +0 -1
  493. package/src/local-dev/errors.js.map +0 -1
  494. package/src/local-dev/fleet-client.js.map +0 -1
  495. package/src/local-dev/fleet-configuration.js.map +0 -1
  496. package/src/local-dev/fleet-inventory.js.map +0 -1
  497. package/src/local-dev/fleet-ipc.js.map +0 -1
  498. package/src/local-dev/fleet-launcher.js.map +0 -1
  499. package/src/local-dev/fleet-lock.js.map +0 -1
  500. package/src/local-dev/fleet-logs.js.map +0 -1
  501. package/src/local-dev/fleet-process.js.map +0 -1
  502. package/src/local-dev/fleet-runtime.js.map +0 -1
  503. package/src/local-dev/fleet-session.js.map +0 -1
  504. package/src/local-dev/fleet-slice-runner-daemon.js.map +0 -1
  505. package/src/local-dev/fleet-startup.js.map +0 -1
  506. package/src/local-dev/fleet-state.js.map +0 -1
  507. package/src/local-dev/fleet-supervisor-daemon.js.map +0 -1
  508. package/src/local-dev/fleet-supervisor.js.map +0 -1
  509. package/src/local-dev/gateway-daemon.js.map +0 -1
  510. package/src/local-dev/gateway.js.map +0 -1
  511. package/src/local-dev/identity.js.map +0 -1
  512. package/src/local-dev/index.js.map +0 -1
  513. package/src/local-dev/local-context.js.map +0 -1
  514. package/src/local-dev/nx-workspace.js.map +0 -1
  515. package/src/local-dev/personal-secret-ledger.js.map +0 -1
  516. package/src/local-dev/personal-stage.js.map +0 -1
  517. package/src/local-dev/portless.js.map +0 -1
  518. package/src/local-dev/ports.js.map +0 -1
  519. package/src/local-dev/private-state.js.map +0 -1
  520. package/src/local-dev/process-identity.js.map +0 -1
  521. package/src/local-dev/proxy.js.map +0 -1
  522. package/src/local-dev/runtime-paths.js.map +0 -1
  523. package/src/local-dev/secret-slice-claim.js.map +0 -1
  524. package/src/local-dev/slice-claim.js.map +0 -1
  525. package/src/local-dev/slice-runner.js.map +0 -1
  526. package/src/local-dev/tls.js.map +0 -1
  527. package/src/ownership/composition.js.map +0 -1
  528. package/src/ownership/foundation-record.js.map +0 -1
  529. package/src/ownership/hash.js.map +0 -1
  530. package/src/ownership/index.js.map +0 -1
  531. package/src/ownership/json-ownership.js.map +0 -1
  532. package/src/ownership/record.js.map +0 -1
  533. package/src/ownership/workspace-record.js.map +0 -1
  534. package/src/performance/cost-collection.js.map +0 -1
  535. package/src/performance/cost-controls.js.map +0 -1
  536. package/src/performance/evidence.js.map +0 -1
  537. package/src/performance/index.js.map +0 -1
  538. package/src/performance/load-safety.js.map +0 -1
  539. package/src/performance/model.js.map +0 -1
  540. package/src/performance/pr-artifact-budget.js.map +0 -1
  541. package/src/performance/runner.js.map +0 -1
  542. package/src/performance/scenario-endpoint.js.map +0 -1
  543. package/src/performance/scenario.js.map +0 -1
  544. package/src/performance/test-fixtures.d.ts +0 -7
  545. package/src/performance/test-fixtures.js +0 -167
  546. package/src/performance/test-fixtures.js.map +0 -1
  547. package/src/performance/unit-cost.js.map +0 -1
  548. package/src/release/index.js.map +0 -1
  549. package/src/release/lifecycle.js.map +0 -1
  550. package/src/release/manifest.js.map +0 -1
  551. package/src/release/rollout.js.map +0 -1
  552. package/src/release/source-authority.js.map +0 -1
  553. package/src/repository-policy/aurora-preflight.js.map +0 -1
  554. package/src/repository-policy/capacity-migration.js.map +0 -1
  555. package/src/repository-policy/deployment-plan.js.map +0 -1
  556. package/src/repository-policy/foundation-profile.js.map +0 -1
  557. package/src/repository-policy/index.js.map +0 -1
  558. package/src/repository-policy/policy.js.map +0 -1
  559. package/src/secrets/adapters.js.map +0 -1
  560. package/src/secrets/aws-control-plane.js.map +0 -1
  561. package/src/secrets/declaration-verification.js.map +0 -1
  562. package/src/secrets/generated-aws-control-plane.js.map +0 -1
  563. package/src/secrets/guardrails.js.map +0 -1
  564. package/src/secrets/index.js.map +0 -1
  565. package/src/secrets/metadata.js.map +0 -1
  566. package/src/secrets/model.js.map +0 -1
  567. package/src/secrets/operator.js.map +0 -1
  568. package/src/secrets/permissions.js.map +0 -1
  569. package/src/secrets/personal-command.js.map +0 -1
  570. package/src/secrets/personal-ledger.js.map +0 -1
  571. package/src/secrets/registry.js.map +0 -1
  572. package/src/secrets/verification.js.map +0 -1
  573. package/src/secrets/workload-access.js.map +0 -1
  574. package/src/sst-environment-source-format.js.map +0 -1
  575. package/src/supply-chain/action-pins.js.map +0 -1
  576. package/src/supply-chain/blueprint-trust-git.js.map +0 -1
  577. package/src/supply-chain/blueprint-trust-process.js.map +0 -1
  578. package/src/supply-chain/blueprint-trust.js.map +0 -1
  579. package/src/supply-chain/blueprint-verification-authority.js.map +0 -1
  580. package/src/supply-chain/blueprint-verification-execution.js.map +0 -1
  581. package/src/supply-chain/build-output-bounds.js.map +0 -1
  582. package/src/supply-chain/build-output.js.map +0 -1
  583. package/src/supply-chain/common.js.map +0 -1
  584. package/src/supply-chain/container-artifact-contract.js.map +0 -1
  585. package/src/supply-chain/container-release.js.map +0 -1
  586. package/src/supply-chain/ecr-applicability.js.map +0 -1
  587. package/src/supply-chain/ecr-scanning.js.map +0 -1
  588. package/src/supply-chain/ecs-deployed-image.js.map +0 -1
  589. package/src/supply-chain/errors.js.map +0 -1
  590. package/src/supply-chain/generated-blueprint-trust-command.js.map +0 -1
  591. package/src/supply-chain/generated-command.js.map +0 -1
  592. package/src/supply-chain/generated-container-release-command.js.map +0 -1
  593. package/src/supply-chain/generated-ecr-collector-command.js.map +0 -1
  594. package/src/supply-chain/generated-files.js.map +0 -1
  595. package/src/supply-chain/generated-scanner-command.js.map +0 -1
  596. package/src/supply-chain/index.js.map +0 -1
  597. package/src/supply-chain/inventory.js.map +0 -1
  598. package/src/supply-chain/license-expression.js.map +0 -1
  599. package/src/supply-chain/pnpm-toolchain-authority.js.map +0 -1
  600. package/src/supply-chain/policy.js.map +0 -1
  601. package/src/supply-chain/publication.js.map +0 -1
  602. package/src/supply-chain/sbom.js.map +0 -1
  603. package/src/supply-chain/scanner.js.map +0 -1
  604. package/src/supply-chain/vendored-source.js.map +0 -1
  605. package/src/testing-evidence/fixture-scope.js.map +0 -1
  606. package/src/testing-evidence/index.js.map +0 -1
  607. package/src/testing-evidence/quarantine.js.map +0 -1
  608. package/src/testing-evidence/result.js.map +0 -1
  609. package/src/testing-evidence/runner-adapter.js.map +0 -1
  610. package/src/testing-evidence/sensitive-artifacts.js.map +0 -1
  611. package/src/validation.js.map +0 -1
  612. package/src/work-markers/index.js.map +0 -1
  613. package/src/work-markers/work-markers.js.map +0 -1
  614. package/src/workload-roles/account-baseline.js.map +0 -1
  615. package/src/workload-roles/authority.js.map +0 -1
  616. package/src/workload-roles/aws-adapter.js.map +0 -1
  617. package/src/workload-roles/aws-internal-handler.js.map +0 -1
  618. package/src/workload-roles/aws-s3-state.js.map +0 -1
  619. package/src/workload-roles/aws-sdk-control-plane.js.map +0 -1
  620. package/src/workload-roles/boundary.js.map +0 -1
  621. package/src/workload-roles/convergence.js.map +0 -1
  622. package/src/workload-roles/effective-policy.js.map +0 -1
  623. package/src/workload-roles/handler.js.map +0 -1
  624. package/src/workload-roles/history.js.map +0 -1
  625. package/src/workload-roles/index.js.map +0 -1
  626. package/src/workload-roles/injection.js.map +0 -1
  627. package/src/workload-roles/manifest.js.map +0 -1
  628. package/src/workload-roles/provisioner.js.map +0 -1
  629. package/src/workload-roles/registration.js.map +0 -1
  630. package/src/workload-roles/stage-boundary.js.map +0 -1
  631. package/src/workload-roles/standard-slice.js.map +0 -1
  632. package/src/workspace-deployment/affected-lifecycle.js.map +0 -1
  633. package/src/workspace-deployment/identity.js.map +0 -1
  634. package/src/workspace-deployment/index.js.map +0 -1
  635. package/src/workspace-deployment/migration-evidence.js.map +0 -1
  636. package/src/workspace-deployment/migration.js.map +0 -1
  637. package/src/workspace-deployment/ownership.js.map +0 -1
@@ -613,101 +613,109 @@ async function cleanupProtectedLoadScenarioEffects(input) {
613
613
  });
614
614
  let remoteCleanup = 'not-required';
615
615
  if (adapter.cleanupPath !== null) {
616
- const controller = new AbortController();
617
- let timeout;
618
- try {
619
- const authorization = requestAuthorization({
620
- adapter,
621
- capacity,
622
- hmacKeyId: input.hmacKey.id,
623
- operation: 'cleanup',
624
- plan: input.plan,
625
- requestOrdinal: 1,
626
- scenario,
627
- });
628
- const remainingRuntime = cleanupDeadline - Date.now();
629
- if (remainingRuntime <= 0) {
630
- throw invalid('cleanup/deadline', 'exhausted the bounded cleanup runtime before the request');
631
- }
632
- const requestTimeout = Math.min(CLEANUP_MAXIMUM_REQUEST_MILLISECONDS, remainingRuntime);
633
- const request = (async () => {
634
- const response = await fetchImplementation(scenarioUrl(input.plan, cleanupPath(adapter)), {
635
- body: JSON.stringify({
636
- planMaterialDigest: input.plan.materialDigest,
637
- release: input.plan.release,
638
- requestOrdinal: 1,
639
- runId: input.plan.runId,
640
- scenarioId: input.plan.scenarioId,
641
- workload: input.plan.workload,
642
- }),
643
- headers: {
644
- accept: 'application/json',
645
- 'content-type': 'application/json',
646
- ...authorizationHeaders({
647
- authorization,
648
- hmacKey: input.hmacKey,
616
+ let removedSoFar = 0;
617
+ for (;;) {
618
+ const controller = new AbortController();
619
+ let timeout;
620
+ try {
621
+ const authorization = requestAuthorization({
622
+ adapter,
623
+ capacity,
624
+ hmacKeyId: input.hmacKey.id,
625
+ operation: 'cleanup',
626
+ plan: input.plan,
627
+ requestOrdinal: 1,
628
+ scenario,
629
+ });
630
+ const remainingRuntime = cleanupDeadline - Date.now();
631
+ if (remainingRuntime <= 0) {
632
+ throw invalid('cleanup/deadline', 'exhausted the bounded cleanup runtime before the request');
633
+ }
634
+ const requestTimeout = Math.min(CLEANUP_MAXIMUM_REQUEST_MILLISECONDS, remainingRuntime);
635
+ const request = (async () => {
636
+ const response = await fetchImplementation(scenarioUrl(input.plan, cleanupPath(adapter)), {
637
+ body: JSON.stringify({
638
+ planMaterialDigest: input.plan.materialDigest,
639
+ release: input.plan.release,
640
+ requestOrdinal: 1,
641
+ runId: input.plan.runId,
642
+ scenarioId: input.plan.scenarioId,
643
+ workload: input.plan.workload,
649
644
  }),
650
- 'user-agent': 'empire-builder-kit-protected-load-cleanup/1.0.0',
651
- },
652
- method: 'POST',
653
- redirect: 'manual',
654
- signal: controller.signal,
645
+ headers: {
646
+ accept: 'application/json',
647
+ 'content-type': 'application/json',
648
+ ...authorizationHeaders({
649
+ authorization,
650
+ hmacKey: input.hmacKey,
651
+ }),
652
+ 'user-agent': 'empire-builder-kit-protected-load-cleanup/1.0.0',
653
+ },
654
+ method: 'POST',
655
+ redirect: 'manual',
656
+ signal: controller.signal,
657
+ });
658
+ return { body: await response.json(), response };
659
+ })();
660
+ const expired = new Promise((_resolve, reject) => {
661
+ timeout = setTimeout(() => {
662
+ controller.abort();
663
+ reject(invalid('cleanup/deadline', 'exceeded the bounded cleanup request deadline'));
664
+ }, requestTimeout);
655
665
  });
656
- return { body: await response.json(), response };
657
- })();
658
- const expired = new Promise((_resolve, reject) => {
659
- timeout = setTimeout(() => {
660
- controller.abort();
661
- reject(invalid('cleanup/deadline', 'exceeded the bounded cleanup request deadline'));
662
- }, requestTimeout);
663
- });
664
- const { body, response } = await Promise.race([request, expired]);
665
- onlyKeys(body, [
666
- 'kind',
667
- 'hmacKeyId',
668
- 'planMaterialDigest',
669
- 'release',
670
- 'remainingEffectCount',
671
- 'removedEffectCount',
672
- 'runId',
673
- 'scenarioId',
674
- 'schemaVersion',
675
- 'status',
676
- 'target',
677
- ], 'cleanup/response');
678
- validateRelease(body.release, input.plan.release, 'cleanup/response/release');
679
- onlyKeys(body.target, ['accountFingerprint', 'endpoint', 'region', 'slice'], 'cleanup/response/target');
680
- if (!response.ok ||
681
- body.kind !== 'ebk-protected-load-cleanup-result' ||
682
- body.hmacKeyId !== input.hmacKey.id ||
683
- body.planMaterialDigest !== input.plan.materialDigest ||
684
- typeof body.remainingEffectCount !== 'number' ||
685
- !Number.isSafeInteger(body.remainingEffectCount) ||
686
- body.remainingEffectCount !== 0 ||
687
- typeof body.removedEffectCount !== 'number' ||
688
- !Number.isSafeInteger(body.removedEffectCount) ||
689
- body.removedEffectCount < 0 ||
690
- body.runId !== input.plan.runId ||
691
- body.scenarioId !== input.plan.scenarioId ||
692
- body.schemaVersion !== 1 ||
693
- body.status !== 'run-absent' ||
694
- JSON.stringify(body.target) !==
695
- JSON.stringify({
696
- accountFingerprint: input.plan.target.accountFingerprint,
697
- endpoint: scenarioUrl(input.plan, cleanupPath(adapter)),
698
- region: input.plan.target.region,
699
- slice: input.plan.slice,
700
- })) {
701
- throw invalid('cleanup/response', 'must prove every protected effect for the exact run is absent');
666
+ const { body, response } = await Promise.race([request, expired]);
667
+ onlyKeys(body, [
668
+ 'kind',
669
+ 'hmacKeyId',
670
+ 'planMaterialDigest',
671
+ 'release',
672
+ 'remainingEffectCount',
673
+ 'removedEffectCount',
674
+ 'runId',
675
+ 'scenarioId',
676
+ 'schemaVersion',
677
+ 'status',
678
+ 'target',
679
+ ], 'cleanup/response');
680
+ validateRelease(body.release, input.plan.release, 'cleanup/response/release');
681
+ onlyKeys(body.target, ['accountFingerprint', 'endpoint', 'region', 'slice'], 'cleanup/response/target');
682
+ const incomplete = body.status === 'cleanup-in-progress' &&
683
+ body.remainingEffectCount === null;
684
+ if (!response.ok ||
685
+ body.kind !== 'ebk-protected-load-cleanup-result' ||
686
+ body.hmacKeyId !== input.hmacKey.id ||
687
+ body.planMaterialDigest !== input.plan.materialDigest ||
688
+ (!incomplete && body.remainingEffectCount !== 0) ||
689
+ typeof body.removedEffectCount !== 'number' ||
690
+ !Number.isSafeInteger(body.removedEffectCount) ||
691
+ body.removedEffectCount < (incomplete ? 1 : 0) ||
692
+ body.removedEffectCount > input.plan.maximumRequests - removedSoFar ||
693
+ body.runId !== input.plan.runId ||
694
+ body.scenarioId !== input.plan.scenarioId ||
695
+ body.schemaVersion !== 1 ||
696
+ (!incomplete && body.status !== 'run-absent') ||
697
+ JSON.stringify(body.target) !==
698
+ JSON.stringify({
699
+ accountFingerprint: input.plan.target.accountFingerprint,
700
+ endpoint: scenarioUrl(input.plan, cleanupPath(adapter)),
701
+ region: input.plan.target.region,
702
+ slice: input.plan.slice,
703
+ })) {
704
+ throw invalid('cleanup/response', 'must prove every protected effect for the exact run is absent');
705
+ }
706
+ removedSoFar += body.removedEffectCount;
707
+ if (incomplete)
708
+ continue;
709
+ remoteCleanup = 'run-proved-absent';
710
+ break;
711
+ }
712
+ catch (error) {
713
+ throw invalid('cleanup', `did not prove the exact protected run absent (${error instanceof Error ? error.message : String(error)})`);
714
+ }
715
+ finally {
716
+ if (timeout !== undefined)
717
+ clearTimeout(timeout);
702
718
  }
703
- remoteCleanup = 'run-proved-absent';
704
- }
705
- catch (error) {
706
- throw invalid('cleanup', `did not prove the exact protected run absent (${error instanceof Error ? error.message : String(error)})`);
707
- }
708
- finally {
709
- if (timeout !== undefined)
710
- clearTimeout(timeout);
711
719
  }
712
720
  }
713
721
  const unsigned = {
@@ -1,4 +1,4 @@
1
- import type { DeploymentAccountTopology, DeploymentProfile, ProductionApprovalMode, ProductionFoundationProfile, RepositoryOperatingPolicy } from './policy.js';
1
+ import type { ConfiguredDeploymentAccounts, DeploymentProfile, ProductionApprovalMode, ProductionFoundationProfile, RepositoryOperatingPolicy } from './policy.js';
2
2
  export declare const PROTECTED_DEPLOYMENT_ACTIONS: readonly ["deploy", "refresh", "remove", "unlock"];
3
3
  export declare const PROTECTED_DEPLOYMENT_STAGES: readonly ["staging", "production"];
4
4
  export type ProtectedDeploymentAction = (typeof PROTECTED_DEPLOYMENT_ACTIONS)[number];
@@ -10,7 +10,7 @@ export interface DeploymentPlanProject {
10
10
  }
11
11
  export interface ProtectedDeploymentPlan {
12
12
  action: ProtectedDeploymentAction;
13
- deploymentAccounts: DeploymentAccountTopology;
13
+ deploymentAccounts: ConfiguredDeploymentAccounts;
14
14
  deploymentProfile: DeploymentProfile;
15
15
  deploymentRegion: string;
16
16
  effectiveProductionProfile?: ProductionFoundationProfile;
@@ -20,7 +20,8 @@ function compareCodePoints(left, right) {
20
20
  return left.name < right.name ? -1 : left.name > right.name ? 1 : 0;
21
21
  }
22
22
  function createProtectedDeploymentPlan(policy, options) {
23
- const deploymentAccounts = (0, policy_js_1.configuredDeploymentAccountTopology)(policy.deploymentProfile, policy.deploymentAccounts);
23
+ (0, policy_js_1.configuredDeploymentAccountForStage)(policy.deploymentProfile, policy.deploymentAccounts, options.stage);
24
+ const deploymentAccounts = { ...policy.deploymentAccounts };
24
25
  const deploymentRegion = (0, policy_js_1.configuredDeploymentRegion)(policy.deploymentRegion);
25
26
  const foundations = options.projects.filter((project) => hasTag(project, 'scope:foundation') &&
26
27
  supportsAction(project, options.action));
@@ -137,10 +137,35 @@ function configuredDeploymentAccountTopology(profile, accounts) {
137
137
  staging: accounts.staging,
138
138
  });
139
139
  }
140
+ function validateConfiguredIsolatedAccounts(accounts) {
141
+ const configured = new Set();
142
+ for (const stage of ['development', 'staging', 'production']) {
143
+ const account = accounts[stage];
144
+ if (account === null)
145
+ continue;
146
+ if (typeof account !== 'string' || !/^\d{12}$/.test(account)) {
147
+ throw new Error(`Deployment account for ${stage} must be null or an exact 12-digit AWS account ID.`);
148
+ }
149
+ if (configured.has(account)) {
150
+ throw new Error('The fully-isolated deployment profile requires distinct configured AWS accounts.');
151
+ }
152
+ configured.add(account);
153
+ }
154
+ }
140
155
  function configuredDeploymentAccountForStage(profile, accounts, stage) {
141
156
  if (!isActiveDeploymentStage(profile, stage)) {
142
157
  throw new Error(`Deployment stage ${stage} is inactive for the ${profile} deployment profile.`);
143
158
  }
159
+ // Fresh isolated accounts can be provisioned independently. This does not
160
+ // relax production rehearsal or migrated-workspace tuple requirements.
161
+ if (profile === 'fully-isolated' && stage !== 'production') {
162
+ validateConfiguredIsolatedAccounts(accounts);
163
+ const account = accounts[stage];
164
+ if (account === null) {
165
+ throw new Error(`Deployment account for active stage ${stage} is not configured.`);
166
+ }
167
+ return account;
168
+ }
144
169
  const topology = configuredDeploymentAccountTopology(profile, accounts);
145
170
  const account = topology[stage];
146
171
  if (account === null) {
@@ -330,6 +355,18 @@ function validateRepositoryOperatingPolicy(value) {
330
355
  });
331
356
  }
332
357
  }
358
+ if (value.deploymentProfile === 'fully-isolated' &&
359
+ Object.values(value.deploymentAccounts).some((account) => account === null)) {
360
+ try {
361
+ validateConfiguredIsolatedAccounts(value.deploymentAccounts);
362
+ }
363
+ catch (error) {
364
+ issues.push({
365
+ message: error instanceof Error ? error.message : String(error),
366
+ path: 'policy.deploymentAccounts',
367
+ });
368
+ }
369
+ }
333
370
  if (isOneOf(value.deploymentProfile, exports.DEPLOYMENT_PROFILES) &&
334
371
  typeof value.deploymentAccounts.development === 'string' &&
335
372
  typeof value.deploymentAccounts.production === 'string' &&
@@ -599,9 +636,7 @@ function createIncubationRepositoryPolicy(deploymentProfile = 'starter', workspa
599
636
  productionAccess: 'disabled',
600
637
  productionApproval: { mode: 'promotion-pr' },
601
638
  productionFoundation: {
602
- profile: deploymentProfile === 'starter'
603
- ? 'cost-optimized'
604
- : exports.DEFAULT_RECOVERY_PRODUCTION_FOUNDATION_PROFILE,
639
+ profile: 'cost-optimized',
605
640
  },
606
641
  schemaVersion: exports.REPOSITORY_POLICY_SCHEMA_VERSION,
607
642
  slices: {},
@@ -13,15 +13,16 @@
13
13
  "capabilities": {
14
14
  "items": {
15
15
  "enum": [
16
- "network",
16
+ "key-value",
17
17
  "routing",
18
- "container-compute",
19
- "postgres",
20
18
  "identity",
21
19
  "events",
22
20
  "observability",
23
21
  "configuration",
24
- "deployment"
22
+ "deployment",
23
+ "network",
24
+ "container-compute",
25
+ "postgres"
25
26
  ],
26
27
  "type": "string"
27
28
  },
@@ -6,15 +6,16 @@
6
6
  "capabilities": {
7
7
  "items": {
8
8
  "enum": [
9
- "network",
9
+ "key-value",
10
10
  "routing",
11
- "container-compute",
12
- "postgres",
13
11
  "identity",
14
12
  "events",
15
13
  "observability",
16
14
  "configuration",
17
- "deployment"
15
+ "deployment",
16
+ "network",
17
+ "container-compute",
18
+ "postgres"
18
19
  ],
19
20
  "type": "string"
20
21
  },
@@ -254,7 +254,7 @@
254
254
  }
255
255
  },
256
256
  "commit": {
257
- "type": "string",
257
+ "type": ["string", "null"],
258
258
  "pattern": "^(?:[a-f0-9]{40}|[a-f0-9]{64})$"
259
259
  },
260
260
  "frameworkCandidate": {
@@ -1,3 +1,4 @@
1
+ import { AwsGeneratedSecretInitializationError } from './generated-aws-control-plane.js';
1
2
  import { type SecretMetadataFinding, type SecretMetadataMutationIntent, type SecretMetadataPreflightResult, type SecretMetadataReconciliationResult } from './metadata.js';
2
3
  import { type ObservedSecretMetadata, type SecretManagementScope, type SecretMetadataDeclaration } from './model.js';
3
4
  export interface ListedSecretContainer {
@@ -82,8 +83,9 @@ export interface ProtectedSecretOperatorAuthorization {
82
83
  export type SecretProtectedLifecycleAction = 'deploy' | 'recover' | 'remove' | 'unlock';
83
84
  export declare class SecretOperatorControlPlaneError extends Error {
84
85
  readonly operation: 'create-empty' | 'describe' | 'inventory' | 'initialize-generated' | 'list' | 'recover' | 'retire' | 'tag';
86
+ readonly diagnosticCode?: AwsGeneratedSecretInitializationError['code'];
85
87
  readonly code: 'secret-control-plane-apply-failed' | 'secret-control-plane-inventory-failed' | 'secret-control-plane-inventory-invalid' | 'secret-control-plane-protected-action-failed';
86
- constructor(code: SecretOperatorControlPlaneError['code'], operation: 'create-empty' | 'describe' | 'inventory' | 'initialize-generated' | 'list' | 'recover' | 'retire' | 'tag');
88
+ constructor(code: SecretOperatorControlPlaneError['code'], operation: 'create-empty' | 'describe' | 'inventory' | 'initialize-generated' | 'list' | 'recover' | 'retire' | 'tag', diagnosticCode?: AwsGeneratedSecretInitializationError['code']);
87
89
  }
88
90
  export interface SecretMetadataOperatorResult {
89
91
  after?: SecretMetadataReconciliationResult;
@@ -7,14 +7,18 @@ exports.runSecretDeployPreflight = runSecretDeployPreflight;
7
7
  exports.runGeneratedSecretRetirement = runGeneratedSecretRetirement;
8
8
  exports.runProtectedSecretLifecycle = runProtectedSecretLifecycle;
9
9
  const deterministic_order_js_1 = require("../deterministic-order.js");
10
+ const generated_aws_control_plane_js_1 = require("./generated-aws-control-plane.js");
10
11
  const metadata_js_1 = require("./metadata.js");
11
12
  const model_js_1 = require("./model.js");
12
13
  class SecretOperatorControlPlaneError extends Error {
13
14
  operation;
15
+ diagnosticCode;
14
16
  code;
15
- constructor(code, operation) {
16
- super(`Secret metadata ${operation} failed (${code}).`);
17
+ constructor(code, operation, diagnosticCode) {
18
+ super(`Secret metadata ${operation} failed (${code}).` +
19
+ (diagnosticCode ? ` Reason: ${diagnosticCode}.` : ''));
17
20
  this.operation = operation;
21
+ this.diagnosticCode = diagnosticCode;
18
22
  this.name = 'SecretOperatorControlPlaneError';
19
23
  this.code = code;
20
24
  }
@@ -28,6 +32,19 @@ function safeControlPlaneError(error, code, operation) {
28
32
  if (error instanceof SecretOperatorControlPlaneError) {
29
33
  return error;
30
34
  }
35
+ // Preserve only our finite, value-blind diagnostic vocabulary. Never attach
36
+ // the raw SDK error, message, stack, request or cause: they may hold values.
37
+ if (error instanceof generated_aws_control_plane_js_1.AwsGeneratedSecretInitializationError) {
38
+ const diagnosticCode = Object.getOwnPropertyDescriptor(error, 'code')?.value;
39
+ switch (diagnosticCode) {
40
+ case 'generated-secret-input-invalid':
41
+ case 'generated-secret-observation-invalid':
42
+ case 'generated-secret-read-failed':
43
+ case 'generated-secret-state-conflicting':
44
+ case 'generated-secret-write-failed':
45
+ return new SecretOperatorControlPlaneError(code, operation, diagnosticCode);
46
+ }
47
+ }
31
48
  return new SecretOperatorControlPlaneError(code, operation);
32
49
  }
33
50
  async function collectSecretMetadata(controlPlane, scope, options = {}) {
@@ -316,7 +333,9 @@ async function runGeneratedSecretInitializer(input) {
316
333
  throw safeControlPlaneError(error, 'secret-control-plane-inventory-failed', 'initialize-generated');
317
334
  }
318
335
  if (finalInspection !== 'current') {
319
- throw new SecretOperatorControlPlaneError('secret-control-plane-apply-failed', 'initialize-generated');
336
+ throw new SecretOperatorControlPlaneError('secret-control-plane-apply-failed', 'initialize-generated', finalInspection === 'conflicting'
337
+ ? 'generated-secret-state-conflicting'
338
+ : 'generated-secret-observation-invalid');
320
339
  }
321
340
  // The exact-name control-plane inspection above is the postcondition.
322
341
  // ListSecrets is eventually consistent and can omit a newly created secret
@@ -1,3 +1,6 @@
1
+ /** Exact default declaration emitted by the pinned Next 16.3 toolchain. */
2
+ export declare function generatedNextEnvironmentSource(dev?: boolean): string;
3
+ export declare function isExactGeneratedNextEnvironmentSourceBytes(bytes: Buffer): boolean;
1
4
  export declare function isExactGeneratedRootSstEnvironmentSourceBytes(bytes: Buffer): boolean;
2
5
  export declare function isExactGeneratedRootSstPythonSourceBytes(bytes: Buffer): boolean;
3
6
  export declare function exactGeneratedNestedSstEnvironmentSourceBytes(nestedPath: string, rootSourcePath: string): readonly Buffer[];
@@ -1,9 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generatedNextEnvironmentSource = generatedNextEnvironmentSource;
4
+ exports.isExactGeneratedNextEnvironmentSourceBytes = isExactGeneratedNextEnvironmentSourceBytes;
3
5
  exports.isExactGeneratedRootSstEnvironmentSourceBytes = isExactGeneratedRootSstEnvironmentSourceBytes;
4
6
  exports.isExactGeneratedRootSstPythonSourceBytes = isExactGeneratedRootSstPythonSourceBytes;
5
7
  exports.exactGeneratedNestedSstEnvironmentSourceBytes = exactGeneratedNestedSstEnvironmentSourceBytes;
6
8
  const node_path_1 = require("node:path");
9
+ /** Exact default declaration emitted by the pinned Next 16.3 toolchain. */
10
+ function generatedNextEnvironmentSource(dev = false) {
11
+ const directory = dev ? '.next/dev' : '.next';
12
+ return `/// <reference types="next" />
13
+ /// <reference types="next/image-types/global" />
14
+ import "./${directory}/types/routes.d.ts";
15
+ import "./${directory}/types/root-params.d.ts";
16
+
17
+ // NOTE: This file should not be edited
18
+ // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
19
+ `;
20
+ }
21
+ function isExactGeneratedNextEnvironmentSourceBytes(bytes) {
22
+ return [false, true].some((dev) => [
23
+ generatedNextEnvironmentSource(dev),
24
+ generatedNextEnvironmentSource(dev).split('\n').join('\r\n'),
25
+ ].some((source) => bytes.equals(Buffer.from(source))));
26
+ }
7
27
  const GENERATED_HEADER = [
8
28
  '/* This file is auto-generated by SST. Do not edit. */',
9
29
  '/* tslint:disable */',
@@ -898,6 +898,17 @@ function repositoryRootCommit(context, tip) {
898
898
  }
899
899
  function assertCreateOnlyReceiptRetention(context, receiptCommit, executionCommit, paths) {
900
900
  const parents = commitParents(context, receiptCommit);
901
+ // Generated repository governance retains proposals through merge commits.
902
+ // Admit that exact shape, not arbitrary ancestry or an updated execution base.
903
+ const proposal = parents.length === 2 ? parents[1] : undefined;
904
+ const proposalParents = proposal ? commitParents(context, proposal) : [];
905
+ const exactRetentionShape = parents[0] === executionCommit &&
906
+ (parents.length === 1 ||
907
+ (proposal !== undefined &&
908
+ proposalParents.length === 1 &&
909
+ proposalParents[0] === executionCommit &&
910
+ treeObjectId(context, receiptCommit) ===
911
+ treeObjectId(context, proposal)));
901
912
  const changedPaths = (git(context, [
902
913
  'diff-tree',
903
914
  '-r',
@@ -913,15 +924,14 @@ function assertCreateOnlyReceiptRetention(context, receiptCommit, executionCommi
913
924
  .map((changedPath) => safeTrackedRepositoryPath(changedPath, 'git.blueprintVerificationReceiptRetention.changedPath'))
914
925
  .sort();
915
926
  const retainedPaths = [...paths].sort();
916
- if (parents.length !== 1 ||
917
- parents[0] !== executionCommit ||
927
+ if (!exactRetentionShape ||
918
928
  retainedPaths.length === 0 ||
919
929
  retainedPaths.length !== changedPaths.length ||
920
930
  retainedPaths.some((path, index) => path !== changedPaths[index]) ||
921
931
  retainedPaths.some((path) => !VERIFICATION_RECEIPT_PATH.test(path) ||
922
932
  blobObjectId(context, executionCommit, path) !== undefined ||
923
933
  blobObjectId(context, receiptCommit, path) === undefined)) {
924
- throw new errors_js_1.SupplyChainError('supply-chain-blueprint-untrusted', `${receiptCommit}:${VERIFICATION_RECEIPT_DIRECTORY}`, 'protected Blueprint verification receipt retention must be one literal one-parent, receipt-only, create-only commit whose parent is the exact execution commit shared by the complete final set, whose parent tree lacks every retained receipt path in that set, and whose changed paths equal that set');
934
+ throw new errors_js_1.SupplyChainError('supply-chain-blueprint-untrusted', `${receiptCommit}:${VERIFICATION_RECEIPT_DIRECTORY}`, 'protected Blueprint verification receipt retention must be one receipt-only, create-only commit whose first parent is the exact execution commit shared by the complete final set; a two-parent PR merge must retain the exact tree of a one-parent proposal directly on that same execution commit. The execution tree must lack every retained receipt path and the changed paths must equal the complete set');
925
935
  }
926
936
  }
927
937
  function latestReceiptSetCommit(context, tip, paths, label) {
@@ -233,6 +233,7 @@ function createNextJsBuildOutputInventory(input) {
233
233
  const files = new Map();
234
234
  const links = new Map();
235
235
  const materialFiles = new Map();
236
+ const compilerCacheDirectories = new Set();
236
237
  let visitedDirectories = 0;
237
238
  let discoveredBytes = 0;
238
239
  const addLink = (absoluteInput, pointer) => {
@@ -347,6 +348,15 @@ function createNextJsBuildOutputInventory(input) {
347
348
  catch {
348
349
  throw new errors_js_1.SupplyChainError('supply-chain-sbom-omission', pointer, 'does not identify an existing build-output material path');
349
350
  }
351
+ // Only Next's direct compiler cache is outside emitted build material.
352
+ // Traces are still resolved through addFile, so a runtime reference into
353
+ // this directory cannot escape the normal bounds or content inventory.
354
+ if (compilerCacheDirectories.has(absolute)) {
355
+ if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
356
+ throw new errors_js_1.SupplyChainError('supply-chain-sbom-omission', pointer, 'Next.js compiler cache must be a real directory');
357
+ }
358
+ return;
359
+ }
350
360
  if (metadata.isSymbolicLink()) {
351
361
  addLink(absolute, pointer);
352
362
  return;
@@ -372,6 +382,11 @@ function createNextJsBuildOutputInventory(input) {
372
382
  if (materialPaths.some(({ path }, index) => materialPaths.some(({ path: other }, otherIndex) => index !== otherIndex && other.startsWith(`${path}/`)))) {
373
383
  throw new errors_js_1.SupplyChainError('supply-chain-input-invalid', 'materialPaths', 'must contain disjoint non-overlapping build-output boundaries');
374
384
  }
385
+ for (const { absolute } of materialPaths) {
386
+ if ((0, node_path_1.basename)(absolute) === '.next') {
387
+ compilerCacheDirectories.add((0, node_path_1.join)(absolute, 'cache'));
388
+ }
389
+ }
375
390
  materialPaths.forEach(({ absolute }, index) => visitMaterial(absolute, `materialPaths[${index}]`));
376
391
  const traces = [...materialFiles.values()].filter(({ path }) => path.endsWith('.nft.json'));
377
392
  if (traces.length === 0) {
@@ -774,9 +774,26 @@ function preflightRetainedReceiptPaths(paths) {
774
774
  }
775
775
  }
776
776
 
777
+ function serializeRetainedReceipt(receipt) {
778
+ let output = JSON.stringify(receipt, null, 2);
779
+ // These are the receipt schema's only primitive-array fields. Match the
780
+ // generated JSON format without loading mutable workspace formatter code or
781
+ // configuration in this protected execution child. Object arrays stay multiline.
782
+ for (const field of ['containerRegistries', 'verificationRoots']) {
783
+ const values = receipt[field];
784
+ const compact = ' ' + JSON.stringify(field) + ': [' +
785
+ values.map((value) => JSON.stringify(value)).join(', ') + ']';
786
+ if (compact.length + 1 <= 80) {
787
+ const expanded = JSON.stringify({ [field]: values }, null, 2).slice(2, -2);
788
+ output = output.replace(expanded, compact);
789
+ }
790
+ }
791
+ return output + '\n';
792
+ }
793
+
777
794
  function writeRetainedReceipts(receipts) {
778
795
  const prepared = receipts.map(({ reference, receipt }) => {
779
- const output = JSON.stringify(receipt, null, 2) + '\n';
796
+ const output = serializeRetainedReceipt(receipt);
780
797
  if (Buffer.byteLength(output, 'utf8') > MAX_OUTPUT_BYTES) {
781
798
  throw receiptRetentionError(
782
799
  'Blueprint verification receipt exceeds 256 KiB.',
@@ -8,7 +8,8 @@ export interface LocalTestIsolationCapabilities {
8
8
  }
9
9
  export interface LocalTestScopeIdentity {
10
10
  attempt: number;
11
- commit: string;
11
+ /** Null is an unborn local development worktree, not a deployed identity. */
12
+ commit: string | null;
12
13
  runId: string;
13
14
  seed: string;
14
15
  stage: string;
@@ -30,7 +30,9 @@ function isCanonicalTimestamp(value) {
30
30
  function requireIdentity(value) {
31
31
  if (!slugPattern.test(value.workspace) ||
32
32
  !slugPattern.test(value.stage) ||
33
- !commitPattern.test(value.commit) ||
33
+ (value.commit === null
34
+ ? value.stage !== 'development'
35
+ : !commitPattern.test(value.commit)) ||
34
36
  !seedPattern.test(value.runId) ||
35
37
  !seedPattern.test(value.seed) ||
36
38
  !Number.isSafeInteger(value.attempt) ||
@@ -59,7 +61,7 @@ function createLocalTestScope(options) {
59
61
  .update([
60
62
  identity.workspace,
61
63
  identity.stage,
62
- identity.commit,
64
+ identity.commit ?? 'unborn-local-worktree',
63
65
  identity.runId,
64
66
  String(identity.attempt),
65
67
  String(identity.worker),
@@ -18,7 +18,8 @@ export interface TestingEvidenceSource {
18
18
  * relationship rather than this result contract.
19
19
  */
20
20
  blueprintCandidates: readonly string[];
21
- commit: string;
21
+ /** Null denotes an unborn local worktree, never committed or deployed proof. */
22
+ commit: string | null;
22
23
  frameworkCandidate: string;
23
24
  }
24
25
  export interface TestingEvidenceOperation {