@lumenflow/cli 3.1.1 → 3.1.3

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 (389) hide show
  1. package/README.md +36 -35
  2. package/dist/agent-issues-query.js +13 -8
  3. package/dist/agent-log-issue.js +15 -4
  4. package/dist/agent-session-end.js +15 -4
  5. package/dist/agent-session.js +18 -6
  6. package/dist/backlog-prune.js +1 -1
  7. package/dist/commands/integrate.js +32 -18
  8. package/dist/config-get.js +27 -15
  9. package/dist/config-set.js +104 -37
  10. package/dist/delegation-list.js +1 -1
  11. package/dist/doctor.js +19 -13
  12. package/dist/file-delete.js +1 -1
  13. package/dist/file-edit.js +1 -1
  14. package/dist/file-read.js +1 -1
  15. package/dist/file-write.js +1 -1
  16. package/dist/flow-bottlenecks.js +1 -1
  17. package/dist/flow-report.js +10 -9
  18. package/dist/gates.js +3 -2
  19. package/dist/git-branch.js +1 -1
  20. package/dist/git-diff.js +1 -1
  21. package/dist/git-log.js +1 -1
  22. package/dist/init.js +244 -61
  23. package/dist/initiative-add-wu.js +1 -1
  24. package/dist/initiative-bulk-assign-wus.js +1 -1
  25. package/dist/initiative-create.js +2 -2
  26. package/dist/initiative-edit.js +1 -1
  27. package/dist/initiative-list.js +1 -1
  28. package/dist/initiative-plan.js +1 -3
  29. package/dist/initiative-status.js +47 -6
  30. package/dist/lane-edit.js +19 -10
  31. package/dist/lane-health.js +13 -24
  32. package/dist/lane-lock.js +4 -5
  33. package/dist/lane-setup.js +5 -5
  34. package/dist/lane-status.js +4 -5
  35. package/dist/lane-suggest.js +9 -7
  36. package/dist/lane-validate.js +4 -5
  37. package/dist/lumenflow-upgrade.js +17 -11
  38. package/dist/mem-checkpoint.js +1 -1
  39. package/dist/mem-cleanup.js +6 -23
  40. package/dist/mem-context.js +1 -1
  41. package/dist/mem-create.js +1 -1
  42. package/dist/mem-delete.js +1 -1
  43. package/dist/mem-export.js +1 -1
  44. package/dist/mem-inbox.js +1 -1
  45. package/dist/mem-init.js +1 -1
  46. package/dist/mem-ready.js +1 -1
  47. package/dist/mem-recover.js +1 -1
  48. package/dist/mem-signal.js +1 -1
  49. package/dist/mem-start.js +1 -1
  50. package/dist/mem-summarize.js +8 -7
  51. package/dist/mem-triage.js +7 -5
  52. package/dist/metrics-cli.js +1 -1
  53. package/dist/metrics-snapshot.js +1 -1
  54. package/dist/onboard.js +295 -120
  55. package/dist/orchestrate-init-status.js +12 -7
  56. package/dist/orchestrate-initiative.js +23 -12
  57. package/dist/orchestrate-monitor.js +20 -8
  58. package/dist/pack-scaffold.js +1 -1
  59. package/dist/plan-create.js +1 -3
  60. package/dist/plan-edit.js +1 -3
  61. package/dist/plan-link.js +1 -3
  62. package/dist/plan-promote.js +1 -3
  63. package/dist/release.js +1 -3
  64. package/dist/signal-cleanup.js +4 -18
  65. package/dist/state-bootstrap.js +11 -8
  66. package/dist/state-cleanup.js +5 -19
  67. package/dist/state-doctor.js +213 -9
  68. package/dist/task-claim.js +1 -1
  69. package/dist/validate.js +1 -1
  70. package/dist/workspace-init.js +61 -61
  71. package/dist/wu-block.js +1 -1
  72. package/dist/wu-brief.js +1 -1
  73. package/dist/wu-claim.js +1 -1
  74. package/dist/wu-cleanup.js +1 -1
  75. package/dist/wu-create.js +3 -3
  76. package/dist/wu-delegate.js +1 -1
  77. package/dist/wu-deps.js +1 -1
  78. package/dist/wu-done.js +66 -34
  79. package/dist/wu-edit.js +1 -1
  80. package/dist/wu-infer-lane.js +1 -1
  81. package/dist/wu-preflight.js +1 -1
  82. package/dist/wu-prep.js +1 -1
  83. package/dist/wu-proto.js +1 -1
  84. package/dist/wu-prune.js +1 -1
  85. package/dist/wu-recover.js +1 -1
  86. package/dist/wu-release.js +1 -1
  87. package/dist/wu-repair.js +1 -1
  88. package/dist/wu-sandbox.js +40 -27
  89. package/dist/wu-status.js +1 -1
  90. package/dist/wu-unblock.js +1 -1
  91. package/dist/wu-unlock-lane.js +1 -1
  92. package/dist/wu-validate.js +1 -1
  93. package/package.json +12 -8
  94. package/packs/software-delivery/constants.ts +10 -0
  95. package/packs/software-delivery/extensions.ts +140 -0
  96. package/packs/software-delivery/gate-policies.ts +134 -0
  97. package/packs/software-delivery/index.ts +8 -0
  98. package/packs/software-delivery/manifest-schema.ts +236 -0
  99. package/packs/software-delivery/manifest.ts +417 -0
  100. package/packs/software-delivery/manifest.yaml +711 -0
  101. package/packs/software-delivery/pack-registration.ts +113 -0
  102. package/packs/software-delivery/tool-impl/agent-tools.ts +263 -0
  103. package/packs/software-delivery/tool-impl/delegation-tools.ts +66 -0
  104. package/packs/software-delivery/tool-impl/flow-metrics-tools.ts +219 -0
  105. package/packs/software-delivery/tool-impl/git-runner.ts +113 -0
  106. package/packs/software-delivery/tool-impl/git-tools.ts +316 -0
  107. package/packs/software-delivery/tool-impl/index.ts +15 -0
  108. package/packs/software-delivery/tool-impl/initiative-orchestration-tools.ts +720 -0
  109. package/packs/software-delivery/tool-impl/lane-lock.ts +246 -0
  110. package/packs/software-delivery/tool-impl/memory-tools.ts +415 -0
  111. package/packs/software-delivery/tool-impl/pending-runtime-tools.ts +21 -0
  112. package/packs/software-delivery/tool-impl/runtime-cli-adapter.ts +328 -0
  113. package/packs/software-delivery/tool-impl/runtime-native-tools.ts +687 -0
  114. package/packs/software-delivery/tool-impl/worker-loader.ts +52 -0
  115. package/packs/software-delivery/tool-impl/worktree-tools.ts +46 -0
  116. package/packs/software-delivery/tool-impl/wu-lifecycle-tools.ts +759 -0
  117. package/packs/software-delivery/tools/delegation-tools.ts +23 -0
  118. package/packs/software-delivery/tools/git-tools.ts +55 -0
  119. package/packs/software-delivery/tools/index.ts +8 -0
  120. package/packs/software-delivery/tools/lane-lock-tool.ts +37 -0
  121. package/packs/software-delivery/tools/types.ts +71 -0
  122. package/packs/software-delivery/tools/worktree-tools.ts +49 -0
  123. package/templates/core/LUMENFLOW.md.template +3 -3
  124. package/templates/core/ai/onboarding/agent-invocation-guide.md.template +1 -1
  125. package/templates/core/ai/onboarding/lumenflow-force-usage.md.template +1 -1
  126. package/templates/core/ai/onboarding/quick-ref-commands.md.template +5 -5
  127. package/templates/core/ai/onboarding/starting-prompt.md.template +3 -3
  128. package/templates/core/ai/onboarding/vendor-support.md.template +1 -1
  129. package/templates/core/ai/onboarding/wu-create-checklist.md.template +1 -1
  130. package/dist/agent-issues-query.js.map +0 -1
  131. package/dist/agent-log-issue.js.map +0 -1
  132. package/dist/agent-session-end.js.map +0 -1
  133. package/dist/agent-session.js.map +0 -1
  134. package/dist/backlog-prune.js.map +0 -1
  135. package/dist/cli-entry-point.js +0 -149
  136. package/dist/cli-entry-point.js.map +0 -1
  137. package/dist/commands/integrate.js.map +0 -1
  138. package/dist/commands.js.map +0 -1
  139. package/dist/config-get.js.map +0 -1
  140. package/dist/config-set.js.map +0 -1
  141. package/dist/delegation-list.js.map +0 -1
  142. package/dist/deps-add.js +0 -259
  143. package/dist/deps-add.js.map +0 -1
  144. package/dist/deps-remove.js +0 -105
  145. package/dist/deps-remove.js.map +0 -1
  146. package/dist/docs-sync.js.map +0 -1
  147. package/dist/doctor.js.map +0 -1
  148. package/dist/file-delete.js.map +0 -1
  149. package/dist/file-edit.js.map +0 -1
  150. package/dist/file-read.js.map +0 -1
  151. package/dist/file-write.js.map +0 -1
  152. package/dist/flow-bottlenecks.js.map +0 -1
  153. package/dist/flow-report.js.map +0 -1
  154. package/dist/formatters.js +0 -151
  155. package/dist/formatters.js.map +0 -1
  156. package/dist/gate-defaults.js +0 -131
  157. package/dist/gate-defaults.js.map +0 -1
  158. package/dist/gate-registry.js +0 -73
  159. package/dist/gate-registry.js.map +0 -1
  160. package/dist/gates-graceful-degradation.js +0 -153
  161. package/dist/gates-graceful-degradation.js.map +0 -1
  162. package/dist/gates-plan-resolvers.js +0 -152
  163. package/dist/gates-plan-resolvers.js.map +0 -1
  164. package/dist/gates-runners.js +0 -509
  165. package/dist/gates-runners.js.map +0 -1
  166. package/dist/gates-types.js +0 -4
  167. package/dist/gates-types.js.map +0 -1
  168. package/dist/gates-utils.js +0 -323
  169. package/dist/gates-utils.js.map +0 -1
  170. package/dist/gates.js.map +0 -1
  171. package/dist/git-branch.js.map +0 -1
  172. package/dist/git-diff.js.map +0 -1
  173. package/dist/git-log.js.map +0 -1
  174. package/dist/git-status.js.map +0 -1
  175. package/dist/guard-locked.js +0 -172
  176. package/dist/guard-locked.js.map +0 -1
  177. package/dist/guard-main-branch.js +0 -217
  178. package/dist/guard-main-branch.js.map +0 -1
  179. package/dist/guard-worktree-commit.js +0 -163
  180. package/dist/guard-worktree-commit.js.map +0 -1
  181. package/dist/hooks/auto-checkpoint-utils.js +0 -54
  182. package/dist/hooks/auto-checkpoint-utils.js.map +0 -1
  183. package/dist/hooks/enforcement-checks.js +0 -399
  184. package/dist/hooks/enforcement-checks.js.map +0 -1
  185. package/dist/hooks/enforcement-generator.js +0 -139
  186. package/dist/hooks/enforcement-generator.js.map +0 -1
  187. package/dist/hooks/enforcement-sync.js +0 -385
  188. package/dist/hooks/enforcement-sync.js.map +0 -1
  189. package/dist/hooks/generators/auto-checkpoint.js +0 -125
  190. package/dist/hooks/generators/auto-checkpoint.js.map +0 -1
  191. package/dist/hooks/generators/enforce-worktree.js +0 -190
  192. package/dist/hooks/generators/enforce-worktree.js.map +0 -1
  193. package/dist/hooks/generators/index.js +0 -18
  194. package/dist/hooks/generators/index.js.map +0 -1
  195. package/dist/hooks/generators/pre-compact-checkpoint.js +0 -136
  196. package/dist/hooks/generators/pre-compact-checkpoint.js.map +0 -1
  197. package/dist/hooks/generators/require-wu.js +0 -117
  198. package/dist/hooks/generators/require-wu.js.map +0 -1
  199. package/dist/hooks/generators/session-start-recovery.js +0 -103
  200. package/dist/hooks/generators/session-start-recovery.js.map +0 -1
  201. package/dist/hooks/generators/signal-utils.js +0 -54
  202. package/dist/hooks/generators/signal-utils.js.map +0 -1
  203. package/dist/hooks/generators/warn-incomplete.js +0 -67
  204. package/dist/hooks/generators/warn-incomplete.js.map +0 -1
  205. package/dist/hooks/index.js +0 -10
  206. package/dist/hooks/index.js.map +0 -1
  207. package/dist/index.js.map +0 -1
  208. package/dist/init-detection.js +0 -230
  209. package/dist/init-detection.js.map +0 -1
  210. package/dist/init-lane-validation.js +0 -143
  211. package/dist/init-lane-validation.js.map +0 -1
  212. package/dist/init-scaffolding.js +0 -158
  213. package/dist/init-scaffolding.js.map +0 -1
  214. package/dist/init-templates.js +0 -1964
  215. package/dist/init-templates.js.map +0 -1
  216. package/dist/init.js.map +0 -1
  217. package/dist/initiative-add-wu.js.map +0 -1
  218. package/dist/initiative-bulk-assign-wus.js.map +0 -1
  219. package/dist/initiative-create.js.map +0 -1
  220. package/dist/initiative-edit.js.map +0 -1
  221. package/dist/initiative-list.js.map +0 -1
  222. package/dist/initiative-plan.js.map +0 -1
  223. package/dist/initiative-remove-wu.js.map +0 -1
  224. package/dist/initiative-status.js.map +0 -1
  225. package/dist/lane-edit.js.map +0 -1
  226. package/dist/lane-health.js.map +0 -1
  227. package/dist/lane-lifecycle-process.js +0 -366
  228. package/dist/lane-lifecycle-process.js.map +0 -1
  229. package/dist/lane-lock.js.map +0 -1
  230. package/dist/lane-setup.js.map +0 -1
  231. package/dist/lane-status.js.map +0 -1
  232. package/dist/lane-suggest.js.map +0 -1
  233. package/dist/lane-validate.js.map +0 -1
  234. package/dist/lifecycle-regression-harness.js +0 -181
  235. package/dist/lifecycle-regression-harness.js.map +0 -1
  236. package/dist/lumenflow-upgrade.js.map +0 -1
  237. package/dist/mem-checkpoint.js.map +0 -1
  238. package/dist/mem-cleanup.js.map +0 -1
  239. package/dist/mem-context.js.map +0 -1
  240. package/dist/mem-create.js.map +0 -1
  241. package/dist/mem-delete.js.map +0 -1
  242. package/dist/mem-export.js.map +0 -1
  243. package/dist/mem-inbox.js.map +0 -1
  244. package/dist/mem-index.js +0 -214
  245. package/dist/mem-index.js.map +0 -1
  246. package/dist/mem-init.js.map +0 -1
  247. package/dist/mem-profile.js +0 -210
  248. package/dist/mem-profile.js.map +0 -1
  249. package/dist/mem-promote.js +0 -257
  250. package/dist/mem-promote.js.map +0 -1
  251. package/dist/mem-ready.js.map +0 -1
  252. package/dist/mem-recover.js.map +0 -1
  253. package/dist/mem-signal.js.map +0 -1
  254. package/dist/mem-start.js.map +0 -1
  255. package/dist/mem-summarize.js.map +0 -1
  256. package/dist/mem-triage.js.map +0 -1
  257. package/dist/merge-block.js +0 -225
  258. package/dist/merge-block.js.map +0 -1
  259. package/dist/metrics-cli.js.map +0 -1
  260. package/dist/metrics-snapshot.js.map +0 -1
  261. package/dist/onboard.js.map +0 -1
  262. package/dist/onboarding-smoke-test.js +0 -418
  263. package/dist/onboarding-smoke-test.js.map +0 -1
  264. package/dist/orchestrate-init-status.js.map +0 -1
  265. package/dist/orchestrate-initiative.js.map +0 -1
  266. package/dist/orchestrate-monitor.js.map +0 -1
  267. package/dist/pack-author.js.map +0 -1
  268. package/dist/pack-hash.js.map +0 -1
  269. package/dist/pack-install.js.map +0 -1
  270. package/dist/pack-publish.js.map +0 -1
  271. package/dist/pack-scaffold.js.map +0 -1
  272. package/dist/pack-search.js.map +0 -1
  273. package/dist/pack-validate.js.map +0 -1
  274. package/dist/plan-create.js.map +0 -1
  275. package/dist/plan-edit.js.map +0 -1
  276. package/dist/plan-link.js.map +0 -1
  277. package/dist/plan-promote.js.map +0 -1
  278. package/dist/public-manifest.js +0 -920
  279. package/dist/public-manifest.js.map +0 -1
  280. package/dist/release.js.map +0 -1
  281. package/dist/rotate-progress.js +0 -253
  282. package/dist/rotate-progress.js.map +0 -1
  283. package/dist/session-coordinator.js +0 -303
  284. package/dist/session-coordinator.js.map +0 -1
  285. package/dist/shared-validators.js +0 -81
  286. package/dist/shared-validators.js.map +0 -1
  287. package/dist/signal-cleanup.js.map +0 -1
  288. package/dist/state-bootstrap.js.map +0 -1
  289. package/dist/state-cleanup.js.map +0 -1
  290. package/dist/state-doctor-fix.js +0 -226
  291. package/dist/state-doctor-fix.js.map +0 -1
  292. package/dist/state-doctor-stamps.js +0 -23
  293. package/dist/state-doctor-stamps.js.map +0 -1
  294. package/dist/state-doctor.js.map +0 -1
  295. package/dist/strict-progress.js +0 -255
  296. package/dist/strict-progress.js.map +0 -1
  297. package/dist/sync-templates.js.map +0 -1
  298. package/dist/task-claim.js.map +0 -1
  299. package/dist/trace-gen.js +0 -401
  300. package/dist/trace-gen.js.map +0 -1
  301. package/dist/validate-agent-skills.js +0 -223
  302. package/dist/validate-agent-skills.js.map +0 -1
  303. package/dist/validate-agent-sync.js +0 -151
  304. package/dist/validate-agent-sync.js.map +0 -1
  305. package/dist/validate-backlog-sync.js +0 -77
  306. package/dist/validate-backlog-sync.js.map +0 -1
  307. package/dist/validate-skills-spec.js +0 -211
  308. package/dist/validate-skills-spec.js.map +0 -1
  309. package/dist/validate.js.map +0 -1
  310. package/dist/validator-defaults.js +0 -107
  311. package/dist/validator-defaults.js.map +0 -1
  312. package/dist/validator-registry.js +0 -71
  313. package/dist/validator-registry.js.map +0 -1
  314. package/dist/workspace-init.js.map +0 -1
  315. package/dist/wu-block.js.map +0 -1
  316. package/dist/wu-brief.js.map +0 -1
  317. package/dist/wu-claim-branch.js +0 -123
  318. package/dist/wu-claim-branch.js.map +0 -1
  319. package/dist/wu-claim-cloud.js +0 -79
  320. package/dist/wu-claim-cloud.js.map +0 -1
  321. package/dist/wu-claim-mode.js +0 -82
  322. package/dist/wu-claim-mode.js.map +0 -1
  323. package/dist/wu-claim-output.js +0 -85
  324. package/dist/wu-claim-output.js.map +0 -1
  325. package/dist/wu-claim-repair-guidance.js +0 -12
  326. package/dist/wu-claim-repair-guidance.js.map +0 -1
  327. package/dist/wu-claim-resume-handler.js +0 -87
  328. package/dist/wu-claim-resume-handler.js.map +0 -1
  329. package/dist/wu-claim-state.js +0 -581
  330. package/dist/wu-claim-state.js.map +0 -1
  331. package/dist/wu-claim-validation.js +0 -457
  332. package/dist/wu-claim-validation.js.map +0 -1
  333. package/dist/wu-claim-worktree.js +0 -223
  334. package/dist/wu-claim-worktree.js.map +0 -1
  335. package/dist/wu-claim.js.map +0 -1
  336. package/dist/wu-cleanup-cloud.js +0 -78
  337. package/dist/wu-cleanup-cloud.js.map +0 -1
  338. package/dist/wu-cleanup.js.map +0 -1
  339. package/dist/wu-code-path-coverage.js +0 -83
  340. package/dist/wu-code-path-coverage.js.map +0 -1
  341. package/dist/wu-create-cloud.js +0 -30
  342. package/dist/wu-create-cloud.js.map +0 -1
  343. package/dist/wu-create-content.js +0 -264
  344. package/dist/wu-create-content.js.map +0 -1
  345. package/dist/wu-create-readiness.js +0 -59
  346. package/dist/wu-create-readiness.js.map +0 -1
  347. package/dist/wu-create-validation.js +0 -128
  348. package/dist/wu-create-validation.js.map +0 -1
  349. package/dist/wu-create.js.map +0 -1
  350. package/dist/wu-delegate.js.map +0 -1
  351. package/dist/wu-delete.js.map +0 -1
  352. package/dist/wu-deps.js.map +0 -1
  353. package/dist/wu-done-auto-cleanup.js +0 -203
  354. package/dist/wu-done-auto-cleanup.js.map +0 -1
  355. package/dist/wu-done-check.js +0 -38
  356. package/dist/wu-done-check.js.map +0 -1
  357. package/dist/wu-done-cloud.js +0 -48
  358. package/dist/wu-done-cloud.js.map +0 -1
  359. package/dist/wu-done-decay.js +0 -86
  360. package/dist/wu-done-decay.js.map +0 -1
  361. package/dist/wu-done.js.map +0 -1
  362. package/dist/wu-edit-operations.js +0 -399
  363. package/dist/wu-edit-operations.js.map +0 -1
  364. package/dist/wu-edit-validators.js +0 -282
  365. package/dist/wu-edit-validators.js.map +0 -1
  366. package/dist/wu-edit.js.map +0 -1
  367. package/dist/wu-infer-lane.js.map +0 -1
  368. package/dist/wu-preflight.js.map +0 -1
  369. package/dist/wu-prep.js.map +0 -1
  370. package/dist/wu-proto.js.map +0 -1
  371. package/dist/wu-prune.js.map +0 -1
  372. package/dist/wu-recover.js.map +0 -1
  373. package/dist/wu-release.js.map +0 -1
  374. package/dist/wu-repair.js.map +0 -1
  375. package/dist/wu-sandbox.js.map +0 -1
  376. package/dist/wu-spawn-completion.js +0 -33
  377. package/dist/wu-spawn-completion.js.map +0 -1
  378. package/dist/wu-spawn-prompt-builders.js +0 -1197
  379. package/dist/wu-spawn-prompt-builders.js.map +0 -1
  380. package/dist/wu-spawn-strategy-resolver.js +0 -322
  381. package/dist/wu-spawn-strategy-resolver.js.map +0 -1
  382. package/dist/wu-spawn.js +0 -59
  383. package/dist/wu-spawn.js.map +0 -1
  384. package/dist/wu-state-cloud.js +0 -41
  385. package/dist/wu-state-cloud.js.map +0 -1
  386. package/dist/wu-status.js.map +0 -1
  387. package/dist/wu-unblock.js.map +0 -1
  388. package/dist/wu-unlock-lane.js.map +0 -1
  389. package/dist/wu-validate.js.map +0 -1
@@ -1,457 +0,0 @@
1
- // Copyright (c) 2026 Hellmai Ltd
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /**
4
- * @file wu-claim-validation.ts
5
- * @description Pre-flight validation, schema validation, lane/spec checks for wu:claim.
6
- *
7
- * WU-1649: Extracted from wu-claim.ts to reduce orchestration complexity.
8
- * All functions are mechanical extractions preserving original behavior.
9
- */
10
- import { existsSync, readFileSync } from 'node:fs';
11
- import { access, readFile } from 'node:fs/promises';
12
- import { parseYAML } from '@lumenflow/core/wu-yaml';
13
- import { assertTransition } from '@lumenflow/core/state-machine';
14
- import { checkLaneFree, validateLaneFormat, checkWipJustification, } from '@lumenflow/core/lane-checker';
15
- import { validateLaneCodePaths, logLaneValidationWarnings, } from '@lumenflow/core/code-path-validator';
16
- import { detectConflicts } from '@lumenflow/core/code-paths-overlap';
17
- import { getGitForCwd } from '@lumenflow/core/git-adapter';
18
- import { die, getErrorMessage } from '@lumenflow/core/error-handler';
19
- import { CLAIMED_MODES, LOG_PREFIX, WU_STATUS, STATUS_SECTIONS, STRING_LITERALS, FILE_SYSTEM, resolveWUStatus, } from '@lumenflow/core/wu-constants';
20
- import { emitWUFlowEvent } from '@lumenflow/core/telemetry';
21
- import { checkLaneForOrphanDoneWU, repairWUInconsistency, } from '@lumenflow/core/wu-consistency-checker';
22
- import { validateWU } from '@lumenflow/core/wu-schema';
23
- import { WU_PATHS } from '@lumenflow/core/wu-paths';
24
- import { withMicroWorktree } from '@lumenflow/core/micro-worktree';
25
- import { validateSpecCompleteness } from '@lumenflow/core/wu-done-validators';
26
- import { hasManualTests, isDocsOrProcessType } from '@lumenflow/core/wu-type-helpers';
27
- import { detectFixableIssues, applyFixes, formatIssues } from '@lumenflow/core/wu-yaml-fixer';
28
- import { getConfig } from '@lumenflow/core/config';
29
- import { MICRO_WORKTREE_OPERATIONS, LUMENFLOW_PATHS } from '@lumenflow/core/wu-constants';
30
- const PREFIX = LOG_PREFIX.CLAIM;
31
- export function resolveClaimStatus(status) {
32
- return resolveWUStatus(status, WU_STATUS.READY);
33
- }
34
- /**
35
- * Pre-flight validation: Check WU file exists and is valid BEFORE UnsafeAny git operations
36
- * Prevents zombie worktrees when WU YAML is missing or malformed
37
- */
38
- export function preflightValidateWU(WU_PATH, id) {
39
- // Check file exists
40
- if (!existsSync(WU_PATH)) {
41
- die(`WU file not found: ${WU_PATH}\n\n` +
42
- `Cannot claim a WU that doesn't exist.\n\n` +
43
- `Options:\n` +
44
- ` 1. Create the WU first: pnpm wu:create --id ${id} --lane <lane> --title "..."\n` +
45
- ` 2. Check if the WU ID is correct\n` +
46
- ` 3. Check if the WU file was moved or deleted`);
47
- }
48
- // Parse and validate YAML structure
49
- const text = readFileSync(WU_PATH, { encoding: FILE_SYSTEM.UTF8 });
50
- let doc;
51
- try {
52
- doc = parseYAML(text);
53
- }
54
- catch (e) {
55
- die(`Failed to parse WU YAML ${WU_PATH}\n\n` +
56
- `YAML parsing error: ${getErrorMessage(e)}\n\n` +
57
- `Fix the YAML syntax errors before claiming.`);
58
- }
59
- // Validate ID matches
60
- if (!doc || doc.id !== id) {
61
- die(`WU YAML id mismatch in ${WU_PATH}\n\n` +
62
- `Expected: ${id}\n` +
63
- `Found: ${doc?.id || 'missing'}\n\n` +
64
- `Fix the id field in the WU YAML before claiming.`);
65
- }
66
- // Validate state transition is allowed
67
- const currentStatus = resolveClaimStatus(doc.status);
68
- try {
69
- assertTransition(currentStatus, WU_STATUS.IN_PROGRESS, id);
70
- }
71
- catch (error) {
72
- die(`Cannot claim ${id} - invalid state transition\n\n` +
73
- `Current status: ${currentStatus}\n` +
74
- `Attempted transition: ${currentStatus} → in_progress\n\n` +
75
- `Reason: ${getErrorMessage(error)}`);
76
- }
77
- return doc;
78
- }
79
- /**
80
- * WU-1361: Validate YAML schema at claim time
81
- *
82
- * Validates WU YAML against Zod schema AFTER git pull.
83
- * Detects fixable issues BEFORE schema validation (so --fix can run even if schema fails).
84
- * Returns fixable issues for application in worktree (WU-1361 fix).
85
- *
86
- * @param {string} WU_PATH - Path to WU YAML file
87
- * @param {object} doc - Parsed WU YAML data
88
- * @param {object} args - CLI arguments
89
- * @param {boolean} args.fix - If true, issues will be fixed in worktree
90
- * @returns {Array} Array of fixable issues to apply in worktree
91
- */
92
- export function validateYAMLSchema(WU_PATH, doc, args) {
93
- // WU-1361: Detect fixable issues BEFORE schema validation
94
- // This allows --fix to work even when schema would fail
95
- const fixableIssues = detectFixableIssues(doc);
96
- if (fixableIssues.length > 0) {
97
- if (args.fix) {
98
- // WU-1425: Apply fixes to in-memory doc so validation passes
99
- // Note: This does NOT modify the file on disk - only the in-memory object
100
- // The actual file fix happens when the doc is written to the worktree
101
- applyFixes(doc, fixableIssues);
102
- console.log(`${PREFIX} Detected ${fixableIssues.length} fixable YAML issue(s) (will fix in worktree):`);
103
- console.log(formatIssues(fixableIssues));
104
- }
105
- else {
106
- // Report issues and suggest --fix
107
- console.warn(`${PREFIX} Detected ${fixableIssues.length} fixable YAML issue(s):`);
108
- console.warn(formatIssues(fixableIssues));
109
- console.warn(`${PREFIX} Run with --fix to auto-repair these issues.`);
110
- // Continue - Zod validation will provide the detailed error
111
- }
112
- }
113
- // Now run Zod schema validation
114
- const schemaResult = validateWU(doc);
115
- if (!schemaResult.success) {
116
- const issueList = schemaResult.error.issues
117
- .map((i) => {
118
- const pathText = i.path.map(String).join('.');
119
- return ` - ${pathText}: ${i.message}`;
120
- })
121
- .join(STRING_LITERALS.NEWLINE);
122
- const tip = fixableIssues.length > 0 ? 'Tip: Run with --fix to auto-repair common issues.\n' : '';
123
- die(`WU YAML schema validation failed for ${WU_PATH}:\n\n${issueList}\n\nFix these issues before claiming.\n${tip}`);
124
- }
125
- // WU-1361: Return fixable issues for application in worktree
126
- return args.fix ? fixableIssues : [];
127
- }
128
- /**
129
- * WU-1508: Enforce tests.manual at claim time for non-doc/process WUs.
130
- * This is non-bypassable (independent of --allow-incomplete) to fail early.
131
- */
132
- export function validateManualTestsForClaim(doc, id) {
133
- if (isDocsOrProcessType(doc?.type)) {
134
- return { valid: true };
135
- }
136
- if (hasManualTests(doc?.tests)) {
137
- return { valid: true };
138
- }
139
- return {
140
- valid: false,
141
- error: `${id}: Missing required tests.manual for non-documentation WU.\n` +
142
- `Add at least one manual verification step under tests.manual before claiming.`,
143
- };
144
- }
145
- /**
146
- * Handle orphan WU check and auto-repair (WU-1276)
147
- * WU-1426: Commits repair changes to avoid dirty working tree blocking claim
148
- * WU-1437: Use pushOnly micro-worktree to keep local main pristine
149
- */
150
- export async function handleOrphanCheck(lane, id) {
151
- const orphanCheck = (await checkLaneForOrphanDoneWU(lane, id));
152
- if (orphanCheck.valid)
153
- return;
154
- // Try auto-repair for single orphan
155
- if (orphanCheck.orphans.length === 1) {
156
- const orphanId = orphanCheck.orphans[0];
157
- console.log(`${PREFIX} Auto-repairing orphan: ${orphanId}`);
158
- // WU-1437: Use micro-worktree with pushOnly to keep main pristine
159
- await withMicroWorktree({
160
- operation: MICRO_WORKTREE_OPERATIONS.ORPHAN_REPAIR,
161
- id: orphanId,
162
- logPrefix: PREFIX,
163
- pushOnly: true,
164
- execute: async ({ worktreePath }) => {
165
- // Run repair inside micro-worktree using projectRoot option
166
- const report = orphanCheck.reports?.[0];
167
- if (!report) {
168
- throw new Error(`Lane ${lane} has orphan done WU: ${orphanId} with missing report`);
169
- }
170
- const repairResult = await repairWUInconsistency(report, {
171
- projectRoot: worktreePath,
172
- });
173
- if (repairResult.failed > 0) {
174
- throw new Error(`Lane ${lane} has orphan done WU: ${orphanId}\n` +
175
- `Auto-repair failed. Fix manually with: pnpm wu:repair --id ${orphanId}`);
176
- }
177
- if (repairResult.repaired === 0) {
178
- // Nothing to repair - return empty result
179
- return { commitMessage: null, files: [] };
180
- }
181
- // Return files for commit
182
- // WU-1740: Include wu-events.jsonl to persist state store events
183
- return {
184
- commitMessage: `chore(repair): auto-repair orphan ${orphanId.toLowerCase()}`,
185
- files: [
186
- WU_PATHS.BACKLOG(),
187
- WU_PATHS.STATUS(),
188
- WU_PATHS.STAMP(orphanId),
189
- LUMENFLOW_PATHS.WU_EVENTS,
190
- ],
191
- };
192
- },
193
- });
194
- console.log(`${PREFIX} Auto-repair successful`);
195
- return;
196
- }
197
- die(`Lane ${lane} has ${orphanCheck.orphans.length} orphan done WUs: ${orphanCheck.orphans.join(', ')}\n` +
198
- `Fix with: pnpm wu:repair --id <WU-ID> for each, or pnpm wu:repair --all`);
199
- }
200
- /**
201
- * Validate lane format with user-friendly error messages
202
- */
203
- export function validateLaneFormatWithError(lane) {
204
- try {
205
- validateLaneFormat(lane);
206
- }
207
- catch (error) {
208
- die(`Invalid lane format: ${getErrorMessage(error)}\n\n` +
209
- `Valid formats:\n` +
210
- ` - Parent-only: "Operations", "Intelligence", "Experience", etc.\n` +
211
- ` - Sub-lane: "Operations: Tooling", "Intelligence: Prompts", etc.\n\n` +
212
- `Format rules:\n` +
213
- ` - Single colon with EXACTLY one space after (e.g., "Parent: Subdomain")\n` +
214
- ` - No spaces before colon\n` +
215
- ` - No multiple colons\n\n` +
216
- `See .lumenflow.config.yaml for valid parent lanes.`);
217
- }
218
- }
219
- /**
220
- * Handle lane occupancy check and enforce WIP limit policy
221
- *
222
- * WU-1016: Updated to support configurable WIP limits per lane.
223
- * The WIP limit is read from .lumenflow.config.yaml and defaults to 1.
224
- */
225
- export function handleLaneOccupancy(laneCheck, lane, id, force) {
226
- if (laneCheck.free)
227
- return;
228
- if (laneCheck.error) {
229
- die(`Lane check failed: ${laneCheck.error}`);
230
- }
231
- if (!laneCheck.occupiedBy)
232
- return;
233
- // WU-1016: Include WIP limit info in messages
234
- const wipLimit = laneCheck.wipLimit ?? 1;
235
- const currentCount = laneCheck.currentCount ?? 0;
236
- const inProgressList = laneCheck.inProgressWUs?.join(', ') || laneCheck.occupiedBy;
237
- if (force) {
238
- console.warn(`${PREFIX} ⚠️ WARNING: Lane "${lane}" has ${currentCount}/${wipLimit} WUs in progress`);
239
- console.warn(`${PREFIX} ⚠️ In progress: ${inProgressList}`);
240
- console.warn(`${PREFIX} ⚠️ Forcing WIP limit override. Risk of worktree collision!`);
241
- console.warn(`${PREFIX} ⚠️ Use only for P0 emergencies or manual recovery.`);
242
- return;
243
- }
244
- die(`Lane "${lane}" is at WIP limit (${currentCount}/${wipLimit}).\n\n` +
245
- `In progress: ${inProgressList}\n\n` +
246
- `LumenFlow enforces WIP limits per lane to maintain focus.\n` +
247
- `Current limit for "${lane}": ${wipLimit} (configure in .lumenflow.config.yaml)\n\n` +
248
- `Options:\n` +
249
- ` 1. Wait for a WU to complete or block\n` +
250
- ` 2. Choose a different lane\n` +
251
- ` 3. Increase wip_limit in .lumenflow.config.yaml\n` +
252
- ` 4. Use --force to override (P0 emergencies only)\n\n` +
253
- // WU-1311: Use config-based status path
254
- `To check lane status: grep "${STATUS_SECTIONS.IN_PROGRESS}" ${getConfig().directories.statusPath}`);
255
- }
256
- /**
257
- * Handle code path overlap detection (WU-901)
258
- */
259
- export function handleCodePathOverlap(WU_PATH, STATUS_PATH, id, args) {
260
- if (!existsSync(WU_PATH))
261
- return;
262
- const wuContent = readFileSync(WU_PATH, { encoding: FILE_SYSTEM.UTF8 });
263
- const wuDoc = parseYAML(wuContent);
264
- const codePaths = Array.isArray(wuDoc?.code_paths) ? wuDoc.code_paths : [];
265
- if (codePaths.length === 0)
266
- return;
267
- const overlapCheck = detectConflicts(STATUS_PATH, codePaths, id);
268
- emitWUFlowEvent({
269
- script: 'wu-claim',
270
- wu_id: id,
271
- step: 'overlap_check',
272
- conflicts_count: overlapCheck.conflicts.length,
273
- forced: args.forceOverlap || false,
274
- });
275
- if (overlapCheck.hasBlocker && !args.forceOverlap) {
276
- const conflictList = overlapCheck.conflicts
277
- .map((c) => {
278
- const displayedOverlaps = c.overlaps.slice(0, 3).join(', ');
279
- const remainingCount = c.overlaps.length - 3;
280
- const suffix = remainingCount > 0 ? ` (+${remainingCount} more)` : '';
281
- return ` - ${c.wuid}: ${displayedOverlaps}${suffix}`;
282
- })
283
- .join(STRING_LITERALS.NEWLINE);
284
- // WU-1311: Use config-based status path in error message
285
- die(`Code path overlap detected with in-progress WUs:\n\n${conflictList}\n\n` +
286
- `Merge conflicts are guaranteed if both WUs proceed.\n\n` +
287
- `Options:\n` +
288
- ` 1. Wait for conflicting WU(s) to complete\n` +
289
- ` 2. Coordinate with agent working on conflicting WU\n` +
290
- ` 3. Use --force-overlap --reason "..." (emits telemetry for audit)\n\n` +
291
- `To check WU status: grep "${STATUS_SECTIONS.IN_PROGRESS}" ${getConfig().directories.statusPath}`);
292
- }
293
- if (args.forceOverlap) {
294
- if (!args.reason) {
295
- die('--force-overlap requires --reason "explanation" for audit trail');
296
- }
297
- emitWUFlowEvent({
298
- script: 'wu-claim',
299
- wu_id: id,
300
- event: 'overlap_forced',
301
- reason: args.reason,
302
- conflicts: overlapCheck.conflicts.map((c) => ({
303
- wuid: c.wuid,
304
- files: c.overlaps,
305
- })),
306
- });
307
- console.warn(`${PREFIX} ⚠️ WARNING: Overlap forced with reason: ${args.reason}`);
308
- }
309
- }
310
- /**
311
- * Validate branch-only mode can be used
312
- */
313
- export async function validateBranchOnlyMode(STATUS_PATH, id) {
314
- const branchOnlyCheck = await checkExistingBranchOnlyWU(STATUS_PATH, id);
315
- if (branchOnlyCheck.hasBranchOnly) {
316
- die(`Branch-Only mode does not support parallel WUs.\n\n` +
317
- `Another Branch-Only WU is already in progress: ${branchOnlyCheck.existingWU}\n\n` +
318
- `Options:\n` +
319
- ` 1. Complete ${branchOnlyCheck.existingWU} first (pnpm wu:done --id ${branchOnlyCheck.existingWU})\n` +
320
- ` 2. Block ${branchOnlyCheck.existingWU} (pnpm wu:block --id ${branchOnlyCheck.existingWU} --reason "...")\n` +
321
- ` 3. Use Worktree mode instead (omit --branch-only flag)\n\n` +
322
- `Branch-Only mode works in the main checkout and cannot isolate parallel WUs.`);
323
- }
324
- // Ensure working directory is clean for Branch-Only mode
325
- const status = await getGitForCwd().getStatus();
326
- if (status) {
327
- die(`Branch-Only mode requires a clean working directory.\n\n` +
328
- `Uncommitted changes detected:\n${status}\n\n` +
329
- `Options:\n` +
330
- ` 1. Commit or stash your changes\n` +
331
- ` 2. Use Worktree mode instead (omit --branch-only flag for isolated workspace)`);
332
- }
333
- }
334
- /**
335
- * Check if there's already a Branch-Only WU in progress
336
- * Branch-Only mode doesn't support parallel WUs (only one WU at a time in main checkout)
337
- * @param {string} statusPath - Path to status.md
338
- * @param {string} currentWU - Current WU ID being claimed
339
- * @returns {Promise<{hasBranchOnly: boolean, existingWU: string|null}>}
340
- */
341
- async function checkExistingBranchOnlyWU(statusPath, currentWU) {
342
- // Check file exists
343
- try {
344
- await access(statusPath);
345
- }
346
- catch {
347
- return { hasBranchOnly: false, existingWU: null };
348
- }
349
- // Read file
350
- const content = await readFile(statusPath, { encoding: FILE_SYSTEM.UTF8 });
351
- const lines = content.split(STRING_LITERALS.NEWLINE);
352
- // Find "In Progress" section
353
- const startIdx = lines.findIndex((l) => l.trim().toLowerCase() === '## in progress');
354
- if (startIdx === -1)
355
- return { hasBranchOnly: false, existingWU: null };
356
- let endIdx = lines.slice(startIdx + 1).findIndex((l) => l.startsWith('## '));
357
- if (endIdx === -1)
358
- endIdx = lines.length - startIdx - 1;
359
- else
360
- endIdx = startIdx + 1 + endIdx;
361
- // Extract WU IDs from In Progress section
362
- // Use RegExp.exec for sonarjs/prefer-regexp-exec compliance
363
- const wuPattern = /\[?(WU-\d+)/i;
364
- const inProgressWUs = lines
365
- .slice(startIdx + 1, endIdx)
366
- .map((line) => {
367
- const match = wuPattern.exec(line);
368
- return match ? match[1].toUpperCase() : null;
369
- })
370
- .filter((wuid) => Boolean(wuid))
371
- .filter((wuid) => wuid !== currentWU); // exclude the WU we're claiming
372
- // Check each in-progress WU for claimed_mode: branch-only
373
- for (const wuid of inProgressWUs) {
374
- const wuPath = WU_PATHS.WU(wuid);
375
- // Check file exists
376
- try {
377
- await access(wuPath);
378
- }
379
- catch {
380
- continue; // File doesn't exist, skip
381
- }
382
- try {
383
- // Read file
384
- const text = await readFile(wuPath, { encoding: FILE_SYSTEM.UTF8 });
385
- const doc = parseYAML(text);
386
- if (doc && doc.claimed_mode === CLAIMED_MODES.BRANCH_ONLY) {
387
- return { hasBranchOnly: true, existingWU: wuid };
388
- }
389
- }
390
- catch {
391
- // ignore parse errors
392
- }
393
- }
394
- return { hasBranchOnly: false, existingWU: null };
395
- }
396
- /**
397
- * Run all pre-flight validations on the WU.
398
- * Called from main() after git fetch/pull but before lane lock acquisition.
399
- *
400
- * Returns the validated doc and fixable issues for worktree application.
401
- */
402
- export async function runPreflightValidations(args, id, WU_PATH, STATUS_PATH) {
403
- // PRE-FLIGHT VALIDATION (on post-pull data)
404
- const doc = preflightValidateWU(WU_PATH, id);
405
- const manualTestsCheck = validateManualTestsForClaim(doc, id);
406
- if (manualTestsCheck.valid === false) {
407
- die(manualTestsCheck.error);
408
- }
409
- const lane = args.lane;
410
- if (!lane) {
411
- die('Missing required --lane argument for wu:claim.');
412
- }
413
- await handleOrphanCheck(lane, id);
414
- validateLaneFormatWithError(lane);
415
- // WU-1187: Check for WIP justification when WIP > 1 (soft enforcement - warning only)
416
- const wipJustificationCheck = checkWipJustification(lane);
417
- if (wipJustificationCheck.warning) {
418
- console.warn(`${PREFIX} ${wipJustificationCheck.warning}`);
419
- }
420
- // WU-1372: Lane-to-code_paths consistency check (advisory only, never blocks)
421
- const laneValidation = validateLaneCodePaths(doc, lane);
422
- logLaneValidationWarnings(laneValidation, PREFIX);
423
- // WU-1361: YAML schema validation at claim time
424
- // Returns fixable issues for application in worktree (not on main)
425
- const fixableIssues = validateYAMLSchema(WU_PATH, doc, args);
426
- // WU-1362: Spec completeness validation (fail-fast before expensive operations)
427
- // Two-tier validation: Schema errors (above) are never bypassable; spec completeness is bypassable
428
- const specResult = validateSpecCompleteness(doc, id);
429
- if (!specResult.valid) {
430
- const errorList = specResult.errors
431
- .map((e) => ` - ${e}`)
432
- .join(STRING_LITERALS.NEWLINE);
433
- if (args.allowIncomplete) {
434
- console.warn(`${PREFIX} ⚠️ Spec completeness warnings (bypassed with --allow-incomplete):`);
435
- console.warn(errorList);
436
- console.warn(`${PREFIX} Proceeding with incomplete spec. Fix before wu:done.`);
437
- }
438
- else {
439
- die(`Spec completeness validation failed for ${WU_PATH}:\n\n${errorList}\n\n` +
440
- `Fix these issues before claiming, or use --allow-incomplete to bypass.\n` +
441
- `Note: Schema errors (placeholders, invalid structure) cannot be bypassed.`);
442
- }
443
- }
444
- // Check lane occupancy (WIP=1 per sub-lane)
445
- const laneCheck = checkLaneFree(STATUS_PATH, lane, id);
446
- emitWUFlowEvent({
447
- script: 'wu-claim',
448
- wu_id: id,
449
- lane,
450
- step: 'lane_check',
451
- occupied: !laneCheck.free,
452
- occupiedBy: laneCheck.occupiedBy,
453
- });
454
- handleLaneOccupancy(laneCheck, lane, id, args.force);
455
- return { doc, fixableIssues };
456
- }
457
- //# sourceMappingURL=wu-claim-validation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wu-claim-validation.js","sourceRoot":"","sources":["../src/wu-claim-validation.ts"],"names":[],"mappings":"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"}