@pennyfarthing/core 7.0.2 → 7.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/LICENSE +14 -0
  2. package/README.md +2 -2
  3. package/package.json +11 -10
  4. package/packages/core/dist/cli/commands/cyclist.d.ts +2 -2
  5. package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -1
  6. package/packages/core/dist/cli/commands/cyclist.js +8 -9
  7. package/packages/core/dist/cli/commands/cyclist.js.map +1 -1
  8. package/packages/core/dist/cli/commands/cyclist.test.js +6 -4
  9. package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -1
  10. package/packages/core/dist/cli/commands/init.js +4 -3
  11. package/packages/core/dist/cli/commands/init.js.map +1 -1
  12. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  13. package/packages/core/dist/cli/commands/update.js +15 -139
  14. package/packages/core/dist/cli/commands/update.js.map +1 -1
  15. package/packages/core/dist/cli/cyclist-migration.test.js +4 -3
  16. package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -1
  17. package/packages/core/dist/cli/utils/constants.d.ts +7 -1
  18. package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
  19. package/packages/core/dist/cli/utils/constants.js +4 -2
  20. package/packages/core/dist/cli/utils/constants.js.map +1 -1
  21. package/packages/core/dist/cli/utils/node-modules.d.ts.map +1 -1
  22. package/packages/core/dist/cli/utils/node-modules.js +2 -1
  23. package/packages/core/dist/cli/utils/node-modules.js.map +1 -1
  24. package/packages/core/dist/cli/utils/themes.d.ts +1 -4
  25. package/packages/core/dist/cli/utils/themes.d.ts.map +1 -1
  26. package/packages/core/dist/cli/utils/themes.js +2 -22
  27. package/packages/core/dist/cli/utils/themes.js.map +1 -1
  28. package/packages/core/dist/cli/utils/themes.test.d.ts +3 -3
  29. package/packages/core/dist/cli/utils/themes.test.js +16 -13
  30. package/packages/core/dist/cli/utils/themes.test.js.map +1 -1
  31. package/packages/core/dist/cli/workspace.test.js +11 -9
  32. package/packages/core/dist/cli/workspace.test.js.map +1 -1
  33. package/packages/core/dist/index.d.ts +1 -0
  34. package/packages/core/dist/index.d.ts.map +1 -1
  35. package/packages/core/dist/index.js +10 -0
  36. package/packages/core/dist/index.js.map +1 -1
  37. package/packages/core/dist/jira/jira-epic-creation.d.ts +109 -0
  38. package/packages/core/dist/jira/jira-epic-creation.d.ts.map +1 -0
  39. package/packages/core/dist/jira/jira-epic-creation.js +253 -0
  40. package/packages/core/dist/jira/jira-epic-creation.js.map +1 -0
  41. package/packages/core/dist/jira/jira-epic-creation.test.d.ts +16 -0
  42. package/packages/core/dist/jira/jira-epic-creation.test.d.ts.map +1 -0
  43. package/packages/core/dist/jira/jira-epic-creation.test.js +387 -0
  44. package/packages/core/dist/jira/jira-epic-creation.test.js.map +1 -0
  45. package/packages/core/dist/jira/jira-sprint-sync.d.ts +247 -0
  46. package/packages/core/dist/jira/jira-sprint-sync.d.ts.map +1 -0
  47. package/packages/core/dist/jira/jira-sprint-sync.js +670 -0
  48. package/packages/core/dist/jira/jira-sprint-sync.js.map +1 -0
  49. package/packages/core/dist/jira/jira-sprint-sync.test.d.ts +16 -0
  50. package/packages/core/dist/jira/jira-sprint-sync.test.d.ts.map +1 -0
  51. package/packages/core/dist/jira/jira-sprint-sync.test.js +845 -0
  52. package/packages/core/dist/jira/jira-sprint-sync.test.js.map +1 -0
  53. package/packages/core/dist/scripts/generate-spider.d.ts +11 -1
  54. package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -1
  55. package/packages/core/dist/scripts/generate-spider.js +24 -1
  56. package/packages/core/dist/scripts/generate-spider.js.map +1 -1
  57. package/packages/core/dist/scripts/generate-spider.test.js +6 -4
  58. package/packages/core/dist/scripts/generate-spider.test.js.map +1 -1
  59. package/packages/core/dist/workflow/gate-handler.d.ts +94 -0
  60. package/packages/core/dist/workflow/gate-handler.d.ts.map +1 -0
  61. package/packages/core/dist/workflow/gate-handler.js +189 -0
  62. package/packages/core/dist/workflow/gate-handler.js.map +1 -0
  63. package/packages/core/dist/workflow/gate-handler.test.d.ts +14 -0
  64. package/packages/core/dist/workflow/gate-handler.test.d.ts.map +1 -0
  65. package/packages/core/dist/workflow/gate-handler.test.js +543 -0
  66. package/packages/core/dist/workflow/gate-handler.test.js.map +1 -0
  67. package/packages/core/dist/workflow/generic-handoff.d.ts +46 -0
  68. package/packages/core/dist/workflow/generic-handoff.d.ts.map +1 -1
  69. package/packages/core/dist/workflow/generic-handoff.js +53 -0
  70. package/packages/core/dist/workflow/generic-handoff.js.map +1 -1
  71. package/packages/core/dist/workflow/generic-handoff.test.js +2 -2
  72. package/packages/core/dist/workflow/generic-handoff.test.js.map +1 -1
  73. package/packages/core/dist/workflow/handoff.d.ts +281 -0
  74. package/packages/core/dist/workflow/handoff.d.ts.map +1 -0
  75. package/packages/core/dist/workflow/handoff.js +411 -0
  76. package/packages/core/dist/workflow/handoff.js.map +1 -0
  77. package/packages/core/dist/workflow/handoff.test.d.ts +21 -0
  78. package/packages/core/dist/workflow/handoff.test.d.ts.map +1 -0
  79. package/packages/core/dist/workflow/handoff.test.js +499 -0
  80. package/packages/core/dist/workflow/handoff.test.js.map +1 -0
  81. package/packages/core/dist/workflow/index.d.ts +16 -0
  82. package/packages/core/dist/workflow/index.d.ts.map +1 -0
  83. package/packages/core/dist/workflow/index.js +24 -0
  84. package/packages/core/dist/workflow/index.js.map +1 -0
  85. package/packages/core/dist/workflow/session-state.d.ts +92 -0
  86. package/packages/core/dist/workflow/session-state.d.ts.map +1 -0
  87. package/packages/core/dist/workflow/session-state.js +198 -0
  88. package/packages/core/dist/workflow/session-state.js.map +1 -0
  89. package/packages/core/dist/workflow/session-state.test.d.ts +8 -0
  90. package/packages/core/dist/workflow/session-state.test.d.ts.map +1 -0
  91. package/packages/core/dist/workflow/session-state.test.js +551 -0
  92. package/packages/core/dist/workflow/session-state.test.js.map +1 -0
  93. package/packages/core/dist/workflow/sm-subagents.test.d.ts +2 -2
  94. package/packages/core/dist/workflow/sm-subagents.test.js +6 -6
  95. package/packages/core/dist/workflow/sm-subagents.test.js.map +1 -1
  96. package/packages/core/dist/workflow/step-parser.d.ts +45 -0
  97. package/packages/core/dist/workflow/step-parser.d.ts.map +1 -0
  98. package/packages/core/dist/workflow/step-parser.js +147 -0
  99. package/packages/core/dist/workflow/step-parser.js.map +1 -0
  100. package/packages/core/dist/workflow/step-parser.test.d.ts +14 -0
  101. package/packages/core/dist/workflow/step-parser.test.d.ts.map +1 -0
  102. package/packages/core/dist/workflow/step-parser.test.js +470 -0
  103. package/packages/core/dist/workflow/step-parser.test.js.map +1 -0
  104. package/packages/core/dist/workflow/trimodal.d.ts +86 -0
  105. package/packages/core/dist/workflow/trimodal.d.ts.map +1 -0
  106. package/packages/core/dist/workflow/trimodal.js +118 -0
  107. package/packages/core/dist/workflow/trimodal.js.map +1 -0
  108. package/packages/core/dist/workflow/trimodal.test.d.ts +11 -0
  109. package/packages/core/dist/workflow/trimodal.test.d.ts.map +1 -0
  110. package/packages/core/dist/workflow/trimodal.test.js +395 -0
  111. package/packages/core/dist/workflow/trimodal.test.js.map +1 -0
  112. package/packages/core/dist/workflow/variable-resolver.d.ts +67 -0
  113. package/packages/core/dist/workflow/variable-resolver.d.ts.map +1 -0
  114. package/packages/core/dist/workflow/variable-resolver.js +156 -0
  115. package/packages/core/dist/workflow/variable-resolver.js.map +1 -0
  116. package/packages/core/dist/workflow/variable-resolver.test.d.ts +14 -0
  117. package/packages/core/dist/workflow/variable-resolver.test.d.ts.map +1 -0
  118. package/packages/core/dist/workflow/variable-resolver.test.js +400 -0
  119. package/packages/core/dist/workflow/variable-resolver.test.js.map +1 -0
  120. package/packages/core/dist/workflow/workflow-executor.d.ts +163 -0
  121. package/packages/core/dist/workflow/workflow-executor.d.ts.map +1 -0
  122. package/packages/core/dist/workflow/workflow-executor.js +197 -0
  123. package/packages/core/dist/workflow/workflow-executor.js.map +1 -0
  124. package/packages/core/dist/workflow/workflow-executor.test.d.ts +8 -0
  125. package/packages/core/dist/workflow/workflow-executor.test.d.ts.map +1 -0
  126. package/packages/core/dist/workflow/workflow-executor.test.js +444 -0
  127. package/packages/core/dist/workflow/workflow-executor.test.js.map +1 -0
  128. package/packages/core/dist/workflow/workflow-loader.test.js +5 -5
  129. package/packages/core/dist/workflow/workflow-loader.test.js.map +1 -1
  130. package/packages/core/dist/workflow/workflow-migration.test.js +8 -9
  131. package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -1
  132. package/packages/core/dist/workflow/workflow-permissions.d.ts +55 -0
  133. package/packages/core/dist/workflow/workflow-permissions.d.ts.map +1 -0
  134. package/packages/core/dist/workflow/workflow-permissions.js +64 -0
  135. package/packages/core/dist/workflow/workflow-permissions.js.map +1 -0
  136. package/packages/core/dist/workflow/workflow-permissions.test.d.ts +15 -0
  137. package/packages/core/dist/workflow/workflow-permissions.test.d.ts.map +1 -0
  138. package/packages/core/dist/workflow/workflow-permissions.test.js +301 -0
  139. package/packages/core/dist/workflow/workflow-permissions.test.js.map +1 -0
  140. package/packages/core/dist/workflow/workflow-schema.d.ts +61 -2
  141. package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
  142. package/packages/core/dist/workflow/workflow-schema.js +293 -69
  143. package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
  144. package/packages/core/dist/workflow/workflow-schema.test.js +6 -6
  145. package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -1
  146. package/packages/core/dist/workflow/workflow-stepped-schema.test.d.ts +18 -0
  147. package/packages/core/dist/workflow/workflow-stepped-schema.test.d.ts.map +1 -0
  148. package/packages/core/dist/workflow/workflow-stepped-schema.test.js +608 -0
  149. package/packages/core/dist/workflow/workflow-stepped-schema.test.js.map +1 -0
  150. package/pennyfarthing-dist/agents/README.md +63 -134
  151. package/pennyfarthing-dist/agents/architect.md +18 -10
  152. package/pennyfarthing-dist/agents/dev.md +47 -32
  153. package/pennyfarthing-dist/agents/devops.md +18 -9
  154. package/pennyfarthing-dist/agents/handoff.md +289 -0
  155. package/pennyfarthing-dist/agents/orchestrator.md +44 -22
  156. package/pennyfarthing-dist/agents/pm.md +13 -8
  157. package/pennyfarthing-dist/agents/reviewer-preflight.md +42 -128
  158. package/pennyfarthing-dist/agents/reviewer.md +104 -57
  159. package/pennyfarthing-dist/agents/sm-file-summary.md +24 -75
  160. package/pennyfarthing-dist/agents/sm-finish.md +61 -0
  161. package/pennyfarthing-dist/agents/sm-handoff.md +102 -54
  162. package/pennyfarthing-dist/agents/sm-setup.md +174 -0
  163. package/pennyfarthing-dist/agents/sm.md +223 -100
  164. package/pennyfarthing-dist/agents/tea.md +42 -34
  165. package/pennyfarthing-dist/agents/tech-writer.md +74 -6
  166. package/pennyfarthing-dist/agents/testing-runner.md +78 -360
  167. package/pennyfarthing-dist/agents/ux-designer.md +80 -7
  168. package/pennyfarthing-dist/agents/workflow-status-check.md +35 -299
  169. package/pennyfarthing-dist/commands/architect.md +2 -2
  170. package/pennyfarthing-dist/commands/close-epic.md +5 -2
  171. package/pennyfarthing-dist/commands/create-branches-from-story.md +7 -23
  172. package/pennyfarthing-dist/commands/dev.md +2 -2
  173. package/pennyfarthing-dist/commands/devops.md +3 -3
  174. package/pennyfarthing-dist/commands/git-cleanup.md +5 -5
  175. package/pennyfarthing-dist/commands/health-check.md +1 -1
  176. package/pennyfarthing-dist/commands/list-themes.md +7 -3
  177. package/pennyfarthing-dist/commands/orchestrator.md +2 -2
  178. package/pennyfarthing-dist/commands/parallel-work.md +4 -4
  179. package/pennyfarthing-dist/commands/pm.md +2 -2
  180. package/pennyfarthing-dist/commands/prime.md +7 -7
  181. package/pennyfarthing-dist/commands/release.md +1 -1
  182. package/pennyfarthing-dist/commands/repo-status.md +2 -2
  183. package/pennyfarthing-dist/commands/retro.md +2 -2
  184. package/pennyfarthing-dist/commands/reviewer.md +2 -2
  185. package/pennyfarthing-dist/commands/set-theme.md +5 -1
  186. package/pennyfarthing-dist/commands/sm.md +2 -2
  187. package/pennyfarthing-dist/commands/start-epic.md +26 -14
  188. package/pennyfarthing-dist/commands/sync-epic-to-jira.md +8 -8
  189. package/pennyfarthing-dist/commands/sync-work-with-sprint.md +1 -4
  190. package/pennyfarthing-dist/commands/tea.md +2 -2
  191. package/pennyfarthing-dist/commands/tech-writer.md +2 -2
  192. package/pennyfarthing-dist/commands/ux-designer.md +3 -3
  193. package/pennyfarthing-dist/commands/work.md +15 -4
  194. package/pennyfarthing-dist/commands/workflow.md +21 -0
  195. package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +15 -15
  196. package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +1 -1
  197. package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +4 -4
  198. package/pennyfarthing-dist/guides/agent-behavior.md +238 -0
  199. package/pennyfarthing-dist/guides/agent-template-strategic.md +2 -2
  200. package/pennyfarthing-dist/guides/agent-template-tactical.md +4 -4
  201. package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +1 -1
  202. package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +17 -17
  203. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +8 -8
  204. package/pennyfarthing-dist/guides/workflow-schema.md +62 -0
  205. package/pennyfarthing-dist/guides/worktree-mode.md +5 -5
  206. package/pennyfarthing-dist/personas/themes/1984.yaml +1 -1
  207. package/pennyfarthing-dist/personas/themes/a-team.yaml +1 -1
  208. package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +1 -1
  209. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +1 -1
  210. package/pennyfarthing-dist/personas/themes/all-stars.yaml +1 -1
  211. package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +1 -1
  212. package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +1 -1
  213. package/pennyfarthing-dist/personas/themes/arcane.yaml +1 -1
  214. package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +1 -1
  215. package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +1 -1
  216. package/pennyfarthing-dist/personas/themes/babylon-5.yaml +1 -1
  217. package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +1 -1
  218. package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +1 -1
  219. package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +2 -2
  220. package/pennyfarthing-dist/personas/themes/black-sails.yaml +1 -1
  221. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +1 -1
  222. package/pennyfarthing-dist/personas/themes/bobiverse.yaml +1 -1
  223. package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +1 -1
  224. package/pennyfarthing-dist/personas/themes/catch-22.yaml +1 -1
  225. package/pennyfarthing-dist/personas/themes/classical-composers.yaml +1 -1
  226. package/pennyfarthing-dist/personas/themes/control.yaml +1 -1
  227. package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +1 -1
  228. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +1 -1
  229. package/pennyfarthing-dist/personas/themes/deadwood.yaml +2 -2
  230. package/pennyfarthing-dist/personas/themes/discworld.yaml +2 -2
  231. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +1 -1
  232. package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +1 -1
  233. package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +1 -1
  234. package/pennyfarthing-dist/personas/themes/firefly.yaml +1 -1
  235. package/pennyfarthing-dist/personas/themes/foundation.yaml +1 -1
  236. package/pennyfarthing-dist/personas/themes/futurama.yaml +1 -1
  237. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +2 -2
  238. package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +1 -1
  239. package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +1 -1
  240. package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +1 -1
  241. package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +1 -1
  242. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +2 -2
  243. package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +1 -1
  244. package/pennyfarthing-dist/personas/themes/historical-figures.yaml +1 -1
  245. package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +1 -1
  246. package/pennyfarthing-dist/personas/themes/house-md.yaml +1 -1
  247. package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +1 -1
  248. package/pennyfarthing-dist/personas/themes/jane-austen.yaml +1 -1
  249. package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +1 -1
  250. package/pennyfarthing-dist/personas/themes/justified.yaml +1 -1
  251. package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +1 -1
  252. package/pennyfarthing-dist/personas/themes/les-miserables.yaml +1 -1
  253. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +1 -1
  254. package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +1 -1
  255. package/pennyfarthing-dist/personas/themes/mad-men.yaml +1 -1
  256. package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +1 -1
  257. package/pennyfarthing-dist/personas/themes/mash.yaml +69 -66
  258. package/pennyfarthing-dist/personas/themes/mass-effect.yaml +1 -1
  259. package/pennyfarthing-dist/personas/themes/military-commanders.yaml +1 -1
  260. package/pennyfarthing-dist/personas/themes/moby-dick.yaml +1 -1
  261. package/pennyfarthing-dist/personas/themes/monty-python.yaml +1 -1
  262. package/pennyfarthing-dist/personas/themes/neuromancer.yaml +1 -1
  263. package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +1 -1
  264. package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +1 -1
  265. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +1 -1
  266. package/pennyfarthing-dist/personas/themes/rome.yaml +1 -1
  267. package/pennyfarthing-dist/personas/themes/russian-masters.yaml +1 -1
  268. package/pennyfarthing-dist/personas/themes/sandman.yaml +1 -1
  269. package/pennyfarthing-dist/personas/themes/shakespeare.yaml +1 -1
  270. package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +1 -1
  271. package/pennyfarthing-dist/personas/themes/snow-crash.yaml +1 -1
  272. package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +1 -1
  273. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +1 -1
  274. package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +1 -1
  275. package/pennyfarthing-dist/personas/themes/star-wars.yaml +1 -1
  276. package/pennyfarthing-dist/personas/themes/superfriends.yaml +1 -1
  277. package/pennyfarthing-dist/personas/themes/the-americans.yaml +1 -1
  278. package/pennyfarthing-dist/personas/themes/the-crown.yaml +1 -1
  279. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +1 -1
  280. package/pennyfarthing-dist/personas/themes/the-good-place.yaml +1 -1
  281. package/pennyfarthing-dist/personas/themes/the-office.yaml +1 -1
  282. package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +1 -1
  283. package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +1 -1
  284. package/pennyfarthing-dist/personas/themes/the-wire.yaml +1 -1
  285. package/pennyfarthing-dist/personas/themes/the-witcher.yaml +1 -1
  286. package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +1 -1
  287. package/pennyfarthing-dist/personas/themes/west-wing.yaml +1 -1
  288. package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +1 -1
  289. package/pennyfarthing-dist/scripts/README.md +68 -0
  290. package/pennyfarthing-dist/scripts/core/README.md +26 -0
  291. package/pennyfarthing-dist/scripts/{agent-session.sh → core/agent-session.sh} +34 -23
  292. package/pennyfarthing-dist/scripts/{check-context.sh → core/check-context.sh} +93 -37
  293. package/pennyfarthing-dist/scripts/core/handoff-marker.sh +90 -0
  294. package/pennyfarthing-dist/scripts/core/prime.sh +136 -0
  295. package/pennyfarthing-dist/scripts/core/run.sh +75 -0
  296. package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +21 -0
  297. package/pennyfarthing-dist/scripts/git/README.md +25 -0
  298. package/pennyfarthing-dist/scripts/{utils → git}/create-feature-branches.sh +11 -15
  299. package/pennyfarthing-dist/scripts/{utils → git}/git-status-all.sh +1 -1
  300. package/pennyfarthing-dist/scripts/{install-git-hooks.sh → git/install-git-hooks.sh} +0 -0
  301. package/pennyfarthing-dist/scripts/{release.sh → git/release.sh} +0 -0
  302. package/pennyfarthing-dist/scripts/{worktree-manager.sh → git/worktree-manager.sh} +0 -4
  303. package/pennyfarthing-dist/scripts/hooks/README.md +32 -0
  304. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +3 -4
  305. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +1 -2
  306. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -0
  307. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +1 -1
  308. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -0
  309. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -0
  310. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -0
  311. package/pennyfarthing-dist/scripts/hooks/session-start.sh +2 -3
  312. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +2 -3
  313. package/pennyfarthing-dist/scripts/jira/README.md +33 -0
  314. package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +101 -0
  315. package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +97 -0
  316. package/pennyfarthing-dist/scripts/jira/jira-bidirectional-sync.mjs +327 -0
  317. package/pennyfarthing-dist/scripts/jira/jira-bidirectional-sync.test.mjs +503 -0
  318. package/pennyfarthing-dist/scripts/{utils → jira}/jira-claim-story.sh +8 -6
  319. package/pennyfarthing-dist/scripts/{utils/jira → jira}/jira-lib.mjs +10 -10
  320. package/pennyfarthing-dist/scripts/{utils → jira}/jira-lib.sh +18 -17
  321. package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +266 -0
  322. package/pennyfarthing-dist/scripts/{utils/jira → jira}/jira-sync-story.mjs +14 -14
  323. package/pennyfarthing-dist/scripts/{utils → jira}/jira-sync-story.sh +0 -0
  324. package/pennyfarthing-dist/scripts/{utils/jira → jira}/jira-sync.mjs +4 -4
  325. package/pennyfarthing-dist/scripts/{utils → jira}/jira-sync.sh +0 -0
  326. package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +104 -0
  327. package/pennyfarthing-dist/scripts/{utils → jira}/sync-epic-to-jira.sh +1 -1
  328. package/pennyfarthing-dist/scripts/lib/README.md +29 -0
  329. package/pennyfarthing-dist/scripts/{utils → lib}/background-tasks.sh +1 -1
  330. package/pennyfarthing-dist/scripts/{utils → lib}/checkpoint.sh +0 -0
  331. package/pennyfarthing-dist/scripts/{utils → lib}/common.sh +1 -1
  332. package/pennyfarthing-dist/scripts/{utils → lib}/file-lock.sh +0 -0
  333. package/pennyfarthing-dist/scripts/{utils → lib}/find-root.sh +7 -5
  334. package/pennyfarthing-dist/scripts/{utils → lib}/logging.sh +0 -0
  335. package/pennyfarthing-dist/scripts/{utils → lib}/retry.sh +0 -0
  336. package/pennyfarthing-dist/scripts/misc/README.md +44 -0
  337. package/pennyfarthing-dist/scripts/{add-short-names.mjs → misc/add-short-names.mjs} +0 -0
  338. package/pennyfarthing-dist/scripts/misc/backlog.sh +91 -0
  339. package/pennyfarthing-dist/scripts/{utils → misc}/check-status.sh +4 -8
  340. package/pennyfarthing-dist/scripts/{deploy.sh → misc/deploy.sh} +0 -0
  341. package/pennyfarthing-dist/scripts/{doctor-dogfood.sh → misc/doctor-dogfood.sh} +2 -5
  342. package/pennyfarthing-dist/scripts/{utils → misc}/find-related-work.sh +0 -0
  343. package/pennyfarthing-dist/scripts/{utils → misc}/generate-skill-docs.sh +0 -0
  344. package/pennyfarthing-dist/scripts/{utils → misc}/log-skill-usage.sh +0 -0
  345. package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.mjs +474 -0
  346. package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +9 -0
  347. package/pennyfarthing-dist/scripts/{utils → misc}/repo-scan.sh +0 -0
  348. package/pennyfarthing-dist/scripts/{repo-utils.sh → misc/repo-utils.sh} +2 -2
  349. package/pennyfarthing-dist/scripts/{run-ci.sh → misc/run-ci.sh} +0 -0
  350. package/pennyfarthing-dist/scripts/{utils → misc}/run-timestamp.sh +0 -0
  351. package/pennyfarthing-dist/scripts/{utils → misc}/session-cleanup.sh +0 -0
  352. package/pennyfarthing-dist/scripts/{utils → misc}/skill-usage-report.sh +0 -0
  353. package/pennyfarthing-dist/scripts/{statusline.sh → misc/statusline.sh} +2 -7
  354. package/pennyfarthing-dist/scripts/{uninstall.sh → misc/uninstall.sh} +4 -5
  355. package/pennyfarthing-dist/scripts/{utils → misc}/validate-subagent-frontmatter.sh +3 -3
  356. package/pennyfarthing-dist/scripts/sprint/README.md +29 -0
  357. package/pennyfarthing-dist/scripts/sprint/archive-story.sh +135 -0
  358. package/pennyfarthing-dist/scripts/sprint/available-stories.sh +97 -0
  359. package/pennyfarthing-dist/scripts/sprint/check-story.sh +164 -0
  360. package/pennyfarthing-dist/scripts/sprint/get-epic-field.sh +58 -0
  361. package/pennyfarthing-dist/scripts/sprint/get-story-field.sh +69 -0
  362. package/pennyfarthing-dist/scripts/sprint/list-future.sh +151 -0
  363. package/pennyfarthing-dist/scripts/sprint/new-sprint.sh +116 -0
  364. package/pennyfarthing-dist/scripts/sprint/promote-epic.sh +164 -0
  365. package/pennyfarthing-dist/scripts/{utils → sprint}/sprint-common.sh +135 -0
  366. package/pennyfarthing-dist/scripts/sprint/sprint-info.sh +39 -0
  367. package/pennyfarthing-dist/scripts/{utils → sprint}/sprint-metrics.sh +0 -0
  368. package/pennyfarthing-dist/scripts/sprint/sprint-status.sh +134 -0
  369. package/pennyfarthing-dist/scripts/story/README.md +23 -0
  370. package/pennyfarthing-dist/scripts/story/create-story.sh +159 -0
  371. package/pennyfarthing-dist/scripts/story/size-story.sh +198 -0
  372. package/pennyfarthing-dist/scripts/story/story-template.sh +162 -0
  373. package/pennyfarthing-dist/scripts/test/README.md +23 -0
  374. package/pennyfarthing-dist/scripts/{utils → test}/swebench-judge.py +0 -0
  375. package/pennyfarthing-dist/scripts/test/test-cache.sh +165 -0
  376. package/pennyfarthing-dist/scripts/{utils → test}/test-setup.sh +5 -5
  377. package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -0
  378. package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +515 -0
  379. package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +599 -0
  380. package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +332 -0
  381. package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +573 -0
  382. package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +859 -0
  383. package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +662 -0
  384. package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +589 -0
  385. package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +7 -9
  386. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +18 -18
  387. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +10 -10
  388. package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +1 -1
  389. package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -0
  390. package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +647 -0
  391. package/pennyfarthing-dist/scripts/theme/README.md +22 -0
  392. package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.sh +203 -0
  393. package/pennyfarthing-dist/scripts/theme/list-themes.sh +73 -0
  394. package/pennyfarthing-dist/scripts/theme/update-theme-tiers.sh +97 -0
  395. package/pennyfarthing-dist/scripts/workflow/README.md +28 -0
  396. package/pennyfarthing-dist/scripts/{check.sh → workflow/check.sh} +0 -0
  397. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +159 -0
  398. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +228 -0
  399. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +91 -0
  400. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +163 -0
  401. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +138 -0
  402. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +256 -0
  403. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +167 -0
  404. package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +6 -0
  405. package/pennyfarthing-dist/skills/changelog/SKILL.md +2 -2
  406. package/pennyfarthing-dist/skills/code-review/SKILL.md +3 -3
  407. package/pennyfarthing-dist/skills/context-engineering/SKILL.md +6 -0
  408. package/pennyfarthing-dist/skills/cyclist/SKILL.md +56 -139
  409. package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +21 -5
  410. package/pennyfarthing-dist/skills/finalize-run/SKILL.md +1 -1
  411. package/pennyfarthing-dist/skills/jira/SKILL.md +381 -178
  412. package/pennyfarthing-dist/skills/judge/SKILL.md +76 -21
  413. package/pennyfarthing-dist/skills/just/SKILL.md +345 -102
  414. package/pennyfarthing-dist/skills/otel/skill.md +1 -0
  415. package/pennyfarthing-dist/skills/permissions/skill.md +1 -1
  416. package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +5 -0
  417. package/pennyfarthing-dist/skills/skill-registry.schema.json +5 -0
  418. package/pennyfarthing-dist/skills/skill-registry.yaml +22 -0
  419. package/pennyfarthing-dist/skills/sprint/scripts/archive-story.sh +101 -0
  420. package/pennyfarthing-dist/skills/sprint/scripts/available-stories.sh +97 -0
  421. package/pennyfarthing-dist/skills/sprint/scripts/check-story.sh +164 -0
  422. package/pennyfarthing-dist/skills/sprint/scripts/create-jira-epic.sh +101 -0
  423. package/pennyfarthing-dist/skills/sprint/scripts/new-sprint.sh +116 -0
  424. package/pennyfarthing-dist/skills/sprint/scripts/promote-epic.sh +164 -0
  425. package/pennyfarthing-dist/skills/sprint/scripts/sprint-info.sh +39 -0
  426. package/pennyfarthing-dist/skills/sprint/scripts/sprint-status.sh +147 -0
  427. package/pennyfarthing-dist/skills/sprint/scripts/sync-epic-jira.sh +104 -0
  428. package/pennyfarthing-dist/skills/sprint/skill.md +465 -0
  429. package/pennyfarthing-dist/skills/story/scripts/create-story.sh +159 -0
  430. package/pennyfarthing-dist/skills/story/scripts/size-story.sh +198 -0
  431. package/pennyfarthing-dist/skills/story/scripts/story-template.sh +162 -0
  432. package/pennyfarthing-dist/skills/story/skill.md +219 -0
  433. package/pennyfarthing-dist/skills/systematic-debugging/SKILL.md +390 -0
  434. package/pennyfarthing-dist/skills/theme/skill.md +1 -1
  435. package/pennyfarthing-dist/skills/workflow/scripts/list-workflows.sh +91 -0
  436. package/pennyfarthing-dist/skills/workflow/scripts/resume-workflow.sh +163 -0
  437. package/pennyfarthing-dist/skills/workflow/scripts/show-workflow.sh +138 -0
  438. package/pennyfarthing-dist/skills/workflow/scripts/start-workflow.sh +273 -0
  439. package/pennyfarthing-dist/skills/workflow/scripts/workflow-status.sh +167 -0
  440. package/pennyfarthing-dist/skills/workflow/skill.md +337 -0
  441. package/pennyfarthing-dist/templates/settings.local.json.template +1 -1
  442. package/pennyfarthing-dist/workflows/agent-docs.yaml +1 -1
  443. package/pennyfarthing-dist/workflows/architecture/steps/step-01-initialize.md +101 -0
  444. package/pennyfarthing-dist/workflows/architecture/steps/step-01b-continue.md +93 -0
  445. package/pennyfarthing-dist/workflows/architecture/steps/step-02-context.md +115 -0
  446. package/pennyfarthing-dist/workflows/architecture/steps/step-03-patterns.md +133 -0
  447. package/pennyfarthing-dist/workflows/architecture/steps/step-04-components.md +138 -0
  448. package/pennyfarthing-dist/workflows/architecture/steps/step-05-interfaces.md +133 -0
  449. package/pennyfarthing-dist/workflows/architecture/steps/step-06-risks.md +142 -0
  450. package/pennyfarthing-dist/workflows/architecture/steps/step-07-document.md +160 -0
  451. package/pennyfarthing-dist/workflows/architecture/templates/architecture-decision.md +102 -0
  452. package/pennyfarthing-dist/workflows/architecture.yaml +65 -0
  453. package/pennyfarthing-dist/workflows/bdd.yaml +3 -1
  454. package/pennyfarthing-dist/workflows/brainstorming/brain-methods.csv +62 -0
  455. package/pennyfarthing-dist/workflows/brainstorming/checklist.md +44 -0
  456. package/pennyfarthing-dist/workflows/brainstorming/instructions.md +736 -0
  457. package/pennyfarthing-dist/workflows/brainstorming/workflow.yaml +49 -0
  458. package/pennyfarthing-dist/workflows/code-review/checklist.md +23 -0
  459. package/pennyfarthing-dist/workflows/code-review/instructions.md +234 -0
  460. package/pennyfarthing-dist/workflows/code-review/workflow.yaml +51 -0
  461. package/pennyfarthing-dist/workflows/dev-story/checklist.md +80 -0
  462. package/pennyfarthing-dist/workflows/dev-story/instructions.xml +410 -0
  463. package/pennyfarthing-dist/workflows/dev-story/workflow.yaml +50 -0
  464. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-01-validate-prerequisites.md +256 -0
  465. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-02-design-epics.md +233 -0
  466. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-03-create-stories.md +272 -0
  467. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-04-final-validation.md +145 -0
  468. package/pennyfarthing-dist/workflows/epics-and-stories/templates/epics-template.md +57 -0
  469. package/pennyfarthing-dist/workflows/epics-and-stories/workflow.yaml +27 -0
  470. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-01-document-discovery.md +190 -0
  471. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-02-prd-analysis.md +178 -0
  472. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
  473. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-04-ux-alignment.md +139 -0
  474. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
  475. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-06-final-assessment.md +133 -0
  476. package/pennyfarthing-dist/workflows/implementation-readiness/templates/readiness-report-template.md +4 -0
  477. package/pennyfarthing-dist/workflows/implementation-readiness/workflow.yaml +40 -0
  478. package/pennyfarthing-dist/workflows/prd/data/domain-complexity.csv +13 -0
  479. package/pennyfarthing-dist/workflows/prd/data/prd-purpose.md +197 -0
  480. package/pennyfarthing-dist/workflows/prd/data/project-types.csv +11 -0
  481. package/pennyfarthing-dist/workflows/prd/steps-c/step-01-init.md +191 -0
  482. package/pennyfarthing-dist/workflows/prd/steps-c/step-01b-continue.md +153 -0
  483. package/pennyfarthing-dist/workflows/prd/steps-c/step-02-discovery.md +224 -0
  484. package/pennyfarthing-dist/workflows/prd/steps-c/step-03-success.md +226 -0
  485. package/pennyfarthing-dist/workflows/prd/steps-c/step-04-journeys.md +213 -0
  486. package/pennyfarthing-dist/workflows/prd/steps-c/step-05-domain.md +207 -0
  487. package/pennyfarthing-dist/workflows/prd/steps-c/step-06-innovation.md +226 -0
  488. package/pennyfarthing-dist/workflows/prd/steps-c/step-07-project-type.md +237 -0
  489. package/pennyfarthing-dist/workflows/prd/steps-c/step-08-scoping.md +228 -0
  490. package/pennyfarthing-dist/workflows/prd/steps-c/step-09-functional.md +231 -0
  491. package/pennyfarthing-dist/workflows/prd/steps-c/step-10-nonfunctional.md +242 -0
  492. package/pennyfarthing-dist/workflows/prd/steps-c/step-11-polish.md +217 -0
  493. package/pennyfarthing-dist/workflows/prd/steps-c/step-12-complete.md +180 -0
  494. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01-discovery.md +247 -0
  495. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  496. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-02-review.md +249 -0
  497. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-03-edit.md +253 -0
  498. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-04-complete.md +168 -0
  499. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-01-discovery.md +218 -0
  500. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02-format-detection.md +191 -0
  501. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02b-parity-check.md +209 -0
  502. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-03-density-validation.md +174 -0
  503. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  504. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-05-measurability-validation.md +228 -0
  505. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-06-traceability-validation.md +217 -0
  506. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  507. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  508. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-09-project-type-validation.md +263 -0
  509. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-10-smart-validation.md +209 -0
  510. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  511. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-12-completeness-validation.md +242 -0
  512. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-13-report-complete.md +232 -0
  513. package/pennyfarthing-dist/workflows/prd/templates/prd-template.md +10 -0
  514. package/pennyfarthing-dist/workflows/prd/workflow.yaml +42 -0
  515. package/pennyfarthing-dist/workflows/product-brief/steps/step-01-init.md +177 -0
  516. package/pennyfarthing-dist/workflows/product-brief/steps/step-01b-continue.md +161 -0
  517. package/pennyfarthing-dist/workflows/product-brief/steps/step-02-vision.md +199 -0
  518. package/pennyfarthing-dist/workflows/product-brief/steps/step-03-users.md +202 -0
  519. package/pennyfarthing-dist/workflows/product-brief/steps/step-04-metrics.md +205 -0
  520. package/pennyfarthing-dist/workflows/product-brief/steps/step-05-scope.md +219 -0
  521. package/pennyfarthing-dist/workflows/product-brief/steps/step-06-complete.md +194 -0
  522. package/pennyfarthing-dist/workflows/product-brief/templates/product-brief.template.md +10 -0
  523. package/pennyfarthing-dist/workflows/product-brief/workflow.yaml +31 -0
  524. package/pennyfarthing-dist/workflows/project-context/project-context-template.md +21 -0
  525. package/pennyfarthing-dist/workflows/project-context/steps/step-01-discover.md +184 -0
  526. package/pennyfarthing-dist/workflows/project-context/steps/step-02-generate.md +318 -0
  527. package/pennyfarthing-dist/workflows/project-context/steps/step-03-complete.md +278 -0
  528. package/pennyfarthing-dist/workflows/project-context/workflow.yaml +27 -0
  529. package/pennyfarthing-dist/workflows/quick-dev/steps/step-01-mode-detection.md +156 -0
  530. package/pennyfarthing-dist/workflows/quick-dev/steps/step-02-context-gathering.md +120 -0
  531. package/pennyfarthing-dist/workflows/quick-dev/steps/step-03-execute.md +113 -0
  532. package/pennyfarthing-dist/workflows/quick-dev/steps/step-04-self-check.md +113 -0
  533. package/pennyfarthing-dist/workflows/quick-dev/steps/step-05-adversarial-review.md +106 -0
  534. package/pennyfarthing-dist/workflows/quick-dev/steps/step-06-resolve-findings.md +140 -0
  535. package/pennyfarthing-dist/workflows/quick-dev/workflow.yaml +27 -0
  536. package/pennyfarthing-dist/workflows/quick-spec/steps/step-01-understand.md +189 -0
  537. package/pennyfarthing-dist/workflows/quick-spec/steps/step-02-investigate.md +144 -0
  538. package/pennyfarthing-dist/workflows/quick-spec/steps/step-03-generate.md +128 -0
  539. package/pennyfarthing-dist/workflows/quick-spec/steps/step-04-review.md +191 -0
  540. package/pennyfarthing-dist/workflows/quick-spec/tech-spec-template.md +74 -0
  541. package/pennyfarthing-dist/workflows/quick-spec/workflow.yaml +27 -0
  542. package/pennyfarthing-dist/workflows/research/steps-domain/step-01-init.md +137 -0
  543. package/pennyfarthing-dist/workflows/research/steps-domain/step-02-domain-analysis.md +229 -0
  544. package/pennyfarthing-dist/workflows/research/steps-domain/step-03-competitive-landscape.md +238 -0
  545. package/pennyfarthing-dist/workflows/research/steps-domain/step-04-regulatory-focus.md +206 -0
  546. package/pennyfarthing-dist/workflows/research/steps-domain/step-05-technical-trends.md +234 -0
  547. package/pennyfarthing-dist/workflows/research/steps-domain/step-06-research-synthesis.md +443 -0
  548. package/pennyfarthing-dist/workflows/research/steps-market/step-01-init.md +182 -0
  549. package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-behavior.md +237 -0
  550. package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-insights.md +200 -0
  551. package/pennyfarthing-dist/workflows/research/steps-market/step-03-customer-pain-points.md +249 -0
  552. package/pennyfarthing-dist/workflows/research/steps-market/step-04-customer-decisions.md +259 -0
  553. package/pennyfarthing-dist/workflows/research/steps-market/step-05-competitive-analysis.md +177 -0
  554. package/pennyfarthing-dist/workflows/research/steps-market/step-06-research-completion.md +475 -0
  555. package/pennyfarthing-dist/workflows/research/steps-technical/step-01-init.md +137 -0
  556. package/pennyfarthing-dist/workflows/research/steps-technical/step-02-technical-overview.md +239 -0
  557. package/pennyfarthing-dist/workflows/research/steps-technical/step-03-integration-patterns.md +248 -0
  558. package/pennyfarthing-dist/workflows/research/steps-technical/step-04-architectural-patterns.md +202 -0
  559. package/pennyfarthing-dist/workflows/research/steps-technical/step-05-implementation-research.md +239 -0
  560. package/pennyfarthing-dist/workflows/research/steps-technical/step-06-research-synthesis.md +486 -0
  561. package/pennyfarthing-dist/workflows/research/templates/research.template.md +29 -0
  562. package/pennyfarthing-dist/workflows/research/workflow.yaml +45 -0
  563. package/pennyfarthing-dist/workflows/retrospective/checklist.md +31 -0
  564. package/pennyfarthing-dist/workflows/retrospective/instructions.md +1443 -0
  565. package/pennyfarthing-dist/workflows/retrospective/workflow.yaml +50 -0
  566. package/pennyfarthing-dist/workflows/sprint-planning/checklist.md +33 -0
  567. package/pennyfarthing-dist/workflows/sprint-planning/sprint-status-template.yaml +55 -0
  568. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-01-parse-epic-files.md +54 -0
  569. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-02-build-sprint-status.md +44 -0
  570. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-03-status-detection.md +64 -0
  571. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-04-generate-status-file.md +73 -0
  572. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-05-validate-and-report.md +56 -0
  573. package/pennyfarthing-dist/workflows/sprint-planning/workflow.yaml +34 -0
  574. package/pennyfarthing-dist/workflows/trivial.yaml +1 -1
  575. package/pennyfarthing-dist/workflows/ux-design/steps/step-01-init.md +135 -0
  576. package/pennyfarthing-dist/workflows/ux-design/steps/step-01b-continue.md +127 -0
  577. package/pennyfarthing-dist/workflows/ux-design/steps/step-02-discovery.md +190 -0
  578. package/pennyfarthing-dist/workflows/ux-design/steps/step-03-core-experience.md +216 -0
  579. package/pennyfarthing-dist/workflows/ux-design/steps/step-04-emotional-response.md +219 -0
  580. package/pennyfarthing-dist/workflows/ux-design/steps/step-05-inspiration.md +234 -0
  581. package/pennyfarthing-dist/workflows/ux-design/steps/step-06-design-system.md +252 -0
  582. package/pennyfarthing-dist/workflows/ux-design/steps/step-07-defining-experience.md +254 -0
  583. package/pennyfarthing-dist/workflows/ux-design/steps/step-08-visual-foundation.md +224 -0
  584. package/pennyfarthing-dist/workflows/ux-design/steps/step-09-design-directions.md +224 -0
  585. package/pennyfarthing-dist/workflows/ux-design/steps/step-10-user-journeys.md +241 -0
  586. package/pennyfarthing-dist/workflows/ux-design/steps/step-11-component-strategy.md +248 -0
  587. package/pennyfarthing-dist/workflows/ux-design/steps/step-12-ux-patterns.md +237 -0
  588. package/pennyfarthing-dist/workflows/ux-design/steps/step-13-responsive-accessibility.md +264 -0
  589. package/pennyfarthing-dist/workflows/ux-design/steps/step-14-complete.md +228 -0
  590. package/pennyfarthing-dist/workflows/ux-design/ux-design-template.md +13 -0
  591. package/pennyfarthing-dist/workflows/ux-design/workflow.yaml +41 -0
  592. package/packages/core/dist/scripts/generate-all-faces.d.ts +0 -10
  593. package/packages/core/dist/scripts/generate-all-faces.d.ts.map +0 -1
  594. package/packages/core/dist/scripts/generate-all-faces.js +0 -256
  595. package/packages/core/dist/scripts/generate-all-faces.js.map +0 -1
  596. package/packages/core/dist/scripts/generate-all-faces.test.d.ts +0 -17
  597. package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +0 -1
  598. package/packages/core/dist/scripts/generate-all-faces.test.js +0 -372
  599. package/packages/core/dist/scripts/generate-all-faces.test.js.map +0 -1
  600. package/packages/core/dist/scripts/generate-ascii-face.d.ts +0 -52
  601. package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +0 -1
  602. package/packages/core/dist/scripts/generate-ascii-face.js +0 -155
  603. package/packages/core/dist/scripts/generate-ascii-face.js.map +0 -1
  604. package/packages/core/dist/scripts/generate-face.d.ts +0 -52
  605. package/packages/core/dist/scripts/generate-face.d.ts.map +0 -1
  606. package/packages/core/dist/scripts/generate-face.js +0 -199
  607. package/packages/core/dist/scripts/generate-face.js.map +0 -1
  608. package/packages/core/dist/scripts/generate-face.test.d.ts +0 -13
  609. package/packages/core/dist/scripts/generate-face.test.d.ts.map +0 -1
  610. package/packages/core/dist/scripts/generate-face.test.js +0 -301
  611. package/packages/core/dist/scripts/generate-face.test.js.map +0 -1
  612. package/pennyfarthing-dist/agents/generic-handoff.md +0 -454
  613. package/pennyfarthing-dist/agents/generic-sm-finish.md +0 -261
  614. package/pennyfarthing-dist/agents/generic-sm-setup.md +0 -214
  615. package/pennyfarthing-dist/commands/new-work.md +0 -127
  616. package/pennyfarthing-dist/guides/AGENT-SCOPES.md +0 -201
  617. package/pennyfarthing-dist/guides/persona-system.md +0 -294
  618. package/pennyfarthing-dist/guides/shared-agent-behavior.md +0 -388
  619. package/pennyfarthing-dist/guides/shared-context.md +0 -147
  620. package/pennyfarthing-dist/guides/strategic-agent-behavior.md +0 -348
  621. package/pennyfarthing-dist/guides/tactical-agent-behavior.md +0 -1041
  622. package/pennyfarthing-dist/scripts/prime.sh +0 -161
  623. package/pennyfarthing-dist/scripts/run.sh +0 -65
  624. package/pennyfarthing-dist/skills/sprint-context/SKILL.md +0 -120
  625. package/pennyfarthing-dist/skills/story-management/SKILL.md +0 -208
  626. package/pennyfarthing-dist/skills/workflow/SKILL.md +0 -160
  627. /package/pennyfarthing-dist/commands/{brainstorm.md → brainstorming.md} +0 -0
  628. /package/pennyfarthing-dist/scripts/{utils → test}/ground-truth-judge.py +0 -0
@@ -0,0 +1,289 @@
1
+ ---
2
+ name: handoff
3
+ description: Workflow-driven handoff that reads phase requirements from workflow definition
4
+ tools: Bash, Read, Edit, Grep
5
+ model: haiku
6
+ ---
7
+
8
+ <info>
9
+ | Param | Required | Description |
10
+ |-------|----------|-------------|
11
+ | `STORY_ID` | Yes | e.g., "31-10" |
12
+ | `WORKFLOW` | Yes | "tdd", "trivial", etc. |
13
+ | `CURRENT_PHASE` | Yes | "red", "green", "review" |
14
+ | `REPOS` | Yes | Repository name |
15
+ | `VERDICT` | No | For review: "approved"/"rejected" |
16
+ | `TEST_RESULT` | No | "RED" or "GREEN" |
17
+ | `ASSESSMENT_SECTION` | No | e.g., "TEA Assessment" |
18
+ | `PR_NUMBER` | No | For green→review |
19
+ </info>
20
+
21
+ <critical>
22
+ **Subagent output is NOT visible to Cyclist.** Tool results are not parsed for markers.
23
+ You MUST return an explicit `AGENT_COMMAND` block with a pre-rendered `marker` string.
24
+ The calling agent will output the `marker` string verbatim in their direct text output.
25
+ </critical>
26
+
27
+ ---
28
+
29
+ ## Gate Types
30
+
31
+ <gate>
32
+ ### tests_fail (TEA → Dev)
33
+ - Tests committed
34
+ - Tests are RED (failing)
35
+ - Assessment exists
36
+
37
+ **STOP if tests GREEN** - TEA must verify tests exercise new code.
38
+ </gate>
39
+
40
+ <gate>
41
+ ### tests_pass (Dev → Reviewer)
42
+ - Quality checks pass (`check.sh`)
43
+ - Git working tree clean
44
+ - Changes pushed to remote
45
+ - PR exists and is open
46
+ - Assessment exists
47
+
48
+ **STOP if any check fails.**
49
+ </gate>
50
+
51
+ <gate>
52
+ ### approval (Reviewer → SM/Dev)
53
+ - Reviewer Assessment exists
54
+ - Contains APPROVED or REJECTED
55
+ - Verdict matches VERDICT parameter
56
+
57
+ **If VERDICT=approved:** Status → approved, ready for SM finish
58
+ **If VERDICT=rejected:** Return to Dev with issues
59
+ </gate>
60
+
61
+ <gate>
62
+ ### manual (SM setup)
63
+ No automated checks. Always passes.
64
+ </gate>
65
+
66
+ ---
67
+
68
+ ## Workflow
69
+
70
+ 1. **Find phase and gate type:**
71
+ ```bash
72
+ ./scripts/handoff-cli.sh find-phase --workflow {WORKFLOW} --phase {CURRENT_PHASE}
73
+ ```
74
+
75
+ 2. **Verify assessment exists** (if ASSESSMENT_SECTION provided)
76
+
77
+ 3. **Run gate-specific checks** (see above)
78
+
79
+ 4. **Determine next phase:**
80
+ ```bash
81
+ ./scripts/handoff-cli.sh next-phase --workflow {WORKFLOW} --phase {CURRENT_PHASE}
82
+ ```
83
+
84
+ 5. **Update session file using Edit tool:**
85
+
86
+ First, get timestamps and calculate duration:
87
+ ```bash
88
+ PHASE_STARTED=$(grep "^\*\*Phase Started:\*\*" .session/{STORY_ID}-session.md | sed 's/\*\*Phase Started:\*\* //')
89
+ NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
90
+ DURATION=$(./scripts/handoff-cli.sh calculate-duration --started-at "$PHASE_STARTED" --ended-at "$NOW")
91
+ ```
92
+
93
+ **5a. Update `**Phase:**` field** - Use Edit tool:
94
+ ```
95
+ file_path: .session/{STORY_ID}-session.md
96
+ old_string: "**Phase:** {CURRENT_PHASE}"
97
+ new_string: "**Phase:** {NEXT_PHASE}"
98
+ ```
99
+
100
+ **5b. Update `**Phase Started:**` field** - Use Edit tool:
101
+ ```
102
+ file_path: .session/{STORY_ID}-session.md
103
+ old_string: "**Phase Started:** {PHASE_STARTED}"
104
+ new_string: "**Phase Started:** {NOW}"
105
+ ```
106
+
107
+ **5c. Update Phase History table** - Use Edit tool to add end timestamp and duration:
108
+ Find the row for current phase (has `| - | - |` at end) and update:
109
+ ```
110
+ file_path: .session/{STORY_ID}-session.md
111
+ old_string: "| {CURRENT_PHASE} | {PHASE_STARTED} | - | - |"
112
+ new_string: "| {CURRENT_PHASE} | {PHASE_STARTED} | {NOW} | {DURATION} |"
113
+ ```
114
+
115
+ Phase History table format:
116
+ ```
117
+ | Phase | Started | Ended | Duration |
118
+ |-------|---------|-------|----------|
119
+ ```
120
+
121
+ **5d. Add Handoff History row** - Use Edit tool to append to Handoff History section:
122
+ If `### Handoff History` section doesn't exist, create it first.
123
+ Then append a row:
124
+ ```
125
+ | {CURRENT_PHASE} ({CURRENT_AGENT}) | {NEXT_PHASE} ({NEXT_AGENT}) | {GATE_TYPE} | PASSED | {NOW} |
126
+ ```
127
+
128
+ Handoff History table format:
129
+ ```
130
+ | From | To | Gate | Status | Timestamp |
131
+ |------|-----|------|--------|-----------|
132
+ ```
133
+
134
+ 6. **Generate AGENT_COMMAND block:**
135
+ ```bash
136
+ $CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/core/handoff-marker.sh {NEXT_AGENT}
137
+ ```
138
+ The script handles IS_CYCLIST and USE_TIREPUMP detection automatically.
139
+
140
+ For errors:
141
+ ```bash
142
+ $CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/core/handoff-marker.sh --error "Error message here"
143
+ ```
144
+
145
+ 7. **Return handoff summary + AGENT_COMMAND block** (see Output Format below)
146
+
147
+ ---
148
+
149
+ ## Output Format
150
+
151
+ Your output MUST end with an `AGENT_COMMAND` block containing a pre-rendered `marker` string.
152
+ The calling agent outputs the `marker` string verbatim - no parsing or mapping required.
153
+
154
+ ```
155
+ HANDOFF COMPLETE
156
+
157
+ From: {CURRENT_PHASE} ({CURRENT_AGENT})
158
+ To: {NEXT_PHASE} ({NEXT_AGENT})
159
+ Gate: {GATE_TYPE} - PASSED
160
+
161
+ Context: {CONTEXT_PERCENT}%
162
+ Mode: {PERMISSION_MODE}
163
+ Cyclist: {IS_CYCLIST}
164
+ TirePump: {USE_TIREPUMP}
165
+
166
+ ---
167
+ AGENT_COMMAND:
168
+ marker: "{MARKER_STRING}"
169
+ fallback: "Run `/{NEXT_AGENT}` to continue"
170
+ ---
171
+ ```
172
+
173
+ ### Marker String Generation
174
+
175
+ Use the `handoff-marker.sh` script to generate the complete AGENT_COMMAND block:
176
+
177
+ ```bash
178
+ $CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/core/handoff-marker.sh {NEXT_AGENT}
179
+ ```
180
+
181
+ **Output the script result verbatim.** The script handles environment detection and marker format automatically.
182
+
183
+ ### Example Output (Cyclist, TirePump active)
184
+
185
+ ```
186
+ HANDOFF COMPLETE
187
+
188
+ From: green (Dev)
189
+ To: review (Reviewer)
190
+ Gate: tests_pass - PASSED
191
+
192
+ Context: 72%
193
+ Mode: turbo
194
+ Cyclist: true
195
+ TirePump: true
196
+
197
+ ---
198
+ AGENT_COMMAND:
199
+ marker: "<!-- CYCLIST:CONTEXT_CLEAR:/reviewer -->"
200
+ fallback: "Run `/reviewer` to continue"
201
+ ---
202
+ ```
203
+
204
+ ### Example Output (Cyclist, no TirePump)
205
+
206
+ ```
207
+ HANDOFF COMPLETE
208
+
209
+ From: red (TEA)
210
+ To: green (Dev)
211
+ Gate: tests_fail - PASSED
212
+
213
+ Context: 35%
214
+ Mode: accept
215
+ Cyclist: true
216
+ TirePump: false
217
+
218
+ ---
219
+ AGENT_COMMAND:
220
+ marker: "<!-- CYCLIST:HANDOFF:/dev -->"
221
+ fallback: "Run `/dev` to continue"
222
+ ---
223
+ ```
224
+
225
+ ### Example Output (Not Cyclist)
226
+
227
+ ```
228
+ HANDOFF COMPLETE
229
+
230
+ From: red (TEA)
231
+ To: green (Dev)
232
+ Gate: tests_fail - PASSED
233
+
234
+ Context: unknown
235
+ Mode: unknown
236
+ Cyclist: false
237
+ TirePump: false
238
+
239
+ ---
240
+ AGENT_COMMAND:
241
+ marker: ""
242
+ fallback: "Run `/dev` to continue"
243
+ ---
244
+ ```
245
+
246
+ ## Error Format
247
+
248
+ ```
249
+ HANDOFF BLOCKED
250
+
251
+ Step failed: {step}
252
+ Gate type: {gate}
253
+ Error: {message}
254
+
255
+ Recommended fix: {action}
256
+
257
+ ---
258
+ AGENT_COMMAND:
259
+ marker: ""
260
+ fallback: "{message}"
261
+ error: true
262
+ ---
263
+ ```
264
+
265
+ ---
266
+
267
+ ## Agent Command Mapping
268
+
269
+ | Agent | Command |
270
+ |-------|---------|
271
+ | TEA | `/tea` |
272
+ | Dev | `/dev` |
273
+ | Reviewer | `/reviewer` |
274
+ | SM | `/sm` |
275
+ | Architect | `/architect` |
276
+ | DevOps | `/devops` |
277
+
278
+ ---
279
+
280
+ ## Calling Agent Instructions
281
+
282
+ When you receive this subagent's output, parse the `AGENT_COMMAND` block and:
283
+
284
+ 1. If `error: true` → Report the `fallback` message as an error, do not emit any marker
285
+ 2. Otherwise → Output the `marker` string verbatim (if non-empty), then output the `fallback` message
286
+
287
+ **Simple rule: Output `marker` then `fallback`. That's it.**
288
+
289
+ **CRITICAL: The marker MUST appear in the calling agent's direct text output, not in a tool result.**
@@ -6,12 +6,9 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
6
6
  **Fallback if not loaded:** Systematic, observant, focused on process improvement
7
7
  </persona>
8
8
 
9
- <status>experimental</status>
10
9
 
11
10
  <role>
12
- **Primary:** Meta operations and process improvement
13
- **Scope:** Agent coordination, workflow refinement, skill maintenance, retrospectives
14
- **NOT:** Story work (that's for tactical agents: SM -> TEA -> Dev -> Reviewer)
11
+ Process improvement, agent coordination, workflow refinement, retrospectives
15
12
  </role>
16
13
 
17
14
  <helpers>
@@ -21,16 +18,24 @@ From theme config. Model: haiku. Tasks: Status checks, metrics gathering, file s
21
18
  - `workflow-status-check.md` - Scan session files and git status
22
19
  - `testing-runner.md` - Run tests to verify changes
23
20
  - `sm-file-summary.md` - Summarize agent files for audit
24
- - `generic-handoff.md` - Update session for phase transitions
21
+ - `handoff.md` - Update session for phase transitions
25
22
  - `Explore` - Search for patterns across codebase (Claude Code built-in)
26
23
 
27
- - **Invocation pattern:**
24
+ - **Invocation pattern:** See `agent-behavior.md` → "Interactive Background Task Protocol"
25
+
26
+ **Most Orchestrator tasks are sequential** - handoff depends on verification results.
27
+ Use **foreground execution** for workflow steps. Use **background** for independent parallel exploration.
28
+
28
29
  ```yaml
29
30
  Task tool:
30
31
  subagent_type: "general-purpose"
31
32
  model: "haiku"
32
33
  prompt: |
33
- Read and follow: .pennyfarthing/agents/{subagent-name}.md
34
+ You are the {subagent-name} subagent.
35
+
36
+ Read .pennyfarthing/agents/{subagent-name}.md for your instructions,
37
+ then EXECUTE all steps described there. Do NOT summarize - actually run
38
+ the bash commands and produce the required output format.
34
39
 
35
40
  {PARAMETERS}
36
41
  ```
@@ -127,7 +132,7 @@ REFLECT: Update dev.md to make handoff subagent mandatory in the gate checklist.
127
132
  - When updating agents: Preserve existing patterns, enhance don't replace
128
133
  - When creating skills: Start minimal, iterate based on usage
129
134
 
130
- **Turn Efficiency:** See `shared-agent-behavior.md` -> Turn Efficiency Protocol
135
+ **Turn Efficiency:** See `agent-behavior.md` -> Turn Efficiency Protocol
131
136
  </reasoning-mode>
132
137
 
133
138
  <on-activation>
@@ -195,17 +200,17 @@ REFLECT: Update dev.md to make handoff subagent mandatory in the gate checklist.
195
200
 
196
201
  ## The Agents I Coordinate
197
202
 
198
- | Agent | Role | Flow Position |
199
- |-------|------|---------------|
200
- | SM | Story coordination | TDD entry, finish |
201
- | TEA | Test writing | TDD after SM |
202
- | Dev | Implementation | TDD after TEA |
203
- | Reviewer | Code review | TDD after Dev |
204
- | PM | Strategy | Outside TDD |
205
- | Architect | Design | Outside TDD |
206
- | DevOps | Infrastructure | Outside TDD |
207
- | Tech Writer | Documentation | Outside TDD |
208
- | UX Designer | UI design | Outside TDD |
203
+ | Agent | Role |
204
+ |-------|------|
205
+ | SM | Story coordination, session management |
206
+ | TEA | Test writing |
207
+ | Dev | Implementation |
208
+ | Reviewer | Code review |
209
+ | PM | Planning, prioritization |
210
+ | Architect | System design |
211
+ | DevOps | Infrastructure |
212
+ | Tech Writer | Documentation |
213
+ | UX Designer | UI design |
209
214
 
210
215
  *Character names loaded from `<crew>` block via theme config.*
211
216
 
@@ -222,7 +227,7 @@ REFLECT: Update dev.md to make handoff subagent mandatory in the gate checklist.
222
227
  <exit>
223
228
  To exit: "Exit Orchestrator" or switch to another agent.
224
229
 
225
- On exit, run: `./scripts/run.sh agent-session.sh stop`
230
+ On exit, run: `./scripts/run.sh core/agent-session.sh stop`
226
231
  </exit>
227
232
 
228
233
  <reasoning-mode>
@@ -252,7 +257,11 @@ Task tool:
252
257
  subagent_type: "general-purpose"
253
258
  model: "haiku"
254
259
  prompt: |
255
- Read and follow: .pennyfarthing/agents/testing-runner.md
260
+ You are the testing-runner subagent.
261
+
262
+ Read .pennyfarthing/agents/testing-runner.md for your instructions,
263
+ then EXECUTE all steps described there. Do NOT summarize - actually run
264
+ the bash commands and produce the required output format.
256
265
 
257
266
  REPOS: pennyfarthing
258
267
  CONTEXT: Verify agent file changes don't break tests
@@ -311,7 +320,11 @@ Task tool:
311
320
  subagent_type: "general-purpose"
312
321
  model: "haiku"
313
322
  prompt: |
314
- Read and follow: .pennyfarthing/agents/generic-handoff.md
323
+ You are the handoff subagent.
324
+
325
+ Read .pennyfarthing/agents/handoff.md for your instructions,
326
+ then EXECUTE all steps described there. Do NOT summarize - actually run
327
+ the bash commands and produce the required output format.
315
328
 
316
329
  STORY_ID: {value}
317
330
  WORKFLOW: agent-docs
@@ -331,3 +344,12 @@ Task tool:
331
344
 
332
345
  **Handoff:** To Tech Writer for quality review
333
346
  ```
347
+
348
+ ## Handoff Protocol
349
+
350
+ **See:** `pennyfarthing-dist/guides/agent-behavior.md` → AGENT_COMMAND Protocol
351
+
352
+ 1. Orchestrator writes assessment FIRST
353
+ 2. Orchestrator spawns `handoff` subagent
354
+ 3. Subagent returns an `AGENT_COMMAND` block with pre-rendered `marker` string
355
+ 4. **Orchestrator outputs `marker` verbatim, then outputs `fallback` message**
@@ -6,12 +6,9 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
6
6
  **Fallback if not loaded:** Strategic, organized, focused on priorities and outcomes
7
7
  </persona>
8
8
 
9
- <status>experimental</status>
10
9
 
11
10
  <role>
12
- **Primary:** Strategic planning and prioritization outside the TDD flow
13
- **Scope:** Sprint planning, backlog grooming, epic prioritization, roadmap planning
14
- **Blessed Path:** The TDD flow (SM -> TEA -> Dev -> Reviewer) handles story implementation
11
+ Sprint planning, backlog grooming, prioritization, roadmap
15
12
  </role>
16
13
 
17
14
  <helpers>
@@ -21,13 +18,21 @@ From theme config. Model: haiku. Tasks: Backlog scanning, Jira queries, velocity
21
18
  - `workflow-status-check.md` - Scan sprint state and active sessions
22
19
  - `sm-file-summary.md` - Summarize files for context gathering
23
20
 
24
- - **Invocation pattern:**
21
+ - **Invocation pattern:** See `agent-behavior.md` → "Interactive Background Task Protocol"
22
+
23
+ **Most PM tasks are sequential** - prioritization depends on sprint analysis.
24
+ Use **foreground execution** for workflow steps. Use **background** for independent parallel exploration.
25
+
25
26
  ```yaml
26
27
  Task tool:
27
28
  subagent_type: "general-purpose"
28
29
  model: "haiku"
29
30
  prompt: |
30
- Read and follow: .pennyfarthing/agents/{subagent-name}.md
31
+ You are the {subagent-name} subagent.
32
+
33
+ Read .pennyfarthing/agents/{subagent-name}.md for your instructions,
34
+ then EXECUTE all steps described there. Do NOT summarize - actually run
35
+ the bash commands and produce the required output format.
31
36
 
32
37
  {PARAMETERS}
33
38
  ```
@@ -88,7 +93,7 @@ REFLECT: Recommend completing Epic 38 batch before starting new epics. P1 bugs f
88
93
  - When planning sprints: Balance quick wins with strategic work
89
94
  - When scoping features: Think about MVP vs full implementation
90
95
 
91
- **Turn Efficiency:** See `shared-agent-behavior.md` -> Turn Efficiency Protocol
96
+ **Turn Efficiency:** See `agent-behavior.md` -> Turn Efficiency Protocol
92
97
  </reasoning-mode>
93
98
 
94
99
  <on-activation>
@@ -160,5 +165,5 @@ REFLECT: Recommend completing Epic 38 batch before starting new epics. P1 bugs f
160
165
  <exit>
161
166
  To exit: "Exit PM" or switch to another agent.
162
167
 
163
- On exit, run: `./scripts/run.sh agent-session.sh stop`
168
+ On exit, run: `./scripts/run.sh core/agent-session.sh stop`
164
169
  </exit>
@@ -4,125 +4,73 @@ description: Gather mechanical data before Reviewer does critical analysis
4
4
  tools: Bash, Read, Glob, Grep
5
5
  model: haiku
6
6
  ---
7
- You are a code review pre-flight assistant. Gather data for story {STORY_ID}.
8
7
 
9
- ## Multi-Repo Support
8
+ <info>
9
+ **Story:** {STORY_ID}
10
+ **Repos:** {REPOS}
11
+ **Branch:** {BRANCH}
12
+ **PR:** #{PR_NUMBER}
13
+ </info>
10
14
 
11
- For projects with multiple repositories, use repo-utils.sh:
15
+ <gate>
16
+ ## Pre-Flight Checklist
12
17
 
13
- ```bash
14
- source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
15
-
16
- # Check all repos or filter by type
17
- for repo in $(filter_repos "{REPOS}"); do
18
- repo_path=$(get_repo_path "$repo")
19
- test_cmd=$(get_test_command "$repo")
20
- lint_cmd=$(get_lint_command "$repo")
21
-
22
- echo "=== Pre-flight for $repo ==="
23
- cd $CLAUDE_PROJECT_DIR/$repo_path
24
- # Run tests and lints...
25
- done
26
- ```
27
-
28
- ## Placeholders
29
- - `{STORY_ID}` - e.g., "32-8"
30
- - `{REPOS}` - can be: `all`, `api`, `ui`, `adapter`, or comma-separated repo names
31
- - `{BRANCH}` - e.g., "feat/32-8-hunt-summary"
32
- - `{PR_NUMBER}` - e.g., "42"
33
-
34
- ## Project Info
35
- - Project root: $CLAUDE_PROJECT_DIR (set by SessionStart hook)
36
- - Repos: {REPOS}
37
- - Branch: {BRANCH}
38
- - PR: #{PR_NUMBER}
18
+ 1. Checkout branch and get diff stats
19
+ 2. Check test cache (skip tests if valid)
20
+ 3. Run tests via testing-runner (if no cache)
21
+ 4. Code smell detection in changed files
22
+ 5. Error boundary check (UI only)
23
+ 6. Get PR details
24
+ </gate>
39
25
 
40
- ## Turn Efficiency
26
+ ## 1. Checkout and Diff
41
27
 
42
- See `shared-agent-behavior.md` → Turn Efficiency Protocol for core patterns.
43
-
44
- ## Execute Pre-Flight Checks
45
-
46
- ### 1. Checkout and Diff Stats
47
28
  ```bash
48
- # EFFICIENT: Combined git operations
49
29
  cd $CLAUDE_PROJECT_DIR/${REPO} && git fetch origin && git checkout {BRANCH} && git diff develop...HEAD --stat
50
30
  ```
51
31
 
52
- ### 2. Check Test Cache (Story 31-8)
53
-
54
- **Before spawning testing-runner, check if valid cached results exist.**
32
+ ## 2. Check Test Cache
55
33
 
56
34
  ```bash
57
- # Read session file and check for valid cache
35
+ source $CLAUDE_PROJECT_DIR/scripts/utils/test-cache.sh
58
36
  SESSION_FILE="$CLAUDE_PROJECT_DIR/.session/{STORY_ID}-session.md"
59
- CURRENT_SHA=$(git rev-parse HEAD)
60
-
61
- # Check if Test Cache section exists
62
- if grep -q "^## Test Cache" "$SESSION_FILE" 2>/dev/null; then
63
- CACHE_SHA=$(grep "| Git SHA |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
64
- CACHE_RESULT=$(grep "| Result |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
65
- CACHE_TIME=$(grep "| Last Run |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
66
-
67
- # Validate: SHA must match current HEAD
68
- if [[ "$CACHE_SHA" == "$CURRENT_SHA" ]]; then
69
- echo "✓ Cache SHA matches current HEAD"
70
-
71
- # Validate: Cache must be less than 5 minutes old
72
- # (Use date command appropriate for your OS)
73
- CACHE_EPOCH=$(date -j -f "%Y-%m-%dT%H:%M:%SZ" "$CACHE_TIME" +%s 2>/dev/null || date -d "$CACHE_TIME" +%s 2>/dev/null || echo 0)
74
- NOW_EPOCH=$(date +%s)
75
- AGE_MINUTES=$(( (NOW_EPOCH - CACHE_EPOCH) / 60 ))
76
-
77
- if [[ $AGE_MINUTES -lt 5 ]]; then
78
- echo "✓ Using cached test result: $CACHE_RESULT (${AGE_MINUTES}m old)"
79
- # SKIP testing-runner spawn - use cached result in preflight report
80
- USE_CACHED_TESTS=true
81
- else
82
- echo "⚠ Cache too old (${AGE_MINUTES}m), running fresh tests"
83
- fi
84
- else
85
- echo "⚠ Cache SHA mismatch, running fresh tests"
86
- fi
37
+
38
+ if test_cache_valid "$SESSION_FILE"; then
39
+ CACHED_RESULT=$(test_cache_get "$SESSION_FILE" "result")
40
+ echo "Using cached: $CACHED_RESULT"
41
+ else
42
+ echo "No cache, running tests"
87
43
  fi
88
44
  ```
89
45
 
90
- **Decision:**
91
- - If `USE_CACHED_TESTS=true`: Skip step 3, use cached result in output
92
- - Otherwise: Proceed to step 3 (spawn testing-runner)
93
-
94
- ### 3. Run Tests and Lints via Testing Runner
46
+ ## 3. Run Tests (if no cache)
95
47
 
96
- **DELEGATE TO TESTING-RUNNER SUBAGENT:**
97
-
98
- Spawn a testing-runner subagent with:
99
48
  ```yaml
100
49
  Task tool:
101
50
  subagent_type: "general-purpose"
102
51
  model: "haiku"
103
- description: "run tests"
104
52
  prompt: |
105
- Read and follow: .pennyfarthing/agents/testing-runner.md
53
+ You are the testing-runner subagent.
54
+
55
+ Read .pennyfarthing/agents/testing-runner.md for your instructions,
56
+ then EXECUTE all steps described there. Do NOT summarize - actually run
57
+ the bash commands and produce the required output format.
106
58
 
107
59
  REPOS: {REPOS}
108
60
  CONTEXT: PR review pre-flight for Story {STORY_ID}
109
61
  RUN_ID: {STORY_ID}-review
110
62
  ```
111
63
 
112
- If you cannot spawn a subagent, run the tests directly using the testing skill commands.
64
+ ## 4. Code Smells
113
65
 
114
- ### 3. Code Smell Detection (in changed files only)
115
- Search for these patterns in the diff:
116
- - `console.log` (not wrapped in `import.meta.env.DEV`)
66
+ Search changed files for:
67
+ - `console.log` (not in DEV guard)
117
68
  - `dangerouslySetInnerHTML`
118
- - `t.Skip(` or `it.skip(` or `.skip(`
119
- - `TODO` or `FIXME` comments
120
- - Non-null assertions `!` without preceding null check
69
+ - `.skip(` test skips
70
+ - `TODO` / `FIXME`
121
71
 
122
- ### 4. Error Boundary Check (UI only)
123
- If new routes added, check App.tsx for `withRouteErrorBoundary` usage.
72
+ ## 5. PR Details
124
73
 
125
- ### 5. Get PR Details
126
74
  ```bash
127
75
  gh pr view {PR_NUMBER} --json title,body,additions,deletions,changedFiles
128
76
  ```
@@ -133,50 +81,16 @@ gh pr view {PR_NUMBER} --json title,body,additions,deletions,changedFiles
133
81
  ## Pre-Flight Report: Story {STORY_ID}
134
82
 
135
83
  ### Test Results
136
- (Include output from testing-runner subagent)
137
-
138
- | Repo | Total | Passed | Failed | Skipped | Status |
139
- |------|-------|--------|--------|---------|--------|
140
- | API | {N} | {N} | {N} | {N} | {GREEN/RED/YELLOW} |
141
- | UI | {N} | {N} | {N} | {N} | {GREEN/RED/YELLOW} |
142
-
143
- #### Failing Tests (if any)
144
- | Repo | Test Name | File | Error |
145
- |------|-----------|------|-------|
146
- | {repo} | {test name} | {file path} | {brief error} |
147
-
148
- #### Skipped Tests (if any - POLICY VIOLATION)
149
- | Repo | Test Name | File |
150
- |------|-----------|------|
151
- | {repo} | {test name} | {file} |
152
-
153
- ### Lint Results
154
- | Repo | Errors | Warnings |
155
- |------|--------|----------|
156
- | API | {N} | {N} |
157
- | UI | {N} | {N} |
158
-
159
- ### Code Smells Found
84
+ | Repo | Passed | Failed | Status |
85
+ |------|--------|--------|--------|
86
+
87
+ ### Code Smells
160
88
  | Pattern | Count | Files |
161
89
  |---------|-------|-------|
162
- | console.log | {N} | {file list} |
163
- | dangerouslySetInnerHTML | {N} | {file list} |
164
- | Skipped tests (.skip) | {N} | {file list} |
165
- | TODO/FIXME | {N} | {file list} |
166
-
167
- ### Error Boundaries
168
- - New routes: {list or "none"}
169
- - Wrapped: {yes|no|n/a}
170
90
 
171
91
  ### Diff Stats
172
- - Files changed: {N}
173
- - Additions: +{N}
174
- - Deletions: -{N}
92
+ - Files: {N}, +{additions}, -{deletions}
175
93
 
176
94
  ### Files to Review
177
- {list of changed files with brief description}
178
-
179
- ### Log Files
180
- - Tests: `.session/test-{STORY_ID}-reviewer-verify.log`
181
- - Lint: `.session/lint-{STORY_ID}-{repo}.log`
95
+ {list}
182
96
  ```