@pennyfarthing/core 7.4.0 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (369) hide show
  1. package/dist/cli/utils/files.d.ts +0 -1
  2. package/dist/cli/utils/files.js +73 -56
  3. package/dist/cli/utils/manifest.d.ts +0 -1
  4. package/dist/cli/utils/manifest.js +48 -45
  5. package/dist/cli/utils/version.d.ts +0 -1
  6. package/dist/cli/utils/version.js +38 -32
  7. package/dist/index.d.ts +0 -1
  8. package/dist/index.js +39 -11
  9. package/dist/permissions/index.d.ts +0 -1
  10. package/dist/permissions/index.js +7 -4
  11. package/dist/permissions/permission-schema.d.ts +0 -1
  12. package/dist/permissions/permission-schema.js +13 -9
  13. package/dist/scripts/job-fair-aggregator.d.ts +0 -1
  14. package/dist/scripts/job-fair-aggregator.js +484 -341
  15. package/dist/workflow/index.d.ts +0 -1
  16. package/dist/workflow/index.js +12 -5
  17. package/dist/workflow/workflow-loader.d.ts +0 -1
  18. package/dist/workflow/workflow-loader.js +40 -34
  19. package/dist/workflow/workflow-permissions.d.ts +0 -1
  20. package/dist/workflow/workflow-permissions.js +14 -8
  21. package/dist/workflow/workflow-router.d.ts +0 -1
  22. package/dist/workflow/workflow-router.js +70 -51
  23. package/dist/workflow/workflow-schema.d.ts +0 -1
  24. package/dist/workflow/workflow-schema.js +62 -59
  25. package/package.json +1 -1
  26. package/dist/bmad/context-reader.d.ts +0 -71
  27. package/dist/bmad/context-reader.d.ts.map +0 -1
  28. package/dist/bmad/context-reader.js +0 -369
  29. package/dist/bmad/context-reader.js.map +0 -1
  30. package/dist/bmad/context-reader.test.d.ts +0 -71
  31. package/dist/bmad/context-reader.test.d.ts.map +0 -1
  32. package/dist/bmad/context-reader.test.js +0 -878
  33. package/dist/bmad/context-reader.test.js.map +0 -1
  34. package/dist/bmad/epics-parser.d.ts +0 -61
  35. package/dist/bmad/epics-parser.d.ts.map +0 -1
  36. package/dist/bmad/epics-parser.js +0 -331
  37. package/dist/bmad/epics-parser.js.map +0 -1
  38. package/dist/bmad/epics-parser.test.d.ts +0 -7
  39. package/dist/bmad/epics-parser.test.d.ts.map +0 -1
  40. package/dist/bmad/epics-parser.test.js +0 -449
  41. package/dist/bmad/epics-parser.test.js.map +0 -1
  42. package/dist/bmad/index.d.ts +0 -11
  43. package/dist/bmad/index.d.ts.map +0 -1
  44. package/dist/bmad/index.js +0 -24
  45. package/dist/bmad/index.js.map +0 -1
  46. package/dist/bmad/status-sync.d.ts +0 -173
  47. package/dist/bmad/status-sync.d.ts.map +0 -1
  48. package/dist/bmad/status-sync.js +0 -463
  49. package/dist/bmad/status-sync.js.map +0 -1
  50. package/dist/bmad/status-sync.test.d.ts +0 -7
  51. package/dist/bmad/status-sync.test.d.ts.map +0 -1
  52. package/dist/bmad/status-sync.test.js +0 -702
  53. package/dist/bmad/status-sync.test.js.map +0 -1
  54. package/dist/bmad/story-exporter.d.ts +0 -55
  55. package/dist/bmad/story-exporter.d.ts.map +0 -1
  56. package/dist/bmad/story-exporter.js +0 -170
  57. package/dist/bmad/story-exporter.js.map +0 -1
  58. package/dist/bmad/story-exporter.test.d.ts +0 -51
  59. package/dist/bmad/story-exporter.test.d.ts.map +0 -1
  60. package/dist/bmad/story-exporter.test.js +0 -603
  61. package/dist/bmad/story-exporter.test.js.map +0 -1
  62. package/dist/bmad/story-parser.d.ts +0 -44
  63. package/dist/bmad/story-parser.d.ts.map +0 -1
  64. package/dist/bmad/story-parser.js +0 -307
  65. package/dist/bmad/story-parser.js.map +0 -1
  66. package/dist/bmad/story-parser.test.d.ts +0 -44
  67. package/dist/bmad/story-parser.test.d.ts.map +0 -1
  68. package/dist/bmad/story-parser.test.js +0 -693
  69. package/dist/bmad/story-parser.test.js.map +0 -1
  70. package/dist/cli/commands/command.d.ts +0 -28
  71. package/dist/cli/commands/command.d.ts.map +0 -1
  72. package/dist/cli/commands/command.js +0 -399
  73. package/dist/cli/commands/command.js.map +0 -1
  74. package/dist/cli/commands/cyclist.d.ts +0 -46
  75. package/dist/cli/commands/cyclist.d.ts.map +0 -1
  76. package/dist/cli/commands/cyclist.js +0 -196
  77. package/dist/cli/commands/cyclist.js.map +0 -1
  78. package/dist/cli/commands/cyclist.test.d.ts +0 -13
  79. package/dist/cli/commands/cyclist.test.d.ts.map +0 -1
  80. package/dist/cli/commands/cyclist.test.js +0 -245
  81. package/dist/cli/commands/cyclist.test.js.map +0 -1
  82. package/dist/cli/commands/doctor.d.ts +0 -9
  83. package/dist/cli/commands/doctor.d.ts.map +0 -1
  84. package/dist/cli/commands/doctor.js +0 -652
  85. package/dist/cli/commands/doctor.js.map +0 -1
  86. package/dist/cli/commands/init.d.ts +0 -8
  87. package/dist/cli/commands/init.d.ts.map +0 -1
  88. package/dist/cli/commands/init.js +0 -524
  89. package/dist/cli/commands/init.js.map +0 -1
  90. package/dist/cli/commands/skill.d.ts +0 -28
  91. package/dist/cli/commands/skill.d.ts.map +0 -1
  92. package/dist/cli/commands/skill.js +0 -416
  93. package/dist/cli/commands/skill.js.map +0 -1
  94. package/dist/cli/commands/theme.d.ts +0 -21
  95. package/dist/cli/commands/theme.d.ts.map +0 -1
  96. package/dist/cli/commands/theme.js +0 -201
  97. package/dist/cli/commands/theme.js.map +0 -1
  98. package/dist/cli/commands/uninstall.d.ts +0 -8
  99. package/dist/cli/commands/uninstall.d.ts.map +0 -1
  100. package/dist/cli/commands/uninstall.js +0 -237
  101. package/dist/cli/commands/uninstall.js.map +0 -1
  102. package/dist/cli/commands/update.d.ts +0 -9
  103. package/dist/cli/commands/update.d.ts.map +0 -1
  104. package/dist/cli/commands/update.js +0 -418
  105. package/dist/cli/commands/update.js.map +0 -1
  106. package/dist/cli/commands/version.d.ts +0 -2
  107. package/dist/cli/commands/version.d.ts.map +0 -1
  108. package/dist/cli/commands/version.js +0 -28
  109. package/dist/cli/commands/version.js.map +0 -1
  110. package/dist/cli/customization.test.d.ts +0 -12
  111. package/dist/cli/customization.test.d.ts.map +0 -1
  112. package/dist/cli/customization.test.js +0 -84
  113. package/dist/cli/customization.test.js.map +0 -1
  114. package/dist/cli/cyclist-migration.test.d.ts +0 -16
  115. package/dist/cli/cyclist-migration.test.d.ts.map +0 -1
  116. package/dist/cli/cyclist-migration.test.js +0 -225
  117. package/dist/cli/cyclist-migration.test.js.map +0 -1
  118. package/dist/cli/index.d.ts +0 -3
  119. package/dist/cli/index.d.ts.map +0 -1
  120. package/dist/cli/index.js +0 -174
  121. package/dist/cli/index.js.map +0 -1
  122. package/dist/cli/ocean-profiles.test.d.ts +0 -13
  123. package/dist/cli/ocean-profiles.test.d.ts.map +0 -1
  124. package/dist/cli/ocean-profiles.test.js +0 -134
  125. package/dist/cli/ocean-profiles.test.js.map +0 -1
  126. package/dist/cli/theme-maker.test.d.ts +0 -11
  127. package/dist/cli/theme-maker.test.d.ts.map +0 -1
  128. package/dist/cli/theme-maker.test.js +0 -356
  129. package/dist/cli/theme-maker.test.js.map +0 -1
  130. package/dist/cli/utils/constants.d.ts +0 -66
  131. package/dist/cli/utils/constants.d.ts.map +0 -1
  132. package/dist/cli/utils/constants.js +0 -54
  133. package/dist/cli/utils/constants.js.map +0 -1
  134. package/dist/cli/utils/files.d.ts.map +0 -1
  135. package/dist/cli/utils/files.js.map +0 -1
  136. package/dist/cli/utils/logger.d.ts +0 -26
  137. package/dist/cli/utils/logger.d.ts.map +0 -1
  138. package/dist/cli/utils/logger.js +0 -88
  139. package/dist/cli/utils/logger.js.map +0 -1
  140. package/dist/cli/utils/manifest.d.ts.map +0 -1
  141. package/dist/cli/utils/manifest.js.map +0 -1
  142. package/dist/cli/utils/node-modules.d.ts +0 -6
  143. package/dist/cli/utils/node-modules.d.ts.map +0 -1
  144. package/dist/cli/utils/node-modules.js +0 -31
  145. package/dist/cli/utils/node-modules.js.map +0 -1
  146. package/dist/cli/utils/prompts.d.ts +0 -34
  147. package/dist/cli/utils/prompts.d.ts.map +0 -1
  148. package/dist/cli/utils/prompts.js +0 -93
  149. package/dist/cli/utils/prompts.js.map +0 -1
  150. package/dist/cli/utils/symlinks.d.ts +0 -29
  151. package/dist/cli/utils/symlinks.d.ts.map +0 -1
  152. package/dist/cli/utils/symlinks.js +0 -181
  153. package/dist/cli/utils/symlinks.js.map +0 -1
  154. package/dist/cli/utils/themes.d.ts +0 -101
  155. package/dist/cli/utils/themes.d.ts.map +0 -1
  156. package/dist/cli/utils/themes.js +0 -373
  157. package/dist/cli/utils/themes.js.map +0 -1
  158. package/dist/cli/utils/themes.test.d.ts +0 -12
  159. package/dist/cli/utils/themes.test.d.ts.map +0 -1
  160. package/dist/cli/utils/themes.test.js +0 -147
  161. package/dist/cli/utils/themes.test.js.map +0 -1
  162. package/dist/cli/utils/version.d.ts.map +0 -1
  163. package/dist/cli/utils/version.js.map +0 -1
  164. package/dist/cli/workspace.test.d.ts +0 -8
  165. package/dist/cli/workspace.test.d.ts.map +0 -1
  166. package/dist/cli/workspace.test.js +0 -151
  167. package/dist/cli/workspace.test.js.map +0 -1
  168. package/dist/index.d.ts.map +0 -1
  169. package/dist/index.js.map +0 -1
  170. package/dist/jira/jira-epic-creation.d.ts +0 -109
  171. package/dist/jira/jira-epic-creation.d.ts.map +0 -1
  172. package/dist/jira/jira-epic-creation.js +0 -253
  173. package/dist/jira/jira-epic-creation.js.map +0 -1
  174. package/dist/jira/jira-epic-creation.test.d.ts +0 -16
  175. package/dist/jira/jira-epic-creation.test.d.ts.map +0 -1
  176. package/dist/jira/jira-epic-creation.test.js +0 -387
  177. package/dist/jira/jira-epic-creation.test.js.map +0 -1
  178. package/dist/jira/jira-sprint-sync.d.ts +0 -247
  179. package/dist/jira/jira-sprint-sync.d.ts.map +0 -1
  180. package/dist/jira/jira-sprint-sync.js +0 -670
  181. package/dist/jira/jira-sprint-sync.js.map +0 -1
  182. package/dist/jira/jira-sprint-sync.test.d.ts +0 -16
  183. package/dist/jira/jira-sprint-sync.test.d.ts.map +0 -1
  184. package/dist/jira/jira-sprint-sync.test.js +0 -845
  185. package/dist/jira/jira-sprint-sync.test.js.map +0 -1
  186. package/dist/permissions/index.d.ts.map +0 -1
  187. package/dist/permissions/index.js.map +0 -1
  188. package/dist/permissions/permission-schema.d.ts.map +0 -1
  189. package/dist/permissions/permission-schema.js.map +0 -1
  190. package/dist/permissions/permission-schema.test.d.ts +0 -40
  191. package/dist/permissions/permission-schema.test.d.ts.map +0 -1
  192. package/dist/permissions/permission-schema.test.js +0 -367
  193. package/dist/permissions/permission-schema.test.js.map +0 -1
  194. package/dist/scripts/add-ocean-profiles.d.ts +0 -9
  195. package/dist/scripts/add-ocean-profiles.d.ts.map +0 -1
  196. package/dist/scripts/add-ocean-profiles.js +0 -695
  197. package/dist/scripts/add-ocean-profiles.js.map +0 -1
  198. package/dist/scripts/benchmark-integration.d.ts +0 -182
  199. package/dist/scripts/benchmark-integration.d.ts.map +0 -1
  200. package/dist/scripts/benchmark-integration.js +0 -691
  201. package/dist/scripts/benchmark-integration.js.map +0 -1
  202. package/dist/scripts/benchmark-integration.test.d.ts +0 -13
  203. package/dist/scripts/benchmark-integration.test.d.ts.map +0 -1
  204. package/dist/scripts/benchmark-integration.test.js +0 -680
  205. package/dist/scripts/benchmark-integration.test.js.map +0 -1
  206. package/dist/scripts/debugging-scenarios.test.d.ts +0 -18
  207. package/dist/scripts/debugging-scenarios.test.d.ts.map +0 -1
  208. package/dist/scripts/debugging-scenarios.test.js +0 -317
  209. package/dist/scripts/debugging-scenarios.test.js.map +0 -1
  210. package/dist/scripts/generate-all-spiders.d.ts +0 -10
  211. package/dist/scripts/generate-all-spiders.d.ts.map +0 -1
  212. package/dist/scripts/generate-all-spiders.js +0 -306
  213. package/dist/scripts/generate-all-spiders.js.map +0 -1
  214. package/dist/scripts/generate-report.d.ts +0 -65
  215. package/dist/scripts/generate-report.d.ts.map +0 -1
  216. package/dist/scripts/generate-report.js +0 -378
  217. package/dist/scripts/generate-report.js.map +0 -1
  218. package/dist/scripts/generate-report.test.d.ts +0 -13
  219. package/dist/scripts/generate-report.test.d.ts.map +0 -1
  220. package/dist/scripts/generate-report.test.js +0 -363
  221. package/dist/scripts/generate-report.test.js.map +0 -1
  222. package/dist/scripts/generate-spider-report.d.ts +0 -65
  223. package/dist/scripts/generate-spider-report.d.ts.map +0 -1
  224. package/dist/scripts/generate-spider-report.js +0 -366
  225. package/dist/scripts/generate-spider-report.js.map +0 -1
  226. package/dist/scripts/generate-spider-report.test.d.ts +0 -13
  227. package/dist/scripts/generate-spider-report.test.d.ts.map +0 -1
  228. package/dist/scripts/generate-spider-report.test.js +0 -367
  229. package/dist/scripts/generate-spider-report.test.js.map +0 -1
  230. package/dist/scripts/generate-spider.d.ts +0 -47
  231. package/dist/scripts/generate-spider.d.ts.map +0 -1
  232. package/dist/scripts/generate-spider.js +0 -338
  233. package/dist/scripts/generate-spider.js.map +0 -1
  234. package/dist/scripts/generate-spider.test.d.ts +0 -14
  235. package/dist/scripts/generate-spider.test.d.ts.map +0 -1
  236. package/dist/scripts/generate-spider.test.js +0 -271
  237. package/dist/scripts/generate-spider.test.js.map +0 -1
  238. package/dist/scripts/job-fair-aggregator.d.ts.map +0 -1
  239. package/dist/scripts/job-fair-aggregator.js.map +0 -1
  240. package/dist/scripts/job-fair-aggregator.test.d.ts +0 -14
  241. package/dist/scripts/job-fair-aggregator.test.d.ts.map +0 -1
  242. package/dist/scripts/job-fair-aggregator.test.js +0 -616
  243. package/dist/scripts/job-fair-aggregator.test.js.map +0 -1
  244. package/dist/scripts/run-ci.test.d.ts +0 -20
  245. package/dist/scripts/run-ci.test.d.ts.map +0 -1
  246. package/dist/scripts/run-ci.test.js +0 -127
  247. package/dist/scripts/run-ci.test.js.map +0 -1
  248. package/dist/scripts/theme-detail.test.d.ts +0 -10
  249. package/dist/scripts/theme-detail.test.d.ts.map +0 -1
  250. package/dist/scripts/theme-detail.test.js +0 -199
  251. package/dist/scripts/theme-detail.test.js.map +0 -1
  252. package/dist/scripts/validate-ocean-profiles.d.ts +0 -9
  253. package/dist/scripts/validate-ocean-profiles.d.ts.map +0 -1
  254. package/dist/scripts/validate-ocean-profiles.js +0 -130
  255. package/dist/scripts/validate-ocean-profiles.js.map +0 -1
  256. package/dist/workflow/gate-handler.d.ts +0 -94
  257. package/dist/workflow/gate-handler.d.ts.map +0 -1
  258. package/dist/workflow/gate-handler.js +0 -189
  259. package/dist/workflow/gate-handler.js.map +0 -1
  260. package/dist/workflow/gate-handler.test.d.ts +0 -14
  261. package/dist/workflow/gate-handler.test.d.ts.map +0 -1
  262. package/dist/workflow/gate-handler.test.js +0 -543
  263. package/dist/workflow/gate-handler.test.js.map +0 -1
  264. package/dist/workflow/generic-handoff.d.ts +0 -281
  265. package/dist/workflow/generic-handoff.d.ts.map +0 -1
  266. package/dist/workflow/generic-handoff.js +0 -411
  267. package/dist/workflow/generic-handoff.js.map +0 -1
  268. package/dist/workflow/generic-handoff.test.d.ts +0 -21
  269. package/dist/workflow/generic-handoff.test.d.ts.map +0 -1
  270. package/dist/workflow/generic-handoff.test.js +0 -499
  271. package/dist/workflow/generic-handoff.test.js.map +0 -1
  272. package/dist/workflow/generic-sm-finish.d.ts +0 -89
  273. package/dist/workflow/generic-sm-finish.d.ts.map +0 -1
  274. package/dist/workflow/generic-sm-finish.js +0 -157
  275. package/dist/workflow/generic-sm-finish.js.map +0 -1
  276. package/dist/workflow/generic-sm-setup.d.ts +0 -138
  277. package/dist/workflow/generic-sm-setup.d.ts.map +0 -1
  278. package/dist/workflow/generic-sm-setup.js +0 -382
  279. package/dist/workflow/generic-sm-setup.js.map +0 -1
  280. package/dist/workflow/index.d.ts.map +0 -1
  281. package/dist/workflow/index.js.map +0 -1
  282. package/dist/workflow/session-state.d.ts +0 -92
  283. package/dist/workflow/session-state.d.ts.map +0 -1
  284. package/dist/workflow/session-state.js +0 -198
  285. package/dist/workflow/session-state.js.map +0 -1
  286. package/dist/workflow/session-state.test.d.ts +0 -8
  287. package/dist/workflow/session-state.test.d.ts.map +0 -1
  288. package/dist/workflow/session-state.test.js +0 -551
  289. package/dist/workflow/session-state.test.js.map +0 -1
  290. package/dist/workflow/sm-subagents.test.d.ts +0 -23
  291. package/dist/workflow/sm-subagents.test.d.ts.map +0 -1
  292. package/dist/workflow/sm-subagents.test.js +0 -727
  293. package/dist/workflow/sm-subagents.test.js.map +0 -1
  294. package/dist/workflow/step-parser.d.ts +0 -45
  295. package/dist/workflow/step-parser.d.ts.map +0 -1
  296. package/dist/workflow/step-parser.js +0 -147
  297. package/dist/workflow/step-parser.js.map +0 -1
  298. package/dist/workflow/step-parser.test.d.ts +0 -14
  299. package/dist/workflow/step-parser.test.d.ts.map +0 -1
  300. package/dist/workflow/step-parser.test.js +0 -470
  301. package/dist/workflow/step-parser.test.js.map +0 -1
  302. package/dist/workflow/story-workflow-routing.test.d.ts +0 -17
  303. package/dist/workflow/story-workflow-routing.test.d.ts.map +0 -1
  304. package/dist/workflow/story-workflow-routing.test.js +0 -559
  305. package/dist/workflow/story-workflow-routing.test.js.map +0 -1
  306. package/dist/workflow/test-cache.d.ts +0 -131
  307. package/dist/workflow/test-cache.d.ts.map +0 -1
  308. package/dist/workflow/test-cache.js +0 -226
  309. package/dist/workflow/test-cache.js.map +0 -1
  310. package/dist/workflow/test-cache.test.d.ts +0 -17
  311. package/dist/workflow/test-cache.test.d.ts.map +0 -1
  312. package/dist/workflow/test-cache.test.js +0 -438
  313. package/dist/workflow/test-cache.test.js.map +0 -1
  314. package/dist/workflow/trimodal.d.ts +0 -86
  315. package/dist/workflow/trimodal.d.ts.map +0 -1
  316. package/dist/workflow/trimodal.js +0 -118
  317. package/dist/workflow/trimodal.js.map +0 -1
  318. package/dist/workflow/trimodal.test.d.ts +0 -11
  319. package/dist/workflow/trimodal.test.d.ts.map +0 -1
  320. package/dist/workflow/trimodal.test.js +0 -395
  321. package/dist/workflow/trimodal.test.js.map +0 -1
  322. package/dist/workflow/variable-resolver.d.ts +0 -67
  323. package/dist/workflow/variable-resolver.d.ts.map +0 -1
  324. package/dist/workflow/variable-resolver.js +0 -156
  325. package/dist/workflow/variable-resolver.js.map +0 -1
  326. package/dist/workflow/variable-resolver.test.d.ts +0 -14
  327. package/dist/workflow/variable-resolver.test.d.ts.map +0 -1
  328. package/dist/workflow/variable-resolver.test.js +0 -400
  329. package/dist/workflow/variable-resolver.test.js.map +0 -1
  330. package/dist/workflow/workflow-executor.d.ts +0 -163
  331. package/dist/workflow/workflow-executor.d.ts.map +0 -1
  332. package/dist/workflow/workflow-executor.js +0 -197
  333. package/dist/workflow/workflow-executor.js.map +0 -1
  334. package/dist/workflow/workflow-executor.test.d.ts +0 -8
  335. package/dist/workflow/workflow-executor.test.d.ts.map +0 -1
  336. package/dist/workflow/workflow-executor.test.js +0 -444
  337. package/dist/workflow/workflow-executor.test.js.map +0 -1
  338. package/dist/workflow/workflow-loader.d.ts.map +0 -1
  339. package/dist/workflow/workflow-loader.js.map +0 -1
  340. package/dist/workflow/workflow-loader.test.d.ts +0 -15
  341. package/dist/workflow/workflow-loader.test.d.ts.map +0 -1
  342. package/dist/workflow/workflow-loader.test.js +0 -354
  343. package/dist/workflow/workflow-loader.test.js.map +0 -1
  344. package/dist/workflow/workflow-migration.test.d.ts +0 -17
  345. package/dist/workflow/workflow-migration.test.d.ts.map +0 -1
  346. package/dist/workflow/workflow-migration.test.js +0 -371
  347. package/dist/workflow/workflow-migration.test.js.map +0 -1
  348. package/dist/workflow/workflow-permissions.d.ts.map +0 -1
  349. package/dist/workflow/workflow-permissions.js.map +0 -1
  350. package/dist/workflow/workflow-permissions.test.d.ts +0 -15
  351. package/dist/workflow/workflow-permissions.test.d.ts.map +0 -1
  352. package/dist/workflow/workflow-permissions.test.js +0 -301
  353. package/dist/workflow/workflow-permissions.test.js.map +0 -1
  354. package/dist/workflow/workflow-router.d.ts.map +0 -1
  355. package/dist/workflow/workflow-router.js.map +0 -1
  356. package/dist/workflow/workflow-router.test.d.ts +0 -20
  357. package/dist/workflow/workflow-router.test.d.ts.map +0 -1
  358. package/dist/workflow/workflow-router.test.js +0 -607
  359. package/dist/workflow/workflow-router.test.js.map +0 -1
  360. package/dist/workflow/workflow-schema.d.ts.map +0 -1
  361. package/dist/workflow/workflow-schema.js.map +0 -1
  362. package/dist/workflow/workflow-schema.test.d.ts +0 -45
  363. package/dist/workflow/workflow-schema.test.d.ts.map +0 -1
  364. package/dist/workflow/workflow-schema.test.js +0 -512
  365. package/dist/workflow/workflow-schema.test.js.map +0 -1
  366. package/dist/workflow/workflow-stepped-schema.test.d.ts +0 -18
  367. package/dist/workflow/workflow-stepped-schema.test.d.ts.map +0 -1
  368. package/dist/workflow/workflow-stepped-schema.test.js +0 -608
  369. package/dist/workflow/workflow-stepped-schema.test.js.map +0 -1
@@ -1,559 +0,0 @@
1
- /**
2
- * Tests for Story 38-9: SM Workflow Routing from Story Tags
3
- *
4
- * These tests define the contract for SM reading and honoring
5
- * the `workflow:` tag on stories in sprint YAML.
6
- *
7
- * Acceptance Criteria:
8
- * - AC1: SM reads workflow tag from story in sprint YAML
9
- * - AC2: SM loads correct workflow definition from pennyfarthing-dist/workflows/
10
- * - AC3: SM follows workflow's phase sequence (agent-docs → Orchestrator)
11
- * - AC4: Fallback to TDD if no tag or unknown workflow
12
- * - AC5: Session file records which workflow is active
13
- *
14
- * Run with: npm test
15
- */
16
- import { describe, it, beforeEach, afterEach } from 'node:test';
17
- import assert from 'node:assert';
18
- import { mkdirSync, rmSync, existsSync, writeFileSync, readFileSync } from 'node:fs';
19
- import { join, dirname } from 'node:path';
20
- import { fileURLToPath } from 'node:url';
21
- import { parse as parseYaml } from 'yaml';
22
- // Import workflow routing infrastructure
23
- import { routeStoryToWorkflow } from './workflow-router.js';
24
- import { loadWorkflowsFromDir } from './workflow-loader.js';
25
- // Get directory for test fixtures
26
- const __dirname = dirname(fileURLToPath(import.meta.url));
27
- const TEST_DIR = join(__dirname, '__test_story_workflow_routing__');
28
- // =============================================================================
29
- // Helper functions
30
- // =============================================================================
31
- /**
32
- * Extract story from sprint YAML by ID
33
- */
34
- function getStoryFromSprintYaml(yamlContent, storyId) {
35
- const parsed = parseYaml(yamlContent);
36
- for (const epic of parsed.epics) {
37
- for (const story of epic.stories) {
38
- if (story.id === storyId) {
39
- return story;
40
- }
41
- }
42
- }
43
- return null;
44
- }
45
- /**
46
- * Convert SprintStory to StoryMetadata for routing
47
- */
48
- function storyToMetadata(story) {
49
- const tags = [];
50
- // Add workflow tag if present
51
- if (story.workflow) {
52
- tags.push(`workflow:${story.workflow}`);
53
- }
54
- return {
55
- id: story.id,
56
- points: story.points,
57
- tags: tags.length > 0 ? tags : undefined
58
- };
59
- }
60
- /**
61
- * Get next agent from workflow phase sequence
62
- */
63
- function getFirstAgentAfterSetup(workflow) {
64
- const phases = workflow.phases;
65
- if (!phases || phases.length < 2)
66
- return null;
67
- // Find setup phase, return next phase's agent
68
- for (let i = 0; i < phases.length - 1; i++) {
69
- if (phases[i].name === 'setup') {
70
- return phases[i + 1].agent;
71
- }
72
- }
73
- // If no explicit setup, return second phase's agent
74
- return phases[1]?.agent || null;
75
- }
76
- // =============================================================================
77
- // AC1: SM reads workflow tag from story in sprint YAML
78
- // =============================================================================
79
- describe('AC1: Read workflow tag from sprint YAML', () => {
80
- beforeEach(() => {
81
- if (existsSync(TEST_DIR)) {
82
- rmSync(TEST_DIR, { recursive: true });
83
- }
84
- mkdirSync(TEST_DIR, { recursive: true });
85
- });
86
- afterEach(() => {
87
- if (existsSync(TEST_DIR)) {
88
- rmSync(TEST_DIR, { recursive: true });
89
- }
90
- });
91
- it('should extract workflow tag from story with explicit workflow: field', () => {
92
- const sprintYaml = `
93
- sprint:
94
- number: 11
95
- goal: "Test sprint"
96
- epics:
97
- - id: epic-38
98
- title: "Agent File Modernization"
99
- stories:
100
- - id: "38-9"
101
- title: "SM workflow routing from story tags"
102
- points: 3
103
- workflow: tdd
104
- status: backlog
105
- `;
106
- const story = getStoryFromSprintYaml(sprintYaml, '38-9');
107
- assert.ok(story, 'Story should be found');
108
- assert.strictEqual(story.workflow, 'tdd', 'Workflow tag should be extracted');
109
- });
110
- it('should extract workflow: trivial for trivial workflow stories', () => {
111
- const sprintYaml = `
112
- sprint:
113
- number: 11
114
- epics:
115
- - id: epic-38
116
- stories:
117
- - id: "38-1"
118
- title: "Fix stale references"
119
- points: 1
120
- workflow: trivial
121
- status: backlog
122
- `;
123
- const story = getStoryFromSprintYaml(sprintYaml, '38-1');
124
- assert.ok(story, 'Story should be found');
125
- assert.strictEqual(story.workflow, 'trivial', 'Trivial workflow should be extracted');
126
- });
127
- it('should extract workflow: agent-docs for documentation stories', () => {
128
- const sprintYaml = `
129
- sprint:
130
- number: 11
131
- epics:
132
- - id: epic-38
133
- stories:
134
- - id: "38-3"
135
- title: "Modernize PM agent"
136
- points: 2
137
- workflow: agent-docs
138
- status: backlog
139
- `;
140
- const story = getStoryFromSprintYaml(sprintYaml, '38-3');
141
- assert.ok(story, 'Story should be found');
142
- assert.strictEqual(story.workflow, 'agent-docs', 'Agent-docs workflow should be extracted');
143
- });
144
- it('should return undefined workflow for stories without tag', () => {
145
- const sprintYaml = `
146
- sprint:
147
- number: 11
148
- epics:
149
- - id: epic-38
150
- stories:
151
- - id: "38-99"
152
- title: "Story without workflow tag"
153
- points: 2
154
- status: backlog
155
- `;
156
- const story = getStoryFromSprintYaml(sprintYaml, '38-99');
157
- assert.ok(story, 'Story should be found');
158
- assert.strictEqual(story.workflow, undefined, 'Workflow should be undefined');
159
- });
160
- it('should convert story workflow to StoryMetadata tags', () => {
161
- const story = {
162
- id: '38-9',
163
- title: 'Test',
164
- points: 3,
165
- workflow: 'tdd'
166
- };
167
- const metadata = storyToMetadata(story);
168
- assert.ok(metadata.tags, 'Should have tags');
169
- assert.ok(metadata.tags.includes('workflow:tdd'), 'Should include workflow tag');
170
- });
171
- });
172
- // =============================================================================
173
- // AC2: SM loads correct workflow definition
174
- // =============================================================================
175
- describe('AC2: Load correct workflow definition', () => {
176
- // Find monorepo root for real workflow files
177
- function findMonorepoRoot(startDir) {
178
- let dir = startDir;
179
- for (let i = 0; i < 10; i++) {
180
- if (existsSync(join(dir, 'pennyfarthing-dist'))) {
181
- return dir;
182
- }
183
- const parent = dirname(dir);
184
- if (parent === dir)
185
- break;
186
- dir = parent;
187
- }
188
- return null;
189
- }
190
- const monorepoRoot = findMonorepoRoot(__dirname);
191
- const workflowsDir = monorepoRoot
192
- ? join(monorepoRoot, 'pennyfarthing-dist', 'workflows')
193
- : null;
194
- it('should load all workflow definitions from pennyfarthing-dist/workflows/', async () => {
195
- if (!workflowsDir) {
196
- console.log('Skipping: workflows directory not found');
197
- return;
198
- }
199
- const { workflows, errors } = loadWorkflowsFromDir(workflowsDir);
200
- assert.ok(workflows.length > 0, 'Should load at least one workflow');
201
- assert.strictEqual(errors.length, 0, `Should have no load errors: ${JSON.stringify(errors)}`);
202
- // Expected workflows
203
- const workflowNames = workflows.map(w => w.name);
204
- assert.ok(workflowNames.includes('tdd'), 'Should include tdd workflow');
205
- assert.ok(workflowNames.includes('trivial'), 'Should include trivial workflow');
206
- assert.ok(workflowNames.includes('agent-docs'), 'Should include agent-docs workflow');
207
- });
208
- it('should route story with workflow:tdd tag to tdd workflow', async () => {
209
- if (!workflowsDir) {
210
- console.log('Skipping: workflows directory not found');
211
- return;
212
- }
213
- const { workflows } = loadWorkflowsFromDir(workflowsDir);
214
- const story = {
215
- id: '38-9',
216
- tags: ['workflow:tdd'],
217
- points: 3
218
- };
219
- const result = routeStoryToWorkflow(story, workflows);
220
- assert.ok(result, 'Should route to a workflow');
221
- assert.strictEqual(result.workflow.name, 'tdd', 'Should route to tdd workflow');
222
- assert.ok(result.reason.includes('tag'), 'Reason should mention tag match');
223
- });
224
- it('should route story with workflow:trivial tag to trivial workflow', async () => {
225
- if (!workflowsDir) {
226
- console.log('Skipping: workflows directory not found');
227
- return;
228
- }
229
- const { workflows } = loadWorkflowsFromDir(workflowsDir);
230
- const story = {
231
- id: '38-1',
232
- tags: ['workflow:trivial'],
233
- points: 1
234
- };
235
- const result = routeStoryToWorkflow(story, workflows);
236
- assert.ok(result, 'Should route to a workflow');
237
- assert.strictEqual(result.workflow.name, 'trivial', 'Should route to trivial workflow');
238
- });
239
- it('should route story with workflow:agent-docs tag to agent-docs workflow', async () => {
240
- if (!workflowsDir) {
241
- console.log('Skipping: workflows directory not found');
242
- return;
243
- }
244
- const { workflows } = loadWorkflowsFromDir(workflowsDir);
245
- const story = {
246
- id: '38-3',
247
- tags: ['workflow:agent-docs'],
248
- points: 2
249
- };
250
- const result = routeStoryToWorkflow(story, workflows);
251
- assert.ok(result, 'Should route to a workflow');
252
- assert.strictEqual(result.workflow.name, 'agent-docs', 'Should route to agent-docs workflow');
253
- });
254
- });
255
- // =============================================================================
256
- // AC3: SM follows workflow's phase sequence
257
- // =============================================================================
258
- describe('AC3: Follow workflow phase sequence', () => {
259
- function findMonorepoRoot(startDir) {
260
- let dir = startDir;
261
- for (let i = 0; i < 10; i++) {
262
- if (existsSync(join(dir, 'pennyfarthing-dist'))) {
263
- return dir;
264
- }
265
- const parent = dirname(dir);
266
- if (parent === dir)
267
- break;
268
- dir = parent;
269
- }
270
- return null;
271
- }
272
- const monorepoRoot = findMonorepoRoot(__dirname);
273
- const workflowsDir = monorepoRoot
274
- ? join(monorepoRoot, 'pennyfarthing-dist', 'workflows')
275
- : null;
276
- it('tdd workflow should route SM setup → TEA (red phase)', async () => {
277
- if (!workflowsDir) {
278
- console.log('Skipping: workflows directory not found');
279
- return;
280
- }
281
- const { workflows } = loadWorkflowsFromDir(workflowsDir);
282
- const tddWorkflow = workflows.find(w => w.name === 'tdd');
283
- assert.ok(tddWorkflow, 'TDD workflow should exist');
284
- const nextAgent = getFirstAgentAfterSetup(tddWorkflow);
285
- assert.strictEqual(nextAgent, 'tea', 'TDD workflow should route to TEA after setup');
286
- });
287
- it('trivial workflow should route SM setup → Dev (implement phase)', async () => {
288
- if (!workflowsDir) {
289
- console.log('Skipping: workflows directory not found');
290
- return;
291
- }
292
- const { workflows } = loadWorkflowsFromDir(workflowsDir);
293
- const trivialWorkflow = workflows.find(w => w.name === 'trivial');
294
- assert.ok(trivialWorkflow, 'Trivial workflow should exist');
295
- const nextAgent = getFirstAgentAfterSetup(trivialWorkflow);
296
- assert.strictEqual(nextAgent, 'dev', 'Trivial workflow should route to Dev after setup');
297
- });
298
- it('agent-docs workflow should route SM setup → Orchestrator (analyze phase)', async () => {
299
- if (!workflowsDir) {
300
- console.log('Skipping: workflows directory not found');
301
- return;
302
- }
303
- const { workflows } = loadWorkflowsFromDir(workflowsDir);
304
- const agentDocsWorkflow = workflows.find(w => w.name === 'agent-docs');
305
- assert.ok(agentDocsWorkflow, 'Agent-docs workflow should exist');
306
- const nextAgent = getFirstAgentAfterSetup(agentDocsWorkflow);
307
- assert.strictEqual(nextAgent, 'orchestrator', `Agent-docs workflow should route to Orchestrator after setup, got: ${nextAgent}`);
308
- });
309
- it('should return correct handoff target based on workflow', async () => {
310
- if (!workflowsDir) {
311
- console.log('Skipping: workflows directory not found');
312
- return;
313
- }
314
- const { workflows } = loadWorkflowsFromDir(workflowsDir);
315
- // Test routing for different workflow tags
316
- const testCases = [
317
- { workflowTag: 'tdd', expectedAgent: 'tea' },
318
- { workflowTag: 'trivial', expectedAgent: 'dev' },
319
- { workflowTag: 'agent-docs', expectedAgent: 'orchestrator' }
320
- ];
321
- for (const { workflowTag, expectedAgent } of testCases) {
322
- const story = {
323
- id: 'test',
324
- tags: [`workflow:${workflowTag}`]
325
- };
326
- const result = routeStoryToWorkflow(story, workflows);
327
- assert.ok(result, `Should route ${workflowTag}`);
328
- const nextAgent = getFirstAgentAfterSetup(result.workflow);
329
- assert.strictEqual(nextAgent, expectedAgent, `${workflowTag} workflow should route to ${expectedAgent}, got ${nextAgent}`);
330
- }
331
- });
332
- });
333
- // =============================================================================
334
- // AC4: Fallback to TDD if no tag or unknown workflow
335
- // =============================================================================
336
- describe('AC4: Fallback to TDD workflow', () => {
337
- function findMonorepoRoot(startDir) {
338
- let dir = startDir;
339
- for (let i = 0; i < 10; i++) {
340
- if (existsSync(join(dir, 'pennyfarthing-dist'))) {
341
- return dir;
342
- }
343
- const parent = dirname(dir);
344
- if (parent === dir)
345
- break;
346
- dir = parent;
347
- }
348
- return null;
349
- }
350
- const monorepoRoot = findMonorepoRoot(__dirname);
351
- const workflowsDir = monorepoRoot
352
- ? join(monorepoRoot, 'pennyfarthing-dist', 'workflows')
353
- : null;
354
- it('should fall back to tdd for story with no workflow tag', async () => {
355
- if (!workflowsDir) {
356
- console.log('Skipping: workflows directory not found');
357
- return;
358
- }
359
- const { workflows } = loadWorkflowsFromDir(workflowsDir);
360
- const story = {
361
- id: '38-99',
362
- // No tags - should use default
363
- };
364
- const result = routeStoryToWorkflow(story, workflows);
365
- assert.ok(result, 'Should still route to a workflow');
366
- assert.strictEqual(result.workflow.name, 'tdd', 'Should fall back to tdd (default)');
367
- assert.ok(result.reason.includes('default'), 'Reason should mention default fallback');
368
- });
369
- it('should fall back to tdd for story with unknown workflow tag', async () => {
370
- if (!workflowsDir) {
371
- console.log('Skipping: workflows directory not found');
372
- return;
373
- }
374
- const { workflows } = loadWorkflowsFromDir(workflowsDir);
375
- const story = {
376
- id: '38-99',
377
- tags: ['workflow:nonexistent-workflow']
378
- };
379
- const result = routeStoryToWorkflow(story, workflows);
380
- // Unknown workflow tag should be ignored, fall back to default
381
- assert.ok(result, 'Should still route to a workflow');
382
- assert.strictEqual(result.workflow.name, 'tdd', 'Should fall back to tdd for unknown workflow');
383
- });
384
- it('should use type-based routing when no explicit workflow tag', async () => {
385
- if (!workflowsDir) {
386
- console.log('Skipping: workflows directory not found');
387
- return;
388
- }
389
- const { workflows } = loadWorkflowsFromDir(workflowsDir);
390
- const story = {
391
- id: '38-99',
392
- type: 'feature',
393
- points: 5
394
- // No workflow tag - should match based on type/points
395
- };
396
- const result = routeStoryToWorkflow(story, workflows);
397
- assert.ok(result, 'Should route to a workflow');
398
- // Feature type should match tdd workflow triggers
399
- assert.strictEqual(result.workflow.name, 'tdd');
400
- });
401
- it('should use points-based routing for low-point stories without tag', async () => {
402
- if (!workflowsDir) {
403
- console.log('Skipping: workflows directory not found');
404
- return;
405
- }
406
- const { workflows } = loadWorkflowsFromDir(workflowsDir);
407
- const story = {
408
- id: '38-99',
409
- type: 'chore',
410
- points: 1
411
- // No workflow tag - should match trivial based on type + points
412
- };
413
- const result = routeStoryToWorkflow(story, workflows);
414
- assert.ok(result, 'Should route to a workflow');
415
- // Chore type + 1 point should match trivial workflow triggers
416
- assert.strictEqual(result.workflow.name, 'trivial', 'Low-point chore should route to trivial workflow');
417
- });
418
- });
419
- // =============================================================================
420
- // AC5: Session file records which workflow is active
421
- // =============================================================================
422
- describe('AC5: Session file records active workflow', () => {
423
- beforeEach(() => {
424
- if (existsSync(TEST_DIR)) {
425
- rmSync(TEST_DIR, { recursive: true });
426
- }
427
- mkdirSync(TEST_DIR, { recursive: true });
428
- });
429
- afterEach(() => {
430
- if (existsSync(TEST_DIR)) {
431
- rmSync(TEST_DIR, { recursive: true });
432
- }
433
- });
434
- it('should include **Workflow:** field in session file', () => {
435
- // This test verifies the session file format includes workflow tracking
436
- const sessionContent = `# Story 38-9: SM workflow routing
437
-
438
- ## Story Details
439
-
440
- | Field | Value |
441
- |-------|-------|
442
- | Story | 38-9 |
443
-
444
- ## Workflow Tracking
445
-
446
- **Workflow:** tdd
447
- **Phase:** setup
448
- **Status:** in_progress
449
- `;
450
- const sessionPath = join(TEST_DIR, '38-9-session.md');
451
- writeFileSync(sessionPath, sessionContent);
452
- const content = readFileSync(sessionPath, 'utf-8');
453
- // Verify workflow field exists
454
- assert.ok(content.includes('**Workflow:** tdd'), 'Session file should include Workflow field');
455
- assert.ok(content.includes('## Workflow Tracking'), 'Session file should have Workflow Tracking section');
456
- });
457
- it('should record workflow matching the selected workflow tag', () => {
458
- // Test with different workflow values
459
- const testWorkflows = ['tdd', 'trivial', 'agent-docs'];
460
- for (const workflow of testWorkflows) {
461
- const sessionContent = `# Story Test
462
-
463
- ## Workflow Tracking
464
-
465
- **Workflow:** ${workflow}
466
- **Phase:** setup
467
- `;
468
- const sessionPath = join(TEST_DIR, `test-${workflow}-session.md`);
469
- writeFileSync(sessionPath, sessionContent);
470
- const content = readFileSync(sessionPath, 'utf-8');
471
- assert.ok(content.includes(`**Workflow:** ${workflow}`), `Session should record workflow: ${workflow}`);
472
- }
473
- });
474
- it('should extract workflow from existing session file', () => {
475
- const sessionContent = `# Story 38-3
476
-
477
- ## Workflow Tracking
478
-
479
- **Workflow:** agent-docs
480
- **Phase:** analyze
481
- **Agent:** orchestrator
482
- `;
483
- const sessionPath = join(TEST_DIR, '38-3-session.md');
484
- writeFileSync(sessionPath, sessionContent);
485
- const content = readFileSync(sessionPath, 'utf-8');
486
- // Extract workflow using regex (same as workflow-status-check does)
487
- const workflowMatch = content.match(/\*\*Workflow:\*\*\s*(\S+)/);
488
- assert.ok(workflowMatch, 'Should be able to extract workflow from session');
489
- assert.strictEqual(workflowMatch[1], 'agent-docs', 'Extracted workflow should match');
490
- });
491
- });
492
- // =============================================================================
493
- // Integration: End-to-end workflow routing from sprint YAML
494
- // =============================================================================
495
- describe('Integration: Sprint YAML → Workflow Routing', () => {
496
- function findMonorepoRoot(startDir) {
497
- let dir = startDir;
498
- for (let i = 0; i < 10; i++) {
499
- if (existsSync(join(dir, 'pennyfarthing-dist'))) {
500
- return dir;
501
- }
502
- const parent = dirname(dir);
503
- if (parent === dir)
504
- break;
505
- dir = parent;
506
- }
507
- return null;
508
- }
509
- const monorepoRoot = findMonorepoRoot(__dirname);
510
- const workflowsDir = monorepoRoot
511
- ? join(monorepoRoot, 'pennyfarthing-dist', 'workflows')
512
- : null;
513
- it('should route sprint story with workflow tag to correct workflow and agent', async () => {
514
- if (!workflowsDir) {
515
- console.log('Skipping: workflows directory not found');
516
- return;
517
- }
518
- // Simulate sprint YAML with different workflow tags
519
- const sprintYaml = `
520
- sprint:
521
- number: 11
522
- goal: "Test workflow routing"
523
- epics:
524
- - id: epic-38
525
- title: "Agent File Modernization"
526
- stories:
527
- - id: "38-9"
528
- title: "SM workflow routing from story tags"
529
- points: 3
530
- workflow: tdd
531
- - id: "38-3"
532
- title: "Modernize PM agent"
533
- points: 2
534
- workflow: agent-docs
535
- - id: "38-1"
536
- title: "Fix stale references"
537
- points: 1
538
- workflow: trivial
539
- `;
540
- const { workflows } = loadWorkflowsFromDir(workflowsDir);
541
- // Test each story
542
- const expectedRoutes = [
543
- { storyId: '38-9', workflow: 'tdd', agent: 'tea' },
544
- { storyId: '38-3', workflow: 'agent-docs', agent: 'orchestrator' },
545
- { storyId: '38-1', workflow: 'trivial', agent: 'dev' }
546
- ];
547
- for (const expected of expectedRoutes) {
548
- const story = getStoryFromSprintYaml(sprintYaml, expected.storyId);
549
- assert.ok(story, `Story ${expected.storyId} should exist`);
550
- const metadata = storyToMetadata(story);
551
- const result = routeStoryToWorkflow(metadata, workflows);
552
- assert.ok(result, `Story ${expected.storyId} should route`);
553
- assert.strictEqual(result.workflow.name, expected.workflow, `Story ${expected.storyId} should route to ${expected.workflow}`);
554
- const nextAgent = getFirstAgentAfterSetup(result.workflow);
555
- assert.strictEqual(nextAgent, expected.agent, `Story ${expected.storyId} should hand off to ${expected.agent}`);
556
- }
557
- });
558
- });
559
- //# sourceMappingURL=story-workflow-routing.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"story-workflow-routing.test.js","sourceRoot":"","sources":["../../src/workflow/story-workflow-routing.test.ts"],"names":[],"mappings":"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"}