@lumenflow/packs-software-delivery 4.23.0 → 5.0.0

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 (286) hide show
  1. package/dist/manifest-schema.d.ts +12 -0
  2. package/dist/manifest-schema.d.ts.map +1 -1
  3. package/dist/manifest-schema.js +10 -0
  4. package/dist/manifest-schema.js.map +1 -1
  5. package/dist/manifest.d.ts +21 -0
  6. package/dist/manifest.d.ts.map +1 -1
  7. package/dist/manifest.js +92 -1
  8. package/dist/manifest.js.map +1 -1
  9. package/dist/src/commands/index.d.ts +2 -0
  10. package/dist/src/commands/index.d.ts.map +1 -0
  11. package/dist/src/commands/index.js +5 -0
  12. package/dist/src/commands/index.js.map +1 -0
  13. package/dist/src/config/delivery-review-contract.d.ts +17 -0
  14. package/dist/src/config/delivery-review-contract.d.ts.map +1 -0
  15. package/dist/src/config/delivery-review-contract.js +19 -0
  16. package/dist/src/config/delivery-review-contract.js.map +1 -0
  17. package/dist/src/config/env-accessors.d.ts +16 -0
  18. package/dist/src/config/env-accessors.d.ts.map +1 -0
  19. package/dist/src/config/env-accessors.js +18 -0
  20. package/dist/src/config/env-accessors.js.map +1 -0
  21. package/dist/src/config/index.d.ts +3 -0
  22. package/dist/src/config/index.d.ts.map +1 -0
  23. package/dist/src/config/index.js +8 -0
  24. package/dist/src/config/index.js.map +1 -0
  25. package/dist/src/config/normalize-config-keys.d.ts +16 -0
  26. package/dist/src/config/normalize-config-keys.d.ts.map +1 -0
  27. package/dist/src/config/normalize-config-keys.js +18 -0
  28. package/dist/src/config/normalize-config-keys.js.map +1 -0
  29. package/dist/src/config/schemas/lumenflow-config-schema-types.d.ts +190 -0
  30. package/dist/src/config/schemas/lumenflow-config-schema-types.d.ts.map +1 -0
  31. package/dist/src/config/schemas/lumenflow-config-schema-types.js +182 -0
  32. package/dist/src/config/schemas/lumenflow-config-schema-types.js.map +1 -0
  33. package/dist/src/config/schemas/lumenflow-config-schema.d.ts +190 -0
  34. package/dist/src/config/schemas/lumenflow-config-schema.d.ts.map +1 -0
  35. package/dist/src/config/schemas/lumenflow-config-schema.js +182 -0
  36. package/dist/src/config/schemas/lumenflow-config-schema.js.map +1 -0
  37. package/dist/src/config/workspace-reader.d.ts +56 -0
  38. package/dist/src/config/workspace-reader.d.ts.map +1 -0
  39. package/dist/src/config/workspace-reader.js +209 -0
  40. package/dist/src/config/workspace-reader.js.map +1 -0
  41. package/dist/src/constants/backlog-patterns.d.ts +21 -0
  42. package/dist/src/constants/backlog-patterns.d.ts.map +1 -0
  43. package/dist/src/constants/backlog-patterns.js +26 -0
  44. package/dist/src/constants/backlog-patterns.js.map +1 -0
  45. package/dist/src/constants/client-ids.d.ts +16 -0
  46. package/dist/src/constants/client-ids.d.ts.map +1 -0
  47. package/dist/src/constants/client-ids.js +16 -0
  48. package/dist/src/constants/client-ids.js.map +1 -0
  49. package/dist/src/constants/config-contract.d.ts +2 -0
  50. package/dist/src/constants/config-contract.d.ts.map +1 -0
  51. package/dist/src/constants/config-contract.js +7 -0
  52. package/dist/src/constants/config-contract.js.map +1 -0
  53. package/dist/src/constants/docs-layout-presets.d.ts +31 -0
  54. package/dist/src/constants/docs-layout-presets.d.ts.map +1 -0
  55. package/dist/src/constants/docs-layout-presets.js +41 -0
  56. package/dist/src/constants/docs-layout-presets.js.map +1 -0
  57. package/dist/src/constants/duration-constants.d.ts +11 -0
  58. package/dist/src/constants/duration-constants.d.ts.map +1 -0
  59. package/dist/src/constants/duration-constants.js +13 -0
  60. package/dist/src/constants/duration-constants.js.map +1 -0
  61. package/dist/src/constants/gate-constants.d.ts +24 -0
  62. package/dist/src/constants/gate-constants.d.ts.map +1 -0
  63. package/dist/src/constants/gate-constants.js +26 -0
  64. package/dist/src/constants/gate-constants.js.map +1 -0
  65. package/dist/src/constants/index.d.ts +18 -0
  66. package/dist/src/constants/index.d.ts.map +1 -0
  67. package/dist/src/constants/index.js +29 -0
  68. package/dist/src/constants/index.js.map +1 -0
  69. package/dist/src/constants/lock-constants.d.ts +29 -0
  70. package/dist/src/constants/lock-constants.d.ts.map +1 -0
  71. package/dist/src/constants/lock-constants.js +31 -0
  72. package/dist/src/constants/lock-constants.js.map +1 -0
  73. package/dist/src/constants/object-guards.d.ts +9 -0
  74. package/dist/src/constants/object-guards.d.ts.map +1 -0
  75. package/dist/src/constants/object-guards.js +11 -0
  76. package/dist/src/constants/object-guards.js.map +1 -0
  77. package/dist/src/constants/section-headings.d.ts +35 -0
  78. package/dist/src/constants/section-headings.d.ts.map +1 -0
  79. package/dist/src/constants/section-headings.js +82 -0
  80. package/dist/src/constants/section-headings.js.map +1 -0
  81. package/dist/src/constants/wu-cli-constants.d.ts +434 -0
  82. package/dist/src/constants/wu-cli-constants.d.ts.map +1 -0
  83. package/dist/src/constants/wu-cli-constants.js +439 -0
  84. package/dist/src/constants/wu-cli-constants.js.map +1 -0
  85. package/dist/src/constants/wu-domain-constants.d.ts +296 -0
  86. package/dist/src/constants/wu-domain-constants.d.ts.map +1 -0
  87. package/dist/src/constants/wu-domain-constants.js +400 -0
  88. package/dist/src/constants/wu-domain-constants.js.map +1 -0
  89. package/dist/src/constants/wu-git-constants.d.ts +2 -0
  90. package/dist/src/constants/wu-git-constants.d.ts.map +1 -0
  91. package/dist/src/constants/wu-git-constants.js +7 -0
  92. package/dist/src/constants/wu-git-constants.js.map +1 -0
  93. package/dist/src/constants/wu-id-format.d.ts +138 -0
  94. package/dist/src/constants/wu-id-format.d.ts.map +1 -0
  95. package/dist/src/constants/wu-id-format.js +265 -0
  96. package/dist/src/constants/wu-id-format.js.map +1 -0
  97. package/dist/src/constants/wu-paths-constants.d.ts +254 -0
  98. package/dist/src/constants/wu-paths-constants.d.ts.map +1 -0
  99. package/dist/src/constants/wu-paths-constants.js +276 -0
  100. package/dist/src/constants/wu-paths-constants.js.map +1 -0
  101. package/dist/src/constants/wu-statuses.d.ts +209 -0
  102. package/dist/src/constants/wu-statuses.d.ts.map +1 -0
  103. package/dist/src/constants/wu-statuses.js +245 -0
  104. package/dist/src/constants/wu-statuses.js.map +1 -0
  105. package/dist/src/constants/wu-type-helpers.d.ts +28 -0
  106. package/dist/src/constants/wu-type-helpers.d.ts.map +1 -0
  107. package/dist/src/constants/wu-type-helpers.js +49 -0
  108. package/dist/src/constants/wu-type-helpers.js.map +1 -0
  109. package/dist/src/constants/wu-ui-constants.d.ts +236 -0
  110. package/dist/src/constants/wu-ui-constants.d.ts.map +1 -0
  111. package/dist/src/constants/wu-ui-constants.js +238 -0
  112. package/dist/src/constants/wu-ui-constants.js.map +1 -0
  113. package/dist/src/constants/wu-validation-constants.d.ts +61 -0
  114. package/dist/src/constants/wu-validation-constants.d.ts.map +1 -0
  115. package/dist/src/constants/wu-validation-constants.js +69 -0
  116. package/dist/src/constants/wu-validation-constants.js.map +1 -0
  117. package/dist/src/domain/index.d.ts +4 -0
  118. package/dist/src/domain/index.d.ts.map +1 -0
  119. package/dist/src/domain/index.js +6 -0
  120. package/dist/src/domain/index.js.map +1 -0
  121. package/dist/src/domain/orchestration.constants.d.ts +111 -0
  122. package/dist/src/domain/orchestration.constants.d.ts.map +1 -0
  123. package/dist/src/domain/orchestration.constants.js +130 -0
  124. package/dist/src/domain/orchestration.constants.js.map +1 -0
  125. package/dist/src/domain/orchestration.schemas.d.ts +307 -0
  126. package/dist/src/domain/orchestration.schemas.d.ts.map +1 -0
  127. package/dist/src/domain/orchestration.schemas.js +214 -0
  128. package/dist/src/domain/orchestration.schemas.js.map +1 -0
  129. package/dist/src/domain/orchestration.types.d.ts +134 -0
  130. package/dist/src/domain/orchestration.types.d.ts.map +1 -0
  131. package/dist/src/domain/orchestration.types.js +5 -0
  132. package/dist/src/domain/orchestration.types.js.map +1 -0
  133. package/dist/src/methodology/incremental-test.d.ts +33 -0
  134. package/dist/src/methodology/incremental-test.d.ts.map +1 -0
  135. package/dist/src/methodology/incremental-test.js +73 -0
  136. package/dist/src/methodology/incremental-test.js.map +1 -0
  137. package/dist/src/methodology/index.d.ts +3 -0
  138. package/dist/src/methodology/index.d.ts.map +1 -0
  139. package/dist/src/methodology/index.js +6 -0
  140. package/dist/src/methodology/index.js.map +1 -0
  141. package/dist/src/methodology/manual-test-validator.d.ts +97 -0
  142. package/dist/src/methodology/manual-test-validator.d.ts.map +1 -0
  143. package/dist/src/methodology/manual-test-validator.js +248 -0
  144. package/dist/src/methodology/manual-test-validator.js.map +1 -0
  145. package/dist/src/policy/coverage-gate.d.ts +127 -0
  146. package/dist/src/policy/coverage-gate.d.ts.map +1 -0
  147. package/dist/src/policy/coverage-gate.js +211 -0
  148. package/dist/src/policy/coverage-gate.js.map +1 -0
  149. package/dist/src/policy/gates-agent-mode.d.ts +107 -0
  150. package/dist/src/policy/gates-agent-mode.d.ts.map +1 -0
  151. package/dist/src/policy/gates-agent-mode.js +138 -0
  152. package/dist/src/policy/gates-agent-mode.js.map +1 -0
  153. package/dist/src/policy/gates-config-internal.d.ts +54 -0
  154. package/dist/src/policy/gates-config-internal.d.ts.map +1 -0
  155. package/dist/src/policy/gates-config-internal.js +108 -0
  156. package/dist/src/policy/gates-config-internal.js.map +1 -0
  157. package/dist/src/policy/gates-config.d.ts +67 -0
  158. package/dist/src/policy/gates-config.d.ts.map +1 -0
  159. package/dist/src/policy/gates-config.js +193 -0
  160. package/dist/src/policy/gates-config.js.map +1 -0
  161. package/dist/src/policy/gates-coverage.d.ts +48 -0
  162. package/dist/src/policy/gates-coverage.d.ts.map +1 -0
  163. package/dist/src/policy/gates-coverage.js +182 -0
  164. package/dist/src/policy/gates-coverage.js.map +1 -0
  165. package/dist/src/policy/gates-presets.d.ts +51 -0
  166. package/dist/src/policy/gates-presets.d.ts.map +1 -0
  167. package/dist/src/policy/gates-presets.js +117 -0
  168. package/dist/src/policy/gates-presets.js.map +1 -0
  169. package/dist/src/policy/gates-schemas.d.ts +142 -0
  170. package/dist/src/policy/gates-schemas.d.ts.map +1 -0
  171. package/dist/src/policy/gates-schemas.js +67 -0
  172. package/dist/src/policy/gates-schemas.js.map +1 -0
  173. package/dist/src/policy/index.d.ts +19 -0
  174. package/dist/src/policy/index.d.ts.map +1 -0
  175. package/dist/src/policy/index.js +21 -0
  176. package/dist/src/policy/index.js.map +1 -0
  177. package/dist/src/policy/package-manager-resolver.d.ts +79 -0
  178. package/dist/src/policy/package-manager-resolver.d.ts.map +1 -0
  179. package/dist/src/policy/package-manager-resolver.js +245 -0
  180. package/dist/src/policy/package-manager-resolver.js.map +1 -0
  181. package/dist/src/policy/resolve-policy.d.ts +337 -0
  182. package/dist/src/policy/resolve-policy.d.ts.map +1 -0
  183. package/dist/src/policy/resolve-policy.js +353 -0
  184. package/dist/src/policy/resolve-policy.js.map +1 -0
  185. package/dist/src/ports/config.ports.d.ts +83 -0
  186. package/dist/src/ports/config.ports.d.ts.map +1 -0
  187. package/dist/src/ports/config.ports.js +4 -0
  188. package/dist/src/ports/config.ports.js.map +1 -0
  189. package/dist/src/ports/dashboard-renderer.port.d.ts +113 -0
  190. package/dist/src/ports/dashboard-renderer.port.d.ts.map +1 -0
  191. package/dist/src/ports/dashboard-renderer.port.js +4 -0
  192. package/dist/src/ports/dashboard-renderer.port.js.map +1 -0
  193. package/dist/src/ports/index.d.ts +5 -0
  194. package/dist/src/ports/index.d.ts.map +1 -0
  195. package/dist/src/ports/index.js +10 -0
  196. package/dist/src/ports/index.js.map +1 -0
  197. package/dist/src/ports/sync-validator.ports.d.ts +52 -0
  198. package/dist/src/ports/sync-validator.ports.d.ts.map +1 -0
  199. package/dist/src/ports/sync-validator.ports.js +4 -0
  200. package/dist/src/ports/sync-validator.ports.js.map +1 -0
  201. package/dist/src/ports/wu-helpers.ports.d.ts +157 -0
  202. package/dist/src/ports/wu-helpers.ports.d.ts.map +1 -0
  203. package/dist/src/ports/wu-helpers.ports.js +4 -0
  204. package/dist/src/ports/wu-helpers.ports.js.map +1 -0
  205. package/dist/src/ports/wu-state.ports.d.ts +209 -0
  206. package/dist/src/ports/wu-state.ports.d.ts.map +1 -0
  207. package/dist/src/ports/wu-state.ports.js +4 -0
  208. package/dist/src/ports/wu-state.ports.js.map +1 -0
  209. package/dist/src/primitives/index.d.ts +2 -0
  210. package/dist/src/primitives/index.d.ts.map +1 -0
  211. package/dist/src/primitives/index.js +5 -0
  212. package/dist/src/primitives/index.js.map +1 -0
  213. package/dist/src/runtime/index.d.ts +2 -0
  214. package/dist/src/runtime/index.d.ts.map +1 -0
  215. package/dist/src/runtime/index.js +6 -0
  216. package/dist/src/runtime/index.js.map +1 -0
  217. package/dist/src/runtime/work-classifier.d.ts +103 -0
  218. package/dist/src/runtime/work-classifier.d.ts.map +1 -0
  219. package/dist/src/runtime/work-classifier.js +427 -0
  220. package/dist/src/runtime/work-classifier.js.map +1 -0
  221. package/dist/src/sandbox/index.d.ts +6 -0
  222. package/dist/src/sandbox/index.d.ts.map +1 -0
  223. package/dist/src/sandbox/index.js +10 -0
  224. package/dist/src/sandbox/index.js.map +1 -0
  225. package/dist/src/sandbox/sandbox-allowlist.d.ts +16 -0
  226. package/dist/src/sandbox/sandbox-allowlist.d.ts.map +1 -0
  227. package/dist/src/sandbox/sandbox-allowlist.js +77 -0
  228. package/dist/src/sandbox/sandbox-allowlist.js.map +1 -0
  229. package/dist/src/sandbox/sandbox-backend-linux.d.ts +6 -0
  230. package/dist/src/sandbox/sandbox-backend-linux.d.ts.map +1 -0
  231. package/dist/src/sandbox/sandbox-backend-linux.js +67 -0
  232. package/dist/src/sandbox/sandbox-backend-linux.js.map +1 -0
  233. package/dist/src/sandbox/sandbox-backend-macos.d.ts +6 -0
  234. package/dist/src/sandbox/sandbox-backend-macos.d.ts.map +1 -0
  235. package/dist/src/sandbox/sandbox-backend-macos.js +112 -0
  236. package/dist/src/sandbox/sandbox-backend-macos.js.map +1 -0
  237. package/dist/src/sandbox/sandbox-backend-windows.d.ts +6 -0
  238. package/dist/src/sandbox/sandbox-backend-windows.d.ts.map +1 -0
  239. package/dist/src/sandbox/sandbox-backend-windows.js +30 -0
  240. package/dist/src/sandbox/sandbox-backend-windows.js.map +1 -0
  241. package/dist/src/sandbox/sandbox-profile.d.ts +58 -0
  242. package/dist/src/sandbox/sandbox-profile.d.ts.map +1 -0
  243. package/dist/src/sandbox/sandbox-profile.js +69 -0
  244. package/dist/src/sandbox/sandbox-profile.js.map +1 -0
  245. package/dist/src/schemas/index.d.ts +2 -0
  246. package/dist/src/schemas/index.d.ts.map +1 -0
  247. package/dist/src/schemas/index.js +5 -0
  248. package/dist/src/schemas/index.js.map +1 -0
  249. package/dist/src/state/date-utils.d.ts +66 -0
  250. package/dist/src/state/date-utils.d.ts.map +1 -0
  251. package/dist/src/state/date-utils.js +143 -0
  252. package/dist/src/state/date-utils.js.map +1 -0
  253. package/dist/src/state/index.d.ts +8 -0
  254. package/dist/src/state/index.d.ts.map +1 -0
  255. package/dist/src/state/index.js +15 -0
  256. package/dist/src/state/index.js.map +1 -0
  257. package/dist/src/state/state-machine.d.ts +14 -0
  258. package/dist/src/state/state-machine.d.ts.map +1 -0
  259. package/dist/src/state/state-machine.js +92 -0
  260. package/dist/src/state/state-machine.js.map +1 -0
  261. package/dist/src/state/wu-doc-types.d.ts +48 -0
  262. package/dist/src/state/wu-doc-types.d.ts.map +1 -0
  263. package/dist/src/state/wu-doc-types.js +4 -0
  264. package/dist/src/state/wu-doc-types.js.map +1 -0
  265. package/dist/src/state/wu-paths.d.ts +275 -0
  266. package/dist/src/state/wu-paths.d.ts.map +1 -0
  267. package/dist/src/state/wu-paths.js +335 -0
  268. package/dist/src/state/wu-paths.js.map +1 -0
  269. package/dist/src/state/wu-schema.d.ts +831 -0
  270. package/dist/src/state/wu-schema.d.ts.map +1 -0
  271. package/dist/src/state/wu-schema.js +934 -0
  272. package/dist/src/state/wu-schema.js.map +1 -0
  273. package/dist/src/state/wu-state-schema.d.ts +292 -0
  274. package/dist/src/state/wu-state-schema.d.ts.map +1 -0
  275. package/dist/src/state/wu-state-schema.js +215 -0
  276. package/dist/src/state/wu-state-schema.js.map +1 -0
  277. package/dist/src/state/wu-yaml.d.ts +113 -0
  278. package/dist/src/state/wu-yaml.d.ts.map +1 -0
  279. package/dist/src/state/wu-yaml.js +307 -0
  280. package/dist/src/state/wu-yaml.js.map +1 -0
  281. package/dist/tool-impl/wu-lifecycle-tools.d.ts +11 -0
  282. package/dist/tool-impl/wu-lifecycle-tools.d.ts.map +1 -1
  283. package/dist/tool-impl/wu-lifecycle-tools.js +17 -0
  284. package/dist/tool-impl/wu-lifecycle-tools.js.map +1 -1
  285. package/manifest.yaml +46 -0
  286. package/package.json +88 -3
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Gates Schemas and Types
3
+ *
4
+ * WU-2037: Extracted from gates-config.ts
5
+ *
6
+ * Zod schema definitions, TypeScript types, and interfaces for gates configuration.
7
+ * This module contains only shape definitions -- no runtime logic.
8
+ *
9
+ * @module gates-schemas
10
+ */
11
+ import { z } from 'zod';
12
+ import type { CoverageMode } from './resolve-policy.js';
13
+ /**
14
+ * Schema for a gate command - either a string or an object with options
15
+ */
16
+ export declare const GateCommandConfigSchema: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
17
+ command: z.ZodString;
18
+ continueOnError: z.ZodOptional<z.ZodBoolean>;
19
+ timeout: z.ZodOptional<z.ZodNumber>;
20
+ }, z.core.$strip>]>;
21
+ /**
22
+ * Type for parsed gate command configuration
23
+ */
24
+ export type GateCommandConfig = z.infer<typeof GateCommandConfigSchema>;
25
+ /**
26
+ * Schema for the gates execution configuration section
27
+ */
28
+ export declare const GatesExecutionConfigSchema: z.ZodObject<{
29
+ preset: z.ZodOptional<z.ZodString>;
30
+ setup: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
31
+ command: z.ZodString;
32
+ continueOnError: z.ZodOptional<z.ZodBoolean>;
33
+ timeout: z.ZodOptional<z.ZodNumber>;
34
+ }, z.core.$strip>]>>;
35
+ format: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
36
+ command: z.ZodString;
37
+ continueOnError: z.ZodOptional<z.ZodBoolean>;
38
+ timeout: z.ZodOptional<z.ZodNumber>;
39
+ }, z.core.$strip>]>>;
40
+ lint: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
41
+ command: z.ZodString;
42
+ continueOnError: z.ZodOptional<z.ZodBoolean>;
43
+ timeout: z.ZodOptional<z.ZodNumber>;
44
+ }, z.core.$strip>]>>;
45
+ typecheck: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
46
+ command: z.ZodString;
47
+ continueOnError: z.ZodOptional<z.ZodBoolean>;
48
+ timeout: z.ZodOptional<z.ZodNumber>;
49
+ }, z.core.$strip>]>>;
50
+ test: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
51
+ command: z.ZodString;
52
+ continueOnError: z.ZodOptional<z.ZodBoolean>;
53
+ timeout: z.ZodOptional<z.ZodNumber>;
54
+ }, z.core.$strip>]>>;
55
+ coverage: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
56
+ command: z.ZodString;
57
+ threshold: z.ZodOptional<z.ZodNumber>;
58
+ }, z.core.$strip>]>>;
59
+ }, z.core.$strip>;
60
+ /**
61
+ * Type for gates execution configuration
62
+ */
63
+ export type GatesExecutionConfig = z.infer<typeof GatesExecutionConfigSchema>;
64
+ /**
65
+ * Parsed gate command ready for execution
66
+ */
67
+ export interface ParsedGateCommand {
68
+ /** The shell command to execute */
69
+ command: string;
70
+ /** Whether to continue if this gate fails */
71
+ continueOnError: boolean;
72
+ /** Timeout in milliseconds */
73
+ timeout: number;
74
+ }
75
+ /**
76
+ * WU-1191: Lane health gate mode
77
+ * Controls how lane health check behaves during gates
78
+ */
79
+ export type LaneHealthMode = 'warn' | 'error' | 'off';
80
+ /**
81
+ * Schema for lane health mode validation
82
+ */
83
+ export declare const LaneHealthModeSchema: z.ZodEnum<{
84
+ error: "error";
85
+ warn: "warn";
86
+ off: "off";
87
+ }>;
88
+ /**
89
+ * Default lane health mode (advisory by default)
90
+ */
91
+ export declare const DEFAULT_LANE_HEALTH_MODE: LaneHealthMode;
92
+ /**
93
+ * WU-1262: Resolved coverage configuration
94
+ * Contains threshold and mode derived from methodology policy
95
+ */
96
+ export interface CoverageConfig {
97
+ /** Coverage threshold (0-100) */
98
+ threshold: number;
99
+ /** Coverage mode (block, warn, or off) */
100
+ mode: CoverageMode;
101
+ }
102
+ /**
103
+ * WU-2020: Focused coverage policy interface (ISP-compliant).
104
+ * Single-responsibility: coverage threshold and enforcement mode.
105
+ */
106
+ export interface CoveragePolicy {
107
+ /** Coverage threshold (0-100) */
108
+ threshold: number;
109
+ /** Coverage mode (block, warn, or off) */
110
+ mode: CoverageMode;
111
+ }
112
+ /**
113
+ * WU-2020: Focused test runner policy interface (ISP-compliant).
114
+ * Single-responsibility: whether tests are mandatory for completion.
115
+ */
116
+ export interface TestRunnerPolicy {
117
+ /** Whether tests are required for completion (from methodology.testing) */
118
+ tests_required: boolean;
119
+ }
120
+ /**
121
+ * WU-1280: Resolved test policy configuration
122
+ * Extends CoverageConfig with tests_required from methodology policy.
123
+ *
124
+ * WU-2020: Now defined as the intersection of CoveragePolicy and
125
+ * TestRunnerPolicy. Consumers that only need coverage or test-runner
126
+ * semantics should prefer the focused interfaces.
127
+ */
128
+ export interface TestPolicy extends CoveragePolicy, TestRunnerPolicy {
129
+ }
130
+ /**
131
+ * WU-1356: Gates commands configuration type
132
+ */
133
+ export interface GatesCommands {
134
+ test_full: string;
135
+ test_docs_only: string;
136
+ test_incremental: string;
137
+ lint?: string;
138
+ typecheck?: string;
139
+ format?: string;
140
+ migration_verify: string;
141
+ }
142
+ //# sourceMappingURL=gates-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates-schemas.d.ts","sourceRoot":"","sources":["../../../src/policy/gates-schemas.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAkBxD;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;mBAAiD,CAAC;AAEtF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuBrC,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAM9E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,eAAe,EAAE,OAAO,CAAC;IACzB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;EAAmC,CAAC;AAErE;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,cAAuB,CAAC;AAM/D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,IAAI,EAAE,YAAY,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,IAAI,EAAE,YAAY,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,UAAW,SAAQ,cAAc,EAAE,gBAAgB;CAAG;AAMvE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,67 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Gates Schemas and Types
5
+ *
6
+ * WU-2037: Extracted from gates-config.ts
7
+ *
8
+ * Zod schema definitions, TypeScript types, and interfaces for gates configuration.
9
+ * This module contains only shape definitions -- no runtime logic.
10
+ *
11
+ * @module gates-schemas
12
+ */
13
+ import { z } from 'zod';
14
+ // ---------------------------------------------------------------------------
15
+ // Gate command schemas
16
+ // ---------------------------------------------------------------------------
17
+ /**
18
+ * Schema for a gate command object with options
19
+ */
20
+ const GateCommandObjectSchema = z.object({
21
+ /** The shell command to execute */
22
+ command: z.string(),
23
+ /** Whether to continue if this gate fails (default: false) */
24
+ continueOnError: z.boolean().optional(),
25
+ /** Timeout in milliseconds */
26
+ timeout: z.number().int().positive().optional(),
27
+ });
28
+ /**
29
+ * Schema for a gate command - either a string or an object with options
30
+ */
31
+ export const GateCommandConfigSchema = z.union([z.string(), GateCommandObjectSchema]);
32
+ /**
33
+ * Schema for the gates execution configuration section
34
+ */
35
+ export const GatesExecutionConfigSchema = z.object({
36
+ /** Preset to use for default commands (node, python, go, rust, dotnet) */
37
+ preset: z.string().optional(),
38
+ /** Setup command (e.g., install dependencies) */
39
+ setup: GateCommandConfigSchema.optional(),
40
+ /** Format check command */
41
+ format: GateCommandConfigSchema.optional(),
42
+ /** Lint command */
43
+ lint: GateCommandConfigSchema.optional(),
44
+ /** Type check command */
45
+ typecheck: GateCommandConfigSchema.optional(),
46
+ /** Test command */
47
+ test: GateCommandConfigSchema.optional(),
48
+ /** Coverage configuration */
49
+ coverage: z
50
+ .union([
51
+ z.string(),
52
+ z.object({
53
+ command: z.string(),
54
+ threshold: z.number().min(0).max(100).optional(),
55
+ }),
56
+ ])
57
+ .optional(),
58
+ });
59
+ /**
60
+ * Schema for lane health mode validation
61
+ */
62
+ export const LaneHealthModeSchema = z.enum(['warn', 'error', 'off']);
63
+ /**
64
+ * Default lane health mode (advisory by default)
65
+ */
66
+ export const DEFAULT_LANE_HEALTH_MODE = 'warn';
67
+ //# sourceMappingURL=gates-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gates-schemas.js","sourceRoot":"","sources":["../../../src/policy/gates-schemas.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,mCAAmC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,8DAA8D;IAC9D,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACvC,8BAA8B;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;AAOtF;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,0EAA0E;IAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,iDAAiD;IACjD,KAAK,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IACzC,2BAA2B;IAC3B,MAAM,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC1C,mBAAmB;IACnB,IAAI,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IACxC,yBAAyB;IACzB,SAAS,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IAC7C,mBAAmB;IACnB,IAAI,EAAE,uBAAuB,CAAC,QAAQ,EAAE;IACxC,6BAA6B;IAC7B,QAAQ,EAAE,CAAC;SACR,KAAK,CAAC;QACL,CAAC,CAAC,MAAM,EAAE;QACV,CAAC,CAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;YACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;SACjD,CAAC;KACH,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAiCH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAmB,MAAM,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Software Delivery Pack — Policy Barrel
3
+ *
4
+ * WU-2674 (INIT-058 L3): Cohesion-closed policy bundle moved from
5
+ * @lumenflow/core/src/. These modules share tight internal coupling
6
+ * (CoverageMode crosses them) and evolve together.
7
+ *
8
+ * @module packs/software-delivery/policy
9
+ */
10
+ export * from './gates-schemas.js';
11
+ export * from './resolve-policy.js';
12
+ export * from './coverage-gate.js';
13
+ export * from './gates-config.js';
14
+ export * from './gates-presets.js';
15
+ export * from './gates-config-internal.js';
16
+ export * from './gates-agent-mode.js';
17
+ export * from './gates-coverage.js';
18
+ export * from './package-manager-resolver.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/policy/index.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC"}
@@ -0,0 +1,21 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Software Delivery Pack — Policy Barrel
5
+ *
6
+ * WU-2674 (INIT-058 L3): Cohesion-closed policy bundle moved from
7
+ * @lumenflow/core/src/. These modules share tight internal coupling
8
+ * (CoverageMode crosses them) and evolve together.
9
+ *
10
+ * @module packs/software-delivery/policy
11
+ */
12
+ export * from './gates-schemas.js';
13
+ export * from './resolve-policy.js';
14
+ export * from './coverage-gate.js';
15
+ export * from './gates-config.js';
16
+ export * from './gates-presets.js';
17
+ export * from './gates-config-internal.js';
18
+ export * from './gates-agent-mode.js';
19
+ export * from './gates-coverage.js';
20
+ export * from './package-manager-resolver.js';
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/policy/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,yCAAyC;AAEzC;;;;;;;;GAQG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC"}
@@ -0,0 +1,79 @@
1
+ import type { GatesCommands } from './gates-schemas.js';
2
+ declare const SUPPORTED_PACKAGE_MANAGERS: readonly ["pnpm", "npm", "yarn", "bun"];
3
+ declare const SUPPORTED_TEST_RUNNERS: readonly ["vitest", "jest", "mocha"];
4
+ /**
5
+ * WU-1356: Supported package managers type
6
+ */
7
+ type PackageManager = (typeof SUPPORTED_PACKAGE_MANAGERS)[number];
8
+ /**
9
+ * WU-1356: Supported test runners type
10
+ */
11
+ type TestRunner = (typeof SUPPORTED_TEST_RUNNERS)[number];
12
+ export type ScopedUnitTestExecutionPlan = {
13
+ mode: 'direct';
14
+ runner: TestRunner;
15
+ args: string[];
16
+ } | {
17
+ mode: 'default-flow';
18
+ preset: string;
19
+ };
20
+ export declare function resolveGatePreset(projectRoot: string): string | undefined;
21
+ export declare function resolveScopedUnitTestExecutionPlan(options: {
22
+ projectRoot: string;
23
+ scopedUnitTests: string[];
24
+ }): ScopedUnitTestExecutionPlan | null;
25
+ export declare function formatScopedUnitTestFallbackMessage(plan: Extract<ScopedUnitTestExecutionPlan, {
26
+ mode: 'default-flow';
27
+ }>): string;
28
+ /**
29
+ * WU-1356: Resolve package manager from configuration
30
+ *
31
+ * Reads the package_manager field from workspace.yaml software_delivery.
32
+ * Returns 'pnpm' as default if not configured.
33
+ *
34
+ * @param projectRoot - Project root directory
35
+ * @returns Resolved package manager ('pnpm', 'npm', 'yarn', or 'bun')
36
+ */
37
+ export declare function resolvePackageManager(projectRoot: string): PackageManager;
38
+ /**
39
+ * WU-1356: Resolve test runner from configuration
40
+ *
41
+ * Reads the test_runner field from workspace.yaml software_delivery.
42
+ * Returns 'vitest' as default if not configured.
43
+ *
44
+ * @param projectRoot - Project root directory
45
+ * @returns Resolved test runner ('vitest', 'jest', or 'mocha')
46
+ */
47
+ export declare function resolveTestRunner(projectRoot: string): TestRunner;
48
+ /**
49
+ * WU-1356: Resolve build command from configuration
50
+ *
51
+ * Reads the build_command field from workspace.yaml software_delivery.
52
+ * If not configured, uses default based on package_manager.
53
+ *
54
+ * @param projectRoot - Project root directory
55
+ * @returns Resolved build command
56
+ */
57
+ export declare function resolveBuildCommand(projectRoot: string): string;
58
+ /**
59
+ * WU-1356: Resolve gates commands from configuration
60
+ *
61
+ * Reads gates.commands from workspace.yaml software_delivery.
62
+ * Merges with defaults based on package_manager if not fully specified.
63
+ *
64
+ * @param projectRoot - Project root directory
65
+ * @returns Resolved gates commands configuration
66
+ */
67
+ export declare function resolveGatesCommands(projectRoot: string): GatesCommands;
68
+ /**
69
+ * WU-1356: Get ignore patterns for test runner
70
+ *
71
+ * Returns patterns to ignore when detecting changed tests,
72
+ * based on the test runner configuration.
73
+ *
74
+ * @param testRunner - Test runner type (vitest, jest, mocha)
75
+ * @returns Array of ignore patterns
76
+ */
77
+ export declare function getIgnorePatterns(testRunner: TestRunner): string[];
78
+ export {};
79
+ //# sourceMappingURL=package-manager-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager-resolver.d.ts","sourceRoot":"","sources":["../../../src/policy/package-manager-resolver.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAcxD,QAAA,MAAM,0BAA0B,yCAA0C,CAAC;AAC3E,QAAA,MAAM,sBAAsB,sCAAuC,CAAC;AAIpE;;GAEG;AACH,KAAK,cAAc,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE;;GAEG;AACH,KAAK,UAAU,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,MAAM,2BAA2B,GACnC;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,GACD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAoFN,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWzE;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,GAAG,2BAA2B,GAAG,IAAI,CAoBrC;AAED,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,OAAO,CAAC,2BAA2B,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,GACnE,MAAM,CAKR;AAMD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAazE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAajE;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAe/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CA+BvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAKlE"}
@@ -0,0 +1,245 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * Package Manager and Test Runner Resolution
5
+ *
6
+ * WU-2037: Extracted from gates-config.ts
7
+ *
8
+ * Resolves package manager, test runner, build commands, gates commands,
9
+ * and ignore patterns from workspace.yaml software_delivery configuration.
10
+ *
11
+ * @module package-manager-resolver
12
+ */
13
+ import { asRecord, isString } from '../constants/object-guards.js';
14
+ import { GATES_RUNTIME_DEFAULTS, SOFTWARE_DELIVERY_FIELDS, GATES_FIELDS, GATES_COMMAND_FIELDS, loadSoftwareDeliveryConfig, getGatesSection, } from './gates-config-internal.js';
15
+ // ---------------------------------------------------------------------------
16
+ // Supported values
17
+ // ---------------------------------------------------------------------------
18
+ const SUPPORTED_PACKAGE_MANAGERS = ['pnpm', 'npm', 'yarn', 'bun'];
19
+ const SUPPORTED_TEST_RUNNERS = ['vitest', 'jest', 'mocha'];
20
+ const GATE_PRESET_FIELD = 'preset';
21
+ const NODE_GATE_PRESET = 'node';
22
+ // ---------------------------------------------------------------------------
23
+ // Default command tables
24
+ // ---------------------------------------------------------------------------
25
+ /**
26
+ * WU-1356: Default gates commands by package manager
27
+ *
28
+ * Provides sensible defaults for different package manager and test runner combinations.
29
+ */
30
+ const DEFAULT_GATES_COMMANDS = {
31
+ pnpm: {
32
+ test_full: 'pnpm turbo run test',
33
+ test_docs_only: '',
34
+ test_incremental: 'pnpm vitest run --changed origin/main',
35
+ lint: 'pnpm lint',
36
+ typecheck: 'pnpm typecheck',
37
+ format: 'pnpm format:check',
38
+ migration_verify: '',
39
+ },
40
+ npm: {
41
+ test_full: 'npm test',
42
+ test_docs_only: '',
43
+ test_incremental: 'npm test -- --onlyChanged',
44
+ lint: 'npm run lint',
45
+ typecheck: 'npm run typecheck',
46
+ format: 'npm run format:check',
47
+ migration_verify: '',
48
+ },
49
+ yarn: {
50
+ test_full: 'yarn test',
51
+ test_docs_only: '',
52
+ test_incremental: 'yarn test --onlyChanged',
53
+ lint: 'yarn lint',
54
+ typecheck: 'yarn typecheck',
55
+ format: 'yarn format:check',
56
+ migration_verify: '',
57
+ },
58
+ bun: {
59
+ test_full: 'bun test',
60
+ test_docs_only: '',
61
+ test_incremental: 'bun test --changed',
62
+ lint: 'bun run lint',
63
+ typecheck: 'bun run typecheck',
64
+ format: 'bun run format:check',
65
+ migration_verify: '',
66
+ },
67
+ };
68
+ /**
69
+ * WU-1356: Default build commands by package manager
70
+ */
71
+ const DEFAULT_BUILD_COMMANDS = {
72
+ pnpm: 'pnpm --filter @lumenflow/cli build',
73
+ npm: 'npm run build --workspace @lumenflow/cli',
74
+ yarn: 'yarn workspace @lumenflow/cli build',
75
+ bun: 'bun run --filter @lumenflow/cli build',
76
+ };
77
+ /**
78
+ * WU-1356: Ignore patterns by test runner
79
+ *
80
+ * Different test runners use different cache directories that should be ignored.
81
+ */
82
+ const IGNORE_PATTERNS_BY_RUNNER = {
83
+ vitest: ['.turbo'],
84
+ jest: ['coverage', '.jest-cache'],
85
+ mocha: ['coverage', '.nyc_output'],
86
+ };
87
+ const SCOPED_UNIT_TEST_ARGS_BY_RUNNER = {
88
+ vitest: (paths) => ['vitest', 'run', ...paths, '--passWithNoTests', '--maxWorkers=1'],
89
+ jest: (paths) => ['jest', ...paths, '--passWithNoTests'],
90
+ mocha: (paths) => ['mocha', ...paths],
91
+ };
92
+ function normalizeScopedUnitTestPaths(scopedUnitTests) {
93
+ return scopedUnitTests
94
+ .filter((entry) => typeof entry === 'string')
95
+ .map((entry) => entry.trim())
96
+ .filter(Boolean);
97
+ }
98
+ export function resolveGatePreset(projectRoot) {
99
+ const gates = getGatesSection(projectRoot);
100
+ const execution = asRecord(gates?.[GATES_FIELDS.EXECUTION]);
101
+ const preset = execution?.[GATE_PRESET_FIELD];
102
+ if (!isString(preset)) {
103
+ return undefined;
104
+ }
105
+ const normalized = preset.trim();
106
+ return normalized.length > 0 ? normalized : undefined;
107
+ }
108
+ export function resolveScopedUnitTestExecutionPlan(options) {
109
+ const normalizedPaths = normalizeScopedUnitTestPaths(options.scopedUnitTests);
110
+ if (normalizedPaths.length === 0) {
111
+ return null;
112
+ }
113
+ const preset = resolveGatePreset(options.projectRoot);
114
+ if (preset && preset !== NODE_GATE_PRESET) {
115
+ return {
116
+ mode: 'default-flow',
117
+ preset,
118
+ };
119
+ }
120
+ const runner = resolveTestRunner(options.projectRoot);
121
+ return {
122
+ mode: 'direct',
123
+ runner,
124
+ args: SCOPED_UNIT_TEST_ARGS_BY_RUNNER[runner](normalizedPaths),
125
+ };
126
+ }
127
+ export function formatScopedUnitTestFallbackMessage(plan) {
128
+ return (`gates.execution.preset "${plan.preset}" does not support path-scoped tests.unit execution; ` +
129
+ 'falling back to the configured default test flow.');
130
+ }
131
+ // ---------------------------------------------------------------------------
132
+ // Public API
133
+ // ---------------------------------------------------------------------------
134
+ /**
135
+ * WU-1356: Resolve package manager from configuration
136
+ *
137
+ * Reads the package_manager field from workspace.yaml software_delivery.
138
+ * Returns 'pnpm' as default if not configured.
139
+ *
140
+ * @param projectRoot - Project root directory
141
+ * @returns Resolved package manager ('pnpm', 'npm', 'yarn', or 'bun')
142
+ */
143
+ export function resolvePackageManager(projectRoot) {
144
+ const softwareDelivery = loadSoftwareDeliveryConfig(projectRoot);
145
+ if (!softwareDelivery) {
146
+ return GATES_RUNTIME_DEFAULTS.DEFAULT_PACKAGE_MANAGER;
147
+ }
148
+ const pm = softwareDelivery[SOFTWARE_DELIVERY_FIELDS.PACKAGE_MANAGER] ??
149
+ softwareDelivery[SOFTWARE_DELIVERY_FIELDS.PACKAGE_MANAGER_CAMEL];
150
+ if (isString(pm) && SUPPORTED_PACKAGE_MANAGERS.includes(pm)) {
151
+ return pm;
152
+ }
153
+ return GATES_RUNTIME_DEFAULTS.DEFAULT_PACKAGE_MANAGER;
154
+ }
155
+ /**
156
+ * WU-1356: Resolve test runner from configuration
157
+ *
158
+ * Reads the test_runner field from workspace.yaml software_delivery.
159
+ * Returns 'vitest' as default if not configured.
160
+ *
161
+ * @param projectRoot - Project root directory
162
+ * @returns Resolved test runner ('vitest', 'jest', or 'mocha')
163
+ */
164
+ export function resolveTestRunner(projectRoot) {
165
+ const softwareDelivery = loadSoftwareDeliveryConfig(projectRoot);
166
+ if (!softwareDelivery) {
167
+ return GATES_RUNTIME_DEFAULTS.DEFAULT_TEST_RUNNER;
168
+ }
169
+ const runner = softwareDelivery[SOFTWARE_DELIVERY_FIELDS.TEST_RUNNER] ??
170
+ softwareDelivery[SOFTWARE_DELIVERY_FIELDS.TEST_RUNNER_CAMEL];
171
+ if (isString(runner) && SUPPORTED_TEST_RUNNERS.includes(runner)) {
172
+ return runner;
173
+ }
174
+ return GATES_RUNTIME_DEFAULTS.DEFAULT_TEST_RUNNER;
175
+ }
176
+ /**
177
+ * WU-1356: Resolve build command from configuration
178
+ *
179
+ * Reads the build_command field from workspace.yaml software_delivery.
180
+ * If not configured, uses default based on package_manager.
181
+ *
182
+ * @param projectRoot - Project root directory
183
+ * @returns Resolved build command
184
+ */
185
+ export function resolveBuildCommand(projectRoot) {
186
+ const defaultPm = resolvePackageManager(projectRoot);
187
+ const softwareDelivery = loadSoftwareDeliveryConfig(projectRoot);
188
+ if (!softwareDelivery) {
189
+ return DEFAULT_BUILD_COMMANDS[defaultPm];
190
+ }
191
+ const configuredBuildCommand = softwareDelivery[SOFTWARE_DELIVERY_FIELDS.BUILD_COMMAND] ??
192
+ softwareDelivery[SOFTWARE_DELIVERY_FIELDS.BUILD_COMMAND_CAMEL];
193
+ if (isString(configuredBuildCommand) && configuredBuildCommand.length > 0) {
194
+ return configuredBuildCommand;
195
+ }
196
+ return DEFAULT_BUILD_COMMANDS[defaultPm];
197
+ }
198
+ /**
199
+ * WU-1356: Resolve gates commands from configuration
200
+ *
201
+ * Reads gates.commands from workspace.yaml software_delivery.
202
+ * Merges with defaults based on package_manager if not fully specified.
203
+ *
204
+ * @param projectRoot - Project root directory
205
+ * @returns Resolved gates commands configuration
206
+ */
207
+ export function resolveGatesCommands(projectRoot) {
208
+ const pm = resolvePackageManager(projectRoot);
209
+ const defaults = DEFAULT_GATES_COMMANDS[pm];
210
+ const gates = getGatesSection(projectRoot);
211
+ if (!gates) {
212
+ return defaults;
213
+ }
214
+ const commands = asRecord(gates[GATES_FIELDS.COMMANDS]);
215
+ if (!commands) {
216
+ return defaults;
217
+ }
218
+ // Merge user config with defaults (user config wins)
219
+ return {
220
+ test_full: commands[GATES_COMMAND_FIELDS.TEST_FULL] ?? defaults.test_full,
221
+ test_docs_only: commands[GATES_COMMAND_FIELDS.TEST_DOCS_ONLY] ??
222
+ defaults.test_docs_only,
223
+ test_incremental: commands[GATES_COMMAND_FIELDS.TEST_INCREMENTAL] ??
224
+ defaults.test_incremental,
225
+ lint: commands[GATES_COMMAND_FIELDS.LINT] ?? defaults.lint,
226
+ typecheck: commands[GATES_COMMAND_FIELDS.TYPECHECK] ?? defaults.typecheck,
227
+ format: commands[GATES_COMMAND_FIELDS.FORMAT] ?? defaults.format,
228
+ migration_verify: commands[GATES_COMMAND_FIELDS.MIGRATION_VERIFY] ??
229
+ defaults.migration_verify,
230
+ };
231
+ }
232
+ /**
233
+ * WU-1356: Get ignore patterns for test runner
234
+ *
235
+ * Returns patterns to ignore when detecting changed tests,
236
+ * based on the test runner configuration.
237
+ *
238
+ * @param testRunner - Test runner type (vitest, jest, mocha)
239
+ * @returns Array of ignore patterns
240
+ */
241
+ export function getIgnorePatterns(testRunner) {
242
+ return (IGNORE_PATTERNS_BY_RUNNER[testRunner] ??
243
+ IGNORE_PATTERNS_BY_RUNNER[GATES_RUNTIME_DEFAULTS.DEFAULT_TEST_RUNNER]);
244
+ }
245
+ //# sourceMappingURL=package-manager-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager-resolver.js","sourceRoot":"","sources":["../../../src/policy/package-manager-resolver.ts"],"names":[],"mappings":"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"}