@lumenflow/core 3.1.2 → 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 (1008) hide show
  1. package/README.md +16 -16
  2. package/dist/cli/is-agent-branch.js +31 -10
  3. package/dist/index.js +3 -0
  4. package/package.json +5 -2
  5. package/dist/active-wu-detector.d.ts +0 -25
  6. package/dist/active-wu-detector.d.ts.map +0 -1
  7. package/dist/active-wu-detector.js +0 -109
  8. package/dist/active-wu-detector.js.map +0 -1
  9. package/dist/adapters/context-adapters.d.ts +0 -101
  10. package/dist/adapters/context-adapters.d.ts.map +0 -1
  11. package/dist/adapters/context-adapters.js +0 -98
  12. package/dist/adapters/context-adapters.js.map +0 -1
  13. package/dist/adapters/filesystem-metrics.adapter.d.ts +0 -91
  14. package/dist/adapters/filesystem-metrics.adapter.d.ts.map +0 -1
  15. package/dist/adapters/filesystem-metrics.adapter.js +0 -530
  16. package/dist/adapters/filesystem-metrics.adapter.js.map +0 -1
  17. package/dist/adapters/index.d.ts +0 -15
  18. package/dist/adapters/index.d.ts.map +0 -1
  19. package/dist/adapters/index.js +0 -21
  20. package/dist/adapters/index.js.map +0 -1
  21. package/dist/adapters/mock-dashboard-renderer.adapter.d.ts +0 -86
  22. package/dist/adapters/mock-dashboard-renderer.adapter.d.ts.map +0 -1
  23. package/dist/adapters/mock-dashboard-renderer.adapter.js +0 -93
  24. package/dist/adapters/mock-dashboard-renderer.adapter.js.map +0 -1
  25. package/dist/adapters/recovery-adapters.d.ts +0 -41
  26. package/dist/adapters/recovery-adapters.d.ts.map +0 -1
  27. package/dist/adapters/recovery-adapters.js +0 -32
  28. package/dist/adapters/recovery-adapters.js.map +0 -1
  29. package/dist/adapters/terminal-renderer.adapter.d.ts +0 -86
  30. package/dist/adapters/terminal-renderer.adapter.d.ts.map +0 -1
  31. package/dist/adapters/terminal-renderer.adapter.js +0 -342
  32. package/dist/adapters/terminal-renderer.adapter.js.map +0 -1
  33. package/dist/adapters/validation-adapters.d.ts +0 -53
  34. package/dist/adapters/validation-adapters.d.ts.map +0 -1
  35. package/dist/adapters/validation-adapters.js +0 -48
  36. package/dist/adapters/validation-adapters.js.map +0 -1
  37. package/dist/agent-patterns-registry.d.ts +0 -141
  38. package/dist/agent-patterns-registry.d.ts.map +0 -1
  39. package/dist/agent-patterns-registry.js +0 -319
  40. package/dist/agent-patterns-registry.js.map +0 -1
  41. package/dist/arg-parser.d.ts +0 -94
  42. package/dist/arg-parser.d.ts.map +0 -1
  43. package/dist/arg-parser.js +0 -774
  44. package/dist/arg-parser.js.map +0 -1
  45. package/dist/atomic-merge.d.ts +0 -21
  46. package/dist/atomic-merge.d.ts.map +0 -1
  47. package/dist/atomic-merge.js +0 -87
  48. package/dist/atomic-merge.js.map +0 -1
  49. package/dist/backlog-editor.d.ts +0 -103
  50. package/dist/backlog-editor.d.ts.map +0 -1
  51. package/dist/backlog-editor.js +0 -158
  52. package/dist/backlog-editor.js.map +0 -1
  53. package/dist/backlog-generator.d.ts +0 -90
  54. package/dist/backlog-generator.d.ts.map +0 -1
  55. package/dist/backlog-generator.js +0 -536
  56. package/dist/backlog-generator.js.map +0 -1
  57. package/dist/backlog-parser.d.ts +0 -46
  58. package/dist/backlog-parser.d.ts.map +0 -1
  59. package/dist/backlog-parser.js +0 -105
  60. package/dist/backlog-parser.js.map +0 -1
  61. package/dist/backlog-sync-validator.d.ts +0 -88
  62. package/dist/backlog-sync-validator.d.ts.map +0 -1
  63. package/dist/backlog-sync-validator.js +0 -324
  64. package/dist/backlog-sync-validator.js.map +0 -1
  65. package/dist/beacon-migration.d.ts +0 -56
  66. package/dist/beacon-migration.js +0 -101
  67. package/dist/branch-check.d.ts +0 -63
  68. package/dist/branch-check.d.ts.map +0 -1
  69. package/dist/branch-check.js +0 -197
  70. package/dist/branch-check.js.map +0 -1
  71. package/dist/branch-drift.d.ts +0 -24
  72. package/dist/branch-drift.d.ts.map +0 -1
  73. package/dist/branch-drift.js +0 -54
  74. package/dist/branch-drift.js.map +0 -1
  75. package/dist/cleanup-install-config.d.ts +0 -24
  76. package/dist/cleanup-install-config.d.ts.map +0 -1
  77. package/dist/cleanup-install-config.js +0 -40
  78. package/dist/cleanup-install-config.js.map +0 -1
  79. package/dist/cleanup-lock.d.ts +0 -125
  80. package/dist/cleanup-lock.d.ts.map +0 -1
  81. package/dist/cleanup-lock.js +0 -325
  82. package/dist/cleanup-lock.js.map +0 -1
  83. package/dist/cli/is-agent-branch.d.ts +0 -15
  84. package/dist/cli/is-agent-branch.d.ts.map +0 -1
  85. package/dist/cli/is-agent-branch.js.map +0 -1
  86. package/dist/cloud-detect.d.ts +0 -145
  87. package/dist/cloud-detect.d.ts.map +0 -1
  88. package/dist/cloud-detect.js +0 -116
  89. package/dist/cloud-detect.js.map +0 -1
  90. package/dist/code-path-validator.d.ts +0 -147
  91. package/dist/code-path-validator.d.ts.map +0 -1
  92. package/dist/code-path-validator.js +0 -551
  93. package/dist/code-path-validator.js.map +0 -1
  94. package/dist/code-paths-overlap.d.ts +0 -50
  95. package/dist/code-paths-overlap.d.ts.map +0 -1
  96. package/dist/code-paths-overlap.js +0 -248
  97. package/dist/code-paths-overlap.js.map +0 -1
  98. package/dist/color-support.d.ts +0 -21
  99. package/dist/color-support.d.ts.map +0 -1
  100. package/dist/color-support.js +0 -67
  101. package/dist/color-support.js.map +0 -1
  102. package/dist/commands-logger.d.ts +0 -71
  103. package/dist/commands-logger.d.ts.map +0 -1
  104. package/dist/commands-logger.js +0 -256
  105. package/dist/commands-logger.js.map +0 -1
  106. package/dist/commit-message-utils.d.ts +0 -26
  107. package/dist/commit-message-utils.d.ts.map +0 -1
  108. package/dist/commit-message-utils.js +0 -44
  109. package/dist/commit-message-utils.js.map +0 -1
  110. package/dist/compliance-parser.d.ts +0 -125
  111. package/dist/compliance-parser.d.ts.map +0 -1
  112. package/dist/compliance-parser.js +0 -457
  113. package/dist/compliance-parser.js.map +0 -1
  114. package/dist/constants/backlog-patterns.d.ts +0 -21
  115. package/dist/constants/backlog-patterns.d.ts.map +0 -1
  116. package/dist/constants/backlog-patterns.js +0 -26
  117. package/dist/constants/backlog-patterns.js.map +0 -1
  118. package/dist/constants/dora-constants.d.ts +0 -50
  119. package/dist/constants/dora-constants.d.ts.map +0 -1
  120. package/dist/constants/dora-constants.js +0 -56
  121. package/dist/constants/dora-constants.js.map +0 -1
  122. package/dist/constants/gate-constants.d.ts +0 -16
  123. package/dist/constants/gate-constants.d.ts.map +0 -1
  124. package/dist/constants/gate-constants.js +0 -18
  125. package/dist/constants/gate-constants.js.map +0 -1
  126. package/dist/constants/linter-constants.d.ts +0 -17
  127. package/dist/constants/linter-constants.d.ts.map +0 -1
  128. package/dist/constants/linter-constants.js +0 -19
  129. package/dist/constants/linter-constants.js.map +0 -1
  130. package/dist/constants/tokenizer-constants.d.ts +0 -16
  131. package/dist/constants/tokenizer-constants.d.ts.map +0 -1
  132. package/dist/constants/tokenizer-constants.js +0 -18
  133. package/dist/constants/tokenizer-constants.js.map +0 -1
  134. package/dist/context/context-computer.d.ts +0 -36
  135. package/dist/context/context-computer.d.ts.map +0 -1
  136. package/dist/context/context-computer.js +0 -128
  137. package/dist/context/context-computer.js.map +0 -1
  138. package/dist/context/git-state-reader.d.ts +0 -37
  139. package/dist/context/git-state-reader.d.ts.map +0 -1
  140. package/dist/context/git-state-reader.js +0 -64
  141. package/dist/context/git-state-reader.js.map +0 -1
  142. package/dist/context/index.d.ts +0 -18
  143. package/dist/context/index.d.ts.map +0 -1
  144. package/dist/context/index.js +0 -20
  145. package/dist/context/index.js.map +0 -1
  146. package/dist/context/location-resolver.d.ts +0 -34
  147. package/dist/context/location-resolver.d.ts.map +0 -1
  148. package/dist/context/location-resolver.js +0 -179
  149. package/dist/context/location-resolver.js.map +0 -1
  150. package/dist/context/wu-state-reader.d.ts +0 -30
  151. package/dist/context/wu-state-reader.d.ts.map +0 -1
  152. package/dist/context/wu-state-reader.js +0 -126
  153. package/dist/context/wu-state-reader.js.map +0 -1
  154. package/dist/context-di.d.ts +0 -185
  155. package/dist/context-di.d.ts.map +0 -1
  156. package/dist/context-di.js +0 -165
  157. package/dist/context-di.js.map +0 -1
  158. package/dist/context-validation-integration.d.ts +0 -69
  159. package/dist/context-validation-integration.d.ts.map +0 -1
  160. package/dist/context-validation-integration.js +0 -161
  161. package/dist/context-validation-integration.js.map +0 -1
  162. package/dist/core/scope-checker.d.ts +0 -80
  163. package/dist/core/scope-checker.d.ts.map +0 -1
  164. package/dist/core/scope-checker.js +0 -166
  165. package/dist/core/scope-checker.js.map +0 -1
  166. package/dist/core/tool-runner.d.ts +0 -136
  167. package/dist/core/tool-runner.d.ts.map +0 -1
  168. package/dist/core/tool-runner.js +0 -396
  169. package/dist/core/tool-runner.js.map +0 -1
  170. package/dist/core/tool.constants.d.ts +0 -106
  171. package/dist/core/tool.constants.d.ts.map +0 -1
  172. package/dist/core/tool.constants.js +0 -104
  173. package/dist/core/tool.constants.js.map +0 -1
  174. package/dist/core/tool.schemas.d.ts +0 -227
  175. package/dist/core/tool.schemas.d.ts.map +0 -1
  176. package/dist/core/tool.schemas.js +0 -229
  177. package/dist/core/tool.schemas.js.map +0 -1
  178. package/dist/core/worktree-guard.d.ts +0 -115
  179. package/dist/core/worktree-guard.d.ts.map +0 -1
  180. package/dist/core/worktree-guard.js +0 -245
  181. package/dist/core/worktree-guard.js.map +0 -1
  182. package/dist/coverage-gate.d.ts +0 -126
  183. package/dist/coverage-gate.d.ts.map +0 -1
  184. package/dist/coverage-gate.js +0 -209
  185. package/dist/coverage-gate.js.map +0 -1
  186. package/dist/cycle-detector.d.ts +0 -52
  187. package/dist/cycle-detector.d.ts.map +0 -1
  188. package/dist/cycle-detector.js +0 -84
  189. package/dist/cycle-detector.js.map +0 -1
  190. package/dist/date-utils.d.ts +0 -66
  191. package/dist/date-utils.d.ts.map +0 -1
  192. package/dist/date-utils.js +0 -143
  193. package/dist/date-utils.js.map +0 -1
  194. package/dist/delegation-escalation.d.ts +0 -71
  195. package/dist/delegation-escalation.d.ts.map +0 -1
  196. package/dist/delegation-escalation.js +0 -264
  197. package/dist/delegation-escalation.js.map +0 -1
  198. package/dist/delegation-monitor.d.ts +0 -262
  199. package/dist/delegation-monitor.d.ts.map +0 -1
  200. package/dist/delegation-monitor.js +0 -678
  201. package/dist/delegation-monitor.js.map +0 -1
  202. package/dist/delegation-recovery.d.ts +0 -62
  203. package/dist/delegation-recovery.d.ts.map +0 -1
  204. package/dist/delegation-recovery.js +0 -304
  205. package/dist/delegation-recovery.js.map +0 -1
  206. package/dist/delegation-registry-schema.d.ts +0 -75
  207. package/dist/delegation-registry-schema.d.ts.map +0 -1
  208. package/dist/delegation-registry-schema.js +0 -93
  209. package/dist/delegation-registry-schema.js.map +0 -1
  210. package/dist/delegation-registry-store.d.ts +0 -145
  211. package/dist/delegation-registry-store.d.ts.map +0 -1
  212. package/dist/delegation-registry-store.js +0 -308
  213. package/dist/delegation-registry-store.js.map +0 -1
  214. package/dist/delegation-tree.d.ts +0 -52
  215. package/dist/delegation-tree.d.ts.map +0 -1
  216. package/dist/delegation-tree.js +0 -205
  217. package/dist/delegation-tree.js.map +0 -1
  218. package/dist/dependency-graph.d.ts +0 -169
  219. package/dist/dependency-graph.d.ts.map +0 -1
  220. package/dist/dependency-graph.js +0 -612
  221. package/dist/dependency-graph.js.map +0 -1
  222. package/dist/dependency-guard.d.ts +0 -41
  223. package/dist/dependency-guard.d.ts.map +0 -1
  224. package/dist/dependency-guard.js +0 -145
  225. package/dist/dependency-guard.js.map +0 -1
  226. package/dist/dependency-validator.d.ts +0 -89
  227. package/dist/dependency-validator.d.ts.map +0 -1
  228. package/dist/dependency-validator.js +0 -155
  229. package/dist/dependency-validator.js.map +0 -1
  230. package/dist/docs-path-validator.d.ts +0 -16
  231. package/dist/docs-path-validator.d.ts.map +0 -1
  232. package/dist/docs-path-validator.js +0 -98
  233. package/dist/docs-path-validator.js.map +0 -1
  234. package/dist/domain/context.schemas.d.ts +0 -170
  235. package/dist/domain/context.schemas.d.ts.map +0 -1
  236. package/dist/domain/context.schemas.js +0 -151
  237. package/dist/domain/context.schemas.js.map +0 -1
  238. package/dist/domain/index.d.ts +0 -15
  239. package/dist/domain/index.d.ts.map +0 -1
  240. package/dist/domain/index.js +0 -23
  241. package/dist/domain/index.js.map +0 -1
  242. package/dist/domain/orchestration.constants.d.ts +0 -111
  243. package/dist/domain/orchestration.constants.d.ts.map +0 -1
  244. package/dist/domain/orchestration.constants.js +0 -130
  245. package/dist/domain/orchestration.constants.js.map +0 -1
  246. package/dist/domain/orchestration.schemas.d.ts +0 -307
  247. package/dist/domain/orchestration.schemas.d.ts.map +0 -1
  248. package/dist/domain/orchestration.schemas.js +0 -214
  249. package/dist/domain/orchestration.schemas.js.map +0 -1
  250. package/dist/domain/orchestration.types.d.ts +0 -134
  251. package/dist/domain/orchestration.types.d.ts.map +0 -1
  252. package/dist/domain/orchestration.types.js +0 -5
  253. package/dist/domain/orchestration.types.js.map +0 -1
  254. package/dist/domain/recovery.schemas.d.ts +0 -164
  255. package/dist/domain/recovery.schemas.d.ts.map +0 -1
  256. package/dist/domain/recovery.schemas.js +0 -134
  257. package/dist/domain/recovery.schemas.js.map +0 -1
  258. package/dist/domain/validation.schemas.d.ts +0 -147
  259. package/dist/domain/validation.schemas.d.ts.map +0 -1
  260. package/dist/domain/validation.schemas.js +0 -117
  261. package/dist/domain/validation.schemas.js.map +0 -1
  262. package/dist/error-handler.d.ts +0 -144
  263. package/dist/error-handler.d.ts.map +0 -1
  264. package/dist/error-handler.js +0 -214
  265. package/dist/error-handler.js.map +0 -1
  266. package/dist/file-classifiers.d.ts +0 -63
  267. package/dist/file-classifiers.d.ts.map +0 -1
  268. package/dist/file-classifiers.js +0 -111
  269. package/dist/file-classifiers.js.map +0 -1
  270. package/dist/force-bypass-audit.d.ts +0 -47
  271. package/dist/force-bypass-audit.d.ts.map +0 -1
  272. package/dist/force-bypass-audit.js +0 -146
  273. package/dist/force-bypass-audit.js.map +0 -1
  274. package/dist/gates-agent-mode.d.ts +0 -107
  275. package/dist/gates-agent-mode.d.ts.map +0 -1
  276. package/dist/gates-agent-mode.js +0 -138
  277. package/dist/gates-agent-mode.js.map +0 -1
  278. package/dist/gates-config.d.ts +0 -268
  279. package/dist/gates-config.d.ts.map +0 -1
  280. package/dist/gates-config.js +0 -644
  281. package/dist/gates-config.js.map +0 -1
  282. package/dist/generate-traceability.d.ts +0 -106
  283. package/dist/generate-traceability.d.ts.map +0 -1
  284. package/dist/generate-traceability.js +0 -387
  285. package/dist/generate-traceability.js.map +0 -1
  286. package/dist/git-adapter.d.ts +0 -406
  287. package/dist/git-adapter.d.ts.map +0 -1
  288. package/dist/git-adapter.js +0 -686
  289. package/dist/git-adapter.js.map +0 -1
  290. package/dist/git-context-extractor.d.ts +0 -102
  291. package/dist/git-context-extractor.d.ts.map +0 -1
  292. package/dist/git-context-extractor.js +0 -571
  293. package/dist/git-context-extractor.js.map +0 -1
  294. package/dist/git-staged-validator.d.ts +0 -33
  295. package/dist/git-staged-validator.d.ts.map +0 -1
  296. package/dist/git-staged-validator.js +0 -52
  297. package/dist/git-staged-validator.js.map +0 -1
  298. package/dist/hardcoded-strings.d.ts +0 -67
  299. package/dist/hardcoded-strings.d.ts.map +0 -1
  300. package/dist/hardcoded-strings.js +0 -276
  301. package/dist/hardcoded-strings.js.map +0 -1
  302. package/dist/incremental-lint.d.ts +0 -71
  303. package/dist/incremental-lint.d.ts.map +0 -1
  304. package/dist/incremental-lint.js +0 -132
  305. package/dist/incremental-lint.js.map +0 -1
  306. package/dist/incremental-test.d.ts +0 -33
  307. package/dist/incremental-test.d.ts.map +0 -1
  308. package/dist/incremental-test.js +0 -64
  309. package/dist/incremental-test.js.map +0 -1
  310. package/dist/index.d.ts +0 -104
  311. package/dist/index.d.ts.map +0 -1
  312. package/dist/index.js.map +0 -1
  313. package/dist/invariants/check-automated-tests.d.ts +0 -42
  314. package/dist/invariants/check-automated-tests.d.ts.map +0 -1
  315. package/dist/invariants/check-automated-tests.js +0 -171
  316. package/dist/invariants/check-automated-tests.js.map +0 -1
  317. package/dist/invariants-runner.d.ts +0 -108
  318. package/dist/invariants-runner.d.ts.map +0 -1
  319. package/dist/invariants-runner.js +0 -547
  320. package/dist/invariants-runner.js.map +0 -1
  321. package/dist/lane-checker.d.ts +0 -132
  322. package/dist/lane-checker.d.ts.map +0 -1
  323. package/dist/lane-checker.js +0 -743
  324. package/dist/lane-checker.js.map +0 -1
  325. package/dist/lane-inference.d.ts +0 -29
  326. package/dist/lane-inference.d.ts.map +0 -1
  327. package/dist/lane-inference.js +0 -210
  328. package/dist/lane-inference.js.map +0 -1
  329. package/dist/lane-lock.d.ts +0 -220
  330. package/dist/lane-lock.d.ts.map +0 -1
  331. package/dist/lane-lock.js +0 -499
  332. package/dist/lane-lock.js.map +0 -1
  333. package/dist/lane-suggest-prompt.d.ts +0 -97
  334. package/dist/lane-suggest-prompt.d.ts.map +0 -1
  335. package/dist/lane-suggest-prompt.js +0 -362
  336. package/dist/lane-suggest-prompt.js.map +0 -1
  337. package/dist/lane-validator.d.ts +0 -49
  338. package/dist/lane-validator.d.ts.map +0 -1
  339. package/dist/lane-validator.js +0 -117
  340. package/dist/lane-validator.js.map +0 -1
  341. package/dist/logs-lib.d.ts +0 -89
  342. package/dist/logs-lib.d.ts.map +0 -1
  343. package/dist/logs-lib.js +0 -214
  344. package/dist/logs-lib.js.map +0 -1
  345. package/dist/lumenflow-config-schema.d.ts +0 -1428
  346. package/dist/lumenflow-config-schema.d.ts.map +0 -1
  347. package/dist/lumenflow-config-schema.js +0 -1255
  348. package/dist/lumenflow-config-schema.js.map +0 -1
  349. package/dist/lumenflow-config.d.ts +0 -94
  350. package/dist/lumenflow-config.d.ts.map +0 -1
  351. package/dist/lumenflow-config.js +0 -253
  352. package/dist/lumenflow-config.js.map +0 -1
  353. package/dist/lumenflow-home.d.ts +0 -118
  354. package/dist/lumenflow-home.d.ts.map +0 -1
  355. package/dist/lumenflow-home.js +0 -214
  356. package/dist/lumenflow-home.js.map +0 -1
  357. package/dist/manual-test-validator.d.ts +0 -84
  358. package/dist/manual-test-validator.d.ts.map +0 -1
  359. package/dist/manual-test-validator.js +0 -206
  360. package/dist/manual-test-validator.js.map +0 -1
  361. package/dist/merge-lock.d.ts +0 -107
  362. package/dist/merge-lock.d.ts.map +0 -1
  363. package/dist/merge-lock.js +0 -263
  364. package/dist/merge-lock.js.map +0 -1
  365. package/dist/micro-worktree-shared.d.ts +0 -128
  366. package/dist/micro-worktree-shared.d.ts.map +0 -1
  367. package/dist/micro-worktree-shared.js +0 -352
  368. package/dist/micro-worktree-shared.js.map +0 -1
  369. package/dist/micro-worktree.d.ts +0 -165
  370. package/dist/micro-worktree.d.ts.map +0 -1
  371. package/dist/micro-worktree.js +0 -463
  372. package/dist/micro-worktree.js.map +0 -1
  373. package/dist/migration-deployer.d.ts +0 -70
  374. package/dist/migration-deployer.d.ts.map +0 -1
  375. package/dist/migration-deployer.js +0 -152
  376. package/dist/migration-deployer.js.map +0 -1
  377. package/dist/normalize-config-keys.d.ts +0 -10
  378. package/dist/normalize-config-keys.d.ts.map +0 -1
  379. package/dist/normalize-config-keys.js +0 -70
  380. package/dist/normalize-config-keys.js.map +0 -1
  381. package/dist/orchestration-advisory-loader.d.ts +0 -19
  382. package/dist/orchestration-advisory-loader.d.ts.map +0 -1
  383. package/dist/orchestration-advisory-loader.js +0 -94
  384. package/dist/orchestration-advisory-loader.js.map +0 -1
  385. package/dist/orchestration-advisory.d.ts +0 -49
  386. package/dist/orchestration-advisory.d.ts.map +0 -1
  387. package/dist/orchestration-advisory.js +0 -97
  388. package/dist/orchestration-advisory.js.map +0 -1
  389. package/dist/orchestration-di.d.ts +0 -36
  390. package/dist/orchestration-di.d.ts.map +0 -1
  391. package/dist/orchestration-di.js +0 -60
  392. package/dist/orchestration-di.js.map +0 -1
  393. package/dist/orchestration-rules.d.ts +0 -60
  394. package/dist/orchestration-rules.d.ts.map +0 -1
  395. package/dist/orchestration-rules.js +0 -212
  396. package/dist/orchestration-rules.js.map +0 -1
  397. package/dist/orphan-detector.d.ts +0 -148
  398. package/dist/orphan-detector.d.ts.map +0 -1
  399. package/dist/orphan-detector.js +0 -253
  400. package/dist/orphan-detector.js.map +0 -1
  401. package/dist/pack-authoring-template-engine.d.ts +0 -54
  402. package/dist/pack-authoring-template-engine.d.ts.map +0 -1
  403. package/dist/pack-authoring-template-engine.js +0 -510
  404. package/dist/pack-authoring-template-engine.js.map +0 -1
  405. package/dist/path-classifiers.d.ts +0 -58
  406. package/dist/path-classifiers.d.ts.map +0 -1
  407. package/dist/path-classifiers.js +0 -96
  408. package/dist/path-classifiers.js.map +0 -1
  409. package/dist/patrol-loop.d.ts +0 -171
  410. package/dist/patrol-loop.d.ts.map +0 -1
  411. package/dist/patrol-loop.js +0 -197
  412. package/dist/patrol-loop.js.map +0 -1
  413. package/dist/piped-command-detector.d.ts +0 -25
  414. package/dist/piped-command-detector.d.ts.map +0 -1
  415. package/dist/piped-command-detector.js +0 -67
  416. package/dist/piped-command-detector.js.map +0 -1
  417. package/dist/ports/context.ports.d.ts +0 -136
  418. package/dist/ports/context.ports.d.ts.map +0 -1
  419. package/dist/ports/context.ports.js +0 -4
  420. package/dist/ports/context.ports.js.map +0 -1
  421. package/dist/ports/core-tools.ports.d.ts +0 -282
  422. package/dist/ports/core-tools.ports.d.ts.map +0 -1
  423. package/dist/ports/core-tools.ports.js +0 -4
  424. package/dist/ports/core-tools.ports.js.map +0 -1
  425. package/dist/ports/dashboard-renderer.port.d.ts +0 -113
  426. package/dist/ports/dashboard-renderer.port.d.ts.map +0 -1
  427. package/dist/ports/dashboard-renderer.port.js +0 -4
  428. package/dist/ports/dashboard-renderer.port.js.map +0 -1
  429. package/dist/ports/git-validator.ports.d.ts +0 -114
  430. package/dist/ports/git-validator.ports.d.ts.map +0 -1
  431. package/dist/ports/git-validator.ports.js +0 -4
  432. package/dist/ports/git-validator.ports.js.map +0 -1
  433. package/dist/ports/index.d.ts +0 -21
  434. package/dist/ports/index.d.ts.map +0 -1
  435. package/dist/ports/index.js +0 -23
  436. package/dist/ports/index.js.map +0 -1
  437. package/dist/ports/metrics-collector.port.d.ts +0 -133
  438. package/dist/ports/metrics-collector.port.d.ts.map +0 -1
  439. package/dist/ports/metrics-collector.port.js +0 -4
  440. package/dist/ports/metrics-collector.port.js.map +0 -1
  441. package/dist/ports/recovery.ports.d.ts +0 -59
  442. package/dist/ports/recovery.ports.d.ts.map +0 -1
  443. package/dist/ports/recovery.ports.js +0 -4
  444. package/dist/ports/recovery.ports.js.map +0 -1
  445. package/dist/ports/validation.ports.d.ts +0 -75
  446. package/dist/ports/validation.ports.d.ts.map +0 -1
  447. package/dist/ports/validation.ports.js +0 -4
  448. package/dist/ports/validation.ports.js.map +0 -1
  449. package/dist/ports/wu-helpers.ports.d.ts +0 -227
  450. package/dist/ports/wu-helpers.ports.d.ts.map +0 -1
  451. package/dist/ports/wu-helpers.ports.js +0 -4
  452. package/dist/ports/wu-helpers.ports.js.map +0 -1
  453. package/dist/process-detector.d.ts +0 -69
  454. package/dist/process-detector.d.ts.map +0 -1
  455. package/dist/process-detector.js +0 -175
  456. package/dist/process-detector.js.map +0 -1
  457. package/dist/prompt-linter.d.ts +0 -66
  458. package/dist/prompt-linter.d.ts.map +0 -1
  459. package/dist/prompt-linter.js +0 -323
  460. package/dist/prompt-linter.js.map +0 -1
  461. package/dist/prompt-monitor.d.ts +0 -6
  462. package/dist/prompt-monitor.d.ts.map +0 -1
  463. package/dist/prompt-monitor.js +0 -218
  464. package/dist/prompt-monitor.js.map +0 -1
  465. package/dist/rebase-artifact-cleanup.d.ts +0 -156
  466. package/dist/rebase-artifact-cleanup.d.ts.map +0 -1
  467. package/dist/rebase-artifact-cleanup.js +0 -475
  468. package/dist/rebase-artifact-cleanup.js.map +0 -1
  469. package/dist/recovery/index.d.ts +0 -12
  470. package/dist/recovery/index.d.ts.map +0 -1
  471. package/dist/recovery/index.js +0 -14
  472. package/dist/recovery/index.js.map +0 -1
  473. package/dist/recovery/recovery-analyzer.d.ts +0 -49
  474. package/dist/recovery/recovery-analyzer.d.ts.map +0 -1
  475. package/dist/recovery/recovery-analyzer.js +0 -149
  476. package/dist/recovery/recovery-analyzer.js.map +0 -1
  477. package/dist/resolve-policy.d.ts +0 -257
  478. package/dist/resolve-policy.d.ts.map +0 -1
  479. package/dist/resolve-policy.js +0 -269
  480. package/dist/resolve-policy.js.map +0 -1
  481. package/dist/retry-strategy.d.ts +0 -191
  482. package/dist/retry-strategy.d.ts.map +0 -1
  483. package/dist/retry-strategy.js +0 -286
  484. package/dist/retry-strategy.js.map +0 -1
  485. package/dist/risk-detector.d.ts +0 -109
  486. package/dist/risk-detector.d.ts.map +0 -1
  487. package/dist/risk-detector.js +0 -253
  488. package/dist/risk-detector.js.map +0 -1
  489. package/dist/rollback-utils.d.ts +0 -129
  490. package/dist/rollback-utils.d.ts.map +0 -1
  491. package/dist/rollback-utils.js +0 -217
  492. package/dist/rollback-utils.js.map +0 -1
  493. package/dist/sandbox-allowlist.d.ts +0 -16
  494. package/dist/sandbox-allowlist.d.ts.map +0 -1
  495. package/dist/sandbox-allowlist.js +0 -77
  496. package/dist/sandbox-allowlist.js.map +0 -1
  497. package/dist/sandbox-backend-linux.d.ts +0 -6
  498. package/dist/sandbox-backend-linux.d.ts.map +0 -1
  499. package/dist/sandbox-backend-linux.js +0 -67
  500. package/dist/sandbox-backend-linux.js.map +0 -1
  501. package/dist/sandbox-backend-macos.d.ts +0 -6
  502. package/dist/sandbox-backend-macos.d.ts.map +0 -1
  503. package/dist/sandbox-backend-macos.js +0 -66
  504. package/dist/sandbox-backend-macos.js.map +0 -1
  505. package/dist/sandbox-backend-windows.d.ts +0 -6
  506. package/dist/sandbox-backend-windows.d.ts.map +0 -1
  507. package/dist/sandbox-backend-windows.js +0 -30
  508. package/dist/sandbox-backend-windows.js.map +0 -1
  509. package/dist/sandbox-profile.d.ts +0 -53
  510. package/dist/sandbox-profile.d.ts.map +0 -1
  511. package/dist/sandbox-profile.js +0 -64
  512. package/dist/sandbox-profile.js.map +0 -1
  513. package/dist/schemas/arg-validators.d.ts +0 -58
  514. package/dist/schemas/arg-validators.d.ts.map +0 -1
  515. package/dist/schemas/arg-validators.js +0 -193
  516. package/dist/schemas/arg-validators.js.map +0 -1
  517. package/dist/schemas/command-schemas.d.ts +0 -171
  518. package/dist/schemas/command-schemas.d.ts.map +0 -1
  519. package/dist/schemas/command-schemas.js +0 -145
  520. package/dist/schemas/command-schemas.js.map +0 -1
  521. package/dist/schemas/flow-arg-validators.d.ts +0 -32
  522. package/dist/schemas/flow-arg-validators.d.ts.map +0 -1
  523. package/dist/schemas/flow-arg-validators.js +0 -57
  524. package/dist/schemas/flow-arg-validators.js.map +0 -1
  525. package/dist/schemas/flow-schemas.d.ts +0 -152
  526. package/dist/schemas/flow-schemas.d.ts.map +0 -1
  527. package/dist/schemas/flow-schemas.js +0 -105
  528. package/dist/schemas/flow-schemas.js.map +0 -1
  529. package/dist/schemas/index.d.ts +0 -33
  530. package/dist/schemas/index.d.ts.map +0 -1
  531. package/dist/schemas/index.js +0 -96
  532. package/dist/schemas/index.js.map +0 -1
  533. package/dist/schemas/initiative-arg-validators.d.ts +0 -64
  534. package/dist/schemas/initiative-arg-validators.d.ts.map +0 -1
  535. package/dist/schemas/initiative-arg-validators.js +0 -65
  536. package/dist/schemas/initiative-arg-validators.js.map +0 -1
  537. package/dist/schemas/initiative-schemas.d.ts +0 -256
  538. package/dist/schemas/initiative-schemas.d.ts.map +0 -1
  539. package/dist/schemas/initiative-schemas.js +0 -186
  540. package/dist/schemas/initiative-schemas.js.map +0 -1
  541. package/dist/schemas/memory-arg-validators.d.ts +0 -91
  542. package/dist/schemas/memory-arg-validators.d.ts.map +0 -1
  543. package/dist/schemas/memory-arg-validators.js +0 -75
  544. package/dist/schemas/memory-arg-validators.js.map +0 -1
  545. package/dist/schemas/memory-schemas.d.ts +0 -287
  546. package/dist/schemas/memory-schemas.d.ts.map +0 -1
  547. package/dist/schemas/memory-schemas.js +0 -242
  548. package/dist/schemas/memory-schemas.js.map +0 -1
  549. package/dist/schemas/schema-utils.d.ts +0 -87
  550. package/dist/schemas/schema-utils.d.ts.map +0 -1
  551. package/dist/schemas/schema-utils.js +0 -320
  552. package/dist/schemas/schema-utils.js.map +0 -1
  553. package/dist/schemas/setup-arg-validators.d.ts +0 -91
  554. package/dist/schemas/setup-arg-validators.d.ts.map +0 -1
  555. package/dist/schemas/setup-arg-validators.js +0 -98
  556. package/dist/schemas/setup-arg-validators.js.map +0 -1
  557. package/dist/schemas/setup-schemas.d.ts +0 -335
  558. package/dist/schemas/setup-schemas.d.ts.map +0 -1
  559. package/dist/schemas/setup-schemas.js +0 -260
  560. package/dist/schemas/setup-schemas.js.map +0 -1
  561. package/dist/schemas/validation-arg-validators.d.ts +0 -18
  562. package/dist/schemas/validation-arg-validators.d.ts.map +0 -1
  563. package/dist/schemas/validation-arg-validators.js +0 -59
  564. package/dist/schemas/validation-arg-validators.js.map +0 -1
  565. package/dist/schemas/validation-schemas.d.ts +0 -80
  566. package/dist/schemas/validation-schemas.d.ts.map +0 -1
  567. package/dist/schemas/validation-schemas.js +0 -88
  568. package/dist/schemas/validation-schemas.js.map +0 -1
  569. package/dist/schemas/wu-lifecycle-arg-validators.d.ts +0 -118
  570. package/dist/schemas/wu-lifecycle-arg-validators.d.ts.map +0 -1
  571. package/dist/schemas/wu-lifecycle-arg-validators.js +0 -82
  572. package/dist/schemas/wu-lifecycle-arg-validators.js.map +0 -1
  573. package/dist/schemas/wu-lifecycle-schemas.d.ts +0 -362
  574. package/dist/schemas/wu-lifecycle-schemas.d.ts.map +0 -1
  575. package/dist/schemas/wu-lifecycle-schemas.js +0 -284
  576. package/dist/schemas/wu-lifecycle-schemas.js.map +0 -1
  577. package/dist/section-headings.d.ts +0 -35
  578. package/dist/section-headings.d.ts.map +0 -1
  579. package/dist/section-headings.js +0 -54
  580. package/dist/section-headings.js.map +0 -1
  581. package/dist/spawn-escalation.d.ts +0 -91
  582. package/dist/spawn-escalation.d.ts.map +0 -1
  583. package/dist/spawn-escalation.js +0 -258
  584. package/dist/spawn-escalation.js.map +0 -1
  585. package/dist/spawn-monitor.d.ts +0 -230
  586. package/dist/spawn-monitor.d.ts.map +0 -1
  587. package/dist/spawn-monitor.js +0 -675
  588. package/dist/spawn-monitor.js.map +0 -1
  589. package/dist/spawn-prompt-schema.d.ts +0 -107
  590. package/dist/spawn-prompt-schema.d.ts.map +0 -1
  591. package/dist/spawn-prompt-schema.js +0 -163
  592. package/dist/spawn-prompt-schema.js.map +0 -1
  593. package/dist/spawn-recovery.d.ts +0 -83
  594. package/dist/spawn-recovery.d.ts.map +0 -1
  595. package/dist/spawn-recovery.js +0 -299
  596. package/dist/spawn-recovery.js.map +0 -1
  597. package/dist/spawn-registry-schema.d.ts +0 -122
  598. package/dist/spawn-registry-schema.d.ts.map +0 -1
  599. package/dist/spawn-registry-schema.js +0 -129
  600. package/dist/spawn-registry-schema.js.map +0 -1
  601. package/dist/spawn-registry-store.d.ts +0 -161
  602. package/dist/spawn-registry-store.d.ts.map +0 -1
  603. package/dist/spawn-registry-store.js +0 -301
  604. package/dist/spawn-registry-store.js.map +0 -1
  605. package/dist/spawn-strategy.d.ts +0 -60
  606. package/dist/spawn-strategy.d.ts.map +0 -1
  607. package/dist/spawn-strategy.js +0 -112
  608. package/dist/spawn-strategy.js.map +0 -1
  609. package/dist/spawn-tree.d.ts +0 -125
  610. package/dist/spawn-tree.d.ts.map +0 -1
  611. package/dist/spawn-tree.js +0 -286
  612. package/dist/spawn-tree.js.map +0 -1
  613. package/dist/stamp-status-validator.d.ts +0 -77
  614. package/dist/stamp-status-validator.d.ts.map +0 -1
  615. package/dist/stamp-status-validator.js +0 -138
  616. package/dist/stamp-status-validator.js.map +0 -1
  617. package/dist/stamp-tracking.d.ts +0 -12
  618. package/dist/stamp-tracking.d.ts.map +0 -1
  619. package/dist/stamp-tracking.js +0 -43
  620. package/dist/stamp-tracking.js.map +0 -1
  621. package/dist/stamp-utils.d.ts +0 -94
  622. package/dist/stamp-utils.d.ts.map +0 -1
  623. package/dist/stamp-utils.js +0 -245
  624. package/dist/stamp-utils.js.map +0 -1
  625. package/dist/state-cleanup-core.d.ts +0 -206
  626. package/dist/state-cleanup-core.d.ts.map +0 -1
  627. package/dist/state-cleanup-core.js +0 -225
  628. package/dist/state-cleanup-core.js.map +0 -1
  629. package/dist/state-doctor-core.d.ts +0 -177
  630. package/dist/state-doctor-core.d.ts.map +0 -1
  631. package/dist/state-doctor-core.js +0 -395
  632. package/dist/state-doctor-core.js.map +0 -1
  633. package/dist/state-machine.d.ts +0 -10
  634. package/dist/state-machine.d.ts.map +0 -1
  635. package/dist/state-machine.js +0 -89
  636. package/dist/state-machine.js.map +0 -1
  637. package/dist/stream-error-handler.d.ts +0 -68
  638. package/dist/stream-error-handler.d.ts.map +0 -1
  639. package/dist/stream-error-handler.js +0 -77
  640. package/dist/stream-error-handler.js.map +0 -1
  641. package/dist/system-map-validator.d.ts +0 -111
  642. package/dist/system-map-validator.d.ts.map +0 -1
  643. package/dist/system-map-validator.js +0 -383
  644. package/dist/system-map-validator.js.map +0 -1
  645. package/dist/telemetry.d.ts +0 -81
  646. package/dist/telemetry.d.ts.map +0 -1
  647. package/dist/telemetry.js +0 -219
  648. package/dist/telemetry.js.map +0 -1
  649. package/dist/template-loader.d.ts +0 -151
  650. package/dist/template-loader.d.ts.map +0 -1
  651. package/dist/template-loader.js +0 -400
  652. package/dist/template-loader.js.map +0 -1
  653. package/dist/test-baseline.d.ts +0 -177
  654. package/dist/test-baseline.d.ts.map +0 -1
  655. package/dist/test-baseline.js +0 -286
  656. package/dist/test-baseline.js.map +0 -1
  657. package/dist/token-counter.d.ts +0 -50
  658. package/dist/token-counter.d.ts.map +0 -1
  659. package/dist/token-counter.js +0 -144
  660. package/dist/token-counter.js.map +0 -1
  661. package/dist/usecases/analyze-recovery.usecase.d.ts +0 -43
  662. package/dist/usecases/analyze-recovery.usecase.d.ts.map +0 -1
  663. package/dist/usecases/analyze-recovery.usecase.js +0 -34
  664. package/dist/usecases/analyze-recovery.usecase.js.map +0 -1
  665. package/dist/usecases/compute-context.usecase.d.ts +0 -63
  666. package/dist/usecases/compute-context.usecase.d.ts.map +0 -1
  667. package/dist/usecases/compute-context.usecase.js +0 -91
  668. package/dist/usecases/compute-context.usecase.js.map +0 -1
  669. package/dist/usecases/get-dashboard-data.usecase.d.ts +0 -53
  670. package/dist/usecases/get-dashboard-data.usecase.d.ts.map +0 -1
  671. package/dist/usecases/get-dashboard-data.usecase.js +0 -54
  672. package/dist/usecases/get-dashboard-data.usecase.js.map +0 -1
  673. package/dist/usecases/get-suggestions.usecase.d.ts +0 -101
  674. package/dist/usecases/get-suggestions.usecase.d.ts.map +0 -1
  675. package/dist/usecases/get-suggestions.usecase.js +0 -148
  676. package/dist/usecases/get-suggestions.usecase.js.map +0 -1
  677. package/dist/usecases/index.d.ts +0 -15
  678. package/dist/usecases/index.d.ts.map +0 -1
  679. package/dist/usecases/index.js +0 -21
  680. package/dist/usecases/index.js.map +0 -1
  681. package/dist/usecases/validate-command.usecase.d.ts +0 -56
  682. package/dist/usecases/validate-command.usecase.d.ts.map +0 -1
  683. package/dist/usecases/validate-command.usecase.js +0 -143
  684. package/dist/usecases/validate-command.usecase.js.map +0 -1
  685. package/dist/user-normalizer.d.ts +0 -36
  686. package/dist/user-normalizer.d.ts.map +0 -1
  687. package/dist/user-normalizer.js +0 -149
  688. package/dist/user-normalizer.js.map +0 -1
  689. package/dist/validation/command-registry.d.ts +0 -26
  690. package/dist/validation/command-registry.d.ts.map +0 -1
  691. package/dist/validation/command-registry.js +0 -269
  692. package/dist/validation/command-registry.js.map +0 -1
  693. package/dist/validation/index.d.ts +0 -16
  694. package/dist/validation/index.d.ts.map +0 -1
  695. package/dist/validation/index.js +0 -18
  696. package/dist/validation/index.js.map +0 -1
  697. package/dist/validation/types.d.ts +0 -140
  698. package/dist/validation/types.d.ts.map +0 -1
  699. package/dist/validation/types.js +0 -4
  700. package/dist/validation/types.js.map +0 -1
  701. package/dist/validation/validate-command.d.ts +0 -16
  702. package/dist/validation/validate-command.d.ts.map +0 -1
  703. package/dist/validation/validate-command.js +0 -163
  704. package/dist/validation/validate-command.js.map +0 -1
  705. package/dist/validators/backlog-sync.d.ts +0 -11
  706. package/dist/validators/backlog-sync.d.ts.map +0 -1
  707. package/dist/validators/backlog-sync.js +0 -65
  708. package/dist/validators/backlog-sync.js.map +0 -1
  709. package/dist/validators/phi-constants.d.ts +0 -98
  710. package/dist/validators/phi-constants.d.ts.map +0 -1
  711. package/dist/validators/phi-constants.js +0 -153
  712. package/dist/validators/phi-constants.js.map +0 -1
  713. package/dist/validators/phi-scanner.d.ts +0 -59
  714. package/dist/validators/phi-scanner.d.ts.map +0 -1
  715. package/dist/validators/phi-scanner.js +0 -222
  716. package/dist/validators/phi-scanner.js.map +0 -1
  717. package/dist/validators/supabase-docs-linter.d.ts +0 -15
  718. package/dist/validators/supabase-docs-linter.d.ts.map +0 -1
  719. package/dist/validators/supabase-docs-linter.js +0 -45
  720. package/dist/validators/supabase-docs-linter.js.map +0 -1
  721. package/dist/validators/wu-tasks.d.ts +0 -21
  722. package/dist/validators/wu-tasks.d.ts.map +0 -1
  723. package/dist/validators/wu-tasks.js +0 -93
  724. package/dist/validators/wu-tasks.js.map +0 -1
  725. package/dist/work-classifier.d.ts +0 -95
  726. package/dist/work-classifier.d.ts.map +0 -1
  727. package/dist/work-classifier.js +0 -408
  728. package/dist/work-classifier.js.map +0 -1
  729. package/dist/worktree-ownership.d.ts +0 -51
  730. package/dist/worktree-ownership.d.ts.map +0 -1
  731. package/dist/worktree-ownership.js +0 -77
  732. package/dist/worktree-ownership.js.map +0 -1
  733. package/dist/worktree-scanner.d.ts +0 -118
  734. package/dist/worktree-scanner.d.ts.map +0 -1
  735. package/dist/worktree-scanner.js +0 -171
  736. package/dist/worktree-scanner.js.map +0 -1
  737. package/dist/worktree-symlink.d.ts +0 -86
  738. package/dist/worktree-symlink.d.ts.map +0 -1
  739. package/dist/worktree-symlink.js +0 -349
  740. package/dist/worktree-symlink.js.map +0 -1
  741. package/dist/wu-backlog-updater.d.ts +0 -10
  742. package/dist/wu-backlog-updater.d.ts.map +0 -1
  743. package/dist/wu-backlog-updater.js +0 -40
  744. package/dist/wu-backlog-updater.js.map +0 -1
  745. package/dist/wu-checkpoint.d.ts +0 -110
  746. package/dist/wu-checkpoint.d.ts.map +0 -1
  747. package/dist/wu-checkpoint.js +0 -236
  748. package/dist/wu-checkpoint.js.map +0 -1
  749. package/dist/wu-claim-helpers.d.ts +0 -21
  750. package/dist/wu-claim-helpers.d.ts.map +0 -1
  751. package/dist/wu-claim-helpers.js +0 -66
  752. package/dist/wu-claim-helpers.js.map +0 -1
  753. package/dist/wu-claim-resume.d.ts +0 -106
  754. package/dist/wu-claim-resume.d.ts.map +0 -1
  755. package/dist/wu-claim-resume.js +0 -279
  756. package/dist/wu-claim-resume.js.map +0 -1
  757. package/dist/wu-cli-constants.d.ts +0 -425
  758. package/dist/wu-cli-constants.d.ts.map +0 -1
  759. package/dist/wu-cli-constants.js +0 -430
  760. package/dist/wu-cli-constants.js.map +0 -1
  761. package/dist/wu-consistency-checker.d.ts +0 -189
  762. package/dist/wu-consistency-checker.d.ts.map +0 -1
  763. package/dist/wu-consistency-checker.js +0 -1026
  764. package/dist/wu-consistency-checker.js.map +0 -1
  765. package/dist/wu-constants.d.ts +0 -29
  766. package/dist/wu-constants.d.ts.map +0 -1
  767. package/dist/wu-constants.js +0 -37
  768. package/dist/wu-constants.js.map +0 -1
  769. package/dist/wu-context-constants.d.ts +0 -270
  770. package/dist/wu-context-constants.d.ts.map +0 -1
  771. package/dist/wu-context-constants.js +0 -267
  772. package/dist/wu-context-constants.js.map +0 -1
  773. package/dist/wu-create-defaults.d.ts +0 -11
  774. package/dist/wu-create-defaults.d.ts.map +0 -1
  775. package/dist/wu-create-defaults.js +0 -13
  776. package/dist/wu-create-defaults.js.map +0 -1
  777. package/dist/wu-create-validators.d.ts +0 -89
  778. package/dist/wu-create-validators.d.ts.map +0 -1
  779. package/dist/wu-create-validators.js +0 -215
  780. package/dist/wu-create-validators.js.map +0 -1
  781. package/dist/wu-domain-constants.d.ts +0 -295
  782. package/dist/wu-domain-constants.d.ts.map +0 -1
  783. package/dist/wu-domain-constants.js +0 -399
  784. package/dist/wu-domain-constants.js.map +0 -1
  785. package/dist/wu-done-branch-only.d.ts +0 -120
  786. package/dist/wu-done-branch-only.d.ts.map +0 -1
  787. package/dist/wu-done-branch-only.js +0 -412
  788. package/dist/wu-done-branch-only.js.map +0 -1
  789. package/dist/wu-done-branch-utils.d.ts +0 -8
  790. package/dist/wu-done-branch-utils.d.ts.map +0 -1
  791. package/dist/wu-done-branch-utils.js +0 -34
  792. package/dist/wu-done-branch-utils.js.map +0 -1
  793. package/dist/wu-done-cleanup.d.ts +0 -6
  794. package/dist/wu-done-cleanup.d.ts.map +0 -1
  795. package/dist/wu-done-cleanup.js +0 -161
  796. package/dist/wu-done-cleanup.js.map +0 -1
  797. package/dist/wu-done-concurrent-merge.d.ts +0 -103
  798. package/dist/wu-done-concurrent-merge.d.ts.map +0 -1
  799. package/dist/wu-done-concurrent-merge.js +0 -375
  800. package/dist/wu-done-concurrent-merge.js.map +0 -1
  801. package/dist/wu-done-docs-generate.d.ts +0 -72
  802. package/dist/wu-done-docs-generate.d.ts.map +0 -1
  803. package/dist/wu-done-docs-generate.js +0 -129
  804. package/dist/wu-done-docs-generate.js.map +0 -1
  805. package/dist/wu-done-docs-only.d.ts +0 -16
  806. package/dist/wu-done-docs-only.d.ts.map +0 -1
  807. package/dist/wu-done-docs-only.js +0 -68
  808. package/dist/wu-done-docs-only.js.map +0 -1
  809. package/dist/wu-done-errors.d.ts +0 -13
  810. package/dist/wu-done-errors.d.ts.map +0 -1
  811. package/dist/wu-done-errors.js +0 -27
  812. package/dist/wu-done-errors.js.map +0 -1
  813. package/dist/wu-done-initiative-sync.d.ts +0 -13
  814. package/dist/wu-done-initiative-sync.d.ts.map +0 -1
  815. package/dist/wu-done-initiative-sync.js +0 -235
  816. package/dist/wu-done-initiative-sync.js.map +0 -1
  817. package/dist/wu-done-inputs.d.ts +0 -10
  818. package/dist/wu-done-inputs.d.ts.map +0 -1
  819. package/dist/wu-done-inputs.js +0 -55
  820. package/dist/wu-done-inputs.js.map +0 -1
  821. package/dist/wu-done-machine.d.ts +0 -175
  822. package/dist/wu-done-machine.d.ts.map +0 -1
  823. package/dist/wu-done-machine.js +0 -227
  824. package/dist/wu-done-machine.js.map +0 -1
  825. package/dist/wu-done-merged-worktree.d.ts +0 -65
  826. package/dist/wu-done-merged-worktree.d.ts.map +0 -1
  827. package/dist/wu-done-merged-worktree.js +0 -197
  828. package/dist/wu-done-merged-worktree.js.map +0 -1
  829. package/dist/wu-done-messages.d.ts +0 -120
  830. package/dist/wu-done-messages.d.ts.map +0 -1
  831. package/dist/wu-done-messages.js +0 -191
  832. package/dist/wu-done-messages.js.map +0 -1
  833. package/dist/wu-done-metadata.d.ts +0 -123
  834. package/dist/wu-done-metadata.d.ts.map +0 -1
  835. package/dist/wu-done-metadata.js +0 -240
  836. package/dist/wu-done-metadata.js.map +0 -1
  837. package/dist/wu-done-paths.d.ts +0 -87
  838. package/dist/wu-done-paths.d.ts.map +0 -1
  839. package/dist/wu-done-paths.js +0 -263
  840. package/dist/wu-done-paths.js.map +0 -1
  841. package/dist/wu-done-pr.d.ts +0 -76
  842. package/dist/wu-done-pr.d.ts.map +0 -1
  843. package/dist/wu-done-pr.js +0 -189
  844. package/dist/wu-done-pr.js.map +0 -1
  845. package/dist/wu-done-preflight.d.ts +0 -65
  846. package/dist/wu-done-preflight.d.ts.map +0 -1
  847. package/dist/wu-done-preflight.js +0 -205
  848. package/dist/wu-done-preflight.js.map +0 -1
  849. package/dist/wu-done-retry-helpers.d.ts +0 -75
  850. package/dist/wu-done-retry-helpers.d.ts.map +0 -1
  851. package/dist/wu-done-retry-helpers.js +0 -175
  852. package/dist/wu-done-retry-helpers.js.map +0 -1
  853. package/dist/wu-done-ui.d.ts +0 -29
  854. package/dist/wu-done-ui.d.ts.map +0 -1
  855. package/dist/wu-done-ui.js +0 -74
  856. package/dist/wu-done-ui.js.map +0 -1
  857. package/dist/wu-done-validation.d.ts +0 -128
  858. package/dist/wu-done-validation.d.ts.map +0 -1
  859. package/dist/wu-done-validation.js +0 -530
  860. package/dist/wu-done-validation.js.map +0 -1
  861. package/dist/wu-done-validators.d.ts +0 -16
  862. package/dist/wu-done-validators.d.ts.map +0 -1
  863. package/dist/wu-done-validators.js +0 -16
  864. package/dist/wu-done-validators.js.map +0 -1
  865. package/dist/wu-done-worktree-services.d.ts +0 -174
  866. package/dist/wu-done-worktree-services.d.ts.map +0 -1
  867. package/dist/wu-done-worktree-services.js +0 -274
  868. package/dist/wu-done-worktree-services.js.map +0 -1
  869. package/dist/wu-done-worktree.d.ts +0 -229
  870. package/dist/wu-done-worktree.d.ts.map +0 -1
  871. package/dist/wu-done-worktree.js +0 -1290
  872. package/dist/wu-done-worktree.js.map +0 -1
  873. package/dist/wu-events-cleanup.d.ts +0 -131
  874. package/dist/wu-events-cleanup.d.ts.map +0 -1
  875. package/dist/wu-events-cleanup.js +0 -404
  876. package/dist/wu-events-cleanup.js.map +0 -1
  877. package/dist/wu-git-constants.d.ts +0 -176
  878. package/dist/wu-git-constants.d.ts.map +0 -1
  879. package/dist/wu-git-constants.js +0 -178
  880. package/dist/wu-git-constants.js.map +0 -1
  881. package/dist/wu-helpers.d.ts +0 -133
  882. package/dist/wu-helpers.d.ts.map +0 -1
  883. package/dist/wu-helpers.js +0 -268
  884. package/dist/wu-helpers.js.map +0 -1
  885. package/dist/wu-id-generator.d.ts +0 -51
  886. package/dist/wu-id-generator.d.ts.map +0 -1
  887. package/dist/wu-id-generator.js +0 -110
  888. package/dist/wu-id-generator.js.map +0 -1
  889. package/dist/wu-lint.d.ts +0 -191
  890. package/dist/wu-lint.d.ts.map +0 -1
  891. package/dist/wu-lint.js +0 -338
  892. package/dist/wu-lint.js.map +0 -1
  893. package/dist/wu-list.d.ts +0 -76
  894. package/dist/wu-list.d.ts.map +0 -1
  895. package/dist/wu-list.js +0 -181
  896. package/dist/wu-list.js.map +0 -1
  897. package/dist/wu-paths-constants.d.ts +0 -264
  898. package/dist/wu-paths-constants.d.ts.map +0 -1
  899. package/dist/wu-paths-constants.js +0 -272
  900. package/dist/wu-paths-constants.js.map +0 -1
  901. package/dist/wu-paths.d.ts +0 -211
  902. package/dist/wu-paths.d.ts.map +0 -1
  903. package/dist/wu-paths.js +0 -223
  904. package/dist/wu-paths.js.map +0 -1
  905. package/dist/wu-preflight-validators.d.ts +0 -64
  906. package/dist/wu-preflight-validators.d.ts.map +0 -1
  907. package/dist/wu-preflight-validators.js +0 -277
  908. package/dist/wu-preflight-validators.js.map +0 -1
  909. package/dist/wu-recovery.d.ts +0 -220
  910. package/dist/wu-recovery.d.ts.map +0 -1
  911. package/dist/wu-recovery.js +0 -470
  912. package/dist/wu-recovery.js.map +0 -1
  913. package/dist/wu-repair-core.d.ts +0 -150
  914. package/dist/wu-repair-core.d.ts.map +0 -1
  915. package/dist/wu-repair-core.js +0 -718
  916. package/dist/wu-repair-core.js.map +0 -1
  917. package/dist/wu-rules-core.d.ts +0 -95
  918. package/dist/wu-rules-core.d.ts.map +0 -1
  919. package/dist/wu-rules-core.js +0 -401
  920. package/dist/wu-rules-core.js.map +0 -1
  921. package/dist/wu-rules-engine.d.ts +0 -29
  922. package/dist/wu-rules-engine.d.ts.map +0 -1
  923. package/dist/wu-rules-engine.js +0 -61
  924. package/dist/wu-rules-engine.js.map +0 -1
  925. package/dist/wu-rules-resolvers.d.ts +0 -19
  926. package/dist/wu-rules-resolvers.d.ts.map +0 -1
  927. package/dist/wu-rules-resolvers.js +0 -210
  928. package/dist/wu-rules-resolvers.js.map +0 -1
  929. package/dist/wu-schema-normalization.d.ts +0 -18
  930. package/dist/wu-schema-normalization.d.ts.map +0 -1
  931. package/dist/wu-schema-normalization.js +0 -87
  932. package/dist/wu-schema-normalization.js.map +0 -1
  933. package/dist/wu-schema.d.ts +0 -772
  934. package/dist/wu-schema.d.ts.map +0 -1
  935. package/dist/wu-schema.js +0 -897
  936. package/dist/wu-schema.js.map +0 -1
  937. package/dist/wu-spawn-context.d.ts +0 -66
  938. package/dist/wu-spawn-context.d.ts.map +0 -1
  939. package/dist/wu-spawn-context.js +0 -185
  940. package/dist/wu-spawn-context.js.map +0 -1
  941. package/dist/wu-spawn-helpers.d.ts +0 -110
  942. package/dist/wu-spawn-helpers.d.ts.map +0 -1
  943. package/dist/wu-spawn-helpers.js +0 -276
  944. package/dist/wu-spawn-helpers.js.map +0 -1
  945. package/dist/wu-spawn-skills.d.ts +0 -39
  946. package/dist/wu-spawn-skills.d.ts.map +0 -1
  947. package/dist/wu-spawn-skills.js +0 -214
  948. package/dist/wu-spawn-skills.js.map +0 -1
  949. package/dist/wu-spawn.d.ts +0 -394
  950. package/dist/wu-spawn.d.ts.map +0 -1
  951. package/dist/wu-spawn.js +0 -1977
  952. package/dist/wu-spawn.js.map +0 -1
  953. package/dist/wu-state-schema.d.ts +0 -237
  954. package/dist/wu-state-schema.d.ts.map +0 -1
  955. package/dist/wu-state-schema.js +0 -172
  956. package/dist/wu-state-schema.js.map +0 -1
  957. package/dist/wu-state-store.d.ts +0 -275
  958. package/dist/wu-state-store.d.ts.map +0 -1
  959. package/dist/wu-state-store.js +0 -1057
  960. package/dist/wu-state-store.js.map +0 -1
  961. package/dist/wu-status-transition.d.ts +0 -58
  962. package/dist/wu-status-transition.d.ts.map +0 -1
  963. package/dist/wu-status-transition.js +0 -370
  964. package/dist/wu-status-transition.js.map +0 -1
  965. package/dist/wu-status-updater.d.ts +0 -18
  966. package/dist/wu-status-updater.d.ts.map +0 -1
  967. package/dist/wu-status-updater.js +0 -123
  968. package/dist/wu-status-updater.js.map +0 -1
  969. package/dist/wu-statuses.d.ts +0 -154
  970. package/dist/wu-statuses.d.ts.map +0 -1
  971. package/dist/wu-statuses.js +0 -176
  972. package/dist/wu-statuses.js.map +0 -1
  973. package/dist/wu-transaction-collectors.d.ts +0 -116
  974. package/dist/wu-transaction-collectors.d.ts.map +0 -1
  975. package/dist/wu-transaction-collectors.js +0 -273
  976. package/dist/wu-transaction-collectors.js.map +0 -1
  977. package/dist/wu-transaction.d.ts +0 -172
  978. package/dist/wu-transaction.d.ts.map +0 -1
  979. package/dist/wu-transaction.js +0 -288
  980. package/dist/wu-transaction.js.map +0 -1
  981. package/dist/wu-type-helpers.d.ts +0 -26
  982. package/dist/wu-type-helpers.d.ts.map +0 -1
  983. package/dist/wu-type-helpers.js +0 -45
  984. package/dist/wu-type-helpers.js.map +0 -1
  985. package/dist/wu-ui-constants.d.ts +0 -235
  986. package/dist/wu-ui-constants.d.ts.map +0 -1
  987. package/dist/wu-ui-constants.js +0 -237
  988. package/dist/wu-ui-constants.js.map +0 -1
  989. package/dist/wu-validation-constants.d.ts +0 -61
  990. package/dist/wu-validation-constants.d.ts.map +0 -1
  991. package/dist/wu-validation-constants.js +0 -69
  992. package/dist/wu-validation-constants.js.map +0 -1
  993. package/dist/wu-validation.d.ts +0 -121
  994. package/dist/wu-validation.d.ts.map +0 -1
  995. package/dist/wu-validation.js +0 -266
  996. package/dist/wu-validation.js.map +0 -1
  997. package/dist/wu-validator.d.ts +0 -128
  998. package/dist/wu-validator.d.ts.map +0 -1
  999. package/dist/wu-validator.js +0 -445
  1000. package/dist/wu-validator.js.map +0 -1
  1001. package/dist/wu-yaml-fixer.d.ts +0 -74
  1002. package/dist/wu-yaml-fixer.d.ts.map +0 -1
  1003. package/dist/wu-yaml-fixer.js +0 -273
  1004. package/dist/wu-yaml-fixer.js.map +0 -1
  1005. package/dist/wu-yaml.d.ts +0 -110
  1006. package/dist/wu-yaml.d.ts.map +0 -1
  1007. package/dist/wu-yaml.js +0 -300
  1008. package/dist/wu-yaml.js.map +0 -1
package/dist/wu-schema.js DELETED
@@ -1,897 +0,0 @@
1
- // Copyright (c) 2026 Hellmai Ltd
2
- // SPDX-License-Identifier: AGPL-3.0-only
3
- /**
4
- * Work Unit YAML Schema
5
- *
6
- * Zod schema for runtime validation of WU YAML structure.
7
- * Provides compile-time type inference and semantic validation.
8
- *
9
- * Part of WU-1162: Add Zod schema validation to prevent placeholder WU completions
10
- * Part of WU-1539: Add BaseWUSchema pattern for create/edit validation
11
- *
12
- * Schema Architecture (DRY pattern):
13
- * - BaseWUSchema: Structural validation only (field types, formats, lengths)
14
- * - WUSchema: Extends base + placeholder rejection (for wu:claim, wu:done)
15
- * - ReadyWUSchema: Alias for BaseWUSchema (for wu:create, wu:edit)
16
- *
17
- * @see {@link packages/@lumenflow/cli/src/wu-done.ts} - Consumer (validates spec completeness, uses WUSchema)
18
- * @see {@link packages/@lumenflow/cli/src/wu-claim.ts} - Consumer (validates spec completeness, uses WUSchema)
19
- * @see {@link packages/@lumenflow/cli/src/wu-create.ts} - Consumer (structural validation, uses ReadyWUSchema)
20
- * @see {@link packages/@lumenflow/cli/src/wu-edit.ts} - Consumer (structural validation, uses ReadyWUSchema)
21
- * @see {@link packages/@lumenflow/cli/src/validate.ts} - Consumer (CI validation)
22
- * @see {@link apps/web/src/lib/llm/schemas/orchestrator.ts} - Pattern reference
23
- */
24
- import { z } from 'zod';
25
- import { WU_STATUS_GROUPS, WU_DEFAULTS, STRING_LITERALS, WU_EXPOSURE_VALUES, } from './wu-constants.js';
26
- import { normalizeISODateTime } from './date-utils.js';
27
- /**
28
- * Valid WU status values derived from WU_STATUS constant (DRY principle)
29
- * Used for Zod enum validation with improved error messages
30
- * Note: Defined as tuple for Zod enum compatibility
31
- */
32
- const VALID_STATUSES = [
33
- 'todo',
34
- 'ready',
35
- 'backlog',
36
- 'in_progress',
37
- 'blocked',
38
- 'done',
39
- 'completed',
40
- 'cancelled',
41
- 'abandoned',
42
- 'deferred',
43
- 'closed',
44
- 'superseded',
45
- ];
46
- /**
47
- * Placeholder sentinel constant
48
- *
49
- * Used in wu:create template generation and validation.
50
- * Single source of truth for placeholder detection (DRY principle).
51
- *
52
- * @example
53
- * // tools/wu-create.ts
54
- * description: `${PLACEHOLDER_SENTINEL} Describe the work...`
55
- *
56
- * @example
57
- * // tools/validate.ts
58
- * if (doc.description.includes(PLACEHOLDER_SENTINEL)) { error(); }
59
- */
60
- export const PLACEHOLDER_SENTINEL = '[PLACEHOLDER]';
61
- /**
62
- * Minimum description length requirement
63
- * Stored as constant for DRY error message generation
64
- */
65
- const MIN_DESCRIPTION_LENGTH = 50;
66
- /**
67
- * WU ID format validation message (DRY principle)
68
- * Used across blocks, blocked_by, and ui_pairing_wus fields
69
- */
70
- const WU_ID_FORMAT_MESSAGE = 'Must be WU-XXX format';
71
- /**
72
- * Acceptance criterion error message
73
- * Stored as constant for DRY error message generation (sonarjs/no-duplicate-string)
74
- */
75
- const ACCEPTANCE_REQUIRED_MSG = 'At least one acceptance criterion required';
76
- // =============================================================================
77
- // WU-1750: NORMALIZATION TRANSFORMS (Watertight YAML validation)
78
- // =============================================================================
79
- /**
80
- * Regex pattern matching embedded newlines (both literal and escaped)
81
- * Handles: "a\nb" (literal newline) and "a\\nb" (escaped backslash-n)
82
- */
83
- const NEWLINE_PATTERN = /\\n|\n/;
84
- /**
85
- * Transform: Normalize string arrays by splitting embedded newlines
86
- *
87
- * WU-1750: Agents sometimes pass multi-item content as single strings with \n.
88
- * This transform auto-repairs: ["a\nb\nc"] → ["a", "b", "c"]
89
- *
90
- * @example
91
- * // Input: ["tools/a.ts\ntools/b.js"]
92
- * // Output: ["tools/a.js", "tools/b.js"]
93
- */
94
- const normalizedStringArray = z.array(z.string()).transform((arr) => arr
95
- .flatMap((s) => s.split(NEWLINE_PATTERN))
96
- .map((s) => s.trim())
97
- .filter(Boolean));
98
- /**
99
- * Transform: Normalize description/notes strings by converting escaped newlines
100
- *
101
- * WU-1750: YAML quoted strings preserve literal \\n as two characters.
102
- * This transform converts them to actual newlines: "a\\n\\nb" → "a\n\nb"
103
- *
104
- * @example
105
- * // Input: "Problem:\\n\\n1. First issue"
106
- * // Output: "Problem:\n\n1. First issue"
107
- */
108
- const _normalizedMultilineString = z.string().transform((s) => s.replace(/\\n/g, '\n'));
109
- /**
110
- * Refinement: File path cannot contain newlines (post-normalization safety check)
111
- *
112
- * WU-1750: After normalization, paths should be clean. This catches UnsafeAny edge cases.
113
- */
114
- const filePathItem = z.string().refine((s) => !s.includes('\n') && !s.includes('\\n'), {
115
- message: 'File path cannot contain newlines - split into separate array items',
116
- });
117
- /**
118
- * Normalized code_paths: split embedded newlines + validate each path
119
- */
120
- const normalizedCodePaths = normalizedStringArray.pipe(z.array(filePathItem)).default([]);
121
- /**
122
- * Normalized test paths object: all test arrays normalized
123
- */
124
- const normalizedTestPaths = z
125
- .object({
126
- manual: normalizedStringArray.optional(),
127
- unit: normalizedStringArray.optional(),
128
- integration: normalizedStringArray.optional(),
129
- e2e: normalizedStringArray.optional(),
130
- })
131
- .optional();
132
- // =============================================================================
133
- // BASE FIELD DEFINITIONS (DRY - shared between BaseWUSchema and WUSchema)
134
- // =============================================================================
135
- /**
136
- * Base description field (structural validation only)
137
- * WU-1539: Fixed template string bug (single quotes → function message)
138
- * WU-1750: Added normalization of escaped newlines (\\n → actual newlines)
139
- */
140
- const baseDescriptionField = z
141
- .string()
142
- .min(1, 'Description is required')
143
- .transform((s) => s.replace(/\\n/g, '\n')) // WU-1750: Normalize escaped newlines
144
- .refine((val) => val.trim().length >= MIN_DESCRIPTION_LENGTH, {
145
- // WU-1539 fix: Use function message for dynamic interpolation
146
- message: `Description must be at least ${MIN_DESCRIPTION_LENGTH} characters`,
147
- });
148
- /**
149
- * Strict description field (with placeholder rejection)
150
- * Used by wu:claim and wu:done to ensure placeholders are filled
151
- * WU-1750: Added normalization of escaped newlines (\\n → actual newlines)
152
- */
153
- const strictDescriptionField = z
154
- .string()
155
- .min(1, 'Description is required')
156
- .transform((s) => s.replace(/\\n/g, '\n')) // WU-1750: Normalize escaped newlines
157
- .refine((val) => !val.includes(PLACEHOLDER_SENTINEL), {
158
- message: `Description cannot contain ${PLACEHOLDER_SENTINEL} marker`,
159
- })
160
- .refine((val) => val.trim().length >= MIN_DESCRIPTION_LENGTH, {
161
- // WU-1539 fix: Use function message for dynamic interpolation
162
- message: `Description must be at least ${MIN_DESCRIPTION_LENGTH} characters`,
163
- });
164
- /**
165
- * Recursive helper: Check all nested values for at least one item
166
- * Shared between base and strict acceptance schemas
167
- */
168
- const hasItems = (value) => {
169
- if (Array.isArray(value)) {
170
- return value.length > 0;
171
- }
172
- if (typeof value === 'object' && value !== null) {
173
- return Object.values(value).some(hasItems);
174
- }
175
- return false;
176
- };
177
- /**
178
- * Recursive helper: Check all strings for PLACEHOLDER_SENTINEL
179
- * Used only by strict acceptance schema
180
- */
181
- const checkStringsForPlaceholder = (value) => {
182
- if (typeof value === 'string') {
183
- return !value.includes(PLACEHOLDER_SENTINEL);
184
- }
185
- if (Array.isArray(value)) {
186
- return value.every(checkStringsForPlaceholder);
187
- }
188
- if (typeof value === 'object' && value !== null) {
189
- return Object.values(value).every(checkStringsForPlaceholder);
190
- }
191
- return true;
192
- };
193
- /**
194
- * Base acceptance field (structural validation only)
195
- * Validates format but allows placeholder markers
196
- * WU-1750: Added normalization of embedded newlines in array items
197
- */
198
- const baseAcceptanceField = z.union([
199
- // Flat array format (legacy): acceptance: ["item1", "item2"]
200
- // WU-1750: Normalize embedded newlines: ["1. a\n2. b"] → ["1. a", "2. b"]
201
- normalizedStringArray.pipe(z.array(z.string()).min(1, ACCEPTANCE_REQUIRED_MSG)),
202
- // Nested object format (structured): acceptance: { category1: ["item1"], category2: ["item2"] }
203
- z.record(z.string(), normalizedStringArray).refine((obj) => Object.values(obj).some(hasItems), {
204
- message: ACCEPTANCE_REQUIRED_MSG,
205
- }),
206
- ]);
207
- /**
208
- * Strict acceptance field (with placeholder rejection)
209
- * Used by wu:claim and wu:done to ensure placeholders are filled
210
- * WU-1750: Added normalization of embedded newlines in array items
211
- */
212
- const strictAcceptanceField = z.union([
213
- // Flat array format (legacy): acceptance: ["item1", "item2"]
214
- // WU-1750: Normalize embedded newlines: ["1. a\n2. b"] → ["1. a", "2. b"]
215
- normalizedStringArray
216
- .pipe(z.array(z.string()).min(1, ACCEPTANCE_REQUIRED_MSG))
217
- .refine((arr) => !arr.some((item) => item.includes(PLACEHOLDER_SENTINEL)), {
218
- message: `Acceptance criteria cannot contain ${PLACEHOLDER_SENTINEL} markers`,
219
- }),
220
- // Nested object format (structured): acceptance: { category1: ["item1"], category2: ["item2"] }
221
- z
222
- .record(z.string(), normalizedStringArray)
223
- .refine((obj) => Object.values(obj).some(hasItems), {
224
- message: ACCEPTANCE_REQUIRED_MSG,
225
- })
226
- .refine((obj) => checkStringsForPlaceholder(obj), {
227
- message: `Acceptance criteria cannot contain ${PLACEHOLDER_SENTINEL} markers`,
228
- }),
229
- ]);
230
- /**
231
- * Shared field definitions (same for both base and strict schemas)
232
- * DRY: Defined once, used in both schema variants
233
- */
234
- const sharedFields = {
235
- /** WU identifier (e.g., WU-1162) */
236
- id: z.string().regex(/^WU-\d+$/, 'ID must match pattern WU-XXX'),
237
- /** Short title describing the work */
238
- title: z.string().min(1, 'Title is required'),
239
- /** Lane assignment (parent or sub-lane) */
240
- lane: z.string().min(1, 'Lane is required'),
241
- /** Work type classification */
242
- type: z
243
- .enum(['feature', 'bug', 'documentation', 'process', 'tooling', 'chore', 'refactor'], {
244
- error: 'Invalid type',
245
- })
246
- .default(WU_DEFAULTS.type),
247
- /** Current status in workflow */
248
- status: z
249
- .enum(VALID_STATUSES, {
250
- error: `Invalid status. Valid values: ${VALID_STATUSES.join(', ')}`,
251
- })
252
- .default(WU_DEFAULTS.status),
253
- /** Priority level */
254
- priority: z
255
- .enum(['P0', 'P1', 'P2', 'P3'], {
256
- error: 'Invalid priority',
257
- })
258
- .default(WU_DEFAULTS.priority),
259
- /** Creation date (YYYY-MM-DD) */
260
- created: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, 'Created must be YYYY-MM-DD'),
261
- /** Files modified by this WU - WU-1750: Normalized to split embedded newlines */
262
- code_paths: normalizedCodePaths,
263
- /** Test specifications - WU-1750: All test arrays normalized */
264
- tests: normalizedTestPaths.default(WU_DEFAULTS.tests),
265
- /** Output artifacts (stamps, docs, etc.) - WU-1750: Normalized */
266
- artifacts: normalizedStringArray.optional().default(WU_DEFAULTS.artifacts),
267
- /** Upstream WU dependencies (informational, legacy field) - WU-1750: Normalized */
268
- dependencies: normalizedStringArray.optional().default(WU_DEFAULTS.dependencies),
269
- // === Initiative System Fields (WU-1246) ===
270
- /** Parent initiative reference (format: INIT-{number} or slug) */
271
- initiative: z.string().optional(),
272
- /** Phase number within parent initiative */
273
- phase: z.number().int().positive().optional(),
274
- /** WU IDs that this WU blocks (downstream dependencies) - WU-1750: Normalized + validated */
275
- blocks: normalizedStringArray
276
- .pipe(z.array(z.string().regex(/^WU-\d+$/, WU_ID_FORMAT_MESSAGE)))
277
- .optional(),
278
- /** WU IDs that block this WU (upstream dependencies) - WU-1750: Normalized + validated */
279
- blocked_by: normalizedStringArray
280
- .pipe(z.array(z.string().regex(/^WU-\d+$/, WU_ID_FORMAT_MESSAGE)))
281
- .optional(),
282
- /** Cross-cutting tags (orthogonal to initiative) - WU-1750: Normalized */
283
- labels: normalizedStringArray.optional(),
284
- // === End Initiative System Fields ===
285
- /**
286
- * WU-1683: First-class plan field, symmetric with initiative `related_plan`.
287
- * Set via wu:create --plan, wu:edit --plan, or plan:link --id WU-XXX.
288
- */
289
- plan: z.string().optional(),
290
- /**
291
- * WU-1833: References to plans, design docs, external specifications
292
- * WU-1834: Supports both flat string array AND nested object format for backwards compatibility
293
- *
294
- * Flat format (WU-1833+): ['docs/plans/WU-XXX-plan.md']
295
- * Nested format (legacy): [{file: 'docs/path.md', section: 'heading'}]
296
- * Mixed format allowed: ['path.md', {section: 'heading'}]
297
- * Bare object (WU-428): {file: 'docs/path.md', section: 'heading'}
298
- */
299
- spec_refs: z
300
- .union([
301
- // Single object format (WU-428 style): {file: '...', section: '...'}
302
- z.object({
303
- file: z.string().optional(),
304
- section: z.string(),
305
- }),
306
- // Array format (WU-1833+): strings, objects, or mixed
307
- z.array(z.union([
308
- z.string(), // Flat format: 'docs/path.md'
309
- z.object({
310
- // Nested format: {file: 'path', section: 'heading'}
311
- file: z.string().optional(),
312
- section: z.string(),
313
- }),
314
- ])),
315
- ])
316
- .optional(),
317
- /** Known risks or constraints - WU-1750: Normalized */
318
- risks: normalizedStringArray.optional().default(WU_DEFAULTS.risks),
319
- /**
320
- * Free-form notes - supports string or array (auto-converted to string)
321
- * WU-1750: Normalizes escaped newlines (\\n → actual newlines)
322
- */
323
- notes: z
324
- .union([
325
- z.string(),
326
- z.array(z.string()), // Legacy array format - will be converted
327
- ])
328
- .optional()
329
- .transform((val) => {
330
- // Convert array to newline-joined string (legacy format)
331
- if (Array.isArray(val)) {
332
- return val.filter((s) => s.trim().length > 0).join(STRING_LITERALS.NEWLINE);
333
- }
334
- // WU-1750: Normalize escaped newlines in string format
335
- if (typeof val === 'string') {
336
- return val.replace(/\\n/g, '\n');
337
- }
338
- return val ?? WU_DEFAULTS.notes;
339
- }),
340
- /** Requires human review before merge */
341
- requires_review: z.boolean().optional().default(WU_DEFAULTS.requires_review),
342
- /** Locked state (done WUs only) */
343
- locked: z.boolean().optional(),
344
- /** Completion date (done WUs only) - auto-normalized to ISO datetime */
345
- completed_at: z
346
- .string()
347
- .optional()
348
- .transform((val) => normalizeISODateTime(val)),
349
- /** Claimed mode (worktree/branch-only/worktree-pr/branch-pr) */
350
- claimed_mode: z.enum(['worktree', 'branch-only', 'worktree-pr', 'branch-pr']).optional(),
351
- /**
352
- * WU-1589: Canonical branch name for this WU claim.
353
- *
354
- * Set at claim time to record the actual branch used.
355
- * Used by defaultBranchFrom() as highest-priority source for branch resolution.
356
- * Essential for branch-pr mode where cloud agents may use non-lane-derived branch names.
357
- * Cleared on rollback/release/recover when resetting to ready.
358
- */
359
- claimed_branch: z.string().optional(),
360
- /** Assigned agent email */
361
- assigned_to: z.string().email().optional(),
362
- /** Claim timestamp - auto-normalized to ISO datetime */
363
- claimed_at: z
364
- .string()
365
- .optional()
366
- .transform((val) => normalizeISODateTime(val)),
367
- /** Block reason (blocked WUs only) */
368
- blocked_reason: z.string().optional(),
369
- /** Worktree path (claimed WUs only) */
370
- worktree_path: z.string().optional(),
371
- /** Current active session ID (WU-1438: auto-set on claim, cleared on done) */
372
- session_id: z.string().uuid().optional(),
373
- /** Agent sessions (issue logging metadata, WU-1231) */
374
- agent_sessions: z
375
- .array(z.object({
376
- session_id: z.string().uuid(),
377
- started: z.string().datetime(),
378
- completed: z.string().datetime().optional(),
379
- agent_type: z.enum([
380
- 'claude-code',
381
- 'codex-cli',
382
- 'cursor',
383
- 'gemini-cli',
384
- 'windsurf',
385
- 'copilot',
386
- 'other',
387
- ]),
388
- context_tier: z.union([z.literal(1), z.literal(2), z.literal(3)]),
389
- incidents_logged: z.number().int().min(0).default(0),
390
- incidents_major: z.number().int().min(0).default(0),
391
- artifacts: z.array(z.string()).optional(),
392
- }))
393
- .optional(),
394
- // === Exposure System Fields (WU-1998) ===
395
- /**
396
- * WU-1998: Exposure level - defines how the WU exposes functionality to users
397
- *
398
- * Valid values:
399
- * - 'ui': User-facing UI changes (pages, components, widgets)
400
- * - 'api': API endpoints called by UI or external clients
401
- * - 'backend-only': Backend-only changes (no user visibility)
402
- * - 'documentation': Documentation changes only
403
- *
404
- * Optional during transition period, will become required after backlog update.
405
- */
406
- exposure: z
407
- .enum(WU_EXPOSURE_VALUES, {
408
- error: `Invalid exposure value. Valid values: ${WU_EXPOSURE_VALUES.join(', ')}`,
409
- })
410
- .optional(),
411
- /**
412
- * WU-1998: User journey description for user-facing WUs
413
- *
414
- * Recommended for exposure: 'ui' and 'api'.
415
- * Describes the end-user interaction flow affected by this WU.
416
- */
417
- user_journey: z.string().optional(),
418
- /**
419
- * WU-1998: Related UI WUs for backend/API changes
420
- *
421
- * For WUs with exposure: 'api', this field lists UI WUs that consume the API.
422
- * Ensures backend features have corresponding UI coverage.
423
- * Each entry must match WU-XXX format.
424
- */
425
- ui_pairing_wus: normalizedStringArray
426
- .pipe(z.array(z.string().regex(/^WU-\d+$/, WU_ID_FORMAT_MESSAGE)))
427
- .optional(),
428
- /**
429
- * WU-2022: Navigation path for UI-exposed features
430
- *
431
- * For WUs with exposure: 'ui', specifies the route where the feature is accessible.
432
- * Used by wu:done to verify that UI features are actually navigable.
433
- * Prevents "orphaned code" where features exist but users cannot access them.
434
- *
435
- * Example: '/dashboard', '/settings/preferences', '/space'
436
- */
437
- navigation_path: z.string().optional(),
438
- // === End Exposure System Fields ===
439
- // === Agent-First Approval Fields (WU-2079 → WU-2080) ===
440
- /**
441
- * WU-2080: Escalation triggers detected for this WU
442
- *
443
- * Agent-first model: agents auto-approve by default.
444
- * Human escalation only when these triggers are detected:
445
- * - sensitive_data: Changes to sensitive data handling
446
- * - security_p0: P0 security incident or vulnerability
447
- * - budget: Budget/resource allocation above threshold
448
- * - cross_lane_arch: Cross-lane architectural decision
449
- *
450
- * Empty array = no escalation needed, agent proceeds autonomously.
451
- */
452
- escalation_triggers: z
453
- .array(z.enum(['sensitive_data', 'security_p0', 'budget', 'cross_lane_arch']))
454
- .optional()
455
- .default([]),
456
- /**
457
- * WU-2080: Human escalation required flag
458
- *
459
- * Auto-set to true when escalation_triggers is non-empty.
460
- * When true, wu:done requires human confirmation before completion.
461
- */
462
- requires_human_escalation: z.boolean().optional().default(false),
463
- /**
464
- * WU-2080: Email(s) of approvers who signed off
465
- *
466
- * Auto-populated with claiming agent at wu:claim.
467
- * Additional human approvers added when escalation is resolved.
468
- */
469
- approved_by: z.array(z.string().email()).optional(),
470
- /**
471
- * WU-2080: Timestamp when approval was granted
472
- *
473
- * Auto-set at wu:claim for agent auto-approval.
474
- * Updated when human escalation is resolved.
475
- */
476
- approved_at: z
477
- .string()
478
- .optional()
479
- .transform((val) => normalizeISODateTime(val)),
480
- /**
481
- * WU-2080: Human who resolved escalation (if UnsafeAny)
482
- *
483
- * Only set when requires_human_escalation was true and resolved.
484
- */
485
- escalation_resolved_by: z.string().email().optional(),
486
- /**
487
- * WU-2080: Timestamp when human resolved escalation
488
- */
489
- escalation_resolved_at: z
490
- .string()
491
- .optional()
492
- .transform((val) => normalizeISODateTime(val)),
493
- // Legacy fields (deprecated, kept for backwards compatibility)
494
- /** @deprecated Use escalation_triggers instead */
495
- requires_cso_approval: z.boolean().optional().default(false),
496
- /** @deprecated Use escalation_triggers instead */
497
- requires_cto_approval: z.boolean().optional().default(false),
498
- /** @deprecated Use escalation_triggers instead */
499
- requires_design_approval: z.boolean().optional().default(false),
500
- // === End Agent-First Approval Fields ===
501
- };
502
- // =============================================================================
503
- // SCHEMA DEFINITIONS
504
- // =============================================================================
505
- /**
506
- * Base WU Schema (structural validation only)
507
- *
508
- * WU-1539: Used by wu:create and wu:edit for fail-fast structural validation.
509
- * Allows placeholder markers - only checks field types, formats, and lengths.
510
- *
511
- * Use case: Validate WU structure at creation/edit time before placeholders are filled.
512
- */
513
- export const BaseWUSchema = z.object({
514
- ...sharedFields,
515
- description: baseDescriptionField,
516
- acceptance: baseAcceptanceField,
517
- });
518
- /**
519
- * Ready WU Schema (alias for BaseWUSchema)
520
- *
521
- * WU-1539: Semantic alias for clarity in wu:create and wu:edit.
522
- * Same validation as BaseWUSchema - allows placeholders, enforces structure.
523
- */
524
- export const ReadyWUSchema = BaseWUSchema;
525
- /**
526
- * Strict WU Schema (structural + placeholder rejection)
527
- *
528
- * Validates WU files against LumenFlow requirements:
529
- * - No placeholder text in done WUs
530
- * - Minimum description length (50 chars)
531
- * - Code paths present for non-documentation WUs
532
- * - Proper status/lane/type enums
533
- *
534
- * Used by wu:claim and wu:done to ensure specs are complete.
535
- * Provides runtime validation and TypeScript type inference.
536
- */
537
- export const WUSchema = z.object({
538
- ...sharedFields,
539
- description: strictDescriptionField,
540
- acceptance: strictAcceptanceField,
541
- });
542
- /**
543
- * TypeScript type inferred from schema
544
- *
545
- * Single source of truth for both runtime validation and compile-time types.
546
- * Replaces manual WU interfaces (DRY principle).
547
- *
548
- * Note: Type inference available in TypeScript via z.infer<typeof WUSchema>
549
- * This is a JavaScript file, so the type export is not needed here.
550
- *
551
- * @typedef {import('zod').z.infer<typeof WUSchema>} WU
552
- */
553
- /**
554
- * Validates WU data against strict schema (placeholder rejection)
555
- *
556
- * Used by wu:claim and wu:done to ensure specs are complete.
557
- * Rejects WUs with placeholder markers.
558
- *
559
- * @param {unknown} data - Parsed YAML data to validate
560
- * @returns {z.SafeParseReturnType<WU, WU>} Validation result
561
- *
562
- * @example
563
- * const result = validateWU(yamlData);
564
- * if (!result.success) {
565
- * result.error.issues.forEach(issue => {
566
- * console.error(`${issue.path.join('.')}: ${issue.message}`);
567
- * });
568
- * }
569
- */
570
- export function validateWU(data) {
571
- return WUSchema.safeParse(data);
572
- }
573
- /**
574
- * Validates WU data against base schema (structural only)
575
- *
576
- * WU-1539: Used by wu:create and wu:edit for fail-fast structural validation.
577
- * Allows placeholder markers - only checks field types, formats, and lengths.
578
- *
579
- * @param {unknown} data - Parsed YAML data to validate
580
- * @returns {z.SafeParseReturnType<WU, WU>} Validation result
581
- *
582
- * @example
583
- * const result = validateReadyWU(yamlData);
584
- * if (!result.success) {
585
- * const errors = result.error.issues
586
- * .map(issue => ` • ${issue.path.join('.')}: ${issue.message}`)
587
- * .join('\n');
588
- * die(`WU YAML validation failed:\n\n${errors}`);
589
- * }
590
- */
591
- export function validateReadyWU(data) {
592
- return ReadyWUSchema.safeParse(data);
593
- }
594
- /**
595
- * Validates WU spec completeness for done status
596
- *
597
- * Additional validation beyond schema for WUs marked as done:
598
- * - Code paths required for non-documentation WUs
599
- * - Locked must be true
600
- * - Completed timestamp must be present
601
- *
602
- * @param {WU} wu - Validated WU data
603
- * @returns {{valid: boolean, errors: string[]}} Validation result
604
- *
605
- * @example
606
- * const schemaResult = validateWU(data);
607
- * if (schemaResult.success && data.status === 'done') {
608
- * const completenessResult = validateDoneWU(schemaResult.data);
609
- * if (!completenessResult.valid) {
610
- * console.error(completenessResult.errors);
611
- * }
612
- * }
613
- */
614
- export function validateDoneWU(wu) {
615
- const errors = [];
616
- // Check code_paths for non-documentation WUs
617
- if (wu.type !== 'documentation' && wu.type !== 'process') {
618
- if (!wu.code_paths || wu.code_paths.length === 0) {
619
- errors.push('Code paths required for non-documentation WUs');
620
- }
621
- }
622
- // Note: locked and completed_at are set automatically by wu:done
623
- // No need to validate them here (they don't exist yet at validation time)
624
- return {
625
- valid: errors.length === 0,
626
- errors,
627
- };
628
- }
629
- /**
630
- * WU-2080: Human escalation email for notifications
631
- *
632
- * When escalation triggers fire, this email receives notification.
633
- * In production, this would integrate with PagerDuty/Slack.
634
- */
635
- const ESCALATION_EMAIL = 'tom@hellm.ai';
636
- /**
637
- * WU-2080: Valid escalation trigger types
638
- *
639
- * These are the only conditions that require human intervention.
640
- * Everything else is auto-approved by agents.
641
- */
642
- export const ESCALATION_TRIGGER_TYPES = [
643
- 'sensitive_data', // Sensitive data handling changes
644
- 'security_p0', // P0 security incident
645
- 'budget', // Budget/resource above threshold
646
- 'cross_lane_arch', // Cross-lane architectural decision
647
- ];
648
- /**
649
- * WU-2080: Agent-first approval validation
650
- *
651
- * AGENT-FIRST MODEL: Agents auto-approve by default.
652
- * Human escalation only when escalation_triggers is non-empty
653
- * AND requires_human_escalation is true AND not yet resolved.
654
- *
655
- * Returns:
656
- * - valid: true if agent can proceed (no unresolved escalation)
657
- * - errors: blocking issues requiring human resolution
658
- * - warnings: advisory messages (non-blocking)
659
- *
660
- * @param {object} wu - Validated WU data
661
- * @returns {{valid: boolean, errors: string[], warnings: string[]}}
662
- */
663
- export function validateApprovalGates(wu) {
664
- const errors = [];
665
- const warnings = [];
666
- // Agent-first: check for unresolved escalation triggers
667
- const triggers = wu.escalation_triggers || [];
668
- const requiresEscalation = wu.requires_human_escalation || triggers.length > 0;
669
- if (requiresEscalation) {
670
- // Check if escalation was resolved by human
671
- const resolved = wu.escalation_resolved_by && wu.escalation_resolved_at;
672
- if (!resolved) {
673
- errors.push(`Human escalation required for: ${triggers.join(', ')}\n` +
674
- ` To resolve: Add escalation_resolved_by: "${ESCALATION_EMAIL}" and escalation_resolved_at to WU YAML\n` +
675
- ` Or use: pnpm wu:escalate --resolve --id ${wu.id}`);
676
- }
677
- }
678
- // Legacy backwards compatibility: map old fields to new model
679
- if (wu.requires_cso_approval || wu.requires_cto_approval || wu.requires_design_approval) {
680
- warnings.push('Using deprecated requires_X_approval fields. Migrate to escalation_triggers model.');
681
- }
682
- return {
683
- valid: errors.length === 0,
684
- errors,
685
- warnings,
686
- };
687
- }
688
- /**
689
- * WU-2080: Detect escalation triggers from WU content
690
- *
691
- * Analyzes WU metadata to detect conditions requiring human escalation.
692
- * Called by wu:claim to auto-set escalation_triggers.
693
- *
694
- * @param {object} wu - WU data with lane, type, code_paths
695
- * @returns {string[]} Array of triggered escalation types
696
- */
697
- export function detectEscalationTriggers(wu) {
698
- const triggers = [];
699
- const lane = (wu.lane || '').toLowerCase();
700
- const codePaths = wu.code_paths || [];
701
- // Sensitive data: Changes to user data or auth
702
- const sensitivePatterns = ['pii', 'user-data', 'auth', 'credentials'];
703
- const touchesSensitive = codePaths.some((p) => sensitivePatterns.some((pat) => p.toLowerCase().includes(pat)));
704
- if (touchesSensitive || lane.includes('pii')) {
705
- triggers.push('sensitive_data');
706
- }
707
- // Security P0: Explicit security lane or auth changes
708
- if (wu.priority === 'P0' && lane.includes('security')) {
709
- triggers.push('security_p0');
710
- }
711
- return triggers;
712
- }
713
- /**
714
- * WU-2080: Generate auto-approval metadata for wu:claim
715
- *
716
- * Called by wu:claim to auto-approve agents within policy.
717
- * Sets approved_by and approved_at, detects escalation triggers.
718
- *
719
- * @param {object} wu - WU data
720
- * @param {string} agentEmail - Email of claiming agent
721
- * @returns {{approved_by: string[], approved_at: string, escalation_triggers: string[], requires_human_escalation: boolean}}
722
- */
723
- export function generateAutoApproval(wu, agentEmail) {
724
- const triggers = detectEscalationTriggers(wu);
725
- const now = new Date().toISOString();
726
- return {
727
- approved_by: [agentEmail],
728
- approved_at: now,
729
- escalation_triggers: triggers,
730
- requires_human_escalation: triggers.length > 0,
731
- };
732
- }
733
- /**
734
- * @deprecated Use detectEscalationTriggers instead
735
- * WU-2079: Legacy function for backwards compatibility
736
- */
737
- export function determineRequiredApprovals(wu) {
738
- const triggers = detectEscalationTriggers(wu);
739
- return {
740
- requires_cso_approval: triggers.includes('security_p0') || triggers.includes('sensitive_data'),
741
- requires_cto_approval: triggers.includes('cross_lane_arch'),
742
- requires_design_approval: false, // Design no longer requires human escalation
743
- };
744
- }
745
- /**
746
- * WU-1811: Validates and normalizes WU YAML data with auto-fixable normalisations
747
- *
748
- * This function validates the WU YAML schema and applies fixable normalisations:
749
- * - Trimming whitespace from string fields
750
- * - Normalizing escaped newlines (\\n → \n)
751
- * - Splitting embedded newlines in arrays (["a\nb"] → ["a", "b"])
752
- *
753
- * Returns:
754
- * - valid: true if schema validation passes (after normalisations)
755
- * - normalized: the normalized data (even if validation fails, partial normalization is returned)
756
- * - errors: validation errors if UnsafeAny
757
- * - wasNormalized: true if UnsafeAny normalisations were applied
758
- *
759
- * @param {unknown} data - Parsed YAML data to validate and normalize
760
- * @returns {{valid: boolean, normalized: object|null, errors: string[], wasNormalized: boolean}}
761
- *
762
- * @example
763
- * const { valid, normalized, errors, wasNormalized } = validateAndNormalizeWUYAML(yamlData);
764
- * if (valid && wasNormalized) {
765
- * // Write normalized data back to YAML file
766
- * writeWU(wuPath, normalized);
767
- * }
768
- * if (!valid) {
769
- * die(`Validation failed:\n${errors.join('\n')}`);
770
- * }
771
- */
772
- export function validateAndNormalizeWUYAML(data) {
773
- // First try to parse with schema (which applies normalizations)
774
- const result = WUSchema.safeParse(data);
775
- if (!result.success) {
776
- // Schema validation failed - return errors
777
- const errors = result.error.issues.map((issue) => `${issue.path.join('.')}: ${issue.message}`);
778
- return {
779
- valid: false,
780
- normalized: null,
781
- errors,
782
- wasNormalized: false,
783
- };
784
- }
785
- // Schema passed - check if data was normalized (compare key fields)
786
- const normalized = result.data;
787
- const original = typeof data === 'object' && data !== null ? data : {};
788
- const wasNormalized = detectNormalizationChanges(original, normalized);
789
- return {
790
- valid: true,
791
- normalized,
792
- errors: [],
793
- wasNormalized,
794
- };
795
- }
796
- /**
797
- * WU-1833: Validate WU spec completeness with advisory warnings
798
- *
799
- * Provides soft validation that warns (doesn't fail) when recommended fields are missing.
800
- * Used by wu:validate command to surface quality issues without blocking workflow.
801
- *
802
- * Feature and bug WUs should have:
803
- * - notes (implementation context, deployment instructions)
804
- * - tests.manual (verification steps)
805
- * - spec_refs (links to plans, design docs) - for features only
806
- *
807
- * @param {object} wu - Validated WU data (must pass WUSchema first)
808
- * @returns {{warnings: string[]}} Array of warning messages
809
- *
810
- * @example
811
- * const schemaResult = validateWU(data);
812
- * if (schemaResult.success) {
813
- * const { warnings } = validateWUCompleteness(schemaResult.data);
814
- * if (warnings.length > 0) {
815
- * console.warn('Quality warnings:');
816
- * warnings.forEach(w => console.warn(` ⚠️ ${w}`));
817
- * }
818
- * }
819
- */
820
- export function validateWUCompleteness(wu) {
821
- const warnings = [];
822
- // WU-1384: Skip completeness checks for terminal WUs (done, cancelled, etc.)
823
- // These are immutable historical records - enforcing completeness is pointless
824
- const status = wu.status ?? '';
825
- const isTerminal = WU_STATUS_GROUPS.TERMINAL.includes(status);
826
- if (isTerminal) {
827
- return { warnings };
828
- }
829
- const type = wu.type || 'feature';
830
- // Only check feature and bug WUs - docs/chore/process don't need these
831
- const requiresContext = ['feature', 'bug', 'refactor'].includes(type);
832
- if (!requiresContext) {
833
- return { warnings };
834
- }
835
- // Check for notes (implementation context)
836
- if (!wu.notes || wu.notes.trim().length === 0) {
837
- warnings.push(`${wu.id}: Missing 'notes' field. Add implementation context, deployment instructions, or plan links.`);
838
- }
839
- // Check for manual tests
840
- const hasManualTests = wu.tests?.manual && wu.tests.manual.length > 0;
841
- if (!hasManualTests) {
842
- warnings.push(`${wu.id}: Missing 'tests.manual' field. Add manual verification steps for acceptance criteria.`);
843
- }
844
- // Check for spec_refs (features should link to plans/specs)
845
- // WU-1062: Accepts both repo-relative paths (docs/04-operations/plans/) and
846
- // external paths (~/.lumenflow/plans/, $LUMENFLOW_HOME/plans/, lumenflow://plans/)
847
- if (type === 'feature') {
848
- const specRefs = wu.spec_refs;
849
- const hasSpecRefs = !!specRefs && (specRefs.length ?? 0) > 0;
850
- if (!hasSpecRefs) {
851
- warnings.push(`${wu.id}: Missing 'spec_refs' field. Link to plan file (docs/04-operations/plans/, lumenflow://plans/, or ~/.lumenflow/plans/) for traceability.`);
852
- }
853
- }
854
- return { warnings };
855
- }
856
- /**
857
- * WU-1811: Detect if normalizations were applied by comparing original and normalized data
858
- *
859
- * Compares fields that are commonly normalized:
860
- * - description (escaped newlines)
861
- * - code_paths (embedded newlines split)
862
- * - acceptance (embedded newlines split)
863
- *
864
- * @param {object} original - Original parsed YAML data
865
- * @param {object} normalized - Schema-normalized data
866
- * @returns {boolean} True if UnsafeAny normalisations were applied
867
- */
868
- function detectNormalizationChanges(original, normalized) {
869
- // Compare description (newline normalization)
870
- if (original.description !== normalized.description) {
871
- return true;
872
- }
873
- // Compare code_paths (array splitting)
874
- const origPaths = Array.isArray(original.code_paths) ? original.code_paths : [];
875
- const normPaths = Array.isArray(normalized.code_paths) ? normalized.code_paths : [];
876
- if (origPaths.length !== normPaths.length) {
877
- return true;
878
- }
879
- for (let i = 0; i < origPaths.length; i++) {
880
- if (origPaths[i] !== normPaths[i]) {
881
- return true;
882
- }
883
- }
884
- // Compare acceptance if both are arrays (most common case)
885
- if (Array.isArray(original.acceptance) && Array.isArray(normalized.acceptance)) {
886
- if (original.acceptance.length !== normalized.acceptance.length) {
887
- return true;
888
- }
889
- for (let i = 0; i < original.acceptance.length; i++) {
890
- if (original.acceptance[i] !== normalized.acceptance[i]) {
891
- return true;
892
- }
893
- }
894
- }
895
- return false;
896
- }
897
- //# sourceMappingURL=wu-schema.js.map