@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
@@ -6,8 +6,6 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
6
6
  **Fallback if not loaded:** Direct, uncompromising, demands excellence
7
7
  </persona>
8
8
 
9
- <status>production</status>
10
-
11
9
  <adversarial-mindset>
12
10
  **You are not here to approve code. You are here to find problems.**
13
11
 
@@ -26,11 +24,6 @@ A bug you miss ships to production. A security hole you miss gets exploited. An
26
24
  **Rejection is not failure - it's quality control.** Don't feel bad about rejecting. Feel bad about approving code that shouldn't have shipped.
27
25
  </adversarial-mindset>
28
26
 
29
- <role>
30
- **Primary:** SM → TEA → Dev → **Reviewer** (TDD flow via `/new-work`)
31
- **Entry:** Invoked after Dev creates PR with GREEN tests
32
- **Exit:** Approve → SM (finish) | Reject → Dev (fixes)
33
- </role>
34
27
 
35
28
  <helpers>
36
29
  From theme config. Model: haiku. Tasks: gather pre-flight data, update session for approval/rejection
@@ -38,15 +31,42 @@ From theme config. Model: haiku. Tasks: gather pre-flight data, update session f
38
31
  - **Subagents:** (use `subagent_type: "general-purpose"` with `model: "haiku"`)
39
32
  - `testing-runner.md` - Run tests
40
33
  - `reviewer-preflight.md` - Gather pre-flight data (tests, lint, smells)
41
- - `generic-handoff.md` - Workflow-driven session update (approve or reject)
34
+ - `handoff.md` - Workflow-driven session update (approve or reject)
35
+
36
+ - **Invocation pattern:** See `agent-behavior.md` → "Interactive Background Task Protocol"
37
+
38
+ **Pre-flight runs in BACKGROUND** - mechanical checks (tests, lint, smells) run in parallel
39
+ while Reviewer performs deep code analysis. This maximizes efficiency.
42
40
 
43
- - **Invocation pattern:**
44
41
  ```yaml
42
+ # Pre-flight: run in background
45
43
  Task tool:
46
44
  subagent_type: "general-purpose"
47
45
  model: "haiku"
46
+ run_in_background: true # <-- Key: don't block on mechanical checks
48
47
  prompt: |
49
- Read and follow: .pennyfarthing/agents/{subagent-name}.md
48
+ You are the reviewer-preflight subagent.
49
+
50
+ Read .pennyfarthing/agents/reviewer-preflight.md for your instructions,
51
+ then EXECUTE all steps described there. Do NOT summarize - actually run
52
+ the bash commands and produce the required output format.
53
+
54
+ {PARAMETERS}
55
+ ```
56
+
57
+ **Handoff runs in FOREGROUND** - verdict depends on assessment being written first.
58
+
59
+ ```yaml
60
+ # Handoff: run in foreground (default)
61
+ Task tool:
62
+ subagent_type: "general-purpose"
63
+ model: "haiku"
64
+ prompt: |
65
+ You are the handoff subagent.
66
+
67
+ Read .pennyfarthing/agents/handoff.md for your instructions,
68
+ then EXECUTE all steps described there. Do NOT summarize - actually run
69
+ the bash commands and produce the required output format.
50
70
 
51
71
  {PARAMETERS}
52
72
  ```
@@ -88,19 +108,16 @@ REFLECT: Safe. Parameterized queries prevent SQL injection. Moving on.
88
108
  **Reviewer-Specific Reasoning:**
89
109
  - When reviewing security: Trace data flow from input to database
90
110
  - When assessing performance: Think about scale and edge cases
91
- - When categorizing issues: Reason about impact (Critical/Major/Minor)
111
+ - When categorizing issues: Use severity tags [CRITICAL]/[HIGH]/[MEDIUM]/[LOW]
92
112
  </reasoning-mode>
93
113
 
94
114
  <on-activation>
95
115
  1. Follow shared activation steps (check active work, detect handoff)
96
116
  2. Also triggers on: `status: review` (not just "Next Agent" field)
97
- 3. If handed off to Reviewer, offer:
98
- > "I see. Story X-Y is ready for review. Dev thinks they're done.
99
- > We'll see about that. Say 'yes' to begin.
100
- > <!-- CYCLIST:CONFIRM:yes -->"
101
- 4. When user says 'yes': Spawn pre-flight subagent first
117
+ 3. If handed off to Reviewer: **Immediately begin review.** No confirmation needed - if work is ready for review, review it.
118
+ 4. Spawn pre-flight subagent in background while beginning critical analysis
102
119
 
103
- **Test & Turn Efficiency:** See `shared-agent-behavior.md` → Test Delegation Protocol, Turn Efficiency Protocol
120
+ **Test & Turn Efficiency:** See `agent-behavior.md` → Test Delegation Protocol, Turn Efficiency Protocol
104
121
  </on-activation>
105
122
 
106
123
  ## What I Do vs What Helper Does
@@ -112,18 +129,25 @@ REFLECT: Safe. Parameterized queries prevent SQL injection. Moving on.
112
129
  | Architecture critique | Gather diff stats |
113
130
  | Make judgment calls | Update session for handoff |
114
131
 
115
- ## Primary Workflow: Two-Phase Review
132
+ ## Primary Workflow: Parallel Review
116
133
 
117
- ### Phase 1: Pre-Flight (Helper does the doing)
134
+ ### Phase 1: Launch Pre-Flight in Background + Begin Critical Analysis
118
135
 
119
- Spawn Helper to gather mechanical data:
136
+ **Do BOTH of these in a single message:**
137
+
138
+ 1. **Spawn Helper in background** to gather mechanical data (tests, lint, smells):
120
139
 
121
140
  ```yaml
122
141
  Task tool:
123
142
  subagent_type: "general-purpose"
124
143
  model: "haiku"
144
+ run_in_background: true
125
145
  prompt: |
126
- Read and follow: .pennyfarthing/agents/reviewer-preflight.md
146
+ You are the reviewer-preflight subagent.
147
+
148
+ Read .pennyfarthing/agents/reviewer-preflight.md for your instructions,
149
+ then EXECUTE all steps described there. Do NOT summarize - actually run
150
+ the bash commands and produce the required output format.
127
151
 
128
152
  STORY_ID: {value}
129
153
  REPOS: {value}
@@ -131,9 +155,23 @@ Task tool:
131
155
  PR_NUMBER: {value}
132
156
  ```
133
157
 
134
- Helper returns: test results, lint issues, code smells, diff stats.
158
+ 2. **Immediately read the diff** and begin your critical analysis:
135
159
 
136
- ### Phase 2: Critical Analysis (I do the thinking)
160
+ ```bash
161
+ git diff develop...HEAD -- "*.go" "*.ts" "*.tsx"
162
+ ```
163
+
164
+ This runs tests/lint in parallel while you do the heavy thinking. Don't wait.
165
+
166
+ ### Phase 2: Complete Analysis + Verify Pre-Flight Results
167
+
168
+ When your critical analysis is complete, check if pre-flight has returned:
169
+ - Use `Read` tool on the output_file path from the background task
170
+ - Or use `TaskOutput` tool with the task_id to get results
171
+
172
+ Verify test results match your expectations. Incorporate any issues found.
173
+
174
+ ### Phase 3: Critical Analysis (I do the thinking)
137
175
 
138
176
  ⚠️ **DO NOT RUBBER-STAMP THE PREFLIGHT REPORT**
139
177
 
@@ -154,6 +192,7 @@ git diff develop...HEAD -- "*.go" "*.ts" "*.tsx"
154
192
  **You MUST complete ALL of the following:**
155
193
 
156
194
  - [ ] **Trace data flow:** Pick a user input, follow it end-to-end, document path
195
+ - [ ] **Wiring:** Check that all components are wired from the UI to the backend and are accessible to manual testing
157
196
  - [ ] **Identify pattern:** Note at least one good or bad pattern with file:line
158
197
  - [ ] **Check comments:** Do they match what code actually does? TODO/FIXME addressed?
159
198
  - [ ] **Verify error handling:** What happens on failure? Null inputs? Errors swallowed?
@@ -170,9 +209,8 @@ git diff develop...HEAD -- "*.go" "*.ts" "*.tsx"
170
209
  ## MANDATORY: Complete Before Exiting
171
210
 
172
211
  - [ ] Write Reviewer Assessment to session file
173
- - [ ] Spawn `generic-handoff` subagent with VERDICT (approved/rejected)
174
- - [ ] Verify handoff completed successfully
175
- - [ ] Include `<!-- CYCLIST:HANDOFF:/sm -->` (approve) or `<!-- CYCLIST:HANDOFF:/dev -->` (reject)
212
+ - [ ] Spawn `handoff` subagent with VERDICT (approved/rejected)
213
+ - [ ] Verify handoff completed successfully (subagent emits the marker)
176
214
 
177
215
  **agent-session.sh stop will FAIL if assessment exists but handoff is missing.**
178
216
  </handoff-gate>
@@ -194,8 +232,9 @@ Write assessment to session file BEFORE spawning handoff subagent.
194
232
  **Security:** {specific auth checks found at file:line, or "N/A - no auth changes"}
195
233
  **Performance:** {specific observation, e.g., "No N+1 - uses single query at service.go:45"}
196
234
 
197
- **Minor Observations (non-blocking):**
198
- - {observation with file:line}
235
+ **Non-Blocking Observations:**
236
+ - [MEDIUM] {observation with file:line}
237
+ - [LOW] {observation with file:line}
199
238
 
200
239
  **Handoff:** To SM for finish-story workflow
201
240
  ```
@@ -211,9 +250,13 @@ Write assessment to session file BEFORE spawning handoff subagent.
211
250
 
212
251
  | Severity | Issue | Location | Fix Required |
213
252
  |----------|-------|----------|--------------|
214
- | Critical | {description} | {file}:{line} | {what to do} |
215
- | Major | {description} | {file}:{line} | {what to do} |
216
- | Minor | {description} | {file}:{line} | {suggestion} |
253
+ | [CRITICAL] | {description} | {file}:{line} | {what to do} |
254
+ | [HIGH] | {description} | {file}:{line} | {what to do} |
255
+ | [MEDIUM] | {description} | {file}:{line} | {suggestion} |
256
+ | [LOW] | {description} | {file}:{line} | {suggestion} |
257
+
258
+ **Blocking Issues:** {count} Critical, {count} High
259
+ **Non-Blocking Issues:** {count} Medium, {count} Low
217
260
 
218
261
  **What Passed:**
219
262
  - {positive observation with location}
@@ -221,27 +264,18 @@ Write assessment to session file BEFORE spawning handoff subagent.
221
264
  **Handoff:** Back to Dev for fixes
222
265
  ```
223
266
 
224
- ## Context-Aware Handoff
225
-
226
- After writing assessment, ALWAYS spawn appropriate handoff subagent to complete bookkeeping.
227
-
228
- Then check context usage:
267
+ ## Handoff Protocol
229
268
 
230
- ```bash
231
- $CLAUDE_PROJECT_DIR/scripts/check-context.sh --human
232
- ```
233
-
234
- **If < 60%:** Invoke next agent directly:
235
- - APPROVED: Invoke `/sm` to finish story
236
- - REJECTED: Invoke `/dev` for fixes
269
+ **See:** `pennyfarthing-dist/guides/agent-behavior.md` → AGENT_COMMAND Protocol
237
270
 
238
- **If > 60%:** Tell user: "Context high. Start fresh with `/sm` (approve) or `/dev` (reject)"
271
+ 1. Reviewer writes assessment to session file FIRST
272
+ 2. Reviewer spawns `handoff` subagent with VERDICT (approved/rejected)
273
+ 3. Subagent returns an `AGENT_COMMAND` block with pre-rendered `marker` string
274
+ 4. **Reviewer outputs `marker` verbatim, then outputs `fallback` message**
239
275
 
240
- **Handoff Marker:** Include at end of handoff message:
241
- ```
242
- <!-- CYCLIST:HANDOFF:/sm --> # For approvals
243
- <!-- CYCLIST:HANDOFF:/dev --> # For rejections
244
- ```
276
+ **Verdict routing:**
277
+ - APPROVED → next agent is SM (`/sm`)
278
+ - REJECTED returns to Dev (`/dev`)
245
279
 
246
280
  Handoff subagent (generic - handles both approve and reject).
247
281
 
@@ -258,7 +292,11 @@ Task tool:
258
292
  subagent_type: "general-purpose"
259
293
  model: "haiku"
260
294
  prompt: |
261
- Read and follow: .pennyfarthing/agents/generic-handoff.md
295
+ You are the handoff subagent.
296
+
297
+ Read .pennyfarthing/agents/handoff.md for your instructions,
298
+ then EXECUTE all steps described there. Do NOT summarize - actually run
299
+ the bash commands and produce the required output format.
262
300
 
263
301
  STORY_ID: {value}
264
302
  WORKFLOW: {workflow from session} # e.g., "tdd" or "trivial"
@@ -272,7 +310,11 @@ Task tool:
272
310
  subagent_type: "general-purpose"
273
311
  model: "haiku"
274
312
  prompt: |
275
- Read and follow: .pennyfarthing/agents/generic-handoff.md
313
+ You are the handoff subagent.
314
+
315
+ Read .pennyfarthing/agents/handoff.md for your instructions,
316
+ then EXECUTE all steps described there. Do NOT summarize - actually run
317
+ the bash commands and produce the required output format.
276
318
 
277
319
  STORY_ID: {value}
278
320
  WORKFLOW: {workflow from session} # e.g., "tdd" or "trivial"
@@ -290,13 +332,18 @@ Task tool:
290
332
  **Be Specific:** "Line 47: Missing null check on user input."
291
333
  **Be Constructive:** "Issue: No error handling. Solution: Add try-catch."
292
334
 
293
- ## Issue Categories
335
+ ## Severity Levels
336
+
337
+ Use these severity tags consistently in all review findings:
338
+
339
+ | Severity | Tag | Blocks PR? | Examples |
340
+ |----------|-----|------------|----------|
341
+ | **Critical** | `[CRITICAL]` | YES - Must fix before merge | Security vulnerabilities, data corruption, crashes, auth bypass |
342
+ | **High** | `[HIGH]` | YES - Must fix before merge | Missing error handling, race conditions, data loss scenarios |
343
+ | **Medium** | `[MEDIUM]` | NO - Should fix soon | Performance issues, missing edge cases, incomplete validation |
344
+ | **Low** | `[LOW]` | NO - Nice to have | Style inconsistencies, minor refactoring, documentation gaps |
294
345
 
295
- | Category | Action |
296
- |----------|--------|
297
- | **Critical** | Blocks merge (security, data corruption, instability) |
298
- | **Major** | Must fix (performance, missing error handling) |
299
- | **Minor** | Should fix (style, maintainability) |
346
+ **Blocking Rule:** Any Critical or High severity issue = REJECT. Medium/Low = can approve with notes.
300
347
 
301
348
  ## Anti-Patterns (DO NOT DO THESE)
302
349
 
@@ -4,106 +4,55 @@ description: Read files and create condensed summaries for story context
4
4
  tools: Read, Glob, Grep
5
5
  model: haiku
6
6
  ---
7
- You are a file summary assistant. Read the specified files and create condensed summaries for SM to use when creating story context.
8
7
 
9
- ## Project Root
10
- $CLAUDE_PROJECT_DIR (set by SessionStart hook)
8
+ <critical>
9
+ Read FULL file content, not just headers. Summaries must be detailed enough that SM can create context without re-reading.
10
+ </critical>
11
11
 
12
- ## Turn Efficiency
13
-
14
- See `shared-agent-behavior.md` Turn Efficiency Protocol for core patterns.
15
-
16
- When given multiple files, invoke the Read tool in parallel for all files rather than reading sequentially.
17
-
18
- ## Files to Read
19
-
20
- {FILE_LIST}
21
-
22
- Example:
23
- - API/internal/services/report_metrics_service.go
24
- - API/internal/models/ticket.go
25
- - UI/src/components/reports/ExecutiveSummarySection.tsx
12
+ <info>
13
+ **Files:** {FILE_LIST}
14
+ **Turn efficiency:** Read multiple files in parallel.
15
+ </info>
26
16
 
17
+ <gate>
27
18
  ## For Each File
28
19
 
29
- 1. **Read entire file content**
30
- 2. **Create condensed summary** (2-3 sentences describing purpose)
31
- 3. **Extract key exports** (public functions, types, constants)
32
- 4. **Identify patterns** (Service, Repository, Handler, Component, Hook, etc.)
33
- 5. **Note dependencies** (imports, external calls)
34
- 6. **Provide line references** for sections SM might want to read deeper
20
+ 1. Read entire file content
21
+ 2. Create condensed summary (2-3 sentences)
22
+ 3. Extract key exports
23
+ 4. Identify patterns
24
+ 5. Note dependencies
25
+ 6. Provide line references
26
+ </gate>
35
27
 
36
28
  ## Output Format
37
29
 
38
- For each file, produce:
39
-
40
30
  ```markdown
41
31
  ### file: {path} ({N} lines)
42
32
 
43
- **Summary:** {2-3 sentence description of what this file does}
33
+ **Summary:** {2-3 sentence description}
44
34
 
45
35
  **Key exports:**
46
- - `FunctionName(params) ReturnType` - brief description
47
- - `TypeName` - brief description
48
- - `ConstantName` - value or purpose
36
+ - `FunctionName(params) ReturnType` - description
37
+ - `TypeName` - description
49
38
 
50
- **Patterns:** {Service pattern with *gorm.DB | React component with hooks | etc.}
39
+ **Patterns:** {Service | Component | Hook | etc.}
51
40
 
52
41
  **Dependencies:**
53
- - Internal: {list of internal imports}
54
- - External: {list of external packages}
42
+ - Internal: {imports}
43
+ - External: {packages}
55
44
 
56
45
  **Lines of interest:**
57
- - L{start}-L{end}: {description of what this section does}
58
46
  - L{start}-L{end}: {description}
59
47
 
60
- **Relevant to story:** {Why this file matters for the story being worked on}
48
+ **Relevant to story:** {why this file matters}
61
49
  ```
62
50
 
63
- ## Example Output
64
-
65
- ```markdown
66
- ### file: API/internal/services/report_metrics_service.go (713 lines)
67
-
68
- **Summary:** This service handles monthly report metrics collection and aggregation. It collects ticket counts, event severity distribution, and escalation metrics for ATPC client reporting. Supports both automated collection and historical data import.
69
-
70
- **Key exports:**
71
- - `NewReportMetricsService(db, logger) *ReportMetricsService` - constructor
72
- - `CollectMetricsForClient(ctx, clientID, month) (*MonthlyReportMetrics, error)` - main collection
73
- - `GetMetrics(ctx, clientID, month) (*MonthlyReportMetrics, error)` - retrieval
74
- - `GetMetricsTrends(ctx, clientID, months) ([]MonthlyReportMetrics, error)` - trend data
75
- - `ImportHistoricalData(ctx, clientID, rows) (*ImportResult, error)` - Excel import
76
-
77
- **Patterns:** Service pattern with *gorm.DB + *zap.Logger, GORM upsert with OnConflict
78
-
79
- **Dependencies:**
80
- - Internal: models.Ticket, models.MonthlyReportMetrics, models.EscalationNotification, models.Client
81
- - External: gorm.io/gorm, go.uber.org/zap, github.com/google/uuid
82
-
83
- **Lines of interest:**
84
- - L33-130: CollectMetricsForClient - main collection logic, calls aggregate* methods
85
- - L289-349: aggregateTicketMetrics - ticket counting by type and status
86
- - L362-401: aggregateEventMetrics - severity distribution counting
87
- - L404-414: aggregateEscalationMetrics - escalation notification counting
88
- - L550-645: ImportHistoricalData - Excel import with date parsing and validation
89
-
90
- **Relevant to story:** Story 32-8 needs to add aggregateHuntMetrics following the pattern of existing aggregate* methods (L289-414). The hunt metrics should be wired into CollectMetricsForClient (L71-98) similar to escalation metrics.
91
- ```
92
-
93
- ## Notes
94
-
95
- - Read FULL file content, not just headers
96
- - Summaries should be detailed enough that SM can create context without re-reading
97
- - Line references are CRITICAL - SM uses these to read specific sections if needed
98
- - The "Relevant to story" section helps SM understand how to use this file
99
- - Group related files by domain (e.g., all report files, all ticket files)
100
-
101
51
  ## Error Handling
102
52
 
103
- If a file doesn't exist or can't be read:
104
53
  ```markdown
105
54
  ### file: {path} (NOT FOUND)
106
55
 
107
- **Error:** File does not exist at specified path
108
- **Suggestion:** Check path or search for similar files with: `ls -la {directory}`
56
+ **Error:** File does not exist
57
+ **Suggestion:** Check path or `ls -la {directory}`
109
58
  ```
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: sm-finish
3
+ description: SM finish preflight - runs parallel checks before SM archives
4
+ tools: Bash, Read
5
+ model: haiku
6
+ ---
7
+
8
+ <info>
9
+ **Story:** {STORY_ID}
10
+ **Jira:** {JIRA_KEY} (optional)
11
+ **Repos:** {REPOS}
12
+ **Branch:** {BRANCH}
13
+ </info>
14
+
15
+ <critical>
16
+ Run ALL checks in parallel, then aggregate results.
17
+ </critical>
18
+
19
+ <gate>
20
+ ## Parallel Checks
21
+
22
+ 1. **PR Status:** `gh pr view {BRANCH} --json state,merged,mergeable,url`
23
+ 2. **Lint:** `npm run lint`
24
+ 3. **Jira Status:** `/jira view {JIRA_KEY}` → `jira issue view {JIRA_KEY} --plain` (skip if no key)
25
+ 4. **Acceptance Criteria:** grep checkboxes from session file
26
+ 5. **Cleanup:** remove temp files from `.session/`
27
+ </gate>
28
+
29
+ ## Jira Transition
30
+
31
+ <critical>
32
+ The Jira transition to Done is handled by `/story finish` (finish-story.sh).
33
+ Do NOT transition Jira here - that would duplicate the finish script's work.
34
+ This subagent only performs preflight checks and assessment.
35
+ </critical>
36
+
37
+ **Preflight only verifies:** Jira is ready for transition (not blocked, not already Done).
38
+
39
+ ## Readiness Report
40
+
41
+ ```json
42
+ {
43
+ "pr_status": "merged|open|NO_PR",
44
+ "lint_status": "clean|failed",
45
+ "jira_current": "In Progress|Done|N/A",
46
+ "acceptance_criteria": { "total": N, "checked": N },
47
+ "ready_to_finish": true|false,
48
+ "issues": [],
49
+ "warnings": []
50
+ }
51
+ ```
52
+
53
+ <info>
54
+ **ready_to_finish = true when:**
55
+ - PR merged (or acceptable for trivial)
56
+ - Lint clean
57
+ - All ACs checked
58
+ - No critical issues
59
+
60
+ **Jira skipped:** Set `jira_skipped: true` if no valid key.
61
+ </info>
@@ -4,56 +4,44 @@ description: Complete handoff bookkeeping when SM work is done
4
4
  tools: Bash, Read, Edit
5
5
  model: haiku
6
6
  ---
7
- You are a workflow handoff assistant. Complete the handoff for story {STORY_ID}.
8
-
9
- ## Handoff Details
10
- - From: SM
11
- - To: {NEXT_AGENT} (TEA or Dev depending on workflow)
12
- - Repos: {REPOS}
13
- - Session file: .session/{STORY_ID}-session.md
14
- - Project root: $CLAUDE_PROJECT_DIR (set by SessionStart hook)
15
-
16
- ## Work Summary
17
- - Story {STORY_ID} selected: {TITLE}
18
- - {AC_COUNT} acceptance criteria defined
19
- - Feature branch: {BRANCH_NAME}
20
- - Jira: {JIRA_KEY} claimed
21
-
22
- ## Placeholders
23
- - `{NOW}` - ISO 8601 timestamp (e.g., "2026-01-13T14:30:00Z")
24
- - `{NEXT_PHASE}` - Next phase name (e.g., "tea" or "dev" for trivial stories)
25
-
26
- ## Turn Efficiency
27
-
28
- See `shared-agent-behavior.md` → Turn Efficiency Protocol for core patterns.
29
-
30
- ## CRITICAL: Do NOT Mark ACs Complete
31
7
 
8
+ <critical>
32
9
  **NEVER mark acceptance criteria as complete.** This subagent only:
33
10
  1. Verifies prerequisites exist
34
11
  2. Updates the Workflow Tracking section for phase transition
35
12
 
36
- Acceptance criteria are marked complete ONLY by the agent that actually does the work,
37
- after verifying the work is done. SM-handoff is a bookkeeping subagent - it records
38
- transitions, it does not claim work was completed.
13
+ AC checkboxes are marked ONLY by the agent that does the work.
14
+ </critical>
15
+
16
+ <critical>
17
+ **Subagent output is NOT visible to Cyclist.** Tool results are not parsed for markers.
18
+ You MUST return an `AGENT_COMMAND` block with a pre-rendered `marker` string.
19
+ The calling agent outputs the `marker` verbatim - no parsing or mapping required.
20
+ </critical>
21
+
22
+ <info>
23
+ **From:** SM
24
+ **To:** {NEXT_AGENT} (TEA or Dev)
25
+ **Session:** `.session/{STORY_ID}-session.md`
26
+ </info>
39
27
 
40
- ## Execute Handoff Checklist
28
+ <gate>
29
+ ## Handoff Checklist
41
30
 
42
- 1. Verify session file exists with story context
43
- 2. Verify acceptance criteria are defined (count them, don't mark them)
44
- 3. Verify feature branches created
45
- 4. Verify Jira story claimed (if applicable)
46
- 5. **Update Workflow Tracking section ONLY:**
47
- - Update `**Phase:**` from `setup` to `{NEXT_PHASE}`
48
- - Update `**Phase Started:**` to `{NOW}`
49
- - Update Phase History table:
50
- - Set setup row's Ended to `{NOW}` and calculate Duration
51
- - Add new row for `{NEXT_PHASE}` with Started = `{NOW}`
52
- 6. Report status summary (do NOT modify acceptance criteria checkboxes)
31
+ 1. Session file exists with story context
32
+ 2. Acceptance criteria defined (count, don't mark)
33
+ 3. Feature branches created
34
+ 4. Jira story claimed (if applicable)
35
+ 5. Update Workflow Tracking section:
36
+ - `**Phase:**` `{NEXT_PHASE}`
37
+ - `**Phase Started:**` `{NOW}`
38
+ - Add Phase History row
39
+ 6. Report status summary
40
+ </gate>
53
41
 
54
- ### Phase Transition Update
42
+ ## Phase Transition Update
55
43
 
56
- Edit the `## Workflow Tracking` section:
44
+ Edit `## Workflow Tracking`:
57
45
 
58
46
  ```markdown
59
47
  ## Workflow Tracking
@@ -64,34 +52,94 @@ Edit the `## Workflow Tracking` section:
64
52
  ### Phase History
65
53
  | Phase | Started | Ended | Duration |
66
54
  |-------|---------|-------|----------|
67
- | sm | {SM_STARTED} | {NOW} | {DURATION} |
55
+ | setup | {SM_STARTED} | {NOW} | {DURATION} |
68
56
  | {NEXT_PHASE} | {NOW} | - | - |
69
57
  ```
70
58
 
71
- **Duration calculation:** Subtract sm Started from {NOW}, format as `Xm` or `Xh Ym`.
59
+ **Duration:** Subtract SM Started from {NOW}, format as `Xm` or `Xh Ym`.
72
60
 
73
- ## Step 7: Emit Cyclist Handoff Marker
61
+ ## Generate AGENT_COMMAND Block
74
62
 
75
- **CRITICAL:** Your final output MUST include this marker for Cyclist to show the handoff prompt:
63
+ Use the `handoff-marker.sh` script to generate the complete AGENT_COMMAND block:
76
64
 
65
+ ```bash
66
+ $CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/core/handoff-marker.sh {NEXT_AGENT}
77
67
  ```
78
- <!-- CYCLIST:HANDOFF:/{NEXT_AGENT} -->
79
- ```
80
68
 
81
- Where `{NEXT_AGENT}` is:
82
- - `tea` for standard stories (3+ points)
83
- - `dev` for trivial stories (1-2 points)
69
+ The script handles IS_CYCLIST and USE_TIREPUMP detection automatically.
70
+ Output the script result verbatim.
71
+
72
+ ## Output Format
84
73
 
85
- This marker is parsed by Cyclist's quick-actions system to present a handoff button to the user. Without it, the user won't see the prompt to invoke the next agent.
74
+ Your output MUST end with an `AGENT_COMMAND` block with a pre-rendered `marker` string.
75
+ The calling agent outputs the `marker` verbatim - no parsing or mapping required.
86
76
 
87
- **Example final output:**
88
77
  ```
89
78
  ## Handoff Complete
90
79
 
91
- Story 35-1 ready for TEA phase.
80
+ Story {STORY_ID} ready for {NEXT_AGENT} phase.
92
81
  - Session file updated
93
82
  - Branch verified
94
83
  - Jira claimed
95
84
 
96
- <!-- CYCLIST:HANDOFF:/tea -->
85
+ ---
86
+ AGENT_COMMAND:
87
+ marker: "{MARKER_STRING}"
88
+ fallback: "Run `/{NEXT_AGENT}` to continue"
89
+ ---
90
+ ```
91
+
92
+ ### Marker String Generation
93
+
94
+ The `handoff-marker.sh` script generates the complete AGENT_COMMAND block including the correct marker:
95
+
96
+ ```bash
97
+ $CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/core/handoff-marker.sh {NEXT_AGENT}
98
+ ```
99
+
100
+ **Output the script result verbatim.** No manual marker lookup required.
101
+
102
+ ### Example Output (Cyclist, no TirePump)
103
+
97
104
  ```
105
+ ## Handoff Complete
106
+
107
+ Story MSSCI-12274 ready for TEA phase.
108
+ - Session file updated with phase transition (setup → test)
109
+ - Branch verified: `feat/MSSCI-12274-image-queue-support`
110
+ - Acceptance criteria confirmed: 7 criteria defined
111
+
112
+ ---
113
+ AGENT_COMMAND:
114
+ marker: "<!-- CYCLIST:HANDOFF:/tea -->"
115
+ fallback: "Run `/tea` to continue"
116
+ ---
117
+ ```
118
+
119
+ ### Example Output (Not Cyclist)
120
+
121
+ ```
122
+ ## Handoff Complete
123
+
124
+ Story MSSCI-12274 ready for TEA phase.
125
+ - Session file updated with phase transition (setup → test)
126
+ - Branch verified: `feat/MSSCI-12274-image-queue-support`
127
+ - Acceptance criteria confirmed: 7 criteria defined
128
+
129
+ ---
130
+ AGENT_COMMAND:
131
+ marker: ""
132
+ fallback: "Run `/tea` to continue"
133
+ ---
134
+ ```
135
+
136
+ ## Calling Agent Instructions
137
+
138
+ When you receive this subagent's output, parse the `AGENT_COMMAND` block and:
139
+
140
+ 1. Output the `marker` string verbatim (if non-empty)
141
+ 2. Output the `fallback` message
142
+
143
+ **Simple rule: Output `marker` then `fallback`. That's it.**
144
+
145
+ **The marker MUST appear in the calling agent's direct text output, not in a tool result.**