@empire-builder-kit/nx 1.0.0-rc.30 → 1.0.0-rc.31

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 (261) hide show
  1. package/executors.json +8 -3
  2. package/package.json +10 -7
  3. package/src/aws/child-environment.d.ts +10 -0
  4. package/src/aws/child-environment.js +77 -0
  5. package/src/aws/child-environment.js.map +1 -0
  6. package/src/aws/identity.d.ts +13 -0
  7. package/src/aws/identity.js +41 -0
  8. package/src/aws/identity.js.map +1 -0
  9. package/src/aws-authority/index.d.ts +1 -0
  10. package/src/aws-authority/index.js +5 -0
  11. package/src/aws-authority/index.js.map +1 -0
  12. package/src/aws-authority/stage-authority.d.ts +238 -0
  13. package/src/aws-authority/stage-authority.js +2836 -0
  14. package/src/aws-authority/stage-authority.js.map +1 -0
  15. package/src/developer-agent/generator-planning.js +4 -4
  16. package/src/developer-agent/generator-planning.js.map +1 -1
  17. package/src/developer-agent/operation-registry.js +14 -6
  18. package/src/developer-agent/operation-registry.js.map +1 -1
  19. package/src/executors/deployment-plan/deployment-plan.js +1 -1
  20. package/src/executors/deployment-plan/deployment-plan.js.map +1 -1
  21. package/src/executors/foundation-preflight/foundation-preflight.d.ts +0 -1
  22. package/src/executors/foundation-preflight/foundation-preflight.js.map +1 -1
  23. package/src/executors/foundation-preflight/schema.json +0 -5
  24. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +12 -3
  25. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -32
  26. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +1 -1
  27. package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +64 -0
  28. package/src/executors/foundation-profile-preflight/production-database-safeguard.js +221 -0
  29. package/src/executors/foundation-profile-preflight/production-database-safeguard.js.map +1 -0
  30. package/src/executors/foundation-profile-preflight/schema.json +1 -6
  31. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
  32. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +44 -21
  33. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +1 -1
  34. package/src/executors/foundation-remove-preflight/schema.json +6 -1
  35. package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +25 -369
  36. package/src/executors/infrastructure-plan/infrastructure-plan.js +222 -5472
  37. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +1 -1
  38. package/src/executors/infrastructure-plan/schema.json +8 -64
  39. package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
  40. package/src/executors/local-deploy/federated-credential-transport.js +252 -0
  41. package/src/executors/local-deploy/federated-credential-transport.js.map +1 -0
  42. package/src/executors/local-deploy/local-approval.d.ts +4 -9
  43. package/src/executors/local-deploy/local-approval.js +3 -7
  44. package/src/executors/local-deploy/local-approval.js.map +1 -1
  45. package/src/executors/local-deploy/local-deploy.d.ts +58 -43
  46. package/src/executors/local-deploy/local-deploy.js +938 -804
  47. package/src/executors/local-deploy/local-deploy.js.map +1 -1
  48. package/src/executors/local-deploy/schema.json +3 -20
  49. package/src/executors/refresh/refresh.js +2 -2
  50. package/src/executors/refresh/refresh.js.map +1 -1
  51. package/src/executors/remove/remove.js +2 -2
  52. package/src/executors/remove/remove.js.map +1 -1
  53. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +25 -1
  54. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +905 -22
  55. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js.map +1 -1
  56. package/src/executors/router-waf-rehearsal/schema.json +17 -2
  57. package/src/executors/secret-initialize/schema.json +42 -0
  58. package/src/executors/secret-initialize/secret-initialize.d.ts +30 -0
  59. package/src/executors/secret-initialize/secret-initialize.js +229 -0
  60. package/src/executors/secret-initialize/secret-initialize.js.map +1 -0
  61. package/src/executors/secret-metadata/secret-metadata.d.ts +2 -1
  62. package/src/executors/secret-metadata/secret-metadata.js +62 -29
  63. package/src/executors/secret-metadata/secret-metadata.js.map +1 -1
  64. package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
  65. package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
  66. package/src/executors/sst-lifecycle/generated-secret-retirement.js.map +1 -0
  67. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +46 -0
  68. package/src/executors/sst-lifecycle/governed-native-operation.js +153 -0
  69. package/src/executors/sst-lifecycle/governed-native-operation.js.map +1 -0
  70. package/src/executors/sst-lifecycle/run-sst-command.d.ts +25 -7
  71. package/src/executors/sst-lifecycle/run-sst-command.js +459 -89
  72. package/src/executors/sst-lifecycle/run-sst-command.js.map +1 -1
  73. package/src/executors/sst-lifecycle/schema.json +0 -5
  74. package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
  75. package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
  76. package/src/executors/sst-lifecycle/secret-preflight.js.map +1 -1
  77. package/src/executors/unlock/unlock.js +2 -2
  78. package/src/executors/unlock/unlock.js.map +1 -1
  79. package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
  80. package/src/foundation/router-waf-rate-rehearsal.js +210 -0
  81. package/src/foundation/router-waf-rate-rehearsal.js.map +1 -0
  82. package/src/foundation/router-waf.d.ts +59 -9
  83. package/src/foundation/router-waf.js +427 -32
  84. package/src/foundation/router-waf.js.map +1 -1
  85. package/src/foundation/stages.d.ts +1 -0
  86. package/src/foundation/stages.js +11 -0
  87. package/src/foundation/stages.js.map +1 -1
  88. package/src/generators/formatting.d.ts +8 -0
  89. package/src/generators/formatting.js +118 -0
  90. package/src/generators/formatting.js.map +1 -0
  91. package/src/generators/function/function.js +37 -17
  92. package/src/generators/function/function.js.map +1 -1
  93. package/src/generators/post-generation-install.js +2 -2
  94. package/src/generators/post-generation-install.js.map +1 -1
  95. package/src/generators/preset/generator.js +22 -7
  96. package/src/generators/preset/generator.js.map +1 -1
  97. package/src/generators/preset/workspace-files-developer-agent.js +15 -7
  98. package/src/generators/preset/workspace-files-developer-agent.js.map +1 -1
  99. package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
  100. package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
  101. package/src/generators/preset/workspace-files-ecr-inspector.js.map +1 -0
  102. package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
  103. package/src/generators/preset/workspace-files-performance-cost.js +8 -8
  104. package/src/generators/preset/workspace-files-performance-cost.js.map +1 -1
  105. package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
  106. package/src/generators/preset/workspace-files-performance-load.js +8 -12
  107. package/src/generators/preset/workspace-files-performance-load.js.map +1 -1
  108. package/src/generators/preset/workspace-files-stage-authority.d.ts +4 -0
  109. package/src/generators/preset/workspace-files-stage-authority.js +275 -0
  110. package/src/generators/preset/workspace-files-stage-authority.js.map +1 -0
  111. package/src/generators/preset/workspace-files-thin-deploy.d.ts +35 -0
  112. package/src/generators/preset/workspace-files-thin-deploy.js +1434 -0
  113. package/src/generators/preset/workspace-files-thin-deploy.js.map +1 -0
  114. package/src/generators/preset/workspace-files-thin-docs.d.ts +5 -0
  115. package/src/generators/preset/workspace-files-thin-docs.js +224 -0
  116. package/src/generators/preset/workspace-files-thin-docs.js.map +1 -0
  117. package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
  118. package/src/generators/preset/workspace-files-thin-release.js +26 -0
  119. package/src/generators/preset/workspace-files-thin-release.js.map +1 -0
  120. package/src/generators/preset/workspace-files.d.ts +1 -1
  121. package/src/generators/preset/workspace-files.js +373 -223
  122. package/src/generators/preset/workspace-files.js.map +1 -1
  123. package/src/generators/slice/built-in-plan-api-files.js +1 -0
  124. package/src/generators/slice/built-in-plan-api-files.js.map +1 -1
  125. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +4 -0
  126. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +1 -1
  127. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
  128. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +1 -1
  129. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  130. package/src/generators/slice/built-in-plan-data-files.js +89 -30
  131. package/src/generators/slice/built-in-plan-data-files.js.map +1 -1
  132. package/src/generators/slice/built-in-plan-foundation-files.js +3 -5
  133. package/src/generators/slice/built-in-plan-foundation-files.js.map +1 -1
  134. package/src/generators/slice/built-in-plan-frontend-files.js +5 -1
  135. package/src/generators/slice/built-in-plan-frontend-files.js.map +1 -1
  136. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  137. package/src/generators/slice/built-in-plan-infrastructure-files.js +199 -188
  138. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +1 -1
  139. package/src/generators/slice/built-in-plan-metadata-files.js +13 -0
  140. package/src/generators/slice/built-in-plan-metadata-files.js.map +1 -1
  141. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
  142. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +307 -0
  143. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js.map +1 -0
  144. package/src/generators/slice/built-in-plan-operations-files.js +43 -49
  145. package/src/generators/slice/built-in-plan-operations-files.js.map +1 -1
  146. package/src/generators/slice/built-in-plan-performance-files.js +37 -19
  147. package/src/generators/slice/built-in-plan-performance-files.js.map +1 -1
  148. package/src/generators/slice/built-in-plan-project-files.js +9 -68
  149. package/src/generators/slice/built-in-plan-project-files.js.map +1 -1
  150. package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
  151. package/src/generators/slice/built-in-plan-secret-runtime-files.js +74 -76
  152. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +1 -1
  153. package/src/generators/slice/built-in-plan-testing-files.js +74 -47
  154. package/src/generators/slice/built-in-plan-testing-files.js.map +1 -1
  155. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
  156. package/src/generators/slice/built-in-plan-thin-release-files.js +129 -0
  157. package/src/generators/slice/built-in-plan-thin-release-files.js.map +1 -0
  158. package/src/generators/slice/built-in-plan-verification-files.js +6 -2
  159. package/src/generators/slice/built-in-plan-verification-files.js.map +1 -1
  160. package/src/generators/slice/built-in-plan-web-files.js +4 -2
  161. package/src/generators/slice/built-in-plan-web-files.js.map +1 -1
  162. package/src/generators/slice/built-in-plan-workload-role-files.js +26 -4
  163. package/src/generators/slice/built-in-plan-workload-role-files.js.map +1 -1
  164. package/src/generators/slice/built-in-plan.d.ts +1 -0
  165. package/src/generators/slice/built-in-plan.js +28 -11
  166. package/src/generators/slice/built-in-plan.js.map +1 -1
  167. package/src/generators/slice/slice.js +27 -29
  168. package/src/generators/slice/slice.js.map +1 -1
  169. package/src/generators/upgrade/upgrade.d.ts +1 -1
  170. package/src/generators/upgrade/upgrade.js +224 -69
  171. package/src/generators/upgrade/upgrade.js.map +1 -1
  172. package/src/generators/workload/performance-registration.d.ts +1 -0
  173. package/src/generators/workload/performance-registration.js +6 -4
  174. package/src/generators/workload/performance-registration.js.map +1 -1
  175. package/src/generators/workload/service-performance-files.d.ts +1 -0
  176. package/src/generators/workload/service-performance-files.js +27 -7
  177. package/src/generators/workload/service-performance-files.js.map +1 -1
  178. package/src/generators/workload/workload.d.ts +1 -1
  179. package/src/generators/workload/workload.js +55 -28
  180. package/src/generators/workload/workload.js.map +1 -1
  181. package/src/git-policy/github-bootstrap.d.ts +19 -6
  182. package/src/git-policy/github-bootstrap.js +103 -157
  183. package/src/git-policy/github-bootstrap.js.map +1 -1
  184. package/src/local-dev/private-state.d.ts +3 -0
  185. package/src/local-dev/private-state.js +17 -5
  186. package/src/local-dev/private-state.js.map +1 -1
  187. package/src/performance/cost-collection.d.ts +1 -1
  188. package/src/performance/cost-collection.js +4 -2
  189. package/src/performance/cost-collection.js.map +1 -1
  190. package/src/performance/cost-controls.d.ts +3 -1
  191. package/src/performance/cost-controls.js +9 -4
  192. package/src/performance/cost-controls.js.map +1 -1
  193. package/src/performance/evidence.d.ts +1 -1
  194. package/src/performance/evidence.js +5 -3
  195. package/src/performance/evidence.js.map +1 -1
  196. package/src/performance/load-safety.js +5 -3
  197. package/src/performance/load-safety.js.map +1 -1
  198. package/src/performance/model.d.ts +2 -2
  199. package/src/performance/model.js +4 -3
  200. package/src/performance/model.js.map +1 -1
  201. package/src/release/index.d.ts +0 -2
  202. package/src/release/index.js +0 -2
  203. package/src/release/index.js.map +1 -1
  204. package/src/release/source-authority.d.ts +4 -5
  205. package/src/release/source-authority.js +13 -123
  206. package/src/release/source-authority.js.map +1 -1
  207. package/src/repository-policy/aurora-preflight.d.ts +1 -1
  208. package/src/repository-policy/aurora-preflight.js +4 -1
  209. package/src/repository-policy/aurora-preflight.js.map +1 -1
  210. package/src/repository-policy/policy.d.ts +5 -1
  211. package/src/repository-policy/policy.js +64 -13
  212. package/src/repository-policy/policy.js.map +1 -1
  213. package/src/schemas/performance-policy-v1.json +3 -1
  214. package/src/secrets/adapters.d.ts +5 -1
  215. package/src/secrets/adapters.js +22 -1
  216. package/src/secrets/adapters.js.map +1 -1
  217. package/src/secrets/aws-control-plane.d.ts +10 -1
  218. package/src/secrets/aws-control-plane.js +67 -0
  219. package/src/secrets/aws-control-plane.js.map +1 -1
  220. package/src/secrets/generated-aws-control-plane.d.ts +23 -0
  221. package/src/secrets/generated-aws-control-plane.js +259 -0
  222. package/src/secrets/generated-aws-control-plane.js.map +1 -0
  223. package/src/secrets/metadata.js +38 -10
  224. package/src/secrets/metadata.js.map +1 -1
  225. package/src/secrets/model.d.ts +8 -1
  226. package/src/secrets/model.js +24 -3
  227. package/src/secrets/model.js.map +1 -1
  228. package/src/secrets/operator.d.ts +89 -3
  229. package/src/secrets/operator.js +422 -9
  230. package/src/secrets/operator.js.map +1 -1
  231. package/src/secrets/registry.d.ts +2 -1
  232. package/src/secrets/registry.js +18 -1
  233. package/src/secrets/registry.js.map +1 -1
  234. package/src/secrets/workload-access.js +10 -2
  235. package/src/secrets/workload-access.js.map +1 -1
  236. package/src/supply-chain/action-pins.js +61 -7
  237. package/src/supply-chain/action-pins.js.map +1 -1
  238. package/src/supply-chain/build-output-bounds.d.ts +2 -0
  239. package/src/supply-chain/build-output-bounds.js +12 -0
  240. package/src/supply-chain/build-output-bounds.js.map +1 -0
  241. package/src/supply-chain/build-output.js +2 -4
  242. package/src/supply-chain/build-output.js.map +1 -1
  243. package/src/supply-chain/ecr-scanning.d.ts +5 -3
  244. package/src/supply-chain/ecr-scanning.js +11 -7
  245. package/src/supply-chain/ecr-scanning.js.map +1 -1
  246. package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
  247. package/src/supply-chain/ecs-deployed-image.js +6 -4
  248. package/src/supply-chain/ecs-deployed-image.js.map +1 -1
  249. package/src/supply-chain/generated-container-release-command.js +816 -34
  250. package/src/supply-chain/generated-container-release-command.js.map +1 -1
  251. package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
  252. package/src/supply-chain/generated-ecr-collector-command.js +188 -91
  253. package/src/supply-chain/generated-ecr-collector-command.js.map +1 -1
  254. package/src/supply-chain/generated-files.js +4 -3
  255. package/src/supply-chain/generated-files.js.map +1 -1
  256. package/src/supply-chain/index.d.ts +1 -1
  257. package/src/supply-chain/index.js +2 -1
  258. package/src/supply-chain/index.js.map +1 -1
  259. package/src/workload-roles/index.d.ts +10 -17
  260. package/src/workload-roles/index.js +5 -18
  261. package/src/workload-roles/index.js.map +1 -1
@@ -6,16 +6,12 @@ const tool_versions_js_1 = require("../preset/tool-versions.js");
6
6
  const built_in_plan_shared_js_1 = require("./built-in-plan-shared.js");
7
7
  const personalStagePattern = '^personal-[a-z0-9](?:[a-z0-9-]{0,25}[a-z0-9])?$';
8
8
  /** @internal */
9
- function renderStandardSliceSecretRuntimeFiles(name) {
10
- const pascalName = name
11
- .split('-')
12
- .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)
13
- .join('');
9
+ function renderStandardSliceSecretRuntimeFiles(name, workspace = 'workspace') {
14
10
  return {
15
11
  'secrets/workload-access.json': (0, built_in_plan_shared_js_1.json)({
16
12
  bindings: [
17
13
  {
18
- logicalName: `${pascalName}PerformanceLoadHmacKeys`,
14
+ logicalName: 'GeneratedPerformanceLoadHmacKeys',
19
15
  workload: `${name}.web-server`,
20
16
  },
21
17
  ],
@@ -41,6 +37,7 @@ function declarationProjection(declaration) {
41
37
  !hasOnlyProperties(declaration, [
42
38
  'cache',
43
39
  'contractVersion',
40
+ 'generation',
44
41
  'logicalName',
45
42
  'owner',
46
43
  'requiredStages',
@@ -56,17 +53,27 @@ function declarationProjection(declaration) {
56
53
  declaration.requiredStages.some((stage) => typeof stage !== 'string') ||
57
54
  !isRecord(declaration.rotation) ||
58
55
  !['manual', 'provider-managed'].includes(declaration.rotation.mode) ||
59
- !['aws-managed', 'database-bootstrap', 'operator'].includes(
56
+ !['aws-managed', 'database-bootstrap', 'generated', 'operator'].includes(
60
57
  declaration.source,
61
58
  ) ||
62
59
  !isRecord(declaration.value) ||
63
60
  !hasOnlyProperties(declaration.value, ['kind', 'validate']) ||
64
61
  !['binary', 'json', 'string'].includes(declaration.value.kind) ||
65
- typeof declaration.value.validate !== 'function'
62
+ typeof declaration.value.validate !== 'function' ||
63
+ (declaration.source === 'generated') !==
64
+ (declaration.generation !== undefined) ||
65
+ (declaration.generation !== undefined &&
66
+ (!isRecord(declaration.generation) ||
67
+ !hasOnlyProperties(declaration.generation, ['kind']) ||
68
+ declaration.generation.kind !== 'hmac-key-ring-v1' ||
69
+ declaration.value.kind !== 'json'))
66
70
  ) {
67
71
  throw new Error('invalid');
68
72
  }
69
73
  return {
74
+ ...(declaration.generation === undefined
75
+ ? {}
76
+ : { generation: { kind: declaration.generation.kind } }),
70
77
  logicalName: declaration.logicalName,
71
78
  owner: declaration.owner,
72
79
  requiredStages: [...declaration.requiredStages],
@@ -80,7 +87,7 @@ function parseMetadata(value) {
80
87
  if (
81
88
  !isRecord(value) ||
82
89
  !hasOnlyProperties(value, ['declarations', 'schemaVersion']) ||
83
- value.schemaVersion !== 1 ||
90
+ value.schemaVersion !== 2 ||
84
91
  !Array.isArray(value.declarations)
85
92
  ) {
86
93
  throw new Error('invalid');
@@ -90,6 +97,7 @@ function parseMetadata(value) {
90
97
  if (
91
98
  !isRecord(declaration) ||
92
99
  !hasOnlyProperties(declaration, [
100
+ 'generation',
93
101
  'logicalName',
94
102
  'owner',
95
103
  'requiredStages',
@@ -106,9 +114,16 @@ function parseMetadata(value) {
106
114
  !isRecord(declaration.rotation) ||
107
115
  !hasOnlyProperties(declaration.rotation, ['mode']) ||
108
116
  !['manual', 'provider-managed'].includes(declaration.rotation.mode) ||
109
- !['aws-managed', 'database-bootstrap', 'operator'].includes(
117
+ !['aws-managed', 'database-bootstrap', 'generated', 'operator'].includes(
110
118
  declaration.source,
111
119
  ) ||
120
+ (declaration.source === 'generated') !==
121
+ (declaration.generation !== undefined) ||
122
+ (declaration.generation !== undefined &&
123
+ (!isRecord(declaration.generation) ||
124
+ !hasOnlyProperties(declaration.generation, ['kind']) ||
125
+ declaration.generation.kind !== 'hmac-key-ring-v1' ||
126
+ declaration.valueKind !== 'json')) ||
112
127
  !['binary', 'json', 'string'].includes(declaration.valueKind) ||
113
128
  logicalNames.has(declaration.logicalName)
114
129
  ) {
@@ -116,6 +131,9 @@ function parseMetadata(value) {
116
131
  }
117
132
  logicalNames.add(declaration.logicalName);
118
133
  return {
134
+ ...(declaration.generation === undefined
135
+ ? {}
136
+ : { generation: { kind: declaration.generation.kind } }),
119
137
  logicalName: declaration.logicalName,
120
138
  owner: declaration.owner,
121
139
  requiredStages: [...declaration.requiredStages],
@@ -717,15 +735,15 @@ export function createStandardSliceSecretRuntime(
717
735
  }
718
736
  `,
719
737
  'infra/personal-secrets.ts': `import {
738
+ canonicalOperatorSecretName,
720
739
  parseSecretMetadataRegistry,
721
740
  parseSecretWorkloadAccessRegistry,
722
741
  personalSecretNamesForWorkload,
723
- type SecretWorkloadAccessPlanEntry,
724
742
  } from '@empire-builder-kit/nx/secrets';
725
743
  import secretMetadataDocument from '../secrets/metadata.json';
726
744
  import secretWorkloadAccessDocument from '../secrets/workload-access.json';
727
- import { createStandardSliceWorkloadRoleTopology } from './workload-roles/candidate.js';
728
- import { standardSliceBoundOperatorSecretDeclarations } from './workload-roles/effective-intent.js';
745
+ import { createStandardSliceRuntimeTopology } from './native-runtime-authority/topology.js';
746
+ import { standardSliceBoundOperatorSecretDeclarations } from './native-runtime-authority/effective-intent.js';
729
747
 
730
748
  const metadata = parseSecretMetadataRegistry(secretMetadataDocument);
731
749
  const access = parseSecretWorkloadAccessRegistry(
@@ -806,84 +824,66 @@ function expectedBindingKeys(stage: string) {
806
824
  );
807
825
  }
808
826
 
809
- function createProtectedLinks(
810
- protectedAccess: readonly SecretWorkloadAccessPlanEntry[],
811
- stage: string,
812
- ) {
827
+ function createProtectedLinks(stage: string) {
813
828
  const expected = expectedBindingKeys(stage);
814
829
  const observed = new Set<string>();
815
- const linksByName = new Map<
816
- string,
817
- { arn: string; resource: any }
818
- >();
830
+ const linksByName = new Map<string, { resource: any }>();
819
831
  const linksByWorkload = new Map<
820
832
  string,
821
833
  Array<{ logicalName: string; resource: any }>
822
834
  >();
835
+ const declarationsByName = new Map(
836
+ metadata.declarations.map((declaration) => [
837
+ declaration.logicalName,
838
+ declaration,
839
+ ]),
840
+ );
823
841
 
824
- for (const entry of protectedAccess) {
842
+ for (const entry of access.bindings) {
843
+ const declaration = declarationsByName.get(entry.logicalName);
844
+ if (!declaration?.requiredStages.includes(stage)) continue;
825
845
  if (
826
- entry.workload !== entry.intent.workload ||
827
- linksByWorkload.has(entry.workload) ||
828
- entry.references.length !== entry.intent.links.length
846
+ (declaration.source !== 'operator' &&
847
+ declaration.source !== 'generated') ||
848
+ !entry.workload.startsWith(workloadPrefix)
829
849
  ) {
830
850
  throw new Error(
831
851
  'Protected secret access differs from the declared workload registry.',
832
852
  );
833
853
  }
834
- const resources: Array<{ logicalName: string; resource: any }> = [];
835
- for (const reference of entry.references) {
836
- const bindingKey = entry.workload + '\\0' + reference.logicalName;
837
- const link = entry.intent.links.find(
838
- (candidate) =>
839
- candidate.link.properties.logicalName === reference.logicalName,
854
+ const bindingKey = entry.workload + '\\0' + entry.logicalName;
855
+ if (!expected.has(bindingKey) || observed.has(bindingKey)) {
856
+ throw new Error(
857
+ 'Protected secret access differs from the declared workload registry.',
840
858
  );
841
- if (
842
- !expected.has(bindingKey) ||
843
- observed.has(bindingKey) ||
844
- reference.provider !== 'aws-secrets-manager' ||
845
- !link ||
846
- link.link.resourceName !== reference.logicalName ||
847
- link.link.properties.provider !== 'aws-secrets-manager' ||
848
- link.link.properties.secretArn !== reference.secretArn ||
849
- link.permission.Effect !== 'Allow' ||
850
- link.permission.Action.length !== 1 ||
851
- link.permission.Action[0] !== 'secretsmanager:GetSecretValue' ||
852
- link.permission.Resource.length !== 1 ||
853
- link.permission.Resource[0] !== reference.secretArn
854
- ) {
855
- throw new Error(
856
- 'Protected secret access differs from the declared workload registry.',
857
- );
858
- }
859
- observed.add(bindingKey);
860
- const existing = linksByName.get(reference.logicalName);
861
- if (existing && existing.arn !== reference.secretArn) {
862
- throw new Error(
863
- 'A declared secret resolved to conflicting protected references.',
859
+ }
860
+ observed.add(bindingKey);
861
+ const existing = linksByName.get(entry.logicalName);
862
+ const resource =
863
+ existing?.resource ??
864
+ (() => {
865
+ const name = canonicalOperatorSecretName(
866
+ { slice: '${name}', stage, workspace: '${workspace}' },
867
+ entry.logicalName,
864
868
  );
865
- }
866
- const resource =
867
- existing?.resource ??
868
- new sst.Linkable(reference.logicalName, {
869
+ const secret = aws.secretsmanager.getSecretOutput({ name });
870
+ return new sst.Linkable(entry.logicalName, {
869
871
  properties: {
870
- logicalName: reference.logicalName,
872
+ logicalName: entry.logicalName,
871
873
  provider: 'aws-secrets-manager',
872
- secretArn: reference.secretArn,
874
+ secretArn: secret.arn,
873
875
  },
874
876
  include: [
875
877
  sst.aws.permission({
876
878
  actions: ['secretsmanager:GetSecretValue'],
877
- resources: [reference.secretArn],
879
+ resources: [secret.arn],
878
880
  }),
879
881
  ],
880
882
  });
881
- linksByName.set(reference.logicalName, {
882
- arn: reference.secretArn,
883
- resource,
884
- });
885
- resources.push({ logicalName: reference.logicalName, resource });
886
- }
883
+ })();
884
+ linksByName.set(entry.logicalName, { resource });
885
+ const resources = linksByWorkload.get(entry.workload) ?? [];
886
+ resources.push({ logicalName: entry.logicalName, resource });
887
887
  linksByWorkload.set(entry.workload, resources);
888
888
  }
889
889
  if (
@@ -898,13 +898,11 @@ function createProtectedLinks(
898
898
  }
899
899
 
900
900
  export function createStandardSliceSecretLinks(
901
- input: {
902
- protectedAccess?: readonly SecretWorkloadAccessPlanEntry[];
903
- } = {},
901
+ input: Record<string, never> = {},
904
902
  ): StandardSliceSecretLinks {
905
903
  if ($dev) {
906
904
  if (
907
- input.protectedAccess !== undefined ||
905
+ Object.keys(input).length !== 0 ||
908
906
  !personalStagePattern.test($app.stage)
909
907
  ) {
910
908
  throw new Error(
@@ -913,7 +911,7 @@ export function createStandardSliceSecretLinks(
913
911
  }
914
912
  standardSliceBoundOperatorSecretDeclarations(
915
913
  'development',
916
- createStandardSliceWorkloadRoleTopology('development'),
914
+ createStandardSliceRuntimeTopology('development'),
917
915
  );
918
916
  const resources = new Map(
919
917
  metadata.declarations
@@ -968,10 +966,10 @@ export function createStandardSliceSecretLinks(
968
966
  'A personal stage may run only under the SST development adapter.',
969
967
  );
970
968
  }
971
- const linksByWorkload = createProtectedLinks(
972
- input.protectedAccess ?? [],
973
- $app.stage,
974
- );
969
+ if (Object.keys(input).length !== 0) {
970
+ throw new Error('Protected secret link input must be empty.');
971
+ }
972
+ const linksByWorkload = createProtectedLinks($app.stage);
975
973
  return {
976
974
  linksForWorkload(
977
975
  workload: string,
@@ -1 +1 @@
1
- {"version":3,"file":"built-in-plan-secret-runtime-files.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/slice/built-in-plan-secret-runtime-files.ts"],"names":[],"mappings":";;AAOA,sFAu+BC;AA9+BD,gEAAkE;AAClE,iEAAmE;AACnE,uEAAiD;AAEjD,MAAM,oBAAoB,GAAG,iDAAiD,CAAC;AAE/E,gBAAgB;AAChB,SAAgB,qCAAqC,CACnD,IAAY;IAEZ,MAAM,UAAU,GAAG,IAAI;SACpB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO;QACL,8BAA8B,EAAE,IAAA,8BAAI,EAAC;YACnC,QAAQ,EAAE;gBACR;oBACE,WAAW,EAAE,GAAG,UAAU,yBAAyB;oBACnD,QAAQ,EAAE,GAAG,IAAI,aAAa;iBAC/B;aACF;YACD,aAAa,EAAE,CAAC;SACjB,CAAC;QACF,sCAAsC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmN3C;QACG,qCAAqC,EAAE;;;;;;;;;;;;;;;;;;;gCAmBX,wCAAqB;0CACX,IAAA,gCAAiB,EACrD,aAAa,EACb,aAAa,CACd;gCAC2B,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoOtC,IAAI;;;;;;;;;;cAUJ,IAAI;eACH,IAAI;;;;;cAKL,IAAI;;;;;;;gBAOF,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDnB;QACG,oBAAoB,EAAE;;;;;;;;;;;;;;;;gCAgBM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwInD;QACG,2BAA2B,EAAE;;;;;;;;;;;;;;;gCAeD,oBAAoB;0BAC1B,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Q7B;KACE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"built-in-plan-secret-runtime-files.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/slice/built-in-plan-secret-runtime-files.ts"],"names":[],"mappings":";;AAOA,sFAs+BC;AA7+BD,gEAAkE;AAClE,iEAAmE;AACnE,uEAAiD;AAEjD,MAAM,oBAAoB,GAAG,iDAAiD,CAAC;AAE/E,gBAAgB;AAChB,SAAgB,qCAAqC,CACnD,IAAY,EACZ,SAAS,GAAG,WAAW;IAEvB,OAAO;QACL,8BAA8B,EAAE,IAAA,8BAAI,EAAC;YACnC,QAAQ,EAAE;gBACR;oBACE,WAAW,EAAE,kCAAkC;oBAC/C,QAAQ,EAAE,GAAG,IAAI,aAAa;iBAC/B;aACF;YACD,aAAa,EAAE,CAAC;SACjB,CAAC;QACF,sCAAsC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyO3C;QACG,qCAAqC,EAAE;;;;;;;;;;;;;;;;;;;gCAmBX,wCAAqB;0CACX,IAAA,gCAAiB,EACrD,aAAa,EACb,aAAa,CACd;gCAC2B,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoOtC,IAAI;;;;;;;;;;cAUJ,IAAI;eACH,IAAI;;;;;cAKL,IAAI;;;;;;;gBAOF,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDnB;QACG,oBAAoB,EAAE;;;;;;;;;;;;;;;;gCAgBM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwInD;QACG,2BAA2B,EAAE;;;;;;;;;;;;;;;gCAeD,oBAAoB;0BAC1B,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAiHR,IAAI,yBAAyB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqI3D;KACE,CAAC;AACJ,CAAC"}
@@ -45,41 +45,25 @@ those validators enforce cross-field outcome rules and trusted time/workflow
45
45
  context that JSON Schema cannot establish alone.
46
46
 
47
47
  \`smoke-deployed-check\` only proves that Playwright can discover the suite. It
48
- does not contact or prove a deployment. Governed staging smoke runs through the
49
- protected \`Deployed smoke\` GitHub workflow and emits a candidate-, commit-,
50
- stage-, and cleanup-attributed result. Configure each protected environment's
51
- \`EBK_SMOKE_TARGETS\` variable as a JSON object from exact Slice name to its
52
- credential-free HTTPS \`webUrl\` and \`apiUrl\`, Cognito \`userPoolId\`, and
53
- \`clientId\`. Set \`EBK_SMOKE_AUTHORITY_VERSION\` to
54
- \`cognito-admin-cloudwatch-observe-v1\` only after the protected role is reviewed for
55
- \`DescribeUserPoolClient\`, \`AdminCreateUser\`, \`AdminSetUserPassword\`,
56
- \`AdminAddUserToGroup\`, and \`AdminDeleteUser\` on those pools and
57
- \`FilterLogEvents\` on each exact
58
- \`/ebk/<stage>/<slice>/event-consumer\` log group. The workflow creates one
59
- run-scoped synthetic customer in the Slice's narrow \`<slice>-test-writer\`
60
- group and one distinct synthetic reviewer in \`<slice>-admin\`. It never grants
61
- the customer administrator authority, strips AWS credentials from the browser
62
- child,
63
- observes the published event only from the credential-bearing parent, removes
64
- both principals and all raw browser and log state, and retains only allowlisted
65
- sanitized evidence.
48
+ does not contact or prove a deployment. The root governed lifecycle runs each
49
+ Slice's \`smoke-deployed\` target immediately after its successful native SST
50
+ deployment and migration. Local and GitHub execution use the same stage
51
+ deployment role and exact deployed outputs; no separate smoke role, workflow,
52
+ target registry, or staging-evidence reconciliation graph exists.
66
53
 
67
- The environment-only \`AWS_SMOKE_ROLE_ARN\` is a setup/observation role, never
68
- a deployment role. Its GitHub OIDC trust is limited to this repository and the
69
- matching protected environment. Its policy names only the reviewed user-pool
70
- ARNs for the five Cognito actions above and the exact generated event-consumer
71
- log-group ARNs for \`logs:FilterLogEvents\`. It has no CloudFormation, SST,
72
- application mutation, wildcard Logs query, \`GetLogEvents\`, \`StartQuery\`, or
73
- \`logs:Unmask\` authority. GitHub bootstrap verifies that the secret name exists
74
- only in each protected environment; it never creates the secret or role and
75
- cannot attest to the hidden role policy. Review that policy before setting the
76
- authority-version acknowledgement.
54
+ Development and staging smoke wait up to sixteen minutes for the exact durable
55
+ event on the fifteen-minute nonproduction outbox schedule. Production waits up
56
+ to ninety seconds for the same proof on its one-minute schedule. These bounds
57
+ include CloudWatch Logs request latency and the runner aborts an in-flight
58
+ request when no bounded observation time remains.
77
59
 
78
- A successful \`develop\` deployment automatically starts staging smoke for
79
- every registered Slice target at that exact commit. The credential-free
80
- \`staging-evidence\` promotion check downloads only artifacts from the managed
81
- smoke workflow and rejects missing, mismatched, flaky, failed, incomplete, or
82
- cleanup-deficient evidence.
60
+ The runner creates one run-scoped synthetic customer in the Slice's narrow
61
+ \`<slice>-test-writer\` group and one distinct synthetic reviewer in
62
+ \`<slice>-admin\`. It never grants the customer administrator authority, strips
63
+ AWS credentials from the browser child, observes the published event only from
64
+ the credential-bearing parent, removes both principals and all raw browser and
65
+ log state, and retains only allowlisted sanitized evidence. A failed smoke ends
66
+ the lifecycle immediately and no successful deployment receipt is written.
83
67
 
84
68
  One optional evidence-level retry replays the complete, identical browser or
85
69
  live-integration proof. Consequently \`counts.retried\` is always zero or one.
@@ -1333,6 +1317,7 @@ import {
1333
1317
  writeFileSync,
1334
1318
  } from 'node:fs';
1335
1319
  import { join, relative, resolve } from 'node:path';
1320
+ import { performance } from 'node:perf_hooks';
1336
1321
  import { createRequire } from 'node:module';
1337
1322
  import { TextDecoder } from 'node:util';
1338
1323
  import {
@@ -1397,6 +1382,14 @@ const userPoolId = process.env.EBK_SMOKE_USER_POOL_ID ?? '';
1397
1382
  const clientId = process.env.EBK_SMOKE_CLIENT_ID ?? '';
1398
1383
  const smokeAuthority =
1399
1384
  process.env.EBK_SMOKE_AUTHORITY_VERSION ?? '';
1385
+ const lifecycleAdapter = process.env.EBK_NX_STAGE_LIFECYCLE ?? '';
1386
+ const deployedEnvironmentClass =
1387
+ lifecycleAdapter === 'local'
1388
+ ? 'local-federated'
1389
+ : lifecycleAdapter === 'github'
1390
+ ? 'protected-github'
1391
+ : undefined;
1392
+ const unexpectedArguments = process.argv.slice(2);
1400
1393
  const requestedRunId = process.env.EBK_TEST_RUN_ID;
1401
1394
  const runId = requestedRunId ?? randomUUID().replaceAll('-', '');
1402
1395
  const seed = process.env.EBK_TEST_SEED ?? runId;
@@ -1483,7 +1476,7 @@ function failPreflight(
1483
1476
  attempts: [],
1484
1477
  cleanup,
1485
1478
  environment: {
1486
- class: 'protected-github',
1479
+ class: deployedEnvironmentClass ?? 'unresolved-adapter',
1487
1480
  deployed: true,
1488
1481
  stage: stage || 'unresolved',
1489
1482
  },
@@ -1690,6 +1683,18 @@ function inspectPlaywrightReportPolicy(report) {
1690
1683
  };
1691
1684
  }
1692
1685
 
1686
+ function requiresScheduledDeliveryObservation(stage) {
1687
+ return ['development', 'staging', 'production'].includes(stage);
1688
+ }
1689
+
1690
+ function scheduledDeliveryDeadlineFinding() {
1691
+ return {
1692
+ classification: 'assertion-failed',
1693
+ summary:
1694
+ 'The exact published event and correlation were not observed in the managed event-consumer log group within the bounded window.',
1695
+ };
1696
+ }
1697
+
1693
1698
  async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
1694
1699
  let intent;
1695
1700
  try {
@@ -1711,7 +1716,11 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
1711
1716
  }
1712
1717
  const logGroupName = '/ebk/' + stage + '/${name}/event-consumer';
1713
1718
  const startTime = Math.max(0, Date.parse(attemptStartedAt) - 5_000);
1714
- for (let poll = 0; poll < 8; poll += 1) {
1719
+ const timeoutMilliseconds = stage === 'production' ? 90_000 : 960_000;
1720
+ const deadline = performance.now() + timeoutMilliseconds;
1721
+ while (true) {
1722
+ const remainingRequestMilliseconds = deadline - performance.now();
1723
+ if (remainingRequestMilliseconds <= 0) break;
1715
1724
  let response;
1716
1725
  try {
1717
1726
  response = await logs.send(
@@ -1721,14 +1730,28 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
1721
1730
  logGroupName,
1722
1731
  startTime,
1723
1732
  }),
1733
+ {
1734
+ abortSignal: AbortSignal.timeout(
1735
+ Math.max(1, Math.ceil(remainingRequestMilliseconds)),
1736
+ ),
1737
+ },
1724
1738
  );
1725
1739
  } catch (error) {
1740
+ if (
1741
+ performance.now() >= deadline ||
1742
+ ['AbortError', 'TimeoutError'].includes(error?.name)
1743
+ ) {
1744
+ return scheduledDeliveryDeadlineFinding();
1745
+ }
1726
1746
  return permissionFailure(
1727
1747
  error,
1728
1748
  'event-consumer observation',
1729
1749
  'CloudWatch Logs',
1730
1750
  );
1731
1751
  }
1752
+ if (performance.now() > deadline) {
1753
+ return scheduledDeliveryDeadlineFinding();
1754
+ }
1732
1755
  const observed = (response.events ?? []).some(({ message }) => {
1733
1756
  const record = structuredLogRecord(message);
1734
1757
  return (
@@ -1744,15 +1767,13 @@ async function observePublishedEvent(logs, observationPath, attemptStartedAt) {
1744
1767
  );
1745
1768
  });
1746
1769
  if (observed) return undefined;
1747
- if (poll < 7) {
1748
- await new Promise((resolveDelay) => setTimeout(resolveDelay, 3_000));
1749
- }
1770
+ const remainingDelayMilliseconds = deadline - performance.now();
1771
+ if (remainingDelayMilliseconds <= 0) break;
1772
+ await new Promise((resolveDelay) =>
1773
+ setTimeout(resolveDelay, Math.min(3_000, remainingDelayMilliseconds)),
1774
+ );
1750
1775
  }
1751
- return {
1752
- classification: 'assertion-failed',
1753
- summary:
1754
- 'The exact published event and correlation were not observed in the managed event-consumer log group within the bounded window.',
1755
- };
1776
+ return scheduledDeliveryDeadlineFinding();
1756
1777
  }
1757
1778
 
1758
1779
  const url = credentialFreeHttpsUrl(smokeUrl);
@@ -1763,7 +1784,7 @@ const validIdentity =
1763
1784
  /^[A-Za-z0-9_-]{1,128}_[A-Za-z0-9]{1,128}$/.test(userPoolId) &&
1764
1785
  /^[a-z0-9]{1,128}$/.test(clientId);
1765
1786
  if (
1766
- !['staging', 'production'].includes(stage) ||
1787
+ !['development', 'staging', 'production'].includes(stage) ||
1767
1788
  !url ||
1768
1789
  !apiUrl ||
1769
1790
  normalizedProductPath !== expectedProductPath ||
@@ -1772,12 +1793,14 @@ if (
1772
1793
  !validSourceCommit ||
1773
1794
  !validRunId ||
1774
1795
  !validSeed ||
1796
+ !deployedEnvironmentClass ||
1797
+ unexpectedArguments.length > 0 ||
1775
1798
  smokeAuthority !== 'cognito-admin-cloudwatch-observe-v1' ||
1776
1799
  !process.env.AWS_REGION
1777
1800
  ) {
1778
1801
  failPreflight(
1779
1802
  'prerequisite-missing',
1780
- 'Protected smoke requires staging or production, one exact source commit, reviewed credential-free HTTPS web and API targets, exact Cognito identity, bounded run/seed identity, AWS region, and cognito-admin-cloudwatch-observe-v1 authority acknowledgement.',
1803
+ 'Deployed smoke requires development, staging, or production, one exact source commit, native credential-free HTTPS web and API outputs, exact Cognito identity, bounded run/seed identity, AWS region, and cognito-admin-cloudwatch-observe-v1 authority acknowledgement.',
1781
1804
  );
1782
1805
  }
1783
1806
  if (process.exitCode === undefined) {
@@ -2020,6 +2043,7 @@ if (process.exitCode === undefined) {
2020
2043
  EBK_SMOKE_API_URL: apiUrl.href,
2021
2044
  EBK_SMOKE_DATA_CLEANUP_PATH: cleanupPath,
2022
2045
  EBK_SMOKE_EMAIL: principalEmail,
2046
+ EBK_FRONTEND_SECURITY_PROFILE: 'deployed-https',
2023
2047
  EBK_SMOKE_PASSWORD: principalPassword,
2024
2048
  EBK_SMOKE_REVIEWER_EMAIL: reviewerEmail,
2025
2049
  EBK_SMOKE_REVIEWER_PASSWORD: reviewerPassword,
@@ -2077,7 +2101,10 @@ if (process.exitCode === undefined) {
2077
2101
  } else {
2078
2102
  reportInvalid = true;
2079
2103
  }
2080
- if (execution?.status === 0) {
2104
+ if (
2105
+ execution?.status === 0 &&
2106
+ requiresScheduledDeliveryObservation(stage)
2107
+ ) {
2081
2108
  observationFinding = await observePublishedEvent(
2082
2109
  logs,
2083
2110
  observationPath,
@@ -2362,7 +2389,7 @@ if (process.exitCode === undefined) {
2362
2389
  attempts,
2363
2390
  cleanup,
2364
2391
  environment: {
2365
- class: 'protected-github',
2392
+ class: deployedEnvironmentClass,
2366
2393
  deployed: true,
2367
2394
  stage,
2368
2395
  },
@@ -1 +1 @@
1
- {"version":3,"file":"built-in-plan-testing-files.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/slice/built-in-plan-testing-files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"built-in-plan-testing-files.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/slice/built-in-plan-testing-files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { DeploymentProfile } from '../../repository-policy/index.js';
2
+ /**
3
+ * Prerelease release-manifest and rollout scripts used Pulumi previews as
4
+ * deployment authorization. The thin SST lifecycle keeps immutable candidate
5
+ * capture, but deployment evidence is the post-operation receipt emitted by
6
+ * the shared lifecycle adapter. Those old scripts are deliberately not
7
+ * generated.
8
+ */
9
+ export declare const RETIRED_PREVIEW_RELEASE_PATHS: readonly ["scripts/release-lifecycle.mjs", "scripts/release-manifest.mjs", "scripts/release-rollout-proof.mjs", "scripts/release-rollout.mjs"];
10
+ /** @internal */
11
+ export declare function renderProductThinReleaseFiles(name: string, configurationSeed: string, deploymentProfile: DeploymentProfile): Readonly<Record<string, string>>;