@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,266 @@
1
+ #!/bin/bash
2
+ # Jira vs YAML Reconciliation Report
3
+ # Usage: .pennyfarthing/scripts/core/run.sh jira/jira-reconcile.sh [--fix]
4
+ #
5
+ # Compares sprint YAML against Jira to find:
6
+ # - Status mismatches
7
+ # - Missing Jira keys
8
+ # - Orphan issues (in Jira but not YAML)
9
+ # - Sprint membership discrepancies
10
+ #
11
+ # Options:
12
+ # --fix Apply recommended fixes automatically (where safe)
13
+
14
+ set -euo pipefail
15
+
16
+ # PROJECT_ROOT should be set by run.sh, but find it if not
17
+ if [[ -z "${PROJECT_ROOT:-}" ]]; then
18
+ d="$PWD"
19
+ while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do
20
+ d="$(dirname "$d")"
21
+ done
22
+ PROJECT_ROOT="$d"
23
+ fi
24
+
25
+ SPRINT_FILE="$PROJECT_ROOT/sprint/current-sprint.yaml"
26
+ FIX_MODE="${1:-}"
27
+
28
+ # Colors for output
29
+ RED='\033[0;31m'
30
+ GREEN='\033[0;32m'
31
+ YELLOW='\033[1;33m'
32
+ NC='\033[0m' # No Color
33
+
34
+ # Check dependencies
35
+ if ! command -v yq &> /dev/null; then
36
+ echo "Error: yq is required but not installed"
37
+ echo "Install with: brew install yq"
38
+ exit 1
39
+ fi
40
+
41
+ if ! command -v jira &> /dev/null; then
42
+ echo "Error: jira CLI is required but not installed"
43
+ echo "Install with: brew install ankitpokhrel/jira/jira"
44
+ exit 1
45
+ fi
46
+
47
+ if [[ ! -f "$SPRINT_FILE" ]]; then
48
+ echo "Error: Sprint file not found at $SPRINT_FILE"
49
+ exit 1
50
+ fi
51
+
52
+ # Get sprint info
53
+ SPRINT_NAME=$(yq eval '.sprint.name' "$SPRINT_FILE")
54
+ SPRINT_ID=$(yq eval '.sprint.jira_sprint_id' "$SPRINT_FILE")
55
+
56
+ echo "# Jira vs YAML Reconciliation Report"
57
+ echo ""
58
+ echo "**Sprint:** $SPRINT_NAME (Jira Sprint ID: $SPRINT_ID)"
59
+ echo "**Generated:** $(date '+%Y-%m-%d %H:%M')"
60
+ echo ""
61
+
62
+ # Track issues
63
+ STATUS_MISMATCHES=()
64
+ MISSING_JIRA=()
65
+ ORPHAN_ISSUES=()
66
+ NOT_IN_SPRINT=()
67
+
68
+ echo "## Checking YAML Stories Against Jira..."
69
+ echo ""
70
+
71
+ # Extract all stories from YAML and check against Jira
72
+ while IFS=$'\t' read -r yaml_id jira_key yaml_status title; do
73
+ # Skip if no jira key
74
+ if [[ "$jira_key" == "null" ]] || [[ -z "$jira_key" ]]; then
75
+ MISSING_JIRA+=("$yaml_id|$title|$yaml_status")
76
+ continue
77
+ fi
78
+
79
+ # Get Jira status - use sed to remove the key prefix
80
+ jira_status=$(jira issue list --jql "project=MSSCI AND key=$jira_key" --plain --columns key,status --no-headers 2>/dev/null | sed "s/^$jira_key[[:space:]]*//" | xargs || echo "NOT_FOUND")
81
+
82
+ if [[ "$jira_status" == "NOT_FOUND" ]] || [[ -z "$jira_status" ]]; then
83
+ echo -e "${RED}[!]${NC} $jira_key not found in Jira"
84
+ continue
85
+ fi
86
+
87
+ # Normalize statuses for comparison
88
+ jira_norm=$(echo "$jira_status" | tr '[:upper:]' '[:lower:]' | tr ' ' '_')
89
+
90
+ # Check for mismatches
91
+ mismatch=false
92
+ case "$yaml_status" in
93
+ done)
94
+ [[ "$jira_norm" != "done" ]] && mismatch=true
95
+ ;;
96
+ ready|backlog)
97
+ [[ "$jira_norm" != "to_do" ]] && mismatch=true
98
+ ;;
99
+ in_progress)
100
+ [[ "$jira_norm" != "in_progress" ]] && mismatch=true
101
+ ;;
102
+ esac
103
+
104
+ if [[ "$mismatch" == "true" ]]; then
105
+ STATUS_MISMATCHES+=("$jira_key|$yaml_status|$jira_status")
106
+ fi
107
+ done < <(yq -r '.epics[].stories[]? | [.id, .jira, .status, .title] | @tsv' "$SPRINT_FILE" 2>/dev/null)
108
+
109
+ echo ""
110
+ echo "## Checking Jira Sprint Against YAML..."
111
+ echo ""
112
+
113
+ # Get all issues in the Jira sprint and check if they're in YAML
114
+ # Skip canceled issues - they're not relevant
115
+ while read -r jira_key; do
116
+ # Check if in YAML (by id or jira field)
117
+ in_yaml=$(yq -r ".epics[].stories[]? | select(.id == \"$jira_key\" or .jira == \"$jira_key\") | .id" "$SPRINT_FILE" 2>/dev/null | head -1)
118
+
119
+ if [[ -z "$in_yaml" ]]; then
120
+ # Get more info about the orphan
121
+ status=$(jira issue list --jql "project=MSSCI AND key=$jira_key" --plain --columns key,status --no-headers 2>/dev/null | sed "s/^$jira_key[[:space:]]*//" | xargs || echo "Unknown")
122
+
123
+ # Skip canceled issues
124
+ if [[ "$status" == "Canceled" ]]; then
125
+ continue
126
+ fi
127
+
128
+ summary=$(jira issue list --jql "project=MSSCI AND key=$jira_key" --plain --columns key,summary --no-headers 2>/dev/null | sed "s/^$jira_key[[:space:]]*//" | xargs || echo "Unknown")
129
+ ORPHAN_ISSUES+=("$jira_key|$status|$summary")
130
+ fi
131
+ done < <(jira issue list --jql "project=MSSCI AND labels=pennyfarthing AND sprint=$SPRINT_ID AND status != Canceled" --plain --columns key --no-headers 2>/dev/null)
132
+
133
+ echo ""
134
+ echo "## Checking for Issues Not in Sprint..."
135
+ echo ""
136
+
137
+ # Get done issues not in sprint
138
+ while read -r jira_key; do
139
+ # Check if it should be in current sprint (exists in YAML)
140
+ in_yaml=$(yq -r ".epics[].stories[]? | select(.id == \"$jira_key\" or .jira == \"$jira_key\") | .id" "$SPRINT_FILE" 2>/dev/null | head -1)
141
+
142
+ if [[ -n "$in_yaml" ]]; then
143
+ summary=$(jira issue list --jql "project=MSSCI AND key=$jira_key" --plain --columns summary --no-headers 2>/dev/null | xargs || echo "Unknown")
144
+ NOT_IN_SPRINT+=("$jira_key|$summary")
145
+ fi
146
+ done < <(jira issue list --jql "project=MSSCI AND labels=pennyfarthing AND sprint is EMPTY AND status != Canceled" --plain --columns key --no-headers 2>/dev/null)
147
+
148
+ # Output Report
149
+ echo ""
150
+ echo "---"
151
+ echo ""
152
+ echo "# Summary"
153
+ echo ""
154
+
155
+ # Status Mismatches
156
+ echo "## Status Mismatches (${#STATUS_MISMATCHES[@]})"
157
+ echo ""
158
+ if [[ ${#STATUS_MISMATCHES[@]} -eq 0 ]]; then
159
+ echo -e "${GREEN}No status mismatches found.${NC}"
160
+ else
161
+ echo "| Jira Key | YAML Status | Jira Status | Action |"
162
+ echo "|----------|-------------|-------------|--------|"
163
+ for item in "${STATUS_MISMATCHES[@]}"; do
164
+ IFS='|' read -r key yaml jira <<< "$item"
165
+ echo "| $key | $yaml | $jira | Update YAML or Jira |"
166
+ done
167
+ fi
168
+ echo ""
169
+
170
+ # Missing Jira Keys
171
+ echo "## YAML Stories Missing Jira Key (${#MISSING_JIRA[@]})"
172
+ echo ""
173
+ if [[ ${#MISSING_JIRA[@]} -eq 0 ]]; then
174
+ echo -e "${GREEN}All YAML stories have Jira keys.${NC}"
175
+ else
176
+ echo "| YAML ID | Title | Status | Action |"
177
+ echo "|---------|-------|--------|--------|"
178
+ for item in "${MISSING_JIRA[@]}"; do
179
+ IFS='|' read -r id title status <<< "$item"
180
+ echo "| $id | ${title:0:40} | $status | Create Jira issue |"
181
+ done
182
+ fi
183
+ echo ""
184
+
185
+ # Orphan Issues
186
+ echo "## Jira Issues Not in YAML (${#ORPHAN_ISSUES[@]})"
187
+ echo ""
188
+ if [[ ${#ORPHAN_ISSUES[@]} -eq 0 ]]; then
189
+ echo -e "${GREEN}All sprint issues are tracked in YAML.${NC}"
190
+ else
191
+ echo "| Jira Key | Status | Summary | Action |"
192
+ echo "|----------|--------|---------|--------|"
193
+ for item in "${ORPHAN_ISSUES[@]}"; do
194
+ IFS='|' read -r key status summary <<< "$item"
195
+ if [[ "$status" == "Done" ]]; then
196
+ echo "| $key | $status | ${summary:0:40} | Info: Completed (not in current YAML) |"
197
+ else
198
+ echo "| $key | $status | ${summary:0:40} | Add to YAML or remove from sprint |"
199
+ fi
200
+ done
201
+ echo ""
202
+ echo "*Note: Done issues not in YAML are historical - they count toward sprint velocity but aren't actively tracked.*"
203
+ fi
204
+ echo ""
205
+
206
+ # Not in Sprint
207
+ echo "## YAML Stories Not in Jira Sprint (${#NOT_IN_SPRINT[@]})"
208
+ echo ""
209
+ if [[ ${#NOT_IN_SPRINT[@]} -eq 0 ]]; then
210
+ echo -e "${GREEN}All YAML stories are in Jira sprint.${NC}"
211
+ else
212
+ echo "| Jira Key | Summary | Action |"
213
+ echo "|----------|---------|--------|"
214
+ for item in "${NOT_IN_SPRINT[@]}"; do
215
+ IFS='|' read -r key summary <<< "$item"
216
+ echo "| $key | ${summary:0:50} | Add to sprint $SPRINT_ID |"
217
+ done
218
+ fi
219
+ echo ""
220
+
221
+ # Epic check
222
+ echo "## Epic Sync Check"
223
+ echo ""
224
+ echo "| YAML Epic ID | Jira Field | Status |"
225
+ echo "|--------------|------------|--------|"
226
+ while IFS=$'\t' read -r epic_id jira_key title; do
227
+ if [[ "$jira_key" == "null" ]] || [[ -z "$jira_key" ]]; then
228
+ echo -e "| $epic_id | ${RED}MISSING${NC} | $title |"
229
+ else
230
+ echo "| $epic_id | $jira_key | $title |"
231
+ fi
232
+ done < <(yq -r '.epics[] | [.id, .jira, .title] | @tsv' "$SPRINT_FILE" 2>/dev/null)
233
+ echo ""
234
+
235
+ # Total counts
236
+ total_issues=$((${#STATUS_MISMATCHES[@]} + ${#MISSING_JIRA[@]} + ${#ORPHAN_ISSUES[@]} + ${#NOT_IN_SPRINT[@]}))
237
+
238
+ echo "---"
239
+ echo ""
240
+ if [[ $total_issues -eq 0 ]]; then
241
+ echo -e "${GREEN}Sync Status: CLEAN${NC} - No discrepancies found!"
242
+ else
243
+ echo -e "${YELLOW}Sync Status: $total_issues issue(s) found${NC}"
244
+ echo ""
245
+ echo "Run with --fix to apply automatic fixes where possible."
246
+ fi
247
+
248
+ # Fix mode
249
+ if [[ "$FIX_MODE" == "--fix" ]]; then
250
+ echo ""
251
+ echo "## Applying Fixes..."
252
+ echo ""
253
+
254
+ # Add stories to sprint
255
+ for item in "${NOT_IN_SPRINT[@]}"; do
256
+ IFS='|' read -r key summary <<< "$item"
257
+ echo "Adding $key to sprint $SPRINT_ID..."
258
+ jira sprint add "$SPRINT_ID" "$key" 2>/dev/null && echo " Done" || echo " Failed"
259
+ done
260
+
261
+ echo ""
262
+ echo "Fix mode completed. Manual review still needed for:"
263
+ echo "- Status mismatches (requires decision on which source is correct)"
264
+ echo "- Missing Jira keys (requires creating new issues)"
265
+ echo "- Orphan issues (requires adding to YAML or removing from sprint)"
266
+ fi
@@ -5,8 +5,8 @@
5
5
  * Usage: node jira-sync-story.mjs <story_key> [--transition] [--points] [--comment "message"]
6
6
  *
7
7
  * Options:
8
- * --transition Transition story to match Conductor status
9
- * --points Sync story points from Conductor to Jira
8
+ * --transition Transition story to match Pennyfarthing status
9
+ * --points Sync story points from Pennyfarthing to Jira
10
10
  * --comment Add a comment to the story
11
11
  */
12
12
 
@@ -93,8 +93,8 @@ if (!story) {
93
93
  process.exit(1);
94
94
  }
95
95
 
96
- // Get story details from Conductor
97
- const conductorStatus = story.status || 'backlog';
96
+ // Get story details from Pennyfarthing
97
+ const PennyfarthingStatus = story.status || 'backlog';
98
98
  const storyJira = story.jira;
99
99
  const storyBranch = story.branch;
100
100
  const storyPr = story.pr;
@@ -131,15 +131,15 @@ const jiraPoints = getStoryPoints(jiraKey, issueJson);
131
131
  console.log(` Summary: ${jiraSummary}`);
132
132
  console.log(` Jira Status: ${jiraStatus}`);
133
133
  console.log(` Assignee: ${jiraAssignee}`);
134
- console.log(` Conductor Status: ${conductorStatus}`);
135
- if (storyPoints) console.log(` Conductor Points: ${storyPoints}`);
134
+ console.log(` Pennyfarthing Status: ${PennyfarthingStatus}`);
135
+ if (storyPoints) console.log(` Pennyfarthing Points: ${storyPoints}`);
136
136
  if (jiraPoints) console.log(` Jira Points: ${jiraPoints}`);
137
137
  if (storyBranch) console.log(` Branch: ${storyBranch}`);
138
138
  if (storyPr) console.log(` PR: ${storyPr}`);
139
139
  console.log('');
140
140
 
141
- // Map Conductor status to target Jira status
142
- const targetJiraStatus = mapStatusToJira(conductorStatus);
141
+ // Map Pennyfarthing status to target Jira status
142
+ const targetJiraStatus = mapStatusToJira(PennyfarthingStatus);
143
143
 
144
144
  // Transition if requested
145
145
  if (doTransition) {
@@ -186,13 +186,13 @@ if (commentText) {
186
186
  if (doTransition && !commentText) {
187
187
  let autoComment = null;
188
188
 
189
- if (conductorStatus === 'in-progress' && storyBranch) {
190
- autoComment = `**Development Started**\n\nBranch: \`${storyBranch}\`\n\nSynced from Conductor`;
191
- } else if (conductorStatus === 'review' && storyPr) {
192
- autoComment = `**Ready for Review**\n\nPR: ${storyPr}\n\nSynced from Conductor`;
193
- } else if (conductorStatus === 'done') {
189
+ if (PennyfarthingStatus === 'in-progress' && storyBranch) {
190
+ autoComment = `**Development Started**\n\nBranch: \`${storyBranch}\`\n\nSynced from Pennyfarthing`;
191
+ } else if (PennyfarthingStatus === 'review' && storyPr) {
192
+ autoComment = `**Ready for Review**\n\nPR: ${storyPr}\n\nSynced from Pennyfarthing`;
193
+ } else if (PennyfarthingStatus === 'done') {
194
194
  const today = new Date().toISOString().split('T')[0];
195
- autoComment = `**Completed**\n\nSynced from Conductor on ${today}`;
195
+ autoComment = `**Completed**\n\nSynced from Pennyfarthing on ${today}`;
196
196
  }
197
197
 
198
198
  if (autoComment) {
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * jira-sync.mjs - Sync Conductor Epic to Jira
3
+ * jira-sync.mjs - Sync Pennyfarthing Epic to Jira
4
4
  *
5
5
  * Usage: node jira-sync.mjs <epic_number> [--dry-run] [--transition] [--points]
6
6
  *
7
7
  * Options:
8
8
  * --dry-run Show what would be done without making changes
9
- * --transition Transition Jira issues to match Conductor status
10
- * --points Sync story points from Conductor to Jira
9
+ * --transition Transition Jira issues to match Pennyfarthing status
10
+ * --points Sync story points from Pennyfarthing to Jira
11
11
  */
12
12
 
13
13
  import {
@@ -154,7 +154,7 @@ for (const story of stories) {
154
154
  const targetStatus = mapStatusToJira(storyStatus);
155
155
 
156
156
  console.log(` Jira Status: ${jiraStatus} (target: ${targetStatus})`);
157
- if (storyPoints) console.log(` Points: Conductor=${storyPoints}, Jira=${jiraPoints || 'unset'}`);
157
+ if (storyPoints) console.log(` Points: Pennyfarthing=${storyPoints}, Jira=${jiraPoints || 'unset'}`);
158
158
 
159
159
  // Transition if requested
160
160
  if (doTransition) {
@@ -0,0 +1,104 @@
1
+ #!/bin/bash
2
+ # Sync an epic and its stories to Jira
3
+ # Usage: .pennyfarthing/scripts/core/run.sh sync-epic-jira.sh <epic-id> [--dry-run] [--transition] [--points] [--all]
4
+ #
5
+ # Example: .pennyfarthing/scripts/core/run.sh sync-epic-jira.sh MSSCI-11952
6
+ # Example: .pennyfarthing/scripts/core/run.sh sync-epic-jira.sh MSSCI-11952 --all
7
+ #
8
+ # This script syncs status and story points from sprint YAML to Jira.
9
+ # It wraps the existing jira-sync.mjs for better integration with /sprint skill.
10
+
11
+ set -euo pipefail
12
+
13
+ EPIC_ID="${1:-}"
14
+
15
+ if [[ -z "$EPIC_ID" ]]; then
16
+ echo "Usage: sync-epic-jira.sh <epic-id> [options]"
17
+ echo ""
18
+ echo "Syncs an epic and its stories from sprint YAML to Jira."
19
+ echo ""
20
+ echo "Options:"
21
+ echo " --dry-run Show what would be done without making changes"
22
+ echo " --transition Transition Jira issues to match sprint YAML status"
23
+ echo " --points Sync story points from sprint YAML to Jira"
24
+ echo " --all Equivalent to --transition --points"
25
+ echo ""
26
+ echo "Examples:"
27
+ echo " sync-epic-jira.sh MSSCI-11952 # Show sync status"
28
+ echo " sync-epic-jira.sh MSSCI-11952 --dry-run # Preview changes"
29
+ echo " sync-epic-jira.sh MSSCI-11952 --all # Sync status and points"
30
+ exit 1
31
+ fi
32
+
33
+ # PROJECT_ROOT should be set by run.sh, but find it if not
34
+ if [[ -z "${PROJECT_ROOT:-}" ]]; then
35
+ d="$PWD"
36
+ while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do
37
+ d="$(dirname "$d")"
38
+ done
39
+ PROJECT_ROOT="$d"
40
+ fi
41
+
42
+ SPRINT_FILE="$PROJECT_ROOT/sprint/current-sprint.yaml"
43
+
44
+ if [[ ! -f "$SPRINT_FILE" ]]; then
45
+ echo "Error: Sprint file not found at $SPRINT_FILE"
46
+ exit 1
47
+ fi
48
+
49
+ if ! command -v yq &> /dev/null; then
50
+ echo "Error: yq is required but not installed"
51
+ echo "Install with: brew install yq"
52
+ exit 1
53
+ fi
54
+
55
+ # Check if epic exists in sprint YAML
56
+ EPIC_EXISTS=$(yq ".epics[] | select(.id == \"$EPIC_ID\") | .id" "$SPRINT_FILE" 2>/dev/null || echo "")
57
+
58
+ if [[ -z "$EPIC_EXISTS" ]]; then
59
+ echo "Error: Epic $EPIC_ID not found in $SPRINT_FILE"
60
+ echo ""
61
+ echo "Available epics:"
62
+ yq '.epics[].id' "$SPRINT_FILE" 2>/dev/null || echo " None found"
63
+ exit 1
64
+ fi
65
+
66
+ # Extract epic number for jira-sync.mjs compatibility
67
+ # jira-sync.mjs expects epic number (e.g., 35) not full ID
68
+ # But it also accepts Jira keys directly
69
+ # Let's check if this is a Jira key (MSSCI-XXXXX) or local ID
70
+
71
+ # Pass through to jira-sync.mjs with remaining arguments
72
+ JIRA_SYNC_SCRIPT="$PROJECT_ROOT/.pennyfarthing/scripts/utils/jira/jira-sync.mjs"
73
+
74
+ if [[ ! -f "$JIRA_SYNC_SCRIPT" ]]; then
75
+ # Try alternate location
76
+ JIRA_SYNC_SCRIPT="$PROJECT_ROOT/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs"
77
+ fi
78
+
79
+ if [[ ! -f "$JIRA_SYNC_SCRIPT" ]]; then
80
+ echo "Error: jira-sync.mjs not found"
81
+ exit 1
82
+ fi
83
+
84
+ # Build arguments for jira-sync.mjs
85
+ shift # Remove epic-id from arguments
86
+ SYNC_ARGS=("$EPIC_ID")
87
+
88
+ # Handle --all flag
89
+ for arg in "$@"; do
90
+ case "$arg" in
91
+ --all)
92
+ SYNC_ARGS+=("--transition" "--points")
93
+ ;;
94
+ *)
95
+ SYNC_ARGS+=("$arg")
96
+ ;;
97
+ esac
98
+ done
99
+
100
+ echo "Syncing epic $EPIC_ID to Jira..."
101
+ echo ""
102
+
103
+ # Run jira-sync.mjs
104
+ exec node "$JIRA_SYNC_SCRIPT" "${SYNC_ARGS[@]}"
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env zsh
2
- # Sync Conductor Epic to Jira MSSCI Project using jira
2
+ # Sync Pennyfarthing Epic to Jira MSSCI Project using jira
3
3
  # Usage: ./scripts/sync-epic-to-jira.sh <epic_number> [--dry-run] [--with-comments]
4
4
  #
5
5
  # Prerequisites:
@@ -0,0 +1,29 @@
1
+ # Library Scripts
2
+
3
+ Shared bash libraries sourced by other scripts.
4
+
5
+ ## Libraries
6
+
7
+ | Script | Purpose |
8
+ |--------|---------|
9
+ | `common.sh` | Common utilities (colors, logging basics) |
10
+ | `logging.sh` | Structured logging functions |
11
+ | `retry.sh` | Retry logic with exponential backoff |
12
+ | `checkpoint.sh` | Checkpointing for long-running operations |
13
+ | `file-lock.sh` | File locking utilities |
14
+ | `background-tasks.sh` | Background task management |
15
+ | `find-root.sh` | Project root finder |
16
+
17
+ ## Usage
18
+
19
+ These are sourced by other scripts, not run directly:
20
+
21
+ ```bash
22
+ source "$SCRIPTS_DIR/lib/common.sh"
23
+ source "$SCRIPTS_DIR/lib/logging.sh"
24
+ ```
25
+
26
+ ## Ownership
27
+
28
+ - **Primary users:** All scripts
29
+ - **Maintained by:** Core Pennyfarthing team
@@ -2,7 +2,7 @@
2
2
  # Background task tracking utilities for session files
3
3
  #
4
4
  # Usage:
5
- # source $CLAUDE_PROJECT_DIR/scripts/utils/background-tasks.sh
5
+ # source $CLAUDE_PROJECT_DIR/scripts/lib/background-tasks.sh
6
6
  #
7
7
  # Functions:
8
8
  # bg_task_add <session_file> <task_id> <subagent_type> <description>
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env zsh
2
2
  # Common utility functions for Pennyfarthing scripts
3
- # Source this file: source "${SCRIPT_DIR}/utils/common.sh"
3
+ # Source this file: source "${SCRIPT_DIR}/lib/common.sh"
4
4
  #
5
5
  # Provides:
6
6
  # - Output helpers: success, info, warn, error
@@ -1,12 +1,14 @@
1
1
  #!/usr/bin/env zsh
2
2
  # Shared utility: Find project root by .claude/ marker
3
- # Source this file to get PROJECT_ROOT set correctly
4
3
  #
5
- # Usage: source "$(dirname "$0")/utils/find-root.sh"
6
- # or: source "$SCRIPT_DIR/utils/find-root.sh"
4
+ # DEPRECATED: Scripts invoked via run.sh already have PROJECT_ROOT set.
5
+ # This file is kept for backwards compatibility with scripts that may be
6
+ # run directly (not via run.sh).
7
7
  #
8
- # After sourcing, PROJECT_ROOT will be set to the project root directory.
9
- # Uses SCRIPT_DIR if available (preferred), falls back to PWD.
8
+ # When run.sh executes a script, it sets PROJECT_ROOT before exec'ing,
9
+ # so sourcing this file is a no-op (line 12 skips if already set).
10
+ #
11
+ # For new scripts: Just assume PROJECT_ROOT is set by the caller (run.sh).
10
12
 
11
13
  # Skip if PROJECT_ROOT is already set (e.g., by run.sh or CLAUDE_PROJECT_DIR)
12
14
  if [ -z "${PROJECT_ROOT:-}" ]; then
@@ -0,0 +1,44 @@
1
+ # Miscellaneous Scripts
2
+
3
+ Uncategorized utilities and one-off scripts.
4
+
5
+ ## Scripts
6
+
7
+ | Script | Purpose |
8
+ |--------|---------|
9
+ | `deploy.sh` | Deployment script |
10
+ | `doctor-dogfood.sh` | Health check for dogfooding setup |
11
+ | `run-ci.sh` | Run CI locally |
12
+ | `statusline.sh` | Status line configuration |
13
+ | `uninstall.sh` | Uninstall Pennyfarthing from project |
14
+ | `backlog.sh` | Backlog operations |
15
+ | `repo-utils.sh` | Multi-repo utilities |
16
+ | `repo-scan.sh` | Repository scanner |
17
+ | `add-short-names.mjs` | Add short names to themes |
18
+ | `migrate-bmad-workflow.mjs` | BMAD workflow migration |
19
+ | `migrate-bmad-workflow.sh` | BMAD migration wrapper |
20
+ | `find-related-work.sh` | Find related work items |
21
+ | `check-status.sh` | Status checking utilities |
22
+ | `session-cleanup.sh` | Clean up old sessions |
23
+ | `generate-skill-docs.sh` | Generate skill documentation |
24
+ | `log-skill-usage.sh` | Log skill invocations |
25
+ | `skill-usage-report.sh` | Generate skill usage reports |
26
+ | `run-timestamp.sh` | Timestamp utility |
27
+ | `validate-subagent-frontmatter.sh` | Validate subagent YAML frontmatter |
28
+
29
+ ## Usage
30
+
31
+ ```bash
32
+ .pennyfarthing/scripts/core/run.sh misc/doctor-dogfood.sh
33
+ .pennyfarthing/scripts/core/run.sh misc/run-ci.sh
34
+ ```
35
+
36
+ ## Ownership
37
+
38
+ - **Primary users:** Various
39
+ - **Maintained by:** Core Pennyfarthing team
40
+
41
+ ## Note
42
+
43
+ Scripts here may be candidates for moving to more specific categories
44
+ as the codebase evolves.