@pennyfarthing/core 7.0.2 → 7.4.1

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 (628) hide show
  1. package/LICENSE +14 -0
  2. package/README.md +2 -2
  3. package/package.json +11 -10
  4. package/packages/core/dist/cli/commands/cyclist.d.ts +2 -2
  5. package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -1
  6. package/packages/core/dist/cli/commands/cyclist.js +8 -9
  7. package/packages/core/dist/cli/commands/cyclist.js.map +1 -1
  8. package/packages/core/dist/cli/commands/cyclist.test.js +6 -4
  9. package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -1
  10. package/packages/core/dist/cli/commands/init.js +4 -3
  11. package/packages/core/dist/cli/commands/init.js.map +1 -1
  12. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  13. package/packages/core/dist/cli/commands/update.js +15 -139
  14. package/packages/core/dist/cli/commands/update.js.map +1 -1
  15. package/packages/core/dist/cli/cyclist-migration.test.js +4 -3
  16. package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -1
  17. package/packages/core/dist/cli/utils/constants.d.ts +7 -1
  18. package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
  19. package/packages/core/dist/cli/utils/constants.js +4 -2
  20. package/packages/core/dist/cli/utils/constants.js.map +1 -1
  21. package/packages/core/dist/cli/utils/node-modules.d.ts.map +1 -1
  22. package/packages/core/dist/cli/utils/node-modules.js +2 -1
  23. package/packages/core/dist/cli/utils/node-modules.js.map +1 -1
  24. package/packages/core/dist/cli/utils/themes.d.ts +1 -4
  25. package/packages/core/dist/cli/utils/themes.d.ts.map +1 -1
  26. package/packages/core/dist/cli/utils/themes.js +2 -22
  27. package/packages/core/dist/cli/utils/themes.js.map +1 -1
  28. package/packages/core/dist/cli/utils/themes.test.d.ts +3 -3
  29. package/packages/core/dist/cli/utils/themes.test.js +16 -13
  30. package/packages/core/dist/cli/utils/themes.test.js.map +1 -1
  31. package/packages/core/dist/cli/workspace.test.js +11 -9
  32. package/packages/core/dist/cli/workspace.test.js.map +1 -1
  33. package/packages/core/dist/index.d.ts +1 -0
  34. package/packages/core/dist/index.d.ts.map +1 -1
  35. package/packages/core/dist/index.js +10 -0
  36. package/packages/core/dist/index.js.map +1 -1
  37. package/packages/core/dist/jira/jira-epic-creation.d.ts +109 -0
  38. package/packages/core/dist/jira/jira-epic-creation.d.ts.map +1 -0
  39. package/packages/core/dist/jira/jira-epic-creation.js +253 -0
  40. package/packages/core/dist/jira/jira-epic-creation.js.map +1 -0
  41. package/packages/core/dist/jira/jira-epic-creation.test.d.ts +16 -0
  42. package/packages/core/dist/jira/jira-epic-creation.test.d.ts.map +1 -0
  43. package/packages/core/dist/jira/jira-epic-creation.test.js +387 -0
  44. package/packages/core/dist/jira/jira-epic-creation.test.js.map +1 -0
  45. package/packages/core/dist/jira/jira-sprint-sync.d.ts +247 -0
  46. package/packages/core/dist/jira/jira-sprint-sync.d.ts.map +1 -0
  47. package/packages/core/dist/jira/jira-sprint-sync.js +670 -0
  48. package/packages/core/dist/jira/jira-sprint-sync.js.map +1 -0
  49. package/packages/core/dist/jira/jira-sprint-sync.test.d.ts +16 -0
  50. package/packages/core/dist/jira/jira-sprint-sync.test.d.ts.map +1 -0
  51. package/packages/core/dist/jira/jira-sprint-sync.test.js +845 -0
  52. package/packages/core/dist/jira/jira-sprint-sync.test.js.map +1 -0
  53. package/packages/core/dist/scripts/generate-spider.d.ts +11 -1
  54. package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -1
  55. package/packages/core/dist/scripts/generate-spider.js +24 -1
  56. package/packages/core/dist/scripts/generate-spider.js.map +1 -1
  57. package/packages/core/dist/scripts/generate-spider.test.js +6 -4
  58. package/packages/core/dist/scripts/generate-spider.test.js.map +1 -1
  59. package/packages/core/dist/workflow/gate-handler.d.ts +94 -0
  60. package/packages/core/dist/workflow/gate-handler.d.ts.map +1 -0
  61. package/packages/core/dist/workflow/gate-handler.js +189 -0
  62. package/packages/core/dist/workflow/gate-handler.js.map +1 -0
  63. package/packages/core/dist/workflow/gate-handler.test.d.ts +14 -0
  64. package/packages/core/dist/workflow/gate-handler.test.d.ts.map +1 -0
  65. package/packages/core/dist/workflow/gate-handler.test.js +543 -0
  66. package/packages/core/dist/workflow/gate-handler.test.js.map +1 -0
  67. package/packages/core/dist/workflow/generic-handoff.d.ts +46 -0
  68. package/packages/core/dist/workflow/generic-handoff.d.ts.map +1 -1
  69. package/packages/core/dist/workflow/generic-handoff.js +53 -0
  70. package/packages/core/dist/workflow/generic-handoff.js.map +1 -1
  71. package/packages/core/dist/workflow/generic-handoff.test.js +2 -2
  72. package/packages/core/dist/workflow/generic-handoff.test.js.map +1 -1
  73. package/packages/core/dist/workflow/handoff.d.ts +281 -0
  74. package/packages/core/dist/workflow/handoff.d.ts.map +1 -0
  75. package/packages/core/dist/workflow/handoff.js +411 -0
  76. package/packages/core/dist/workflow/handoff.js.map +1 -0
  77. package/packages/core/dist/workflow/handoff.test.d.ts +21 -0
  78. package/packages/core/dist/workflow/handoff.test.d.ts.map +1 -0
  79. package/packages/core/dist/workflow/handoff.test.js +499 -0
  80. package/packages/core/dist/workflow/handoff.test.js.map +1 -0
  81. package/packages/core/dist/workflow/index.d.ts +16 -0
  82. package/packages/core/dist/workflow/index.d.ts.map +1 -0
  83. package/packages/core/dist/workflow/index.js +24 -0
  84. package/packages/core/dist/workflow/index.js.map +1 -0
  85. package/packages/core/dist/workflow/session-state.d.ts +92 -0
  86. package/packages/core/dist/workflow/session-state.d.ts.map +1 -0
  87. package/packages/core/dist/workflow/session-state.js +198 -0
  88. package/packages/core/dist/workflow/session-state.js.map +1 -0
  89. package/packages/core/dist/workflow/session-state.test.d.ts +8 -0
  90. package/packages/core/dist/workflow/session-state.test.d.ts.map +1 -0
  91. package/packages/core/dist/workflow/session-state.test.js +551 -0
  92. package/packages/core/dist/workflow/session-state.test.js.map +1 -0
  93. package/packages/core/dist/workflow/sm-subagents.test.d.ts +2 -2
  94. package/packages/core/dist/workflow/sm-subagents.test.js +6 -6
  95. package/packages/core/dist/workflow/sm-subagents.test.js.map +1 -1
  96. package/packages/core/dist/workflow/step-parser.d.ts +45 -0
  97. package/packages/core/dist/workflow/step-parser.d.ts.map +1 -0
  98. package/packages/core/dist/workflow/step-parser.js +147 -0
  99. package/packages/core/dist/workflow/step-parser.js.map +1 -0
  100. package/packages/core/dist/workflow/step-parser.test.d.ts +14 -0
  101. package/packages/core/dist/workflow/step-parser.test.d.ts.map +1 -0
  102. package/packages/core/dist/workflow/step-parser.test.js +470 -0
  103. package/packages/core/dist/workflow/step-parser.test.js.map +1 -0
  104. package/packages/core/dist/workflow/trimodal.d.ts +86 -0
  105. package/packages/core/dist/workflow/trimodal.d.ts.map +1 -0
  106. package/packages/core/dist/workflow/trimodal.js +118 -0
  107. package/packages/core/dist/workflow/trimodal.js.map +1 -0
  108. package/packages/core/dist/workflow/trimodal.test.d.ts +11 -0
  109. package/packages/core/dist/workflow/trimodal.test.d.ts.map +1 -0
  110. package/packages/core/dist/workflow/trimodal.test.js +395 -0
  111. package/packages/core/dist/workflow/trimodal.test.js.map +1 -0
  112. package/packages/core/dist/workflow/variable-resolver.d.ts +67 -0
  113. package/packages/core/dist/workflow/variable-resolver.d.ts.map +1 -0
  114. package/packages/core/dist/workflow/variable-resolver.js +156 -0
  115. package/packages/core/dist/workflow/variable-resolver.js.map +1 -0
  116. package/packages/core/dist/workflow/variable-resolver.test.d.ts +14 -0
  117. package/packages/core/dist/workflow/variable-resolver.test.d.ts.map +1 -0
  118. package/packages/core/dist/workflow/variable-resolver.test.js +400 -0
  119. package/packages/core/dist/workflow/variable-resolver.test.js.map +1 -0
  120. package/packages/core/dist/workflow/workflow-executor.d.ts +163 -0
  121. package/packages/core/dist/workflow/workflow-executor.d.ts.map +1 -0
  122. package/packages/core/dist/workflow/workflow-executor.js +197 -0
  123. package/packages/core/dist/workflow/workflow-executor.js.map +1 -0
  124. package/packages/core/dist/workflow/workflow-executor.test.d.ts +8 -0
  125. package/packages/core/dist/workflow/workflow-executor.test.d.ts.map +1 -0
  126. package/packages/core/dist/workflow/workflow-executor.test.js +444 -0
  127. package/packages/core/dist/workflow/workflow-executor.test.js.map +1 -0
  128. package/packages/core/dist/workflow/workflow-loader.test.js +5 -5
  129. package/packages/core/dist/workflow/workflow-loader.test.js.map +1 -1
  130. package/packages/core/dist/workflow/workflow-migration.test.js +8 -9
  131. package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -1
  132. package/packages/core/dist/workflow/workflow-permissions.d.ts +55 -0
  133. package/packages/core/dist/workflow/workflow-permissions.d.ts.map +1 -0
  134. package/packages/core/dist/workflow/workflow-permissions.js +64 -0
  135. package/packages/core/dist/workflow/workflow-permissions.js.map +1 -0
  136. package/packages/core/dist/workflow/workflow-permissions.test.d.ts +15 -0
  137. package/packages/core/dist/workflow/workflow-permissions.test.d.ts.map +1 -0
  138. package/packages/core/dist/workflow/workflow-permissions.test.js +301 -0
  139. package/packages/core/dist/workflow/workflow-permissions.test.js.map +1 -0
  140. package/packages/core/dist/workflow/workflow-schema.d.ts +61 -2
  141. package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
  142. package/packages/core/dist/workflow/workflow-schema.js +293 -69
  143. package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
  144. package/packages/core/dist/workflow/workflow-schema.test.js +6 -6
  145. package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -1
  146. package/packages/core/dist/workflow/workflow-stepped-schema.test.d.ts +18 -0
  147. package/packages/core/dist/workflow/workflow-stepped-schema.test.d.ts.map +1 -0
  148. package/packages/core/dist/workflow/workflow-stepped-schema.test.js +608 -0
  149. package/packages/core/dist/workflow/workflow-stepped-schema.test.js.map +1 -0
  150. package/pennyfarthing-dist/agents/README.md +63 -134
  151. package/pennyfarthing-dist/agents/architect.md +18 -10
  152. package/pennyfarthing-dist/agents/dev.md +47 -32
  153. package/pennyfarthing-dist/agents/devops.md +18 -9
  154. package/pennyfarthing-dist/agents/handoff.md +289 -0
  155. package/pennyfarthing-dist/agents/orchestrator.md +44 -22
  156. package/pennyfarthing-dist/agents/pm.md +13 -8
  157. package/pennyfarthing-dist/agents/reviewer-preflight.md +42 -128
  158. package/pennyfarthing-dist/agents/reviewer.md +104 -57
  159. package/pennyfarthing-dist/agents/sm-file-summary.md +24 -75
  160. package/pennyfarthing-dist/agents/sm-finish.md +61 -0
  161. package/pennyfarthing-dist/agents/sm-handoff.md +102 -54
  162. package/pennyfarthing-dist/agents/sm-setup.md +174 -0
  163. package/pennyfarthing-dist/agents/sm.md +223 -100
  164. package/pennyfarthing-dist/agents/tea.md +42 -34
  165. package/pennyfarthing-dist/agents/tech-writer.md +74 -6
  166. package/pennyfarthing-dist/agents/testing-runner.md +78 -360
  167. package/pennyfarthing-dist/agents/ux-designer.md +80 -7
  168. package/pennyfarthing-dist/agents/workflow-status-check.md +35 -299
  169. package/pennyfarthing-dist/commands/architect.md +2 -2
  170. package/pennyfarthing-dist/commands/close-epic.md +5 -2
  171. package/pennyfarthing-dist/commands/create-branches-from-story.md +7 -23
  172. package/pennyfarthing-dist/commands/dev.md +2 -2
  173. package/pennyfarthing-dist/commands/devops.md +3 -3
  174. package/pennyfarthing-dist/commands/git-cleanup.md +5 -5
  175. package/pennyfarthing-dist/commands/health-check.md +1 -1
  176. package/pennyfarthing-dist/commands/list-themes.md +7 -3
  177. package/pennyfarthing-dist/commands/orchestrator.md +2 -2
  178. package/pennyfarthing-dist/commands/parallel-work.md +4 -4
  179. package/pennyfarthing-dist/commands/pm.md +2 -2
  180. package/pennyfarthing-dist/commands/prime.md +7 -7
  181. package/pennyfarthing-dist/commands/release.md +1 -1
  182. package/pennyfarthing-dist/commands/repo-status.md +2 -2
  183. package/pennyfarthing-dist/commands/retro.md +2 -2
  184. package/pennyfarthing-dist/commands/reviewer.md +2 -2
  185. package/pennyfarthing-dist/commands/set-theme.md +5 -1
  186. package/pennyfarthing-dist/commands/sm.md +2 -2
  187. package/pennyfarthing-dist/commands/start-epic.md +26 -14
  188. package/pennyfarthing-dist/commands/sync-epic-to-jira.md +8 -8
  189. package/pennyfarthing-dist/commands/sync-work-with-sprint.md +1 -4
  190. package/pennyfarthing-dist/commands/tea.md +2 -2
  191. package/pennyfarthing-dist/commands/tech-writer.md +2 -2
  192. package/pennyfarthing-dist/commands/ux-designer.md +3 -3
  193. package/pennyfarthing-dist/commands/work.md +15 -4
  194. package/pennyfarthing-dist/commands/workflow.md +21 -0
  195. package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +15 -15
  196. package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +1 -1
  197. package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +4 -4
  198. package/pennyfarthing-dist/guides/agent-behavior.md +238 -0
  199. package/pennyfarthing-dist/guides/agent-template-strategic.md +2 -2
  200. package/pennyfarthing-dist/guides/agent-template-tactical.md +4 -4
  201. package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +1 -1
  202. package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +17 -17
  203. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +8 -8
  204. package/pennyfarthing-dist/guides/workflow-schema.md +62 -0
  205. package/pennyfarthing-dist/guides/worktree-mode.md +5 -5
  206. package/pennyfarthing-dist/personas/themes/1984.yaml +1 -1
  207. package/pennyfarthing-dist/personas/themes/a-team.yaml +1 -1
  208. package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +1 -1
  209. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +1 -1
  210. package/pennyfarthing-dist/personas/themes/all-stars.yaml +1 -1
  211. package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +1 -1
  212. package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +1 -1
  213. package/pennyfarthing-dist/personas/themes/arcane.yaml +1 -1
  214. package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +1 -1
  215. package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +1 -1
  216. package/pennyfarthing-dist/personas/themes/babylon-5.yaml +1 -1
  217. package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +1 -1
  218. package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +1 -1
  219. package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +2 -2
  220. package/pennyfarthing-dist/personas/themes/black-sails.yaml +1 -1
  221. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +1 -1
  222. package/pennyfarthing-dist/personas/themes/bobiverse.yaml +1 -1
  223. package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +1 -1
  224. package/pennyfarthing-dist/personas/themes/catch-22.yaml +1 -1
  225. package/pennyfarthing-dist/personas/themes/classical-composers.yaml +1 -1
  226. package/pennyfarthing-dist/personas/themes/control.yaml +1 -1
  227. package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +1 -1
  228. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +1 -1
  229. package/pennyfarthing-dist/personas/themes/deadwood.yaml +2 -2
  230. package/pennyfarthing-dist/personas/themes/discworld.yaml +2 -2
  231. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +1 -1
  232. package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +1 -1
  233. package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +1 -1
  234. package/pennyfarthing-dist/personas/themes/firefly.yaml +1 -1
  235. package/pennyfarthing-dist/personas/themes/foundation.yaml +1 -1
  236. package/pennyfarthing-dist/personas/themes/futurama.yaml +1 -1
  237. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +2 -2
  238. package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +1 -1
  239. package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +1 -1
  240. package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +1 -1
  241. package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +1 -1
  242. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +2 -2
  243. package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +1 -1
  244. package/pennyfarthing-dist/personas/themes/historical-figures.yaml +1 -1
  245. package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +1 -1
  246. package/pennyfarthing-dist/personas/themes/house-md.yaml +1 -1
  247. package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +1 -1
  248. package/pennyfarthing-dist/personas/themes/jane-austen.yaml +1 -1
  249. package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +1 -1
  250. package/pennyfarthing-dist/personas/themes/justified.yaml +1 -1
  251. package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +1 -1
  252. package/pennyfarthing-dist/personas/themes/les-miserables.yaml +1 -1
  253. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +1 -1
  254. package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +1 -1
  255. package/pennyfarthing-dist/personas/themes/mad-men.yaml +1 -1
  256. package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +1 -1
  257. package/pennyfarthing-dist/personas/themes/mash.yaml +69 -66
  258. package/pennyfarthing-dist/personas/themes/mass-effect.yaml +1 -1
  259. package/pennyfarthing-dist/personas/themes/military-commanders.yaml +1 -1
  260. package/pennyfarthing-dist/personas/themes/moby-dick.yaml +1 -1
  261. package/pennyfarthing-dist/personas/themes/monty-python.yaml +1 -1
  262. package/pennyfarthing-dist/personas/themes/neuromancer.yaml +1 -1
  263. package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +1 -1
  264. package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +1 -1
  265. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +1 -1
  266. package/pennyfarthing-dist/personas/themes/rome.yaml +1 -1
  267. package/pennyfarthing-dist/personas/themes/russian-masters.yaml +1 -1
  268. package/pennyfarthing-dist/personas/themes/sandman.yaml +1 -1
  269. package/pennyfarthing-dist/personas/themes/shakespeare.yaml +1 -1
  270. package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +1 -1
  271. package/pennyfarthing-dist/personas/themes/snow-crash.yaml +1 -1
  272. package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +1 -1
  273. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +1 -1
  274. package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +1 -1
  275. package/pennyfarthing-dist/personas/themes/star-wars.yaml +1 -1
  276. package/pennyfarthing-dist/personas/themes/superfriends.yaml +1 -1
  277. package/pennyfarthing-dist/personas/themes/the-americans.yaml +1 -1
  278. package/pennyfarthing-dist/personas/themes/the-crown.yaml +1 -1
  279. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +1 -1
  280. package/pennyfarthing-dist/personas/themes/the-good-place.yaml +1 -1
  281. package/pennyfarthing-dist/personas/themes/the-office.yaml +1 -1
  282. package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +1 -1
  283. package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +1 -1
  284. package/pennyfarthing-dist/personas/themes/the-wire.yaml +1 -1
  285. package/pennyfarthing-dist/personas/themes/the-witcher.yaml +1 -1
  286. package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +1 -1
  287. package/pennyfarthing-dist/personas/themes/west-wing.yaml +1 -1
  288. package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +1 -1
  289. package/pennyfarthing-dist/scripts/README.md +68 -0
  290. package/pennyfarthing-dist/scripts/core/README.md +26 -0
  291. package/pennyfarthing-dist/scripts/{agent-session.sh → core/agent-session.sh} +34 -23
  292. package/pennyfarthing-dist/scripts/{check-context.sh → core/check-context.sh} +93 -37
  293. package/pennyfarthing-dist/scripts/core/handoff-marker.sh +90 -0
  294. package/pennyfarthing-dist/scripts/core/prime.sh +136 -0
  295. package/pennyfarthing-dist/scripts/core/run.sh +75 -0
  296. package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +21 -0
  297. package/pennyfarthing-dist/scripts/git/README.md +25 -0
  298. package/pennyfarthing-dist/scripts/{utils → git}/create-feature-branches.sh +11 -15
  299. package/pennyfarthing-dist/scripts/{utils → git}/git-status-all.sh +1 -1
  300. package/pennyfarthing-dist/scripts/{install-git-hooks.sh → git/install-git-hooks.sh} +0 -0
  301. package/pennyfarthing-dist/scripts/{release.sh → git/release.sh} +0 -0
  302. package/pennyfarthing-dist/scripts/{worktree-manager.sh → git/worktree-manager.sh} +0 -4
  303. package/pennyfarthing-dist/scripts/hooks/README.md +32 -0
  304. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +3 -4
  305. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +1 -2
  306. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -0
  307. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +1 -1
  308. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -0
  309. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -0
  310. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -0
  311. package/pennyfarthing-dist/scripts/hooks/session-start.sh +2 -3
  312. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +2 -3
  313. package/pennyfarthing-dist/scripts/jira/README.md +33 -0
  314. package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +101 -0
  315. package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +97 -0
  316. package/pennyfarthing-dist/scripts/jira/jira-bidirectional-sync.mjs +327 -0
  317. package/pennyfarthing-dist/scripts/jira/jira-bidirectional-sync.test.mjs +503 -0
  318. package/pennyfarthing-dist/scripts/{utils → jira}/jira-claim-story.sh +8 -6
  319. package/pennyfarthing-dist/scripts/{utils/jira → jira}/jira-lib.mjs +10 -10
  320. package/pennyfarthing-dist/scripts/{utils → jira}/jira-lib.sh +18 -17
  321. package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +266 -0
  322. package/pennyfarthing-dist/scripts/{utils/jira → jira}/jira-sync-story.mjs +14 -14
  323. package/pennyfarthing-dist/scripts/{utils → jira}/jira-sync-story.sh +0 -0
  324. package/pennyfarthing-dist/scripts/{utils/jira → jira}/jira-sync.mjs +4 -4
  325. package/pennyfarthing-dist/scripts/{utils → jira}/jira-sync.sh +0 -0
  326. package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +104 -0
  327. package/pennyfarthing-dist/scripts/{utils → jira}/sync-epic-to-jira.sh +1 -1
  328. package/pennyfarthing-dist/scripts/lib/README.md +29 -0
  329. package/pennyfarthing-dist/scripts/{utils → lib}/background-tasks.sh +1 -1
  330. package/pennyfarthing-dist/scripts/{utils → lib}/checkpoint.sh +0 -0
  331. package/pennyfarthing-dist/scripts/{utils → lib}/common.sh +1 -1
  332. package/pennyfarthing-dist/scripts/{utils → lib}/file-lock.sh +0 -0
  333. package/pennyfarthing-dist/scripts/{utils → lib}/find-root.sh +7 -5
  334. package/pennyfarthing-dist/scripts/{utils → lib}/logging.sh +0 -0
  335. package/pennyfarthing-dist/scripts/{utils → lib}/retry.sh +0 -0
  336. package/pennyfarthing-dist/scripts/misc/README.md +44 -0
  337. package/pennyfarthing-dist/scripts/{add-short-names.mjs → misc/add-short-names.mjs} +0 -0
  338. package/pennyfarthing-dist/scripts/misc/backlog.sh +91 -0
  339. package/pennyfarthing-dist/scripts/{utils → misc}/check-status.sh +4 -8
  340. package/pennyfarthing-dist/scripts/{deploy.sh → misc/deploy.sh} +0 -0
  341. package/pennyfarthing-dist/scripts/{doctor-dogfood.sh → misc/doctor-dogfood.sh} +2 -5
  342. package/pennyfarthing-dist/scripts/{utils → misc}/find-related-work.sh +0 -0
  343. package/pennyfarthing-dist/scripts/{utils → misc}/generate-skill-docs.sh +0 -0
  344. package/pennyfarthing-dist/scripts/{utils → misc}/log-skill-usage.sh +0 -0
  345. package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.mjs +474 -0
  346. package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +9 -0
  347. package/pennyfarthing-dist/scripts/{utils → misc}/repo-scan.sh +0 -0
  348. package/pennyfarthing-dist/scripts/{repo-utils.sh → misc/repo-utils.sh} +2 -2
  349. package/pennyfarthing-dist/scripts/{run-ci.sh → misc/run-ci.sh} +0 -0
  350. package/pennyfarthing-dist/scripts/{utils → misc}/run-timestamp.sh +0 -0
  351. package/pennyfarthing-dist/scripts/{utils → misc}/session-cleanup.sh +0 -0
  352. package/pennyfarthing-dist/scripts/{utils → misc}/skill-usage-report.sh +0 -0
  353. package/pennyfarthing-dist/scripts/{statusline.sh → misc/statusline.sh} +2 -7
  354. package/pennyfarthing-dist/scripts/{uninstall.sh → misc/uninstall.sh} +4 -5
  355. package/pennyfarthing-dist/scripts/{utils → misc}/validate-subagent-frontmatter.sh +3 -3
  356. package/pennyfarthing-dist/scripts/sprint/README.md +29 -0
  357. package/pennyfarthing-dist/scripts/sprint/archive-story.sh +135 -0
  358. package/pennyfarthing-dist/scripts/sprint/available-stories.sh +97 -0
  359. package/pennyfarthing-dist/scripts/sprint/check-story.sh +164 -0
  360. package/pennyfarthing-dist/scripts/sprint/get-epic-field.sh +58 -0
  361. package/pennyfarthing-dist/scripts/sprint/get-story-field.sh +69 -0
  362. package/pennyfarthing-dist/scripts/sprint/list-future.sh +151 -0
  363. package/pennyfarthing-dist/scripts/sprint/new-sprint.sh +116 -0
  364. package/pennyfarthing-dist/scripts/sprint/promote-epic.sh +164 -0
  365. package/pennyfarthing-dist/scripts/{utils → sprint}/sprint-common.sh +135 -0
  366. package/pennyfarthing-dist/scripts/sprint/sprint-info.sh +39 -0
  367. package/pennyfarthing-dist/scripts/{utils → sprint}/sprint-metrics.sh +0 -0
  368. package/pennyfarthing-dist/scripts/sprint/sprint-status.sh +134 -0
  369. package/pennyfarthing-dist/scripts/story/README.md +23 -0
  370. package/pennyfarthing-dist/scripts/story/create-story.sh +159 -0
  371. package/pennyfarthing-dist/scripts/story/size-story.sh +198 -0
  372. package/pennyfarthing-dist/scripts/story/story-template.sh +162 -0
  373. package/pennyfarthing-dist/scripts/test/README.md +23 -0
  374. package/pennyfarthing-dist/scripts/{utils → test}/swebench-judge.py +0 -0
  375. package/pennyfarthing-dist/scripts/test/test-cache.sh +165 -0
  376. package/pennyfarthing-dist/scripts/{utils → test}/test-setup.sh +5 -5
  377. package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -0
  378. package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +515 -0
  379. package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +599 -0
  380. package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +332 -0
  381. package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +573 -0
  382. package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +859 -0
  383. package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +662 -0
  384. package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +589 -0
  385. package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +7 -9
  386. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +18 -18
  387. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +10 -10
  388. package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +1 -1
  389. package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -0
  390. package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +647 -0
  391. package/pennyfarthing-dist/scripts/theme/README.md +22 -0
  392. package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.sh +203 -0
  393. package/pennyfarthing-dist/scripts/theme/list-themes.sh +73 -0
  394. package/pennyfarthing-dist/scripts/theme/update-theme-tiers.sh +97 -0
  395. package/pennyfarthing-dist/scripts/workflow/README.md +28 -0
  396. package/pennyfarthing-dist/scripts/{check.sh → workflow/check.sh} +0 -0
  397. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +159 -0
  398. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +228 -0
  399. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +91 -0
  400. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +163 -0
  401. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +138 -0
  402. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +256 -0
  403. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +167 -0
  404. package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +6 -0
  405. package/pennyfarthing-dist/skills/changelog/SKILL.md +2 -2
  406. package/pennyfarthing-dist/skills/code-review/SKILL.md +3 -3
  407. package/pennyfarthing-dist/skills/context-engineering/SKILL.md +6 -0
  408. package/pennyfarthing-dist/skills/cyclist/SKILL.md +56 -139
  409. package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +21 -5
  410. package/pennyfarthing-dist/skills/finalize-run/SKILL.md +1 -1
  411. package/pennyfarthing-dist/skills/jira/SKILL.md +381 -178
  412. package/pennyfarthing-dist/skills/judge/SKILL.md +76 -21
  413. package/pennyfarthing-dist/skills/just/SKILL.md +345 -102
  414. package/pennyfarthing-dist/skills/otel/skill.md +1 -0
  415. package/pennyfarthing-dist/skills/permissions/skill.md +1 -1
  416. package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +5 -0
  417. package/pennyfarthing-dist/skills/skill-registry.schema.json +5 -0
  418. package/pennyfarthing-dist/skills/skill-registry.yaml +22 -0
  419. package/pennyfarthing-dist/skills/sprint/scripts/archive-story.sh +101 -0
  420. package/pennyfarthing-dist/skills/sprint/scripts/available-stories.sh +97 -0
  421. package/pennyfarthing-dist/skills/sprint/scripts/check-story.sh +164 -0
  422. package/pennyfarthing-dist/skills/sprint/scripts/create-jira-epic.sh +101 -0
  423. package/pennyfarthing-dist/skills/sprint/scripts/new-sprint.sh +116 -0
  424. package/pennyfarthing-dist/skills/sprint/scripts/promote-epic.sh +164 -0
  425. package/pennyfarthing-dist/skills/sprint/scripts/sprint-info.sh +39 -0
  426. package/pennyfarthing-dist/skills/sprint/scripts/sprint-status.sh +147 -0
  427. package/pennyfarthing-dist/skills/sprint/scripts/sync-epic-jira.sh +104 -0
  428. package/pennyfarthing-dist/skills/sprint/skill.md +465 -0
  429. package/pennyfarthing-dist/skills/story/scripts/create-story.sh +159 -0
  430. package/pennyfarthing-dist/skills/story/scripts/size-story.sh +198 -0
  431. package/pennyfarthing-dist/skills/story/scripts/story-template.sh +162 -0
  432. package/pennyfarthing-dist/skills/story/skill.md +219 -0
  433. package/pennyfarthing-dist/skills/systematic-debugging/SKILL.md +390 -0
  434. package/pennyfarthing-dist/skills/theme/skill.md +1 -1
  435. package/pennyfarthing-dist/skills/workflow/scripts/list-workflows.sh +91 -0
  436. package/pennyfarthing-dist/skills/workflow/scripts/resume-workflow.sh +163 -0
  437. package/pennyfarthing-dist/skills/workflow/scripts/show-workflow.sh +138 -0
  438. package/pennyfarthing-dist/skills/workflow/scripts/start-workflow.sh +273 -0
  439. package/pennyfarthing-dist/skills/workflow/scripts/workflow-status.sh +167 -0
  440. package/pennyfarthing-dist/skills/workflow/skill.md +337 -0
  441. package/pennyfarthing-dist/templates/settings.local.json.template +1 -1
  442. package/pennyfarthing-dist/workflows/agent-docs.yaml +1 -1
  443. package/pennyfarthing-dist/workflows/architecture/steps/step-01-initialize.md +101 -0
  444. package/pennyfarthing-dist/workflows/architecture/steps/step-01b-continue.md +93 -0
  445. package/pennyfarthing-dist/workflows/architecture/steps/step-02-context.md +115 -0
  446. package/pennyfarthing-dist/workflows/architecture/steps/step-03-patterns.md +133 -0
  447. package/pennyfarthing-dist/workflows/architecture/steps/step-04-components.md +138 -0
  448. package/pennyfarthing-dist/workflows/architecture/steps/step-05-interfaces.md +133 -0
  449. package/pennyfarthing-dist/workflows/architecture/steps/step-06-risks.md +142 -0
  450. package/pennyfarthing-dist/workflows/architecture/steps/step-07-document.md +160 -0
  451. package/pennyfarthing-dist/workflows/architecture/templates/architecture-decision.md +102 -0
  452. package/pennyfarthing-dist/workflows/architecture.yaml +65 -0
  453. package/pennyfarthing-dist/workflows/bdd.yaml +3 -1
  454. package/pennyfarthing-dist/workflows/brainstorming/brain-methods.csv +62 -0
  455. package/pennyfarthing-dist/workflows/brainstorming/checklist.md +44 -0
  456. package/pennyfarthing-dist/workflows/brainstorming/instructions.md +736 -0
  457. package/pennyfarthing-dist/workflows/brainstorming/workflow.yaml +49 -0
  458. package/pennyfarthing-dist/workflows/code-review/checklist.md +23 -0
  459. package/pennyfarthing-dist/workflows/code-review/instructions.md +234 -0
  460. package/pennyfarthing-dist/workflows/code-review/workflow.yaml +51 -0
  461. package/pennyfarthing-dist/workflows/dev-story/checklist.md +80 -0
  462. package/pennyfarthing-dist/workflows/dev-story/instructions.xml +410 -0
  463. package/pennyfarthing-dist/workflows/dev-story/workflow.yaml +50 -0
  464. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-01-validate-prerequisites.md +256 -0
  465. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-02-design-epics.md +233 -0
  466. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-03-create-stories.md +272 -0
  467. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-04-final-validation.md +145 -0
  468. package/pennyfarthing-dist/workflows/epics-and-stories/templates/epics-template.md +57 -0
  469. package/pennyfarthing-dist/workflows/epics-and-stories/workflow.yaml +27 -0
  470. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-01-document-discovery.md +190 -0
  471. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-02-prd-analysis.md +178 -0
  472. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
  473. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-04-ux-alignment.md +139 -0
  474. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
  475. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-06-final-assessment.md +133 -0
  476. package/pennyfarthing-dist/workflows/implementation-readiness/templates/readiness-report-template.md +4 -0
  477. package/pennyfarthing-dist/workflows/implementation-readiness/workflow.yaml +40 -0
  478. package/pennyfarthing-dist/workflows/prd/data/domain-complexity.csv +13 -0
  479. package/pennyfarthing-dist/workflows/prd/data/prd-purpose.md +197 -0
  480. package/pennyfarthing-dist/workflows/prd/data/project-types.csv +11 -0
  481. package/pennyfarthing-dist/workflows/prd/steps-c/step-01-init.md +191 -0
  482. package/pennyfarthing-dist/workflows/prd/steps-c/step-01b-continue.md +153 -0
  483. package/pennyfarthing-dist/workflows/prd/steps-c/step-02-discovery.md +224 -0
  484. package/pennyfarthing-dist/workflows/prd/steps-c/step-03-success.md +226 -0
  485. package/pennyfarthing-dist/workflows/prd/steps-c/step-04-journeys.md +213 -0
  486. package/pennyfarthing-dist/workflows/prd/steps-c/step-05-domain.md +207 -0
  487. package/pennyfarthing-dist/workflows/prd/steps-c/step-06-innovation.md +226 -0
  488. package/pennyfarthing-dist/workflows/prd/steps-c/step-07-project-type.md +237 -0
  489. package/pennyfarthing-dist/workflows/prd/steps-c/step-08-scoping.md +228 -0
  490. package/pennyfarthing-dist/workflows/prd/steps-c/step-09-functional.md +231 -0
  491. package/pennyfarthing-dist/workflows/prd/steps-c/step-10-nonfunctional.md +242 -0
  492. package/pennyfarthing-dist/workflows/prd/steps-c/step-11-polish.md +217 -0
  493. package/pennyfarthing-dist/workflows/prd/steps-c/step-12-complete.md +180 -0
  494. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01-discovery.md +247 -0
  495. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  496. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-02-review.md +249 -0
  497. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-03-edit.md +253 -0
  498. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-04-complete.md +168 -0
  499. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-01-discovery.md +218 -0
  500. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02-format-detection.md +191 -0
  501. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02b-parity-check.md +209 -0
  502. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-03-density-validation.md +174 -0
  503. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  504. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-05-measurability-validation.md +228 -0
  505. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-06-traceability-validation.md +217 -0
  506. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  507. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  508. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-09-project-type-validation.md +263 -0
  509. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-10-smart-validation.md +209 -0
  510. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  511. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-12-completeness-validation.md +242 -0
  512. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-13-report-complete.md +232 -0
  513. package/pennyfarthing-dist/workflows/prd/templates/prd-template.md +10 -0
  514. package/pennyfarthing-dist/workflows/prd/workflow.yaml +42 -0
  515. package/pennyfarthing-dist/workflows/product-brief/steps/step-01-init.md +177 -0
  516. package/pennyfarthing-dist/workflows/product-brief/steps/step-01b-continue.md +161 -0
  517. package/pennyfarthing-dist/workflows/product-brief/steps/step-02-vision.md +199 -0
  518. package/pennyfarthing-dist/workflows/product-brief/steps/step-03-users.md +202 -0
  519. package/pennyfarthing-dist/workflows/product-brief/steps/step-04-metrics.md +205 -0
  520. package/pennyfarthing-dist/workflows/product-brief/steps/step-05-scope.md +219 -0
  521. package/pennyfarthing-dist/workflows/product-brief/steps/step-06-complete.md +194 -0
  522. package/pennyfarthing-dist/workflows/product-brief/templates/product-brief.template.md +10 -0
  523. package/pennyfarthing-dist/workflows/product-brief/workflow.yaml +31 -0
  524. package/pennyfarthing-dist/workflows/project-context/project-context-template.md +21 -0
  525. package/pennyfarthing-dist/workflows/project-context/steps/step-01-discover.md +184 -0
  526. package/pennyfarthing-dist/workflows/project-context/steps/step-02-generate.md +318 -0
  527. package/pennyfarthing-dist/workflows/project-context/steps/step-03-complete.md +278 -0
  528. package/pennyfarthing-dist/workflows/project-context/workflow.yaml +27 -0
  529. package/pennyfarthing-dist/workflows/quick-dev/steps/step-01-mode-detection.md +156 -0
  530. package/pennyfarthing-dist/workflows/quick-dev/steps/step-02-context-gathering.md +120 -0
  531. package/pennyfarthing-dist/workflows/quick-dev/steps/step-03-execute.md +113 -0
  532. package/pennyfarthing-dist/workflows/quick-dev/steps/step-04-self-check.md +113 -0
  533. package/pennyfarthing-dist/workflows/quick-dev/steps/step-05-adversarial-review.md +106 -0
  534. package/pennyfarthing-dist/workflows/quick-dev/steps/step-06-resolve-findings.md +140 -0
  535. package/pennyfarthing-dist/workflows/quick-dev/workflow.yaml +27 -0
  536. package/pennyfarthing-dist/workflows/quick-spec/steps/step-01-understand.md +189 -0
  537. package/pennyfarthing-dist/workflows/quick-spec/steps/step-02-investigate.md +144 -0
  538. package/pennyfarthing-dist/workflows/quick-spec/steps/step-03-generate.md +128 -0
  539. package/pennyfarthing-dist/workflows/quick-spec/steps/step-04-review.md +191 -0
  540. package/pennyfarthing-dist/workflows/quick-spec/tech-spec-template.md +74 -0
  541. package/pennyfarthing-dist/workflows/quick-spec/workflow.yaml +27 -0
  542. package/pennyfarthing-dist/workflows/research/steps-domain/step-01-init.md +137 -0
  543. package/pennyfarthing-dist/workflows/research/steps-domain/step-02-domain-analysis.md +229 -0
  544. package/pennyfarthing-dist/workflows/research/steps-domain/step-03-competitive-landscape.md +238 -0
  545. package/pennyfarthing-dist/workflows/research/steps-domain/step-04-regulatory-focus.md +206 -0
  546. package/pennyfarthing-dist/workflows/research/steps-domain/step-05-technical-trends.md +234 -0
  547. package/pennyfarthing-dist/workflows/research/steps-domain/step-06-research-synthesis.md +443 -0
  548. package/pennyfarthing-dist/workflows/research/steps-market/step-01-init.md +182 -0
  549. package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-behavior.md +237 -0
  550. package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-insights.md +200 -0
  551. package/pennyfarthing-dist/workflows/research/steps-market/step-03-customer-pain-points.md +249 -0
  552. package/pennyfarthing-dist/workflows/research/steps-market/step-04-customer-decisions.md +259 -0
  553. package/pennyfarthing-dist/workflows/research/steps-market/step-05-competitive-analysis.md +177 -0
  554. package/pennyfarthing-dist/workflows/research/steps-market/step-06-research-completion.md +475 -0
  555. package/pennyfarthing-dist/workflows/research/steps-technical/step-01-init.md +137 -0
  556. package/pennyfarthing-dist/workflows/research/steps-technical/step-02-technical-overview.md +239 -0
  557. package/pennyfarthing-dist/workflows/research/steps-technical/step-03-integration-patterns.md +248 -0
  558. package/pennyfarthing-dist/workflows/research/steps-technical/step-04-architectural-patterns.md +202 -0
  559. package/pennyfarthing-dist/workflows/research/steps-technical/step-05-implementation-research.md +239 -0
  560. package/pennyfarthing-dist/workflows/research/steps-technical/step-06-research-synthesis.md +486 -0
  561. package/pennyfarthing-dist/workflows/research/templates/research.template.md +29 -0
  562. package/pennyfarthing-dist/workflows/research/workflow.yaml +45 -0
  563. package/pennyfarthing-dist/workflows/retrospective/checklist.md +31 -0
  564. package/pennyfarthing-dist/workflows/retrospective/instructions.md +1443 -0
  565. package/pennyfarthing-dist/workflows/retrospective/workflow.yaml +50 -0
  566. package/pennyfarthing-dist/workflows/sprint-planning/checklist.md +33 -0
  567. package/pennyfarthing-dist/workflows/sprint-planning/sprint-status-template.yaml +55 -0
  568. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-01-parse-epic-files.md +54 -0
  569. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-02-build-sprint-status.md +44 -0
  570. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-03-status-detection.md +64 -0
  571. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-04-generate-status-file.md +73 -0
  572. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-05-validate-and-report.md +56 -0
  573. package/pennyfarthing-dist/workflows/sprint-planning/workflow.yaml +34 -0
  574. package/pennyfarthing-dist/workflows/trivial.yaml +1 -1
  575. package/pennyfarthing-dist/workflows/ux-design/steps/step-01-init.md +135 -0
  576. package/pennyfarthing-dist/workflows/ux-design/steps/step-01b-continue.md +127 -0
  577. package/pennyfarthing-dist/workflows/ux-design/steps/step-02-discovery.md +190 -0
  578. package/pennyfarthing-dist/workflows/ux-design/steps/step-03-core-experience.md +216 -0
  579. package/pennyfarthing-dist/workflows/ux-design/steps/step-04-emotional-response.md +219 -0
  580. package/pennyfarthing-dist/workflows/ux-design/steps/step-05-inspiration.md +234 -0
  581. package/pennyfarthing-dist/workflows/ux-design/steps/step-06-design-system.md +252 -0
  582. package/pennyfarthing-dist/workflows/ux-design/steps/step-07-defining-experience.md +254 -0
  583. package/pennyfarthing-dist/workflows/ux-design/steps/step-08-visual-foundation.md +224 -0
  584. package/pennyfarthing-dist/workflows/ux-design/steps/step-09-design-directions.md +224 -0
  585. package/pennyfarthing-dist/workflows/ux-design/steps/step-10-user-journeys.md +241 -0
  586. package/pennyfarthing-dist/workflows/ux-design/steps/step-11-component-strategy.md +248 -0
  587. package/pennyfarthing-dist/workflows/ux-design/steps/step-12-ux-patterns.md +237 -0
  588. package/pennyfarthing-dist/workflows/ux-design/steps/step-13-responsive-accessibility.md +264 -0
  589. package/pennyfarthing-dist/workflows/ux-design/steps/step-14-complete.md +228 -0
  590. package/pennyfarthing-dist/workflows/ux-design/ux-design-template.md +13 -0
  591. package/pennyfarthing-dist/workflows/ux-design/workflow.yaml +41 -0
  592. package/packages/core/dist/scripts/generate-all-faces.d.ts +0 -10
  593. package/packages/core/dist/scripts/generate-all-faces.d.ts.map +0 -1
  594. package/packages/core/dist/scripts/generate-all-faces.js +0 -256
  595. package/packages/core/dist/scripts/generate-all-faces.js.map +0 -1
  596. package/packages/core/dist/scripts/generate-all-faces.test.d.ts +0 -17
  597. package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +0 -1
  598. package/packages/core/dist/scripts/generate-all-faces.test.js +0 -372
  599. package/packages/core/dist/scripts/generate-all-faces.test.js.map +0 -1
  600. package/packages/core/dist/scripts/generate-ascii-face.d.ts +0 -52
  601. package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +0 -1
  602. package/packages/core/dist/scripts/generate-ascii-face.js +0 -155
  603. package/packages/core/dist/scripts/generate-ascii-face.js.map +0 -1
  604. package/packages/core/dist/scripts/generate-face.d.ts +0 -52
  605. package/packages/core/dist/scripts/generate-face.d.ts.map +0 -1
  606. package/packages/core/dist/scripts/generate-face.js +0 -199
  607. package/packages/core/dist/scripts/generate-face.js.map +0 -1
  608. package/packages/core/dist/scripts/generate-face.test.d.ts +0 -13
  609. package/packages/core/dist/scripts/generate-face.test.d.ts.map +0 -1
  610. package/packages/core/dist/scripts/generate-face.test.js +0 -301
  611. package/packages/core/dist/scripts/generate-face.test.js.map +0 -1
  612. package/pennyfarthing-dist/agents/generic-handoff.md +0 -454
  613. package/pennyfarthing-dist/agents/generic-sm-finish.md +0 -261
  614. package/pennyfarthing-dist/agents/generic-sm-setup.md +0 -214
  615. package/pennyfarthing-dist/commands/new-work.md +0 -127
  616. package/pennyfarthing-dist/guides/AGENT-SCOPES.md +0 -201
  617. package/pennyfarthing-dist/guides/persona-system.md +0 -294
  618. package/pennyfarthing-dist/guides/shared-agent-behavior.md +0 -388
  619. package/pennyfarthing-dist/guides/shared-context.md +0 -147
  620. package/pennyfarthing-dist/guides/strategic-agent-behavior.md +0 -348
  621. package/pennyfarthing-dist/guides/tactical-agent-behavior.md +0 -1041
  622. package/pennyfarthing-dist/scripts/prime.sh +0 -161
  623. package/pennyfarthing-dist/scripts/run.sh +0 -65
  624. package/pennyfarthing-dist/skills/sprint-context/SKILL.md +0 -120
  625. package/pennyfarthing-dist/skills/story-management/SKILL.md +0 -208
  626. package/pennyfarthing-dist/skills/workflow/SKILL.md +0 -160
  627. /package/pennyfarthing-dist/commands/{brainstorm.md → brainstorming.md} +0 -0
  628. /package/pennyfarthing-dist/scripts/{utils → test}/ground-truth-judge.py +0 -0
@@ -0,0 +1,390 @@
1
+ ---
2
+ name: systematic-debugging
3
+ description: Systematic debugging approach for isolating and fixing issues. Use when debugging failures, investigating errors, bisecting regressions, or validating fixes.
4
+ ---
5
+
6
+ # Systematic Debugging Skill
7
+
8
+ **Purpose:** Guide methodical debugging to find root causes, not just symptoms.
9
+
10
+ **Use when:** Bug reports, test failures, unexpected behavior, regressions.
11
+
12
+ ---
13
+
14
+ ## When to Use This Skill
15
+
16
+ - Debugging test failures or unexpected behavior
17
+ - Investigating error messages or stack traces
18
+ - Bisecting to find when a regression was introduced
19
+ - Validating that a fix addresses root cause, not just symptoms
20
+ - Intermittent failures that are hard to reproduce
21
+
22
+ ---
23
+
24
+ ## The Debugging Cycle
25
+
26
+ ```
27
+ 1. REPRODUCE → Make the failure happen reliably
28
+ 2. ISOLATE → Narrow down to minimal reproducer
29
+ 3. HYPOTHESIZE → Form theory about root cause
30
+ 4. TEST → Validate or invalidate hypothesis
31
+ 5. FIX → Implement solution
32
+ 6. VERIFY → Confirm fix addresses root cause
33
+ ```
34
+
35
+ ### Quick Reference
36
+
37
+ | Phase | Question to Answer | Output |
38
+ |-------|-------------------|--------|
39
+ | REPRODUCE | Can I make it fail consistently? | Reliable reproduction steps |
40
+ | ISOLATE | What's the minimal code/input that triggers it? | Minimal reproducer |
41
+ | HYPOTHESIZE | What could cause this behavior? | Ranked list of theories |
42
+ | TEST | Does evidence support my theory? | Confirmed or refuted hypothesis |
43
+ | FIX | What's the minimal change to fix it? | Working code |
44
+ | VERIFY | Does the fix address root cause? | Regression test |
45
+
46
+ ---
47
+
48
+ ## Phase 1: REPRODUCE
49
+
50
+ **Goal:** Make the failure happen reliably.
51
+
52
+ ### Steps
53
+
54
+ 1. **Document exact error** - Copy the full error message, stack trace, logs
55
+ 2. **Capture environment** - Versions, configuration, system state
56
+ 3. **Create reproduction steps** - Exact commands/actions to trigger
57
+ 4. **Test reproduction** - Run it 3+ times to confirm consistency
58
+
59
+ ### For Intermittent Failures
60
+
61
+ | Pattern | Approach |
62
+ |---------|----------|
63
+ | Race condition | Add delays, run in tight loop, stress test |
64
+ | State-dependent | Reset to clean state, document preconditions |
65
+ | Environment-specific | Compare working vs failing environments |
66
+ | Timing-dependent | Add timestamps, check for timeouts |
67
+
68
+ ### Example
69
+
70
+ ```bash
71
+ # Document the failure
72
+ $ npm test -- -t "user authentication"
73
+ # Error: Expected 200 but got 401
74
+
75
+ # Capture environment
76
+ $ node --version # v18.17.0
77
+ $ npm --version # 9.6.7
78
+
79
+ # Reproduction steps
80
+ 1. Start fresh database: docker-compose down -v && docker-compose up -d
81
+ 2. Run: npm test -- -t "user authentication"
82
+ 3. Observe: 401 error on third test
83
+
84
+ # Verify reproduction
85
+ $ npm test -- -t "user authentication" # Fails
86
+ $ npm test -- -t "user authentication" # Fails
87
+ $ npm test -- -t "user authentication" # Fails - consistent!
88
+ ```
89
+
90
+ ---
91
+
92
+ ## Phase 2: ISOLATE
93
+
94
+ **Goal:** Narrow down to the smallest code/input that triggers the bug.
95
+
96
+ ### Techniques
97
+
98
+ #### Binary Search (Code)
99
+
100
+ ```
101
+ 1. Find a known-good commit
102
+ 2. Find the failing commit
103
+ 3. git bisect between them
104
+ 4. Each step: test, mark good/bad
105
+ 5. Arrive at first bad commit
106
+ ```
107
+
108
+ ```bash
109
+ git bisect start
110
+ git bisect bad HEAD
111
+ git bisect good v1.2.0
112
+ # Git checks out middle commit
113
+ npm test -- -t "failing test"
114
+ git bisect bad # or good
115
+ # Repeat until found
116
+ git bisect reset
117
+ ```
118
+
119
+ #### Minimal Reproducer
120
+
121
+ 1. Start with failing test/code
122
+ 2. Remove components one at a time
123
+ 3. Stop when removal fixes the bug
124
+ 4. The last removed component is involved
125
+
126
+ #### Variable Elimination
127
+
128
+ | Remove | Still fails? | Conclusion |
129
+ |--------|--------------|------------|
130
+ | External API calls | Yes | Not API-related |
131
+ | Database queries | No | Database-related |
132
+ | Specific table | Yes | Not that table |
133
+ | Auth middleware | No | Auth is involved |
134
+
135
+ ### Example
136
+
137
+ ```typescript
138
+ // Full failing code
139
+ async function createUser(data) {
140
+ validateInput(data);
141
+ const hash = await hashPassword(data.password);
142
+ const user = await db.insert({ ...data, password: hash });
143
+ await sendWelcomeEmail(user.email);
144
+ return user;
145
+ }
146
+
147
+ // Minimal reproducer (isolated the issue)
148
+ async function createUser(data) {
149
+ const user = await db.insert(data); // Fails here!
150
+ return user;
151
+ }
152
+ // Conclusion: Issue is in db.insert, not validation/email
153
+ ```
154
+
155
+ ---
156
+
157
+ ## Phase 3: HYPOTHESIZE
158
+
159
+ **Goal:** Form testable theories about root cause.
160
+
161
+ ### Common Root Causes
162
+
163
+ | Category | Examples |
164
+ |----------|----------|
165
+ | State | Uninitialized variable, stale cache, leftover data |
166
+ | Timing | Race condition, timeout, async ordering |
167
+ | Input | Edge case, null/undefined, empty collection, boundary |
168
+ | Environment | Missing env var, wrong version, config mismatch |
169
+ | Logic | Off-by-one, wrong operator, incorrect condition |
170
+
171
+ ### Hypothesis Formation
172
+
173
+ 1. **Read the error message carefully** - Often tells you exactly what's wrong
174
+ 2. **Check recent changes** - `git log --oneline -20`, `git diff HEAD~5`
175
+ 3. **Consider edge cases** - What if null? Empty? Max value?
176
+ 4. **Look for patterns** - When does it fail vs succeed?
177
+
178
+ ### Rank Hypotheses
179
+
180
+ ```
181
+ Hypothesis 1 (HIGH): Database connection timing out
182
+ - Evidence: Error mentions timeout, happens under load
183
+ - Test: Check connection pool settings
184
+
185
+ Hypothesis 2 (MEDIUM): Invalid input not validated
186
+ - Evidence: Stack trace shows null pointer in parser
187
+ - Test: Add input validation logging
188
+
189
+ Hypothesis 3 (LOW): Bug in library
190
+ - Evidence: Nothing obvious in our code
191
+ - Test: Check library issues, try downgrade
192
+ ```
193
+
194
+ ---
195
+
196
+ ## Phase 4: TEST
197
+
198
+ **Goal:** Validate or invalidate each hypothesis.
199
+
200
+ ### Testing Approaches
201
+
202
+ | Approach | When to Use |
203
+ |----------|-------------|
204
+ | Add logging | Need to see values at runtime |
205
+ | Debugger breakpoint | Need to inspect state interactively |
206
+ | Unit test | Can isolate the specific function |
207
+ | Print statements | Quick check in specific location |
208
+ | Assertion | Verify assumption holds |
209
+
210
+ ### Logging Strategy
211
+
212
+ ```typescript
213
+ // Add strategic logging
214
+ console.log('[DEBUG] Input:', JSON.stringify(data));
215
+ console.log('[DEBUG] Before DB call, user:', user?.id);
216
+ console.log('[DEBUG] After DB call, result:', result);
217
+ console.log('[DEBUG] Query took:', endTime - startTime, 'ms');
218
+ ```
219
+
220
+ ### Hypothesis Testing
221
+
222
+ ```
223
+ HYPOTHESIS: Connection pool exhausted under load
224
+
225
+ TEST 1: Check pool stats
226
+ > db.pool.stats()
227
+ { active: 50, idle: 0, waiting: 12 } // Pool full!
228
+
229
+ TEST 2: Increase pool size
230
+ > config.pool.max = 100
231
+ > Rerun test
232
+ > PASS
233
+
234
+ CONCLUSION: Hypothesis confirmed. Pool too small.
235
+ ```
236
+
237
+ ### When Hypothesis is Wrong
238
+
239
+ If evidence doesn't support your theory:
240
+ 1. Don't force-fit the evidence
241
+ 2. Return to HYPOTHESIZE phase
242
+ 3. Form new theory based on new observations
243
+ 4. Repeat until you find the cause
244
+
245
+ ---
246
+
247
+ ## Phase 5: FIX
248
+
249
+ **Goal:** Implement the minimal change that fixes the issue.
250
+
251
+ ### Fix Principles
252
+
253
+ 1. **Fix the root cause, not the symptom**
254
+ - BAD: Add try/catch to hide the error
255
+ - GOOD: Fix why the error occurs
256
+
257
+ 2. **Minimal change**
258
+ - Change only what's necessary
259
+ - Don't refactor while fixing bugs
260
+
261
+ 3. **One fix per bug**
262
+ - Don't bundle unrelated changes
263
+ - Makes it clear what fixed what
264
+
265
+ ### Fix Template
266
+
267
+ ```typescript
268
+ // BEFORE: Bug - pool exhaustion under load
269
+ const pool = new Pool({ max: 10 });
270
+
271
+ // AFTER: Fix - increase pool size based on expected load
272
+ const pool = new Pool({
273
+ max: 50, // Increased from 10 to handle peak load
274
+ idleTimeoutMillis: 30000,
275
+ });
276
+ ```
277
+
278
+ ---
279
+
280
+ ## Phase 6: VERIFY
281
+
282
+ **Goal:** Confirm the fix addresses root cause and doesn't break anything else.
283
+
284
+ ### Verification Checklist
285
+
286
+ - [ ] Original reproduction steps now pass
287
+ - [ ] New test case covers the bug (regression test)
288
+ - [ ] Existing tests still pass
289
+ - [ ] Fix doesn't introduce new issues
290
+ - [ ] Fix addresses root cause, not just symptom
291
+
292
+ ### Write a Regression Test
293
+
294
+ ```typescript
295
+ // This test should have caught the bug
296
+ test('handles concurrent requests without pool exhaustion', async () => {
297
+ const requests = Array(100).fill(null).map(() => api.createUser());
298
+ const results = await Promise.all(requests);
299
+ expect(results.every(r => r.status === 201)).toBe(true);
300
+ });
301
+ ```
302
+
303
+ ### Symptom vs Root Cause Check
304
+
305
+ Ask yourself:
306
+ - "Would this bug happen again in a different form?"
307
+ - "Did I fix WHY it happened, or just WHAT happened?"
308
+
309
+ | Fix | Symptom or Root Cause? |
310
+ |-----|------------------------|
311
+ | Add null check | Symptom (why is it null?) |
312
+ | Initialize variable properly | Root cause |
313
+ | Increase timeout | Symptom (why is it slow?) |
314
+ | Fix N+1 query | Root cause |
315
+
316
+ ---
317
+
318
+ ## Debugging Anti-Patterns
319
+
320
+ ### What NOT to Do
321
+
322
+ | Anti-Pattern | Why It's Bad | Instead |
323
+ |--------------|--------------|---------|
324
+ | Random changes | Introduces new bugs, wastes time | Follow the cycle |
325
+ | Fix without reproducing | Can't verify fix works | Always reproduce first |
326
+ | Blame external factors | Delays finding real cause | Assume it's your code |
327
+ | Skip verification | Bug may not be fixed | Always verify |
328
+ | Big refactor as "fix" | Hides what actually fixed it | Minimal changes |
329
+
330
+ ### Common Traps
331
+
332
+ 1. **Confirmation bias** - Looking for evidence that supports your theory
333
+ 2. **Premature optimization** - Fixing performance before correctness
334
+ 3. **Tunnel vision** - Fixating on one hypothesis
335
+ 4. **Solution jumping** - Skipping to fix before understanding
336
+
337
+ ---
338
+
339
+ ## Quick Debugging Commands
340
+
341
+ ### Git Bisect (Find Regression)
342
+
343
+ ```bash
344
+ git bisect start
345
+ git bisect bad # Current commit is bad
346
+ git bisect good v1.0.0 # Known good commit
347
+ # Run test, then:
348
+ git bisect good # or bad
349
+ # Repeat until found
350
+ git bisect reset
351
+ ```
352
+
353
+ ### Find Recent Changes
354
+
355
+ ```bash
356
+ # What changed recently?
357
+ git log --oneline -20
358
+ git diff HEAD~5
359
+
360
+ # Who changed this file?
361
+ git blame path/to/file.ts
362
+
363
+ # When did this line change?
364
+ git log -p -S "problematic code" -- path/to/file.ts
365
+ ```
366
+
367
+ ### Check Running Processes
368
+
369
+ ```bash
370
+ # What's using resources?
371
+ ps aux | grep node
372
+ lsof -i :3000
373
+
374
+ # Check memory/CPU
375
+ top -l 1 | head -20
376
+ ```
377
+
378
+ ---
379
+
380
+ ## Integration with Other Skills
381
+
382
+ | Skill | How It Complements |
383
+ |-------|-------------------|
384
+ | `/testing` | Run tests to verify fixes |
385
+ | `/dev-patterns` | Avoid common pitfalls |
386
+ | `/agentic-patterns` | ReAct pattern for systematic investigation |
387
+
388
+ ---
389
+
390
+ **Remember:** Debugging is detective work. Follow the evidence, test your theories, and fix the root cause. Rushing leads to band-aid fixes that break later.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: theme
3
- description: Manage persona themes - list available themes, show current/specific theme details, and set active theme. Use for all theme-related operations.
3
+ description: Manage persona themes - list available themes, show current/specific theme details, and set active theme. Use when switching persona themes, viewing available characters, or checking which theme is currently active.
4
4
  ---
5
5
 
6
6
  # Theme Management Skill
@@ -0,0 +1,91 @@
1
+ #!/bin/bash
2
+ # List all available workflows with type indicators
3
+ # Usage: .pennyfarthing/scripts/core/run.sh workflow/list-workflows.sh
4
+ # or: Invoked with PROJECT_ROOT already set
5
+ #
6
+ # MSSCI-12083: Added type, steps, and modes columns
7
+
8
+ set -euo pipefail
9
+
10
+ # PROJECT_ROOT should be set by run.sh, but find it if not
11
+ if [[ -z "${PROJECT_ROOT:-}" ]]; then
12
+ d="$PWD"
13
+ while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do
14
+ d="$(dirname "$d")"
15
+ done
16
+ PROJECT_ROOT="$d"
17
+ fi
18
+
19
+ WORKFLOWS_DIR="$PROJECT_ROOT/pennyfarthing-dist/workflows"
20
+
21
+ if [[ ! -d "$WORKFLOWS_DIR" ]]; then
22
+ echo "Error: Workflows directory not found at $WORKFLOWS_DIR"
23
+ exit 1
24
+ fi
25
+
26
+ if ! command -v yq &> /dev/null; then
27
+ echo "Error: yq is required but not installed"
28
+ echo "Install with: brew install yq"
29
+ exit 1
30
+ fi
31
+
32
+ echo "# Available Workflows"
33
+ echo ""
34
+ echo "| Workflow | Type | Default | Steps/Phases | Modes | Description |"
35
+ echo "|----------|------|---------|--------------|-------|-------------|"
36
+
37
+ for f in "$WORKFLOWS_DIR"/*.yaml; do
38
+ [[ -f "$f" ]] || continue
39
+
40
+ name=$(yq eval '.workflow.name' "$f")
41
+ desc=$(yq eval '.workflow.description' "$f" | head -1)
42
+ is_default=$(yq eval '.workflow.triggers.default // false' "$f")
43
+
44
+ # Detect workflow type (stepped vs phased)
45
+ # Stepped workflows have .workflow.type == "stepped" or .workflow.steps
46
+ workflow_type=$(yq eval '.workflow.type // "phased"' "$f")
47
+ has_steps=$(yq eval '.workflow.steps != null' "$f")
48
+
49
+ if [[ "$has_steps" == "true" ]] || [[ "$workflow_type" == "stepped" ]]; then
50
+ type_col="stepped"
51
+ # Count step files if steps.path is defined
52
+ steps_path=$(yq eval '.workflow.steps.path // ""' "$f")
53
+ steps_pattern=$(yq eval '.workflow.steps.pattern // "step-*.md"' "$f")
54
+ if [[ -n "$steps_path" ]] && [[ -d "$PROJECT_ROOT/$steps_path" ]]; then
55
+ step_count=$(find "$PROJECT_ROOT/$steps_path" -name "$steps_pattern" 2>/dev/null | wc -l | tr -d ' ')
56
+ steps_col="${step_count} steps"
57
+ else
58
+ steps_col="-"
59
+ fi
60
+ else
61
+ type_col="phased"
62
+ # Count phases for phased workflows
63
+ phase_count=$(yq eval '.workflow.phases | length' "$f")
64
+ steps_col="${phase_count} phases"
65
+ fi
66
+
67
+ # Default column
68
+ if [[ "$is_default" == "true" ]]; then
69
+ default_col="yes"
70
+ else
71
+ default_col="no"
72
+ fi
73
+
74
+ # Modes column (for tri-modal workflows)
75
+ modes=$(yq eval '.workflow.modes.available // []' "$f")
76
+ if [[ "$modes" != "[]" ]] && [[ "$modes" != "null" ]]; then
77
+ # Format as comma-separated list
78
+ modes_col=$(yq eval '.workflow.modes.available | join(",")' "$f")
79
+ else
80
+ modes_col="-"
81
+ fi
82
+
83
+ echo "| $name | $type_col | $default_col | $steps_col | $modes_col | $desc |"
84
+ done
85
+
86
+ echo ""
87
+ echo "**Legend:**"
88
+ echo "- **phased**: Agent-driven workflow (SM → TEA → Dev → Reviewer)"
89
+ echo "- **stepped**: Step-by-step guided workflow with progressive disclosure"
90
+ echo ""
91
+ echo "Use \`/workflow show <name>\` for workflow details."
@@ -0,0 +1,163 @@
1
+ #!/bin/bash
2
+ # Resume a stepped workflow from last completed step
3
+ # Usage: .pennyfarthing/scripts/core/run.sh workflow/resume-workflow.sh [name]
4
+ #
5
+ # If no name provided, detects from active session
6
+
7
+ set -euo pipefail
8
+
9
+ # PROJECT_ROOT should be set by run.sh, but find it if not
10
+ if [[ -z "${PROJECT_ROOT:-}" ]]; then
11
+ d="$PWD"
12
+ while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do
13
+ d="$(dirname "$d")"
14
+ done
15
+ PROJECT_ROOT="$d"
16
+ fi
17
+
18
+ WORKFLOWS_DIR="$PROJECT_ROOT/pennyfarthing-dist/workflows"
19
+ SESSION_DIR="$PROJECT_ROOT/.session"
20
+
21
+ if ! command -v yq &> /dev/null; then
22
+ echo "Error: yq is required but not installed"
23
+ echo "Install with: brew install yq"
24
+ exit 1
25
+ fi
26
+
27
+ WORKFLOW_NAME="${1:-}"
28
+
29
+ # If no name, try to detect from session
30
+ if [[ -z "$WORKFLOW_NAME" ]]; then
31
+ # Look for workflow session files
32
+ SESSION_FILE=$(find "$SESSION_DIR" -maxdepth 1 -name "*-workflow-session.md" 2>/dev/null | head -1)
33
+
34
+ if [[ -z "$SESSION_FILE" ]]; then
35
+ echo "# Resume Stepped Workflow"
36
+ echo ""
37
+ echo "No active workflow session found."
38
+ echo ""
39
+ echo "Use \`/workflow start <name>\` to begin a new workflow."
40
+ exit 1
41
+ fi
42
+
43
+ # Extract workflow name from session
44
+ WORKFLOW_NAME=$(grep -E "^\*\*Workflow:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/\*\*Workflow:\*\* //' | tr -d ' ')
45
+
46
+ if [[ -z "$WORKFLOW_NAME" ]]; then
47
+ # Try extracting from filename
48
+ WORKFLOW_NAME=$(basename "$SESSION_FILE" | sed 's/-workflow-session.md//')
49
+ fi
50
+ else
51
+ SESSION_FILE="$SESSION_DIR/${WORKFLOW_NAME}-workflow-session.md"
52
+ fi
53
+
54
+ if [[ ! -f "$SESSION_FILE" ]]; then
55
+ echo "Error: No session found for workflow '$WORKFLOW_NAME'"
56
+ echo ""
57
+ echo "Use \`/workflow start $WORKFLOW_NAME\` to begin."
58
+ exit 1
59
+ fi
60
+
61
+ # Find workflow file
62
+ WORKFLOW_FILE=""
63
+ if [[ -f "$WORKFLOWS_DIR/${WORKFLOW_NAME}.yaml" ]]; then
64
+ WORKFLOW_FILE="$WORKFLOWS_DIR/${WORKFLOW_NAME}.yaml"
65
+ elif [[ -f "$WORKFLOWS_DIR/${WORKFLOW_NAME}/workflow.yaml" ]]; then
66
+ WORKFLOW_FILE="$WORKFLOWS_DIR/${WORKFLOW_NAME}/workflow.yaml"
67
+ else
68
+ echo "Error: Workflow definition '$WORKFLOW_NAME' not found"
69
+ exit 1
70
+ fi
71
+
72
+ WORKFLOW_DIR=$(dirname "$WORKFLOW_FILE")
73
+
74
+ # Parse session state
75
+ CURRENT_STEP=$(grep -E "^\- \*\*Current Step:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/.*\*\* //' || echo "1")
76
+ MODE=$(grep -E "^\- \*\*Mode:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/.*\*\* //' || echo "create")
77
+ STATUS=$(grep -E "^\- \*\*Status:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/.*\*\* //' || echo "in_progress")
78
+ STEPS_COMPLETED=$(grep -E "^\- \*\*Steps Completed:\*\*" "$SESSION_FILE" 2>/dev/null | sed 's/.*\*\* //' || echo "[]")
79
+
80
+ # Check if workflow is complete
81
+ if [[ "$STATUS" == "completed" ]]; then
82
+ echo "# Workflow Complete: $WORKFLOW_NAME"
83
+ echo ""
84
+ echo "This workflow has already been completed."
85
+ echo ""
86
+ echo "To start a new session, delete the session file:"
87
+ echo "\`\`\`bash"
88
+ echo "rm \"$SESSION_FILE\""
89
+ echo "\`\`\`"
90
+ echo ""
91
+ echo "Then run \`/workflow start $WORKFLOW_NAME\`"
92
+ exit 0
93
+ fi
94
+
95
+ # Resolve steps path based on mode
96
+ MODE_PATH=$(yq eval ".workflow.modes.$MODE // \"\"" "$WORKFLOW_FILE")
97
+ if [[ -n "$MODE_PATH" && "$MODE_PATH" != "null" ]]; then
98
+ STEPS_PATH="$MODE_PATH"
99
+ else
100
+ STEPS_PATH=$(yq eval '.workflow.steps.path' "$WORKFLOW_FILE")
101
+ fi
102
+
103
+ # Resolve relative path
104
+ if [[ "$STEPS_PATH" == ./* ]]; then
105
+ STEPS_PATH="$WORKFLOW_DIR/${STEPS_PATH#./}"
106
+ elif [[ "$STEPS_PATH" != /* ]]; then
107
+ STEPS_PATH="$PROJECT_ROOT/$STEPS_PATH"
108
+ fi
109
+
110
+ # Count steps
111
+ STEP_COUNT=$(find "$STEPS_PATH" -maxdepth 1 -name "step-0*.md" -o -name "step-1*.md" 2>/dev/null | wc -l | tr -d ' ')
112
+
113
+ # Find the current step file
114
+ # Handle various naming: step-01.md, step-01-name.md, step-1-name.md
115
+ PADDED_STEP=$(printf "%02d" "$CURRENT_STEP")
116
+ STEP_FILE=$(find "$STEPS_PATH" -maxdepth 1 \( -name "step-${PADDED_STEP}*.md" -o -name "step-${CURRENT_STEP}-*.md" \) 2>/dev/null | sort | head -1)
117
+
118
+ if [[ -z "$STEP_FILE" ]]; then
119
+ echo "Error: Could not find step $CURRENT_STEP file in $STEPS_PATH"
120
+ exit 1
121
+ fi
122
+
123
+ # Update last updated timestamp
124
+ NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
125
+ sed -i '' "s/^\- \*\*Last Updated:\*\*.*/- **Last Updated:** $NOW/" "$SESSION_FILE" 2>/dev/null || true
126
+
127
+ # Calculate completion percentage
128
+ COMPLETED_COUNT=$(echo "$STEPS_COMPLETED" | tr -cd ',' | wc -c | tr -d ' ')
129
+ if [[ "$STEPS_COMPLETED" != "[]" ]]; then
130
+ COMPLETED_COUNT=$((COMPLETED_COUNT + 1))
131
+ fi
132
+ if [[ "$STEP_COUNT" -gt 0 ]]; then
133
+ COMPLETION_PCT=$((COMPLETED_COUNT * 100 / STEP_COUNT))
134
+ else
135
+ COMPLETION_PCT=0
136
+ fi
137
+
138
+ # Output resume info
139
+ echo "# Resuming Workflow: $WORKFLOW_NAME"
140
+ echo ""
141
+ echo "**Mode:** $MODE"
142
+ echo "**Progress:** Step $CURRENT_STEP of $STEP_COUNT ($COMPLETION_PCT% complete)"
143
+ echo "**Steps Completed:** $STEPS_COMPLETED"
144
+ echo "**Session:** $SESSION_FILE"
145
+ echo ""
146
+ echo "---"
147
+ echo ""
148
+ echo "## Step $CURRENT_STEP of $STEP_COUNT"
149
+ echo ""
150
+
151
+ # Output step content (strip frontmatter if present)
152
+ if head -1 "$STEP_FILE" | grep -q "^---$"; then
153
+ awk '/^---$/{if(++c==2){p=1;next}}p' "$STEP_FILE"
154
+ else
155
+ cat "$STEP_FILE"
156
+ fi
157
+
158
+ echo ""
159
+ echo "---"
160
+ echo ""
161
+ echo "**Controls:**"
162
+ echo "- \`C\` - Continue to next step"
163
+ echo "- \`/workflow status\` - Check progress"