@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,335 @@
1
+ // Copyright (c) 2026 Hellmai Ltd
2
+ // SPDX-License-Identifier: AGPL-3.0-only
3
+ /**
4
+ * WU Paths - Centralized path management for Work Units
5
+ *
6
+ * All paths are configurable via workspace.yaml (`software_delivery`) config.
7
+ *
8
+ * @module wu-paths
9
+ */
10
+ import * as path from 'node:path';
11
+ import { findProjectRoot } from '@lumenflow/kernel/primitives/project-root';
12
+ import { getProjectRoot as getProjectRootFromConstants, toKebab, } from '../constants/wu-domain-constants.js';
13
+ import { getDirectories, getStatePaths, } from '../config/workspace-reader.js';
14
+ /**
15
+ * WU-2689 (INIT-058 L4): Pack-local project root resolver.
16
+ *
17
+ * Uses the kernel's `findProjectRoot(cwd)` primitive (which walks up from `cwd`
18
+ * looking for `workspace.yaml` / `package.json`). Falls back to `process.cwd()`
19
+ * if resolution fails — matches the behaviour of the core helper this replaces.
20
+ */
21
+ function getProjectRootFromConfig(options = {}) {
22
+ if (options.projectRoot) {
23
+ return options.projectRoot;
24
+ }
25
+ try {
26
+ return findProjectRoot(process.cwd());
27
+ }
28
+ catch {
29
+ return process.cwd();
30
+ }
31
+ }
32
+ /**
33
+ * WU-2689: Resolve the typed directory + state-path bundle the rest of this
34
+ * module was previously sourcing from `getConfig()`. Threads `projectRoot`
35
+ * through to the pack's workspace-reader so callers can override the root
36
+ * (tests, multi-project tooling).
37
+ */
38
+ /**
39
+ * WU-2689: Directory defaults used when the pack workspace-reader fails to
40
+ * locate a workspace.yaml (e.g. tmpdir-based tests, sandbox environments).
41
+ *
42
+ * Kept in sync with `DIRECTORY_DEFAULTS` in the pack workspace-reader.
43
+ */
44
+ const FALLBACK_DIRECTORIES = {
45
+ appsWeb: '',
46
+ worktrees: 'worktrees/',
47
+ ai: 'ai/',
48
+ claude: '.claude/',
49
+ docs: 'docs/',
50
+ packages: 'packages/',
51
+ tools: 'tools/',
52
+ memoryBank: 'memory-bank/',
53
+ wuDir: 'docs/operations/tasks/wu',
54
+ initiativesDir: 'docs/operations/tasks/initiatives',
55
+ backlogPath: 'docs/operations/tasks/backlog.md',
56
+ statusPath: 'docs/operations/tasks/status.md',
57
+ skillsDir: '.claude/skills',
58
+ agentsDir: '.claude/agents',
59
+ adrDir: 'docs/adr',
60
+ plansDir: 'docs/operations/plans',
61
+ templatesDir: '.lumenflow/templates',
62
+ onboardingDir: 'docs/operations/_frameworks/lumenflow/agent/onboarding',
63
+ completeGuidePath: 'LUMENFLOW.md',
64
+ quickRefPath: 'docs/operations/_frameworks/lumenflow/agent/onboarding/quick-ref-commands.md',
65
+ startingPromptPath: 'docs/operations/_frameworks/lumenflow/agent/onboarding/starting-prompt.md',
66
+ sizingGuidePath: 'docs/operations/_frameworks/lumenflow/wu-sizing-guide.md',
67
+ governancePath: 'docs/operations/_frameworks/lumenflow/governance.md',
68
+ safeGitPath: 'scripts/safe-git',
69
+ };
70
+ const FALLBACK_STATE_PATHS = {
71
+ base: '.lumenflow',
72
+ stateDir: '.lumenflow/state',
73
+ archiveDir: '.lumenflow/archive',
74
+ stampsDir: '.lumenflow/stamps',
75
+ mergeLock: '.lumenflow/merge.lock',
76
+ telemetry: '.lumenflow/telemetry',
77
+ flowLog: '.lumenflow/flow.log',
78
+ sessions: '.lumenflow/sessions',
79
+ incidents: '.lumenflow/incidents',
80
+ commandsLog: '.lumenflow/commands.log',
81
+ eventArchival: {
82
+ archiveAfter: 90 * 24 * 60 * 60 * 1000,
83
+ keepArchives: true,
84
+ },
85
+ };
86
+ function resolveWorkspacePaths(options = {}) {
87
+ const cwd = options.projectRoot ?? getProjectRootFromConfig();
88
+ // WU-2689: tolerate missing workspace.yaml (e.g. tmpdir-based tests) by
89
+ // falling back to built-in defaults when the pack workspace-reader throws
90
+ // (ENOENT on workspace.yaml or findProjectRoot exhaustion). Matches the
91
+ // graceful behaviour of the former `@lumenflow/core` `getConfig({ projectRoot })`
92
+ // path, which returned defaults for non-existent workspace configs.
93
+ let directories;
94
+ let state;
95
+ try {
96
+ directories = getDirectories(cwd);
97
+ }
98
+ catch {
99
+ directories = FALLBACK_DIRECTORIES;
100
+ }
101
+ try {
102
+ state = getStatePaths(cwd);
103
+ }
104
+ catch {
105
+ state = FALLBACK_STATE_PATHS;
106
+ }
107
+ return { directories, state };
108
+ }
109
+ /**
110
+ * Resolve repo root from an absolute file path by traversing up N directory levels.
111
+ *
112
+ * @param absolutePath - Absolute path to a file within the repo
113
+ * @param depth - Number of directory levels to traverse up
114
+ * @returns Absolute path to repo root
115
+ */
116
+ export function resolveRepoRoot(absolutePath, depth) {
117
+ let result = absolutePath;
118
+ for (let i = 0; i < depth; i++) {
119
+ result = path.dirname(result);
120
+ }
121
+ return result;
122
+ }
123
+ /**
124
+ * Compute the directory depth of a relative path (number of path segments).
125
+ *
126
+ * WU-1523: Used to dynamically determine backlog depth from config
127
+ * instead of fixed depth assumptions. This ensures getStateStoreDirFromBacklog
128
+ * works correctly for configured docs structures.
129
+ *
130
+ * @param relativePath - Relative file path (e.g., '<configured backlogPath>')
131
+ * @returns Number of path segments for the configured path
132
+ */
133
+ function computePathDepth(relativePath) {
134
+ // Normalize separators and split on path separator
135
+ const normalized = relativePath.replace(/\\/g, '/');
136
+ return normalized.split('/').filter(Boolean).length;
137
+ }
138
+ /**
139
+ * Get the state store directory path from backlog.md path.
140
+ *
141
+ * WU-1523: Now computes depth dynamically from configured backlog path
142
+ * instead of using fixed depth values. This fixes empty backlog.md
143
+ * and status.md rendering in scaffolded projects with non-default docs structures.
144
+ *
145
+ * @param backlogPath - Absolute path to backlog.md
146
+ * @returns Absolute path to state store directory
147
+ */
148
+ export function getStateStoreDirFromBacklog(backlogPath) {
149
+ const { directories, state } = resolveWorkspacePaths();
150
+ const depth = computePathDepth(directories.backlogPath);
151
+ const repoRoot = resolveRepoRoot(backlogPath, depth);
152
+ return path.join(repoRoot, state.stateDir);
153
+ }
154
+ /**
155
+ * Create WU paths object with configurable base paths
156
+ *
157
+ * @param options - Options for path generation
158
+ * @param options.projectRoot - Override project root
159
+ * @returns WU paths object
160
+ */
161
+ export function createWuPaths(options = {}) {
162
+ const { directories, state } = resolveWorkspacePaths(options);
163
+ return {
164
+ /**
165
+ * Get path to WU YAML file
166
+ * @param id - WU ID (e.g., 'WU-123')
167
+ * @returns Path to WU YAML file
168
+ */
169
+ WU: (id) => path.join(directories.wuDir, `${id}.yaml`),
170
+ /**
171
+ * Get path to WU directory
172
+ * @returns Path to WU directory
173
+ */
174
+ WU_DIR: () => directories.wuDir,
175
+ /**
176
+ * Get path to status.md
177
+ * @returns Path to status.md
178
+ */
179
+ STATUS: () => directories.statusPath,
180
+ /**
181
+ * Get path to backlog.md
182
+ * @returns Path to backlog.md
183
+ */
184
+ BACKLOG: () => directories.backlogPath,
185
+ /**
186
+ * Get path to stamps directory
187
+ * @returns Path to stamps directory
188
+ */
189
+ STAMPS_DIR: () => state.stampsDir,
190
+ /**
191
+ * Get path to WU done stamp file
192
+ * @param id - WU ID (e.g., 'WU-123')
193
+ * @returns Path to stamp file
194
+ */
195
+ STAMP: (id) => path.join(state.stampsDir, `${id}.done`),
196
+ /**
197
+ * Get path to state directory
198
+ * @returns Path to state directory
199
+ */
200
+ STATE_DIR: () => state.stateDir,
201
+ /**
202
+ * Get path to initiatives directory
203
+ * @returns Path to initiatives directory
204
+ */
205
+ INITIATIVES_DIR: () => directories.initiativesDir,
206
+ /**
207
+ * Get path to initiative YAML file
208
+ * @param id - Initiative ID (e.g., 'INIT-001')
209
+ * @returns Path to initiative YAML file
210
+ */
211
+ INITIATIVE: (id) => path.join(directories.initiativesDir, `${id}.yaml`),
212
+ /**
213
+ * Get path to worktrees directory
214
+ * @returns Path to worktrees directory
215
+ */
216
+ WORKTREES_DIR: () => directories.worktrees,
217
+ /**
218
+ * Get path to a specific worktree directory
219
+ * @param lane - Lane name (e.g., 'Framework: Core')
220
+ * @param id - WU ID (e.g., 'WU-123')
221
+ * @returns Path to worktree directory
222
+ */
223
+ WORKTREE: (lane, id) => path.join(directories.worktrees, `${toKebab(lane)}-${id.toLowerCase()}`),
224
+ /**
225
+ * Get path to plans directory
226
+ * @returns Path to plans directory (WU-1301)
227
+ */
228
+ PLANS_DIR: () => directories.plansDir,
229
+ /**
230
+ * Get path to templates directory
231
+ * @returns Path to templates directory (WU-1310)
232
+ */
233
+ TEMPLATES_DIR: () => directories.templatesDir,
234
+ /**
235
+ * Get path to onboarding directory
236
+ * @returns Path to onboarding directory (WU-1310)
237
+ */
238
+ ONBOARDING_DIR: () => directories.onboardingDir,
239
+ /**
240
+ * Get path to LumenFlow complete guide
241
+ * @returns Path to complete guide markdown
242
+ */
243
+ COMPLETE_GUIDE_PATH: () => directories.completeGuidePath,
244
+ /**
245
+ * Get path to onboarding quick reference commands
246
+ * @returns Path to quick reference markdown
247
+ */
248
+ QUICK_REF_PATH: () => directories.quickRefPath,
249
+ /**
250
+ * Get path to onboarding starting prompt
251
+ * @returns Path to starting prompt markdown
252
+ */
253
+ STARTING_PROMPT_PATH: () => directories.startingPromptPath,
254
+ /**
255
+ * Get path to WU sizing guide
256
+ * @returns Path to sizing guide markdown
257
+ */
258
+ SIZING_GUIDE_PATH: () => directories.sizingGuidePath,
259
+ /**
260
+ * Get path to governance document
261
+ * @returns Path to governance markdown
262
+ */
263
+ GOVERNANCE_PATH: () => directories.governancePath,
264
+ };
265
+ }
266
+ /**
267
+ * Default WU paths using default config
268
+ * For backwards compatibility with existing code
269
+ */
270
+ export const WU_PATHS = createWuPaths();
271
+ /**
272
+ * Generate default worktree path from WU document
273
+ *
274
+ * @param doc - WU document with lane and id fields
275
+ * @returns Worktree path or null if inputs are invalid
276
+ */
277
+ export function defaultWorktreeFrom(doc) {
278
+ if (!doc)
279
+ return null;
280
+ const lane = doc.lane;
281
+ const id = doc.id;
282
+ // Validate inputs
283
+ if (!lane || !id)
284
+ return null;
285
+ // Convert to string and trim
286
+ const laneStr = String(lane).trim();
287
+ const idStr = String(id).trim();
288
+ // Check for empty strings after trimming
289
+ if (laneStr === '' || idStr === '')
290
+ return null;
291
+ return createWuPaths().WORKTREE(laneStr, idStr);
292
+ }
293
+ /**
294
+ * Resolve a repo-root-relative path to an absolute path using project root.
295
+ *
296
+ * @param relativePath - Path relative to project root
297
+ * @param moduleUrl - import.meta.url of the calling module (for backwards compat)
298
+ * @returns Absolute path resolved from project root
299
+ */
300
+ export function resolveFromProjectRoot(relativePath, moduleUrl) {
301
+ // Try config-based project root first, fall back to constants-based
302
+ let projectRoot;
303
+ try {
304
+ projectRoot = getProjectRootFromConfig();
305
+ }
306
+ catch {
307
+ projectRoot = moduleUrl ? getProjectRootFromConstants(moduleUrl) : process.cwd();
308
+ }
309
+ return path.join(projectRoot, relativePath);
310
+ }
311
+ /**
312
+ * Get absolute path to WU YAML file
313
+ *
314
+ * @param id - WU ID (e.g., 'WU-123')
315
+ * @param options - Options
316
+ * @returns Absolute path to WU YAML file
317
+ */
318
+ export function getAbsoluteWuPath(id, options = {}) {
319
+ const projectRoot = options.projectRoot || getProjectRootFromConfig();
320
+ const paths = createWuPaths({ projectRoot });
321
+ return path.join(projectRoot, paths.WU(id));
322
+ }
323
+ /**
324
+ * Get absolute path to stamp file
325
+ *
326
+ * @param id - WU ID (e.g., 'WU-123')
327
+ * @param options - Options
328
+ * @returns Absolute path to stamp file
329
+ */
330
+ export function getAbsoluteStampPath(id, options = {}) {
331
+ const projectRoot = options.projectRoot || getProjectRootFromConfig();
332
+ const paths = createWuPaths({ projectRoot });
333
+ return path.join(projectRoot, paths.STAMP(id));
334
+ }
335
+ //# sourceMappingURL=wu-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wu-paths.js","sourceRoot":"","sources":["../../../src/state/wu-paths.ts"],"names":[],"mappings":"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"}