@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
@@ -1,1041 +0,0 @@
1
- # Tactical Agent Behavior (Shared)
2
-
3
- **This file defines common behavior for tactical agents (SM, TEA, Dev, Reviewer).**
4
-
5
- Auto-loaded by `/prime --agent <name>` for tactical agents only.
6
-
7
- Tactical agents work on story-scoped tasks within the TDD flow: SM → TEA → Dev → Reviewer
8
-
9
- ---
10
-
11
- ## Critical Pattern: Bash Tool with Absolute Paths
12
-
13
- ⚠️ **ALL tactical agents must follow this pattern when using the Bash tool.**
14
-
15
- ### The Problem
16
-
17
- The Bash tool maintains a persistent working directory across calls, but relative `cd` commands fail when already in a different directory. This is the #1 source of frustration and wasted time.
18
-
19
- **Symptoms:**
20
- - `cd API && just test` fails with "no such file or directory: API"
21
- - Already in `API` but trying to `cd API` again
22
- - Commands fail because assuming wrong directory
23
-
24
- ### The Solution: Always Use Absolute Paths
25
-
26
- 1. **At session start, use the PROJECT_ROOT from the `<env>` block:**
27
- ```
28
- Working directory: $CLAUDE_PROJECT_DIR
29
- ```
30
- This is your absolute reference point!
31
-
32
- 2. **Always use absolute paths for cd:**
33
- ```bash
34
- # WRONG - relative cd fails if you're already somewhere else
35
- cd myrepo && just test
36
-
37
- # CORRECT - absolute path always works
38
- cd $CLAUDE_PROJECT_DIR && just test
39
- ```
40
-
41
- 3. **Best Practice - Explicit cd in every Bash call that needs a specific directory:**
42
- ```bash
43
- # Single repo project
44
- cd $CLAUDE_PROJECT_DIR && git push -u origin feat/branch
45
- cd $CLAUDE_PROJECT_DIR && just test
46
-
47
- # Multi-repo project (use repo-utils.sh)
48
- source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
49
- for repo in $(get_repo_names); do
50
- cd $CLAUDE_PROJECT_DIR/$(get_repo_path "$repo") && $(get_test_command "$repo")
51
- done
52
- ```
53
-
54
- ### Why This Works
55
-
56
- - Absolute paths work from ANY directory
57
- - No need to track where you are
58
- - Explicit `cd` in every command that needs it = no confusion
59
- - The `&&` ensures the command only runs if cd succeeds
60
-
61
- ---
62
-
63
- ## Single-Repo Projects
64
-
65
- For projects where Pennyfarthing is installed directly in the repo (not as an orchestrator):
66
-
67
- ### Configuration
68
-
69
- ```yaml
70
- # .claude/project/repos.yaml
71
- repos:
72
- my-project:
73
- path: . # "." means project root IS the repo
74
- type: service # or: api, ui, cli, lib, monorepo
75
- language: go # or: typescript, python, rust, etc.
76
- test_command: just test
77
- build_command: just build
78
- lint_command: just lint
79
- ```
80
-
81
- ### Key Differences from Multi-Repo
82
-
83
- | Aspect | Multi-Repo | Single-Repo |
84
- |--------|------------|-------------|
85
- | `path` | `api/`, `ui/` | `.` (project root) |
86
- | Branches | One per repo | One branch total |
87
- | PRs | Multiple PRs | Single PR |
88
- | `cd` pattern | `cd $PROJECT_ROOT/$repo_path` | `cd $PROJECT_ROOT` |
89
-
90
- ### Commands Still Work
91
-
92
- The same repo-utils functions work — they just iterate over one repo:
93
-
94
- ```bash
95
- source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
96
-
97
- # Returns single repo name
98
- get_repos # → "my-project"
99
-
100
- # Path is "." so this works:
101
- cd $CLAUDE_PROJECT_DIR/$(get_repo_path "my-project")
102
- # Equivalent to: cd $CLAUDE_PROJECT_DIR/.
103
-
104
- # Test command
105
- $(get_test_command "my-project") # → "just test"
106
- ```
107
-
108
- ### Simplified Patterns
109
-
110
- For single-repo, you can also just work directly:
111
-
112
- ```bash
113
- # Direct approach (single-repo only)
114
- cd $CLAUDE_PROJECT_DIR && just test
115
- cd $CLAUDE_PROJECT_DIR && just build
116
-
117
- # Still works with repo-utils (recommended for consistency)
118
- for repo in $(get_repos); do
119
- cd $CLAUDE_PROJECT_DIR/$(get_repo_path "$repo")
120
- eval "$(get_test_command "$repo")"
121
- done
122
- ```
123
-
124
- ---
125
-
126
- ## Multi-Repo Operations
127
-
128
- For projects with multiple repositories, use `repo-utils.sh` for dynamic iteration.
129
-
130
- ### Loading Repo Configuration
131
-
132
- ```bash
133
- source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
134
-
135
- # Check configuration mode
136
- if is_legacy_mode; then
137
- echo "Using legacy API_REPO/UI_REPO mode"
138
- else
139
- echo "Using repos.yaml configuration"
140
- fi
141
-
142
- # Show current configuration
143
- show_config
144
- ```
145
-
146
- ### Iterating Through Repos
147
-
148
- ```bash
149
- source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
150
-
151
- # All repos
152
- for repo in $(get_repos); do
153
- repo_path=$(get_repo_path "$repo")
154
- repo_type=$(get_repo_type "$repo")
155
-
156
- echo "=== $repo ($repo_type) ==="
157
- cd $CLAUDE_PROJECT_DIR/$repo_path
158
- git status --short
159
- done
160
-
161
- # Filter by type (api, ui, adapter, service, shared, lib)
162
- for repo in $(get_repos_of_type "api"); do
163
- cd $CLAUDE_PROJECT_DIR/$(get_repo_path "$repo")
164
- # API-specific operations
165
- done
166
-
167
- # Build order (respects dependencies)
168
- for repo in $(get_build_order); do
169
- cd $CLAUDE_PROJECT_DIR/$(get_repo_path "$repo")
170
- eval "$(get_build_command "$repo")"
171
- done
172
- ```
173
-
174
- ### Getting Repo Information
175
-
176
- ```bash
177
- source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
178
-
179
- # For a specific repo
180
- repo="conductor-api"
181
- get_repo_path "$repo" # conductor-api
182
- get_repo_type "$repo" # api
183
- get_repo_language "$repo" # go
184
- get_test_command "$repo" # just test
185
- get_build_command "$repo" # just build
186
- get_lint_command "$repo" # golangci-lint run
187
- get_dependencies "$repo" # comma-separated list or empty
188
- ```
189
-
190
- ### Running Tests Across Repos
191
-
192
- ```bash
193
- source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
194
-
195
- # Run tests in all repos
196
- run_all_tests
197
-
198
- # Run tests for specific type
199
- run_tests_of_type "api"
200
-
201
- # Manual iteration with custom logic
202
- for repo in $(get_repos); do
203
- test_cmd=$(get_test_command "$repo")
204
- if [ -n "$test_cmd" ]; then
205
- cd $CLAUDE_PROJECT_DIR/$(get_repo_path "$repo")
206
- eval "$test_cmd" 2>&1 | tee $CLAUDE_PROJECT_DIR/.session/test-${STORY_ID}-${repo}.log
207
- fi
208
- done
209
- ```
210
-
211
- ### Filtering Repos by Session Scope
212
-
213
- ```bash
214
- source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
215
-
216
- # Extract scope from session file
217
- REPOS=$(grep "^\*\*Repos:\*\*" $SESSION_FILE | cut -d: -f2 | xargs)
218
-
219
- # filter_repos handles: all, both, api, ui, adapter, or comma-separated names
220
- for repo in $(filter_repos "$REPOS"); do
221
- # Work on this repo
222
- done
223
- ```
224
-
225
- ---
226
-
227
- ## Skill References for Subagents
228
-
229
- When spawning subagents that need specialized knowledge, reference the appropriate skill file in the prompt:
230
-
231
- ### Testing
232
- ```
233
- Read the testing skill at .claude/skills/testing/SKILL.md for test commands.
234
- For troubleshooting, see .claude/skills/testing/references/troubleshooting.md
235
- ```
236
-
237
- ### Just Commands
238
- ```
239
- Read the just skill at .claude/skills/just/SKILL.md for available commands.
240
- ```
241
-
242
- ### Code Patterns
243
- ```
244
- Read .claude/skills/dev-patterns/SKILL.md for common patterns and fixes.
245
- ```
246
-
247
- **Why this matters:** Subagents don't automatically load skills. Including the skill reference in the prompt ensures they have access to project-specific commands and patterns.
248
-
249
- ---
250
-
251
- ### For Worktrees
252
-
253
- Same pattern - use absolute paths:
254
- ```bash
255
- # WRONG
256
- cd worktrees/11-2/myrepo && just test
257
-
258
- # CORRECT (single-repo)
259
- cd $CLAUDE_PROJECT_DIR/worktrees/11-2 && just test
260
-
261
- # CORRECT (multi-repo with dynamic lookup)
262
- WORKTREE="$CLAUDE_PROJECT_DIR/worktrees/11-2"
263
- source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
264
- cd $WORKTREE/$(get_repo_path "myrepo") && just test
265
- ```
266
-
267
- ---
268
-
269
- ## On Activation (All Tactical Agents)
270
-
271
- Every tactical agent MUST perform these steps on activation:
272
-
273
- ### Step 1: Check for Active Work
274
-
275
- **Session File Naming Convention:**
276
- - Pattern: `.session/{story-id}-session.md`
277
- - Examples: `2-1-session.md`, `5-3a-session.md`, `epic-4-session.md`
278
- - Story ID matches sprint YAML (e.g., story `id: "2-1"` → `2-1-session.md`)
279
-
280
- ```bash
281
- cd $CLAUDE_PROJECT_DIR
282
-
283
- # Find ALL session files
284
- SESSIONS=($(ls .session/*-session.md 2>/dev/null))
285
-
286
- # Each session is named after its story ID
287
- # e.g., 2-1-session.md, 5-3a-session.md
288
- ```
289
-
290
- ### Step 2: Handle Multiple Sessions
291
-
292
- If multiple sessions exist, check which are relevant to this agent:
293
-
294
- ```bash
295
- cd $CLAUDE_PROJECT_DIR
296
-
297
- # Find sessions relevant to this agent based on Phase
298
- MY_SESSIONS=()
299
- for f in .session/*-session.md; do
300
- PHASE=$(grep "^\*\*Phase:\*\*" "$f" | sed 's/.*\*\* //')
301
- case "$AGENT_TYPE" in
302
- sm) [[ "$PHASE" =~ ^(sm-setup|approved)$ ]] && MY_SESSIONS+=("$f") ;;
303
- tea) [[ "$PHASE" == "tea" ]] && MY_SESSIONS+=("$f") ;;
304
- dev) [[ "$PHASE" == "dev" ]] && MY_SESSIONS+=("$f") ;;
305
- reviewer) [[ "$PHASE" == "review" ]] && MY_SESSIONS+=("$f") ;;
306
- esac
307
- done
308
- ```
309
-
310
- **If multiple relevant sessions exist, ask:**
311
- ```
312
- Multiple sessions need my attention:
313
- - 2-1-session.md (Phase: dev) - Story 2-1: Add logging
314
- - 5-3a-session.md (Phase: dev) - Story 5-3a: Fix auth bug
315
-
316
- Which session should I work on?
317
- ```
318
-
319
- **Detecting worktree context from session file content:**
320
- ```bash
321
- # Read worktree info from session file (if present)
322
- if grep -q "^worktree:" "$SESSION_FILE"; then
323
- WORKTREE_NAME=$(grep "^worktree:" "$SESSION_FILE" | cut -d' ' -f2)
324
- WORKTREE_PATH=$(grep "^path:" "$SESSION_FILE" | cut -d' ' -f2)
325
- fi
326
- ```
327
-
328
- See `pennyfarthing-dist/guides/worktree-mode.md` for complete worktree documentation.
329
-
330
- ### Step 3: Check Phase and Handoff Status
331
-
332
- Read the selected session file and parse:
333
- - **Phase:** field (sm, tea, dev, review, approved) - PRIMARY handoff indicator
334
- - **Status:** field (e.g., `in-progress`, `review`)
335
- - **Feature Branch:** field for branch name
336
- - **Repos:** field to determine which repos are affected
337
- - **Scope:** field (backend/frontend/both) - determines which test patterns to use
338
-
339
- **Phase Values (for handoff detection):**
340
- | Phase | Current Agent | Next Agent |
341
- |-------|---------------|------------|
342
- | `sm` | SM setting up | TEA |
343
- | `tea` | TEA writing tests | Dev |
344
- | `dev` | Dev implementing | Reviewer |
345
- | `review` | Reviewer reviewing | SM (if approved) or Dev (if rejected) |
346
- | `approved` | Ready for finish | SM |
347
-
348
- ```bash
349
- # Extract scope from session file
350
- SCOPE=$(grep "^\*\*Scope:\*\*" $SESSION_FILE | cut -d: -f2 | xargs | tr '[:upper:]' '[:lower:]')
351
-
352
- # If scope not in session file, derive from repos
353
- if [ -z "$SCOPE" ]; then
354
- REPOS=$(grep "^\*\*Repos:\*\*" $SESSION_FILE | cut -d: -f2 | xargs | tr '[:upper:]' '[:lower:]')
355
- case "$REPOS" in
356
- api) SCOPE="backend" ;;
357
- ui) SCOPE="frontend" ;;
358
- *) SCOPE="both" ;;
359
- esac
360
- fi
361
- ```
362
-
363
- ### Step 4: Verify Actual State (CRITICAL)
364
-
365
- **MANDATORY:** Before offering to start work, verify the actual state matches the session file.
366
-
367
- ```bash
368
- cd $CLAUDE_PROJECT_DIR
369
-
370
- # Check for uncommitted work in affected repos
371
- REPOS=$(grep "^\*\*Repos:\*\*" $SESSION_FILE | cut -d: -f2 | xargs | tr '[:upper:]' '[:lower:]')
372
-
373
- case "$REPOS" in
374
- *api*)
375
- echo "=== API Status ==="
376
- cd API && git status --short
377
- cd ..
378
- ;;
379
- esac
380
-
381
- case "$REPOS" in
382
- *ui*)
383
- echo "=== UI Status ==="
384
- cd UI && git status --short
385
- cd ..
386
- ;;
387
- esac
388
- ```
389
-
390
- **If uncommitted changes exist:**
391
- 1. Report them to the user immediately
392
- 2. Ask: "Session file says [status] but I found uncommitted work. What should I do?"
393
- 3. Options: commit & continue, discard, or investigate
394
-
395
- **If implementing (Dev agent), also verify test state:**
396
- ```bash
397
- # Run tests to confirm actual RED/GREEN state
398
- cd API && just test ./... 2>&1 | tail -5
399
- cd ../UI && npm test -- --run 2>&1 | tail -10
400
- ```
401
-
402
- **If test state differs from session file:**
403
- 1. Report: "Session says RED but tests are GREEN" (or vice versa)
404
- 2. Update session file to reflect reality
405
- 3. Offer appropriate next action
406
-
407
- **Why this matters:** Session files can become stale if a previous session crashed, was interrupted, or forgot to update. Always trust `git status` and test results over documentation.
408
-
409
- ---
410
-
411
- ### Step 5: Create/Checkout Feature Branches
412
-
413
- **MANDATORY:** All tactical agents must ensure they're on the correct branches before starting work.
414
-
415
- ```bash
416
- cd $CLAUDE_PROJECT_DIR
417
-
418
- # Extract from session file
419
- BRANCH=$(grep "Feature Branch:" $SESSION_FILE | cut -d: -f2 | xargs)
420
- REPOS=$(grep "Repos:" $SESSION_FILE | cut -d: -f2 | xargs | tr '[:upper:]' '[:lower:]')
421
-
422
- # Map repo field to script parameter
423
- # "API" → "api", "UI" → "ui", "Both" → "all", etc.
424
- case "$REPOS" in
425
- *api*ui* | *ui*api* | both) REPOS="all" ;;
426
- *api*) REPOS="api" ;;
427
- *ui*) REPOS="ui" ;;
428
- *sim-ui*) REPOS="sim-ui" ;;
429
- *sim*) REPOS="sim" ;;
430
- *) REPOS="all" ;; # Default to all if unclear
431
- esac
432
-
433
- # Create or checkout branches (idempotent, includes verification)
434
- ./scripts/run.sh create-feature-branches.sh "$BRANCH" "$REPOS"
435
- ```
436
-
437
- **What this does:**
438
- - ✅ Creates branches if they don't exist (from develop)
439
- - ✅ Checks out existing branches if they do exist
440
- - ✅ Verifies branches are correct
441
- - ✅ Shows sync status with remote
442
- - ✅ Works in both main checkout and worktrees
443
-
444
- **Never skip this step.** It ensures consistency across all agents in the TDD flow.
445
-
446
- ### Step 6: Offer to Start if Handed Off
447
-
448
- If this agent is the "Next Agent", offer to start immediately:
449
-
450
- | Agent | Match Pattern | Action |
451
- |-------|---------------|--------|
452
- | TEA | `Next Agent: TEA` or `Next Agent: Igor` | Offer to write tests |
453
- | Dev | `Next Agent: Dev` or `Next Agent: Ponder` | Offer to implement |
454
- | Reviewer | `Next Agent: Reviewer` or `Next Agent: Granny` or status=`review` | Offer to review |
455
-
456
- **Offer format:**
457
- ```
458
- I see [Story ID] is ready for [my task].
459
- The handoff indicates I'm next.
460
-
461
- **Story:** [title]
462
- **Phase:** [current] → [next]
463
- **Location:** [main checkout | worktrees/{name}]
464
-
465
- Say 'yes' to start, or ask me something else.
466
- ```
467
-
468
- ### Step 7: If Not Handed Off
469
-
470
- Show the agent's task menu and wait for selection.
471
-
472
- ## Session File Location
473
-
474
- Tactical agents work with session files named after story IDs:
475
-
476
- | Pattern | Example | Description |
477
- |---------|---------|-------------|
478
- | `{story-id}-session.md` | `2-1-session.md` | Story 2-1 from sprint |
479
- | `{story-id}-session.md` | `5-3a-session.md` | Story 5-3a (worktree variant) |
480
- | `epic-{id}-session.md` | `epic-4-session.md` | Epic-level work |
481
-
482
- **Discovery:** `ls .session/*-session.md`
483
- **Traceability:** Story ID → `sprint/current-sprint.yaml`
484
-
485
- **For worktree sessions, check the Worktree Context section:**
486
- ```yaml
487
- ## Worktree Context
488
- worktree: wt-5-3a
489
- path: /path/to/worktrees/wt-5-3a
490
- api_port: 8082
491
- ui_port: 5175
492
- ```
493
-
494
- **Always check the session file for:**
495
- - `Phase:` field to determine whose turn it is (sm, tea, dev, review, approved)
496
- - `Workflow:` field to know which workflow is active (tdd, trivial, etc.)
497
- - `Phase Started:` field for when the current phase began (ISO 8601)
498
- - `Repos:` field to know which subrepos to work in
499
- - `Feature Branch:` field for branch names
500
- - `worktree:` field if working in a worktree (use `path:` for commands)
501
-
502
- ## Workflow Tracking Section
503
-
504
- Every session file includes a `## Workflow Tracking` section that tracks workflow state and phase history:
505
-
506
- ```markdown
507
- ## Workflow Tracking
508
- **Workflow:** tdd
509
- **Phase:** dev
510
- **Phase Started:** 2026-01-13T14:30:00Z
511
-
512
- ### Phase History
513
- | Phase | Started | Ended | Duration |
514
- |-------|---------|-------|----------|
515
- | sm | 2026-01-13T14:00:00Z | 2026-01-13T14:15:00Z | 15m |
516
- | tea | 2026-01-13T14:15:00Z | 2026-01-13T14:30:00Z | 15m |
517
- | dev | 2026-01-13T14:30:00Z | - | - |
518
- ```
519
-
520
- **Field extraction (grep-friendly):**
521
- ```bash
522
- # Extract workflow name (defaults to "tdd" if missing for backward compatibility)
523
- WORKFLOW=$(grep "^\*\*Workflow:\*\*" "$SESSION_FILE" | head -1 | sed 's/\*\*Workflow:\*\* //' | xargs)
524
- [ -z "$WORKFLOW" ] && WORKFLOW="tdd"
525
-
526
- # Extract current phase
527
- PHASE=$(grep "^\*\*Phase:\*\*" "$SESSION_FILE" | head -1 | sed 's/\*\*Phase:\*\* //' | xargs)
528
-
529
- # Extract phase started timestamp
530
- PHASE_STARTED=$(grep "^\*\*Phase Started:\*\*" "$SESSION_FILE" | head -1 | sed 's/\*\*Phase Started:\*\* //' | xargs)
531
- ```
532
-
533
- **On phase transition:** Handoff subagents update this section:
534
- 1. Set previous phase's Ended timestamp and calculate Duration
535
- 2. Update `**Phase:**` to new phase name
536
- 3. Update `**Phase Started:**` to current timestamp
537
- 4. Add new row to Phase History table
538
-
539
- ## Phase Assessment Templates (MANDATORY)
540
-
541
- Each agent MUST document their work using the structured template for their phase. This is what makes handoffs reliable.
542
-
543
- ### SM Assessment Template
544
- ```markdown
545
- ## SM Assessment
546
-
547
- **Story:** {ID} - {title}
548
- **Points:** {N} | **Priority:** {P0/P1/P2}
549
- **Repos:** api | ui | both
550
- **Branch:** feat/{story-id}-{description}
551
-
552
- **Acceptance Criteria:**
553
- - [ ] AC1: {criterion}
554
- - [ ] AC2: {criterion}
555
-
556
- **Technical Notes:** {any context Dev/TEA needs}
557
- **Jira:** {MSSCI-XXXX} (claimed)
558
-
559
- **Handoff:** To TEA for test writing
560
- ```
561
- **Handoff phrase:** "TEA, Story X-Y is ready. Write failing tests for these ACs."
562
-
563
- ---
564
-
565
- ### TEA Assessment Template
566
- ```markdown
567
- ## TEA Assessment
568
-
569
- **Tests Required:** Yes | No
570
- **Reason:** {if No: documentation/config/dependency update}
571
-
572
- **Test Files:** (if Yes)
573
- - `path/to/test_file.go` - {description}
574
- - `path/to/component.test.tsx` - {description}
575
-
576
- **Tests Written:** {N} tests covering {M} ACs
577
- **Status:** RED (failing - ready for Dev)
578
-
579
- **Handoff:** To Dev for implementation
580
- ```
581
- **Handoff phrase:** "Dev, tests are RED and ready. Make them GREEN."
582
-
583
- ---
584
-
585
- ### Dev Assessment Template
586
- ```markdown
587
- ## Dev Assessment
588
-
589
- **Implementation Complete:** Yes
590
- **Files Changed:**
591
- - `path/to/file.go` - {description}
592
- - `path/to/Component.tsx` - {description}
593
-
594
- **Tests:** {N}/{N} passing (GREEN)
595
- **PR:** #{number} - {title}
596
- **Branch:** {branch-name} (pushed)
597
-
598
- **Handoff:** To Reviewer for code review
599
- ```
600
- **Handoff phrase:** "Reviewer, PR #{N} is ready. All tests GREEN."
601
-
602
- ---
603
-
604
- ### Reviewer Assessment Template
605
- ```markdown
606
- ## Reviewer Assessment
607
-
608
- **PR:** #{number}
609
- **Verdict:** APPROVED | REJECTED
610
-
611
- **If APPROVED:**
612
- **Quality:** Tests comprehensive, code follows patterns
613
- **Handoff:** To SM for finish-story workflow
614
-
615
- **If REJECTED:**
616
- **Issues Found:**
617
- - {severity}: {issue} → {fix required}
618
- - {severity}: {issue} → {fix required}
619
-
620
- **Handoff:** Back to Dev for fixes
621
- ```
622
- **Handoff phrase (approved):** "SM, Story X-Y is approved and ready to be finished."
623
- **Handoff phrase (rejected):** "Dev, {N} issues found. See assessment for details."
624
-
625
- ---
626
-
627
- ## Session File Update (MANDATORY Before Handoff)
628
-
629
- > **🚨 CRITICAL: WRITE BEFORE YOU OFFER**
630
- >
631
- > The #1 handoff failure is offering to hand off before writing the assessment to disk.
632
- > Never say "Ready for Reviewer" or "Ready for Dev" until YOU have written YOUR assessment.
633
- > The subagent does NOT write the assessment - YOU do.
634
-
635
- ### The Correct Handoff Sequence
636
-
637
- ```
638
- 1. COMPLETE your work (tests written, code implemented, review done)
639
- 2. WRITE your Assessment section to the session file (using Edit tool)
640
- 3. VERIFY the assessment is written (read the file back or check Edit output)
641
- 4. SPAWN the handoff subagent (it verifies and updates status/workflow checkboxes)
642
- 5. WAIT for subagent to complete and report success
643
- 6. ONLY THEN offer the next agent handoff
644
- ```
645
-
646
- ### What YOU Write vs What SUBAGENT Writes
647
-
648
- | Agent | YOU Write (Assessment) | SUBAGENT Updates |
649
- |-------|------------------------|------------------|
650
- | TEA | `## TEA Assessment` with test files, RED status | Workflow checkbox, Phase, Next Agent |
651
- | Dev | `## Dev Assessment` with files changed, PR link | Workflow checkbox, Phase, Next Agent |
652
- | Reviewer | `## Reviewer Assessment` with verdict, issues | Workflow checkbox, Phase, Next Agent |
653
-
654
- ### Before Spawning Handoff Subagent
655
-
656
- **YOU must have already written:**
657
- ```markdown
658
- ## {Agent} Assessment
659
-
660
- {All required fields from the template below}
661
-
662
- **Handoff:** To {next agent} for {next task}
663
- ```
664
-
665
- **Verify your assessment exists:**
666
- ```bash
667
- grep -A 20 "## Dev Assessment" "$SESSION_FILE" # For Dev
668
- grep -A 20 "## Reviewer Assessment" "$SESSION_FILE" # For Reviewer
669
- ```
670
-
671
- If the assessment is NOT in the file, do NOT spawn the subagent yet.
672
-
673
- ### Common Mistake
674
-
675
- ```
676
- ❌ WRONG:
677
- 1. Dev: "All tests GREEN, PR created!"
678
- 2. Dev: [spawns handoff subagent]
679
- 3. Dev: "Ready for Reviewer!"
680
- 4. Reviewer: [activates, finds no Dev Assessment in session file]
681
-
682
- ✅ CORRECT:
683
- 1. Dev: "All tests GREEN, PR created!"
684
- 2. Dev: [uses Edit tool to write Dev Assessment to session file]
685
- 3. Dev: [verifies assessment was written]
686
- 4. Dev: [spawns handoff subagent]
687
- 5. Dev: [waits for subagent to report success]
688
- 6. Dev: "Ready for Reviewer!"
689
- 7. Reviewer: [activates, reads Dev Assessment, knows what to review]
690
- ```
691
-
692
- The subagent will verify the assessment exists and update workflow checkboxes.
693
-
694
- ## Skills Usage
695
-
696
- Tactical agents invoke skills naturally based on their task:
697
-
698
- | Skill | When to Use |
699
- |-------|-------------|
700
- | `/testing` | Running tests, writing tests, TDD workflow |
701
- | `/dev-patterns` | Implementation patterns, common gotchas |
702
- | `/sprint-context` | Sprint status, backlog, story context |
703
-
704
- ### Scope Values
705
-
706
- | Session Repos | Scope | Testing Skill Reference |
707
- |---------------|-------|-------------------------|
708
- | `api` | `backend` | `references/backend-patterns.md` |
709
- | `ui` | `frontend` | `references/frontend-patterns.md` |
710
- | `both` | `both` | Full skill + both pattern refs |
711
-
712
- ## Worktree Awareness
713
-
714
- When working in a worktree, read context from the session file:
715
-
716
- ```bash
717
- # Get worktree path from session file
718
- WORKTREE_PATH=$(grep "^path:" "$SESSION_FILE" | cut -d' ' -f2)
719
-
720
- # Use worktree path for all commands (single-repo)
721
- cd $WORKTREE_PATH && just test
722
-
723
- # Multi-repo: iterate with repo-utils
724
- source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
725
- for repo in $(get_repo_names); do
726
- cd $WORKTREE_PATH/$(get_repo_path "$repo") && $(get_test_command "$repo")
727
- done
728
- ```
729
-
730
- **Ports are in the session file:**
731
- ```bash
732
- API_PORT=$(grep "^api_port:" "$SESSION_FILE" | cut -d' ' -f2)
733
- UI_PORT=$(grep "^ui_port:" "$SESSION_FILE" | cut -d' ' -f2)
734
- ```
735
-
736
- **See `core/guides/worktree-mode.md` for complete worktree documentation.**
737
-
738
- ## Sidecar Memory (Tactical Agents)
739
-
740
- **See `shared-agent-behavior.md` for full sidecar protocol.**
741
-
742
- For tactical agents, key moments to check/update sidecars:
743
-
744
- | When | Action |
745
- |------|--------|
746
- | **On Activation** | Load sidecar after checking handoff status (Step 7) |
747
- | **Before Handoff** | Capture any learnings BEFORE spawning handoff subagent |
748
- | **On Gotcha** | Immediately note it - don't wait for handoff |
749
-
750
- ### Tactical-Specific Patterns
751
-
752
- - **TEA:** Test patterns, mocking approaches, test data gotchas
753
- - **Dev:** Implementation patterns, API quirks, performance fixes
754
- - **Reviewer:** Common issues found, patterns to watch for
755
- - **SM:** Story breakdown patterns, estimation notes
756
-
757
- ---
758
-
759
- ## Completing Work (Automatic Handoff via Helper)
760
-
761
- When done with your phase, send your helper to handle the bookkeeping.
762
-
763
- **Helper prompts are in:** `.pennyfarthing/agents/`
764
-
765
- | Agent | Helper | Prompt File | Purpose |
766
- |-------|--------|-------------|---------|
767
- | SM | Nobby | `sm-*.md` | Status checks, research, file summaries, story setup |
768
- | TEA | Igor | `tea-handoff.md` | Update session after tests written (RED) |
769
- | Dev | Hex | `dev-handoff.md` | Update session after PR created (GREEN) |
770
- | Reviewer | Nanny Ogg | `reviewer-handoff-approve.md` | Mark approved, route to SM |
771
- | Reviewer | Nanny Ogg | `reviewer-handoff-reject.md` | Route back to Dev with issues |
772
-
773
- ### Helper Model Selection
774
-
775
- Helpers use Haiku for fast, mechanical bookkeeping:
776
-
777
- ```yaml
778
- Task tool:
779
- subagent_type: "general-purpose"
780
- model: "haiku" # ← Haiku for helpers
781
- description: "Hex handles handoff" # Use your helper's name
782
- prompt: [loaded from subagent file with placeholders replaced]
783
- ```
784
-
785
- **Helpers (Haiku) handle:**
786
- - Workflow handoffs (updating session files, workflow checkboxes)
787
- - Work teardown (completion checks, archival)
788
- - Status checks and validation
789
- - File updates and bookkeeping
790
-
791
- **You (Opus) handle:**
792
- - Complex code analysis or generation
793
- - Architectural decisions
794
- - Tasks requiring judgment
795
-
796
- ### Handoff Output
797
-
798
- ```
799
- ✓ Pre-flight: Tests 36/36 GREEN, git clean, PR #59 exists
800
- ✓ Assessment: Dev Assessment written to session file
801
- ✓ Workflow: [x] Dev marked complete
802
-
803
- Handoff complete: Dev → Reviewer
804
- Invoke /reviewer to continue.
805
- ```
806
-
807
- ### If Handoff Fails
808
-
809
- Your helper reports what blocked:
810
-
811
- ```
812
- ✗ Handoff blocked
813
-
814
- Issue: Tests failing (3 failures)
815
- Fix: Run tests, fix failures, then retry handoff.
816
- ```
817
-
818
- Address the issue and send your helper again.
819
-
820
- ## Auto-Invoke Next Agent (Context-Aware)
821
-
822
- **After handoff helper succeeds**, check context usage to decide whether to auto-invoke or defer:
823
-
824
- ```bash
825
- eval $(./scripts/run.sh check-context.sh)
826
- # Returns: HANDOFF_MODE=auto (<60%) or HANDOFF_MODE=ask (>60%)
827
- ```
828
-
829
- ### If HANDOFF_MODE=auto (< 60% context)
830
-
831
- **Use the Skill tool to invoke the next agent directly.** Do not wait for user input.
832
-
833
- | Current Agent | Next Agent | Skill Invocation |
834
- |---------------|------------|------------------|
835
- | SM | TEA | `Skill(tea)` |
836
- | SM (trivial) | Dev | `Skill(dev)` |
837
- | TEA | Dev | `Skill(dev)` |
838
- | Dev | Reviewer | `Skill(reviewer)` |
839
- | Reviewer (approved) | SM | `Skill(sm)` |
840
- | Reviewer (rejected) | Dev | `Skill(dev)` |
841
-
842
- **Example flow:**
843
- ```
844
- 1. Dev completes implementation, spawns handoff helper
845
- 2. Helper updates session file, reports success
846
- 3. Dev runs: eval $(./scripts/run.sh check-context.sh)
847
- 4. Result: HANDOFF_MODE=auto (context at 45%)
848
- 5. Dev uses Skill tool: skill="reviewer"
849
- 6. Reviewer activates automatically, continues work
850
- ```
851
-
852
- ### If HANDOFF_MODE=ask (> 60% context)
853
-
854
- **Do not auto-invoke.** Tell the user to start a fresh session:
855
-
856
- ```
857
- Context is at {N}% - recommend fresh session for next agent.
858
- Run `/{next-agent}` in a new conversation to continue.
859
- ```
860
-
861
- ### Why This Matters
862
-
863
- - Auto-invoke keeps momentum when context allows
864
- - Fresh sessions prevent context overflow and degraded performance
865
- - The 70% threshold leaves buffer for the next agent's work
866
-
867
- ### Pre-flight Check Commands
868
-
869
- **Single-repo project:**
870
- ```bash
871
- cd $CLAUDE_PROJECT_DIR && just test
872
- cd $CLAUDE_PROJECT_DIR && git status --porcelain
873
- cd $CLAUDE_PROJECT_DIR && git log @{u}..HEAD --oneline
874
- cd $CLAUDE_PROJECT_DIR && gh pr view --json url -q .url
875
- ```
876
-
877
- **Multi-repo project (use repo-utils.sh):**
878
- ```bash
879
- source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
880
- for repo in $(get_repo_names); do
881
- repo_path=$(get_repo_path "$repo")
882
- cd $CLAUDE_PROJECT_DIR/$repo_path && $(get_test_command "$repo")
883
- cd $CLAUDE_PROJECT_DIR/$repo_path && git status --porcelain
884
- done
885
- ```
886
-
887
- ## Subagent Error Handling (Shared Protocol)
888
-
889
- When spawning subagents, the **caller handles all error recovery**. Subagents just report success or structured failure.
890
-
891
- ### Subagent Return Format
892
-
893
- Subagents return structured results:
894
-
895
- ```yaml
896
- # Success
897
- status: success
898
- result: "Session updated, handoff complete"
899
-
900
- # Failure
901
- status: blocked
902
- blocked_step: "verify_tests_green"
903
- error: "3 tests failing in conductor-api"
904
- diagnosis: "Implementation incomplete"
905
- ```
906
-
907
- ### Caller Retry Protocol
908
-
909
- When a subagent returns `status: blocked`:
910
-
911
- ```
912
- 1. LOG the failure
913
- - Which subagent
914
- - Which step failed
915
- - Error message
916
-
917
- 2. DIAGNOSE
918
- - Is this fixable by the caller?
919
- - Is it a transient issue (retry might work)?
920
- - Does it need user intervention?
921
-
922
- 3. IF FIXABLE by caller:
923
- - Fix the issue (e.g., commit forgotten files)
924
- - Retry subagent (max 2 retries)
925
-
926
- 4. IF NOT FIXABLE:
927
- - Escalate to user with structured format
928
- ```
929
-
930
- ### Common Failures and Fixes
931
-
932
- | Subagent | Failure | Caller Action |
933
- |----------|---------|---------------|
934
- | `testing-runner` | Tests RED | Don't retry - report to user, this is expected state info |
935
- | `testing-runner` | Container not running | Run `ensure_test_containers`, retry |
936
- | `*-handoff` | Assessment missing | Write assessment first, retry |
937
- | `*-handoff` | Uncommitted changes | Commit changes, retry |
938
- | `*-handoff` | Not pushed | Push to remote, retry |
939
- | `workflow-status-check` | Session file unreadable | Report to user for manual inspection |
940
- | `sm-*` | Jira CLI failed | Check `gh auth status`, report to user |
941
-
942
- ### Escalation Format
943
-
944
- When a subagent failure can't be recovered:
945
-
946
- ```markdown
947
- ## Subagent Blocked
948
-
949
- **Subagent:** {name}
950
- **Step Failed:** {step}
951
- **Error:** {message}
952
- **Diagnosis:** {what went wrong}
953
-
954
- **Retries:** {N}/2 attempted
955
- **Fixable by Caller:** No
956
-
957
- **User Action Required:**
958
- {specific action the user needs to take}
959
- ```
960
-
961
- ### Example: Caller Handling Handoff Failure
962
-
963
- ```
964
- 1. Dev spawns `dev-handoff` subagent
965
- 2. Subagent returns:
966
- status: blocked
967
- blocked_step: "verify_pushed"
968
- error: "Branch not pushed to remote"
969
-
970
- 3. Dev (caller) handles:
971
- - Diagnose: Forgot to push
972
- - Fix: git push -u origin {branch}
973
- - Retry: Spawn dev-handoff again
974
-
975
- 4. If still failing after 2 retries:
976
- - Escalate to user with structured format
977
- ```
978
-
979
- ### Why Callers Handle Errors
980
-
981
- - **Subagents stay simple** - just do the task, report result
982
- - **Callers have context** - know what they were trying to do
983
- - **Retry logic is consistent** - same pattern across all agents
984
- - **Easier to debug** - failure handling in one place
985
-
986
- ---
987
-
988
- ## Agent Flow Reference
989
-
990
- ```
991
- /new-work → SM → TEA → Dev → Reviewer → SM (finish)
992
- ↓ ↓ ↓ ↓
993
- setup tests impl review
994
- │ │ │ │
995
- └──────┴─────┴─────────┘
996
- helper handoffs
997
- ```
998
-
999
- **Entry point:** `/new-work` only
1000
- **State detection:** Agents read session file on activation
1001
- **Handoffs:** Agents send helpers to update session file
1002
- **Finish:** SM handles when status = `approved`
1003
-
1004
- ---
1005
-
1006
- ## Dogfooding: Known Issues When Working on Pennyfarthing
1007
-
1008
- When working on the Pennyfarthing framework itself, be aware of these quirks:
1009
-
1010
- ### Symlink Permission Issue (Epic 26)
1011
-
1012
- **Problem:** Claude Code's permission system doesn't follow symlinks. The `.claude/` directory contains symlinks to `pennyfarthing-dist/`:
1013
-
1014
- ```
1015
- .claude/commands → pennyfarthing-dist/commands
1016
- .claude/agents → pennyfarthing-dist/agents
1017
- .claude/skills → pennyfarthing-dist/skills
1018
- ```
1019
-
1020
- When Claude Code prompts for permission to write to `.claude/commands/foo.md`, the permission grant **fails silently** because the actual file is at `pennyfarthing-dist/commands/foo.md`.
1021
-
1022
- **Workaround:** Write directly to `pennyfarthing-dist/` instead of `.claude/`:
1023
-
1024
- ```bash
1025
- # WRONG - permission will fail
1026
- Write to: .claude/commands/close-epic.md
1027
-
1028
- # CORRECT - works because it's the real path
1029
- Write to: pennyfarthing-dist/commands/close-epic.md
1030
- ```
1031
-
1032
- **Status:** Tracked in Epic 26-1. Future fix may replace symlinks with copies during `pennyfarthing init`.
1033
-
1034
- ### Self-Referential Context
1035
-
1036
- When agents work on Pennyfarthing itself:
1037
- - Agent definitions you're reading are the same ones you're modifying
1038
- - Changes to `tactical-agent-behavior.md` affect how you behave
1039
- - Test carefully - breaking changes can break the workflow mid-session
1040
-
1041
- **Best practice:** Complete and commit agent/guide changes before testing them in a new session.