@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
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasContainerArtifacts = hasContainerArtifacts;
3
4
  const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
4
6
  const devkit_1 = require("@nx/devkit");
5
7
  const index_js_1 = require("../../repository-policy/index.js");
6
8
  const index_js_2 = require("../../work-markers/index.js");
@@ -12,9 +14,9 @@ function writeGithubOutputs(plan) {
12
14
  `foundation_project=${plan.foundationProject ?? ''}`,
13
15
  `deployment_profile=${plan.deploymentProfile}`,
14
16
  `deployment_region=${plan.deploymentRegion}`,
15
- `development_account_id=${plan.deploymentAccounts.development}`,
17
+ `development_account_id=${plan.deploymentAccounts.development ?? ''}`,
16
18
  `staging_account_id=${plan.deploymentAccounts.staging ?? ''}`,
17
- `production_account_id=${plan.deploymentAccounts.production}`,
19
+ `production_account_id=${plan.deploymentAccounts.production ?? ''}`,
18
20
  `foundation_profile=${plan.effectiveProductionProfile ?? ''}`,
19
21
  `has_slices=${plan.sliceProjects.length > 0 ? 'true' : 'false'}`,
20
22
  `ordered_projects=${plan.orderedProjects.join(',')}`,
@@ -23,6 +25,9 @@ function writeGithubOutputs(plan) {
23
25
  // One matrix row per selected Slice so the protected OCI build fans out
24
26
  // per Slice and architecture instead of looping on one runner.
25
27
  `slice_matrix=${JSON.stringify(plan.sliceProjects.map((project) => ({ project })))}`,
28
+ `has_containers=${plan.containerProjects.length > 0 ? 'true' : 'false'}`,
29
+ `container_projects=${plan.containerProjects.join(',')}`,
30
+ `container_matrix=${JSON.stringify(plan.containerProjects.map((project) => ({ project })))}`,
26
31
  '',
27
32
  ].join('\n'), 'utf8');
28
33
  }
@@ -46,8 +51,23 @@ const executor = async (options, context) => {
46
51
  : {}),
47
52
  stage: options.stage,
48
53
  });
49
- devkit_1.logger.info(`[ebk-deployment-plan] validated before AWS access\n${JSON.stringify(plan, null, 2)}`);
50
- writeGithubOutputs(plan);
54
+ const containerProjects = options.action === 'deploy'
55
+ ? plan.sliceProjects.filter((name) => {
56
+ const project = context.projectsConfigurations?.projects[name];
57
+ if (!project?.root)
58
+ throw new Error(`Release inventory root is absent for ${name}.`);
59
+ const inventoryPath = (0, node_path_1.resolve)(context.root, project.root, 'operations/release.json');
60
+ const local = (0, node_path_1.relative)(context.root, inventoryPath);
61
+ if ((0, node_path_1.isAbsolute)(local) ||
62
+ local === '..' ||
63
+ local.startsWith('../') ||
64
+ local.startsWith('..\\'))
65
+ throw new Error(`Release inventory for ${name} is outside the workspace.`);
66
+ return hasContainerArtifacts(JSON.parse((0, node_fs_1.readFileSync)(inventoryPath, 'utf8')));
67
+ })
68
+ : [];
69
+ devkit_1.logger.info(`[ebk-deployment-plan] validated before AWS access\n${JSON.stringify({ ...plan, containerProjects }, null, 2)}`);
70
+ writeGithubOutputs({ ...plan, containerProjects });
51
71
  return { success: true };
52
72
  }
53
73
  catch (error) {
@@ -56,4 +76,31 @@ const executor = async (options, context) => {
56
76
  }
57
77
  };
58
78
  exports.default = executor;
79
+ /** Derive protected OCI work from the committed inventory, not Slice existence. */
80
+ function hasContainerArtifacts(value) {
81
+ const inventory = value;
82
+ if (inventory?.schemaVersion !== 1 ||
83
+ !Array.isArray(inventory.artifactInventory) ||
84
+ inventory.artifactInventory.length === 0)
85
+ throw new Error('Release inventory is absent or malformed.');
86
+ let containers = false;
87
+ for (const artifact of inventory.artifactInventory) {
88
+ if (!artifact ||
89
+ !artifact.finalArtifact ||
90
+ typeof artifact.finalArtifact.family !== 'string')
91
+ throw new Error('Release artifact identity is malformed.');
92
+ if (artifact.finalArtifact.family === 'sst-provider-artifact') {
93
+ if (artifact.finalArtifact.support !== 'unsupported')
94
+ throw new Error('Provider artifacts require their declared support boundary.');
95
+ continue;
96
+ }
97
+ if (artifact.finalArtifact.family !== 'oci-image')
98
+ throw new Error('Release artifact family is unsupported.');
99
+ if (artifact.finalArtifact.support !== 'supported' ||
100
+ artifact.finalArtifact.imageConsumption !== 'digest-qualified')
101
+ throw new Error('OCI artifacts require supported digest-qualified release identity.');
102
+ containers = true;
103
+ }
104
+ return containers;
105
+ }
59
106
  //# sourceMappingURL=deployment-plan.js.map
@@ -85,11 +85,10 @@ function effectiveProbeAuthorities(rootCertificatePath) {
85
85
  return (0, node_fs_1.readFileSync)(rootCertificatePath);
86
86
  }
87
87
  async function inspectLocalDevelopment(options, context, dependencies = {}) {
88
- const stage = (dependencies.personalStageResolver ?? (0, personal_stage_js_1.createPersonalStageResolver)()).resolve().stage;
89
88
  const hostname = options.hostname?.trim() ||
90
89
  (0, identity_js_1.createFleetHostname)((0, identity_js_1.createFleetId)({
91
90
  checkoutPath: context.root,
92
- stage,
91
+ stage: (dependencies.personalStageResolver ?? (0, personal_stage_js_1.createPersonalStageResolver)()).resolve(context.root).stage,
93
92
  workspaceName: context.projectName ?? 'workspace',
94
93
  }));
95
94
  const paths = (0, tls_js_1.localTlsPaths)(options.appData);
@@ -147,9 +146,17 @@ async function inspectLocalDevelopment(options, context, dependencies = {}) {
147
146
  const trust = (dependencies.inspectTrust ?? inspectCertificateTrust)(paths.rootCertificate, paths.intermediateCertificate, paths.leafCertificate, hostname);
148
147
  let authorities;
149
148
  let connectivity = 'missing';
150
- if (trust === 'ready' && resolver.length > 0) {
149
+ {
151
150
  try {
152
- authorities = effectiveProbeAuthorities(paths.rootCertificate);
151
+ // Prove the fleet's exact private chain without installing it into the
152
+ // operating system. Browser automation admits only this chain/origin.
153
+ authorities =
154
+ trust === 'ready'
155
+ ? effectiveProbeAuthorities(paths.rootCertificate)
156
+ : [
157
+ (0, node_fs_1.readFileSync)(paths.rootCertificate),
158
+ (0, node_fs_1.readFileSync)(paths.intermediateCertificate),
159
+ ];
153
160
  await (dependencies.probeExplicitTls ?? effects_js_1.probeEphemeralTlsEndpoint)({
154
161
  ca: authorities,
155
162
  certificate: (0, node_fs_1.readFileSync)(paths.leafCertificate),
@@ -162,8 +169,8 @@ async function inspectLocalDevelopment(options, context, dependencies = {}) {
162
169
  issues.push(`Supported explicit-port TLS effect probe failed: ${error instanceof Error ? error.message : String(error)}`);
163
170
  }
164
171
  }
165
- else {
166
- issues.push('The generated certificate chain is not trusted by the detected user trust provider.');
172
+ if (trust !== 'ready') {
173
+ issues.push('System trust is not installed. Use the generated verify-local-browser target for browser-scoped trust; human browsers may require explicit ebk dev setup --trust after reviewing the root.');
167
174
  }
168
175
  let state;
169
176
  if ((0, node_fs_1.existsSync)(paths.gatewayState)) {
@@ -0,0 +1,23 @@
1
+ import { type ExecutorContext, type PromiseExecutor } from '@nx/devkit';
2
+ import { type TaskAuthorityEffects } from '../../local-dev/task-authority.js';
3
+ import { createLocalFederatedCredentialTransport } from '../local-deploy/federated-credential-transport.js';
4
+ import { runSstCommand, type SstLifecycleOptions } from '../sst-lifecycle/run-sst-command.js';
5
+ import { inspectNeverCreatedTaskStack, verifyRemovedTaskStack } from './task-stack-absence.js';
6
+ export type DevTaskCleanupOptions = Record<string, never>;
7
+ export interface DevTaskCleanupDependencies {
8
+ authority?: TaskAuthorityEffects;
9
+ createTransport?: typeof createLocalFederatedCredentialTransport;
10
+ environment?: NodeJS.ProcessEnv;
11
+ preflight?: typeof preflightTaskRemove;
12
+ inspectStack?: typeof inspectNeverCreatedTaskStack;
13
+ verifyStack?: typeof verifyRemovedTaskStack;
14
+ run?: typeof runSstCommand;
15
+ }
16
+ declare function preflightTaskRemove(options: SstLifecycleOptions, context: ExecutorContext, environment: NodeJS.ProcessEnv): Promise<string>;
17
+ /** Internal generated cleanup target: never accepts a caller-selected task. */
18
+ export declare function runDevTaskCleanup(options: DevTaskCleanupOptions, context: ExecutorContext, dependencies?: DevTaskCleanupDependencies): Promise<{
19
+ success: boolean;
20
+ taskStack?: 'already-absent';
21
+ }>;
22
+ declare const executor: PromiseExecutor<DevTaskCleanupOptions>;
23
+ export default executor;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runDevTaskCleanup = runDevTaskCleanup;
4
+ const devkit_1 = require("@nx/devkit");
5
+ const index_js_1 = require("../../aws-authority/index.js");
6
+ const fleet_launcher_js_1 = require("../../local-dev/fleet-launcher.js");
7
+ const local_context_js_1 = require("../../local-dev/local-context.js");
8
+ const task_authority_js_1 = require("../../local-dev/task-authority.js");
9
+ const task_identity_js_1 = require("../../local-dev/task-identity.js");
10
+ const federated_credential_transport_js_1 = require("../local-deploy/federated-credential-transport.js");
11
+ const run_sst_command_js_1 = require("../sst-lifecycle/run-sst-command.js");
12
+ const task_stack_absence_js_1 = require("./task-stack-absence.js");
13
+ async function preflightTaskRemove(options, context, environment) {
14
+ const invocation = (0, run_sst_command_js_1.buildSstCommandInvocation)('remove', options, context, environment);
15
+ await (0, run_sst_command_js_1.runSstLifecyclePreflights)('remove', options, context, invocation, {}, environment);
16
+ return invocation.cwd;
17
+ }
18
+ /** Internal generated cleanup target: never accepts a caller-selected task. */
19
+ async function runDevTaskCleanup(options, context, dependencies = {}) {
20
+ let transport;
21
+ let success = false;
22
+ let alreadyAbsent = false;
23
+ try {
24
+ if (!options ||
25
+ typeof options !== 'object' ||
26
+ Array.isArray(options) ||
27
+ Reflect.ownKeys(options).length !== 0) {
28
+ throw new Error('Task cleanup accepts no caller options, stage, task, or AWS profile overrides.');
29
+ }
30
+ const environment = dependencies.environment ?? process.env;
31
+ if (environment.GITHUB_ACTIONS === 'true') {
32
+ throw new Error('Task cleanup is available only in the owning local worktree, not GitHub Actions.');
33
+ }
34
+ const projectName = context.projectName;
35
+ const project = projectName
36
+ ? context.projectsConfigurations?.projects[projectName]
37
+ : undefined;
38
+ if (!projectName ||
39
+ !project?.tags?.includes('type:slice') ||
40
+ project.tags.includes('scope:foundation')) {
41
+ throw new Error('Task cleanup requires one Product Slice, never a Foundation.');
42
+ }
43
+ const task = (0, task_identity_js_1.resolveTaskIdentity)(context.root);
44
+ const saved = (0, local_context_js_1.readSavedLocalDevContext)((0, fleet_launcher_js_1.resolveGitCommonDirectory)(context.root));
45
+ if (saved.kind !== 'ready') {
46
+ throw new Error('Task cleanup requires a valid saved local development AWS context. Run ebk dev configure.');
47
+ }
48
+ const verified = await (0, task_authority_js_1.verifyTaskEnvironment)(context.root, saved.resolution.context, dependencies.authority);
49
+ (0, task_identity_js_1.assertCurrentTaskEnvironment)(context.root, verified);
50
+ const region = verified.region;
51
+ const expectedRoleArn = (0, index_js_1.createStageAuthorityIdentity)({
52
+ accountId: verified.accountId,
53
+ partition: region.startsWith('cn-')
54
+ ? 'aws-cn'
55
+ : region.startsWith('us-gov-')
56
+ ? 'aws-us-gov'
57
+ : 'aws',
58
+ region,
59
+ stage: 'development',
60
+ }).deploymentRoleArn;
61
+ transport = await (dependencies.createTransport ?? federated_credential_transport_js_1.createLocalFederatedCredentialTransport)({
62
+ account: verified.accountId,
63
+ expectedRoleArn,
64
+ profile: saved.resolution.context.profile,
65
+ region,
66
+ });
67
+ await transport.refresh();
68
+ // Recheck ownership after asynchronous authority acquisition, before mutation.
69
+ (0, task_identity_js_1.assertCurrentTaskEnvironment)(context.root, verified);
70
+ if ((0, task_identity_js_1.resolveTaskIdentity)(context.root).taskId !== task.taskId) {
71
+ throw new Error('Task ownership changed during cleanup authorization.');
72
+ }
73
+ const nativeOptions = {
74
+ expectedRoleArn,
75
+ foundationStage: 'development',
76
+ profile: transport.profile,
77
+ region,
78
+ stage: (0, task_identity_js_1.taskStage)(task.taskId),
79
+ stageMode: 'consumer',
80
+ };
81
+ const childEnvironment = {
82
+ ...transport.childEnvironment(environment),
83
+ AWS_EXPECTED_ACCOUNT_ID: verified.accountId,
84
+ AWS_REGION: region,
85
+ EBK_NX_TASK_CLEANUP: task.taskId,
86
+ };
87
+ // An absence result must pass the same role/project/task/ownership gates
88
+ // as removal. Present state still goes through the unchanged native runner.
89
+ const projectRoot = await (dependencies.preflight ?? preflightTaskRemove)(nativeOptions, context, childEnvironment);
90
+ const metadata = await (dependencies.inspectStack ?? task_stack_absence_js_1.inspectNeverCreatedTaskStack)({
91
+ workspaceRoot: context.root,
92
+ projectRoot,
93
+ projectName,
94
+ taskId: task.taskId,
95
+ verifiedEnvironment: verified,
96
+ awsEnvironment: childEnvironment,
97
+ });
98
+ (0, task_identity_js_1.assertCurrentTaskEnvironment)(context.root, verified);
99
+ if ((0, task_identity_js_1.resolveTaskIdentity)(context.root).taskId !== task.taskId)
100
+ throw new Error('Task ownership changed during cleanup inspection.');
101
+ if (metadata.status === 'already-absent') {
102
+ alreadyAbsent = true;
103
+ success = true;
104
+ devkit_1.logger.info('Task cloud stack is already absent (verified native metadata; no SST removal executed).');
105
+ }
106
+ else {
107
+ const removed = (await (dependencies.run ?? run_sst_command_js_1.runSstCommand)('remove', nativeOptions, context, { environment: childEnvironment })).success;
108
+ if (removed) {
109
+ await (dependencies.verifyStack ?? task_stack_absence_js_1.verifyRemovedTaskStack)({
110
+ workspaceRoot: context.root,
111
+ projectRoot,
112
+ projectName,
113
+ taskId: task.taskId,
114
+ verifiedEnvironment: verified,
115
+ awsEnvironment: childEnvironment,
116
+ });
117
+ (0, task_identity_js_1.assertCurrentTaskEnvironment)(context.root, verified);
118
+ if ((0, task_identity_js_1.resolveTaskIdentity)(context.root).taskId !== task.taskId)
119
+ throw new Error('Task ownership changed during cleanup verification.');
120
+ }
121
+ success = removed;
122
+ }
123
+ }
124
+ catch (error) {
125
+ devkit_1.logger.error(`Task cloud cleanup failed: ${error instanceof Error ? error.message : String(error)}`);
126
+ }
127
+ finally {
128
+ try {
129
+ transport?.cleanup();
130
+ }
131
+ catch (error) {
132
+ success = false;
133
+ devkit_1.logger.error(`Task cleanup credential removal failed: ${error instanceof Error ? error.message : String(error)}`);
134
+ }
135
+ }
136
+ return {
137
+ success,
138
+ ...(success && alreadyAbsent
139
+ ? { taskStack: 'already-absent' }
140
+ : {}),
141
+ };
142
+ }
143
+ const executor = (options, context) => runDevTaskCleanup(options, context);
144
+ exports.default = executor;
145
+ //# sourceMappingURL=dev-task-cleanup.js.map
@@ -0,0 +1,9 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "version": 2,
4
+ "title": "Empire Builder Kit internal task cloud cleanup",
5
+ "description": "Remove only this worktree's owned task Slice stack through verified development authority.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "properties": {}
9
+ }
@@ -0,0 +1,27 @@
1
+ import { S3Client, type S3ClientConfig } from '@aws-sdk/client-s3';
2
+ import { SSMClient, type SSMClientConfig } from '@aws-sdk/client-ssm';
3
+ import { type TaskEnvironment } from '../../local-dev/task-identity.js';
4
+ declare const NATIVE_VERSION = "4.17.1";
5
+ export interface TaskStackAbsenceInput {
6
+ workspaceRoot: string;
7
+ projectRoot: string;
8
+ projectName: string;
9
+ taskId: string;
10
+ verifiedEnvironment: TaskEnvironment;
11
+ awsEnvironment: NodeJS.ProcessEnv;
12
+ }
13
+ export interface TaskStackAbsenceDependencies {
14
+ s3Client?: (config: S3ClientConfig) => S3Client;
15
+ ssmClient?: (config: SSMClientConfig) => SSMClient;
16
+ }
17
+ export type TaskStackMetadata = {
18
+ status: 'present' | 'already-absent';
19
+ nativeVersion: typeof NATIVE_VERSION;
20
+ };
21
+ /** Accept only the generated static app/home contract; never evaluate config. */
22
+ export declare function resolveStaticTaskApp(input: Pick<TaskStackAbsenceInput, 'workspaceRoot' | 'projectRoot' | 'projectName'>): string;
23
+ /** Read-only, task-exact metadata proof. It grants no permission to remove. */
24
+ export declare function inspectNeverCreatedTaskStack(input: TaskStackAbsenceInput, dependencies?: TaskStackAbsenceDependencies): Promise<TaskStackMetadata>;
25
+ /** A successful native exit cannot conceal retained resources or pending work. */
26
+ export declare function verifyRemovedTaskStack(input: TaskStackAbsenceInput, dependencies?: TaskStackAbsenceDependencies): Promise<void>;
27
+ export {};
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveStaticTaskApp = resolveStaticTaskApp;
4
+ exports.inspectNeverCreatedTaskStack = inspectNeverCreatedTaskStack;
5
+ exports.verifyRemovedTaskStack = verifyRemovedTaskStack;
6
+ const client_s3_1 = require("@aws-sdk/client-s3");
7
+ const client_ssm_1 = require("@aws-sdk/client-ssm");
8
+ const credential_providers_1 = require("@aws-sdk/credential-providers");
9
+ const node_fs_1 = require("node:fs");
10
+ const node_path_1 = require("node:path");
11
+ const ts = require("typescript");
12
+ const identity_js_1 = require("../../aws/identity.js");
13
+ const personal_secret_runtime_js_1 = require("../../cli/personal-secret-runtime.js");
14
+ const task_identity_js_1 = require("../../local-dev/task-identity.js");
15
+ const task_stack_checkpoint_js_1 = require("./task-stack-checkpoint.js");
16
+ // These are provider layout facts, not an alternative SST state engine.
17
+ // SST v4.17.1: pkg/project/provider/aws.go Bootstrap (version 5),
18
+ // pathForData, and provider.go PullState/Lock/Unlock (symbol references, not
19
+ // unstable line numbers).
20
+ // https://github.com/anomalyco/sst/blob/v4.17.1/pkg/project/provider/aws.go
21
+ // https://github.com/anomalyco/sst/blob/v4.17.1/pkg/project/provider/provider.go
22
+ const NATIVE_VERSION = '4.17.1';
23
+ const MAX_PAGES = 4;
24
+ const PAGE_SIZE = 100;
25
+ function refuse(reason) {
26
+ throw new Error(`Task stack absence could not be proven: ${reason}.`);
27
+ }
28
+ function propertyName(node) {
29
+ return ts.isIdentifier(node) || ts.isStringLiteral(node)
30
+ ? node.text
31
+ : undefined;
32
+ }
33
+ /** Accept only the generated static app/home contract; never evaluate config. */
34
+ function resolveStaticTaskApp(input) {
35
+ const root = (0, node_fs_1.realpathSync)(input.workspaceRoot);
36
+ const project = (0, node_fs_1.realpathSync)(input.projectRoot);
37
+ const path = (0, node_path_1.join)(project, 'sst.config.ts');
38
+ const child = (0, node_path_1.relative)(root, project);
39
+ if (!child || child.startsWith('..') || (0, node_path_1.isAbsolute)(child))
40
+ refuse('the Slice configuration is outside its workspace');
41
+ if (!(0, node_fs_1.lstatSync)(path).isFile() || (0, node_fs_1.realpathSync)(path) !== path)
42
+ refuse('the Slice configuration is not a regular owned path');
43
+ const source = (0, node_fs_1.readFileSync)(path, 'utf8');
44
+ if (Buffer.byteLength(source) > 1024 * 1024)
45
+ refuse('the Slice configuration exceeds the inspection bound');
46
+ const file = ts.createSourceFile(path, source, ts.ScriptTarget.Latest, true);
47
+ if (ts
48
+ .transpileModule(source, { fileName: path, reportDiagnostics: true })
49
+ .diagnostics?.some((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error))
50
+ refuse('the Slice configuration has invalid syntax');
51
+ const exports = file.statements.filter(ts.isExportAssignment);
52
+ const expression = exports[0]?.expression;
53
+ if (exports.length !== 1 ||
54
+ exports[0].isExportEquals ||
55
+ !expression ||
56
+ !ts.isCallExpression(expression) ||
57
+ !ts.isIdentifier(expression.expression) ||
58
+ expression.expression.text !== '$config' ||
59
+ expression.arguments.length !== 1 ||
60
+ !ts.isObjectLiteralExpression(expression.arguments[0]))
61
+ refuse('the Slice app declaration is not the supported static shape');
62
+ const config = expression.arguments[0];
63
+ if (config.properties.some((p) => !p.name || propertyName(p.name) === undefined))
64
+ refuse('the Slice configuration contains dynamic properties');
65
+ const apps = config.properties.filter((p) => p.name && propertyName(p.name) === 'app');
66
+ const app = apps[0];
67
+ if (apps.length !== 1 || !app || !ts.isMethodDeclaration(app) || !app.body)
68
+ refuse('the Slice app declaration is dynamic');
69
+ const statements = app.body.statements;
70
+ const returned = statements.at(-1);
71
+ if (statements.slice(0, -1).some((s) => !ts.isVariableStatement(s)) ||
72
+ !returned ||
73
+ !ts.isReturnStatement(returned) ||
74
+ !returned.expression ||
75
+ !ts.isObjectLiteralExpression(returned.expression))
76
+ refuse('the Slice app return is dynamic');
77
+ const properties = returned.expression.properties;
78
+ if (properties.some((p) => !p.name || propertyName(p.name) === undefined))
79
+ refuse('the Slice app return contains dynamic properties');
80
+ const literal = (name) => {
81
+ const matches = properties.filter((p) => p.name && propertyName(p.name) === name);
82
+ const property = matches[0];
83
+ if (matches.length !== 1 ||
84
+ !property ||
85
+ !ts.isPropertyAssignment(property) ||
86
+ !ts.isStringLiteral(property.initializer))
87
+ refuse(`the Slice ${name} is not an exact literal`);
88
+ return property.initializer.text;
89
+ };
90
+ const name = literal('name');
91
+ if (name !== input.projectName ||
92
+ !/^[a-z][a-z0-9-]{0,62}$/.test(name) ||
93
+ literal('home') !== 'aws')
94
+ refuse('the Slice app/home differs from the selected generated project');
95
+ return name;
96
+ }
97
+ /** Read-only, task-exact metadata proof. It grants no permission to remove. */
98
+ async function inspectNeverCreatedTaskStack(input, dependencies = {}) {
99
+ return inspectTaskStack(input, dependencies, false);
100
+ }
101
+ /** A successful native exit cannot conceal retained resources or pending work. */
102
+ async function verifyRemovedTaskStack(input, dependencies = {}) {
103
+ await inspectTaskStack(input, dependencies, true);
104
+ }
105
+ async function inspectTaskStack(input, dependencies, verifyRemoval) {
106
+ const assertOwner = () => {
107
+ if ((0, task_identity_js_1.assertCurrentTaskEnvironment)(input.workspaceRoot, input.verifiedEnvironment).taskId !== input.taskId)
108
+ refuse('task ownership changed');
109
+ };
110
+ assertOwner();
111
+ if ((0, personal_secret_runtime_js_1.resolveWorkspaceSstRuntime)(input.workspaceRoot).version !== NATIVE_VERSION)
112
+ refuse('the native SST version has no reviewed metadata layout');
113
+ const app = resolveStaticTaskApp(input);
114
+ const stage = (0, task_identity_js_1.taskStage)(input.taskId);
115
+ const { accountId, region } = input.verifiedEnvironment;
116
+ const profile = input.awsEnvironment.AWS_PROFILE;
117
+ const configFilepath = input.awsEnvironment.AWS_CONFIG_FILE;
118
+ const filepath = input.awsEnvironment.AWS_SHARED_CREDENTIALS_FILE;
119
+ if (!profile || !configFilepath || !filepath)
120
+ refuse('the private authorized AWS credential transport is incomplete');
121
+ const credentials = (0, credential_providers_1.fromIni)({
122
+ profile,
123
+ configFilepath,
124
+ filepath,
125
+ clientConfig: {
126
+ region,
127
+ endpoint: (0, identity_js_1.canonicalAwsRegionalEndpoint)('sts', region),
128
+ ignoreConfiguredEndpointUrls: true,
129
+ },
130
+ });
131
+ const common = {
132
+ region,
133
+ credentials,
134
+ maxAttempts: 1,
135
+ ignoreConfiguredEndpointUrls: true,
136
+ };
137
+ const ssm = (dependencies.ssmClient ?? ((config) => new client_ssm_1.SSMClient(config)))({
138
+ ...common,
139
+ endpoint: (0, identity_js_1.canonicalAwsRegionalEndpoint)('ssm', region),
140
+ });
141
+ // identity.ts validates the Region; replace only the fixed service label.
142
+ const s3 = (dependencies.s3Client ?? ((config) => new client_s3_1.S3Client(config)))({
143
+ ...common,
144
+ endpoint: (0, identity_js_1.canonicalAwsRegionalEndpoint)('ssm', region).replace('https://ssm.', 'https://s3.'),
145
+ });
146
+ const signal = AbortSignal.timeout(20_000);
147
+ try {
148
+ const bootstrap = await ssm.send(new client_ssm_1.GetParameterCommand({
149
+ Name: '/sst/bootstrap',
150
+ WithDecryption: false,
151
+ }), { abortSignal: signal });
152
+ if (bootstrap.Parameter?.Name !== '/sst/bootstrap' ||
153
+ bootstrap.Parameter.Type !== 'String' ||
154
+ !bootstrap.Parameter.Value ||
155
+ Buffer.byteLength(bootstrap.Parameter.Value) > 16_384)
156
+ refuse('the native bootstrap metadata is missing or malformed');
157
+ let data;
158
+ try {
159
+ data = JSON.parse(bootstrap.Parameter.Value);
160
+ }
161
+ catch {
162
+ refuse('the native bootstrap metadata is not JSON');
163
+ }
164
+ if (!data ||
165
+ data.version !== 5 ||
166
+ typeof data.state !== 'string' ||
167
+ !/^sst-state-[a-z0-9]{12}$/.test(data.state))
168
+ refuse('the native bootstrap version or bucket identity is unsupported');
169
+ const owner = { Bucket: data.state, ExpectedBucketOwner: accountId };
170
+ const versioning = await s3.send(new client_s3_1.GetBucketVersioningCommand(owner), {
171
+ abortSignal: signal,
172
+ });
173
+ if (versioning.Status !== 'Enabled')
174
+ refuse('the native state bucket is not versioned');
175
+ const stateKey = `app/${app}/${stage}.json`;
176
+ const lockKey = `lock/${app}/${stage}.json`;
177
+ const contains = async (key) => {
178
+ let token;
179
+ const seen = new Set();
180
+ for (let page = 0; page < MAX_PAGES; page++) {
181
+ const result = await s3.send(new client_s3_1.ListObjectsV2Command({
182
+ ...owner,
183
+ Prefix: key,
184
+ MaxKeys: PAGE_SIZE,
185
+ ...(token ? { ContinuationToken: token } : {}),
186
+ }), { abortSignal: signal });
187
+ if (typeof result.IsTruncated !== 'boolean' ||
188
+ (result.Contents !== undefined && !Array.isArray(result.Contents)))
189
+ refuse('the current-object listing is malformed');
190
+ if ((result.Contents?.length ?? 0) > PAGE_SIZE)
191
+ refuse('the current-object page exceeds the inspection bound');
192
+ for (const object of result.Contents ?? []) {
193
+ if (typeof object.Key !== 'string' || !object.Key.startsWith(key))
194
+ refuse('the object listing escaped its exact prefix');
195
+ if (object.Key === key)
196
+ return true;
197
+ }
198
+ if (!result.IsTruncated)
199
+ return false;
200
+ token = result.NextContinuationToken;
201
+ if (!token || seen.has(token))
202
+ refuse('the object listing cursor is ambiguous');
203
+ seen.add(token);
204
+ }
205
+ refuse('the object listing exceeded its bounded page count');
206
+ };
207
+ if (await contains(lockKey))
208
+ refuse('the exact task native lock is present');
209
+ if (await contains(stateKey)) {
210
+ if (verifyRemoval) {
211
+ await (0, task_stack_checkpoint_js_1.verifyRemovedTaskCheckpoint)(s3, owner, stateKey, `organization/${app}/${stage}`, signal);
212
+ if (await contains(lockKey))
213
+ refuse('the exact task native lock appeared after removal');
214
+ }
215
+ assertOwner();
216
+ if (resolveStaticTaskApp(input) !== app)
217
+ refuse('the Slice app changed during inspection');
218
+ return { status: 'present', nativeVersion: NATIVE_VERSION };
219
+ }
220
+ let keyMarker;
221
+ let versionMarker;
222
+ const seen = new Set();
223
+ let complete = false;
224
+ for (let page = 0; page < MAX_PAGES; page++) {
225
+ const result = await s3.send(new client_s3_1.ListObjectVersionsCommand({
226
+ ...owner,
227
+ Prefix: stateKey,
228
+ MaxKeys: PAGE_SIZE,
229
+ ...(keyMarker ? { KeyMarker: keyMarker } : {}),
230
+ ...(versionMarker ? { VersionIdMarker: versionMarker } : {}),
231
+ }), { abortSignal: signal });
232
+ if (typeof result.IsTruncated !== 'boolean' ||
233
+ [result.Versions, result.DeleteMarkers].some((entries) => entries !== undefined && !Array.isArray(entries)))
234
+ refuse('the version listing is malformed');
235
+ for (const entry of [
236
+ ...(result.Versions ?? []),
237
+ ...(result.DeleteMarkers ?? []),
238
+ ]) {
239
+ if (typeof entry.Key !== 'string' || !entry.Key.startsWith(stateKey))
240
+ refuse('the version listing escaped its exact prefix');
241
+ if (entry.Key === stateKey)
242
+ refuse('the exact task state has retained versions or delete markers');
243
+ }
244
+ if ((result.Versions?.length ?? 0) + (result.DeleteMarkers?.length ?? 0) >
245
+ PAGE_SIZE)
246
+ refuse('the version page exceeds the inspection bound');
247
+ if (!result.IsTruncated) {
248
+ complete = true;
249
+ break;
250
+ }
251
+ keyMarker = result.NextKeyMarker;
252
+ versionMarker = result.NextVersionIdMarker;
253
+ const cursor = JSON.stringify([keyMarker, versionMarker]);
254
+ if (!keyMarker || !keyMarker.startsWith(stateKey) || seen.has(cursor))
255
+ refuse('the version listing cursor is ambiguous');
256
+ seen.add(cursor);
257
+ }
258
+ if (!complete)
259
+ refuse('the version listing exceeded its bounded page count');
260
+ // Close the metadata observation window before returning an absence result.
261
+ if ((await contains(stateKey)) || (await contains(lockKey)))
262
+ refuse('task state or lock appeared during the absence inspection');
263
+ assertOwner();
264
+ if (resolveStaticTaskApp(input) !== app)
265
+ refuse('the Slice app changed during inspection');
266
+ return { status: 'already-absent', nativeVersion: NATIVE_VERSION };
267
+ }
268
+ catch (error) {
269
+ if (error instanceof task_stack_checkpoint_js_1.NativeTaskCheckpointError ||
270
+ (error instanceof Error &&
271
+ error.message.startsWith('Task stack absence could not be proven:')))
272
+ throw error;
273
+ // Provider errors can contain private bucket names or request details.
274
+ refuse('a required native metadata read or ownership recheck failed');
275
+ }
276
+ finally {
277
+ s3.destroy();
278
+ ssm.destroy();
279
+ }
280
+ }
281
+ //# sourceMappingURL=task-stack-absence.js.map
@@ -0,0 +1,12 @@
1
+ import { type S3Client } from '@aws-sdk/client-s3';
2
+ export declare class NativeTaskCheckpointError extends Error {
3
+ }
4
+ /**
5
+ * Read-only postcondition for the pinned SST checkpoint envelope. It does not
6
+ * decrypt, retain, repair, or infer physical identities from resource contents.
7
+ * An empty checkpoint is necessary, not independent physical-absence proof.
8
+ */
9
+ export declare function verifyRemovedTaskCheckpoint(s3: S3Client, owner: {
10
+ Bucket: string;
11
+ ExpectedBucketOwner: string;
12
+ }, key: string, stack: string, signal: AbortSignal): Promise<void>;