@pennyfarthing/core 7.0.2 → 7.4.0

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 (692) hide show
  1. package/{packages/core/dist → dist}/cli/commands/cyclist.d.ts +2 -2
  2. package/{packages/core/dist → dist}/cli/commands/cyclist.d.ts.map +1 -1
  3. package/{packages/core/dist → dist}/cli/commands/cyclist.js +8 -9
  4. package/dist/cli/commands/cyclist.js.map +1 -0
  5. package/{packages/core/dist → dist}/cli/commands/cyclist.test.js +6 -4
  6. package/dist/cli/commands/cyclist.test.js.map +1 -0
  7. package/{packages/core/dist → dist}/cli/commands/update.d.ts.map +1 -1
  8. package/{packages/core/dist → dist}/cli/commands/update.js +9 -136
  9. package/dist/cli/commands/update.js.map +1 -0
  10. package/{packages/core/dist → dist}/cli/cyclist-migration.test.js +4 -3
  11. package/{packages/core/dist → dist}/cli/cyclist-migration.test.js.map +1 -1
  12. package/{packages/core/dist → dist}/cli/utils/constants.d.ts +7 -1
  13. package/dist/cli/utils/constants.d.ts.map +1 -0
  14. package/{packages/core/dist → dist}/cli/utils/constants.js +4 -2
  15. package/{packages/core/dist → dist}/cli/utils/constants.js.map +1 -1
  16. package/{packages/core/dist → dist}/cli/utils/themes.d.ts +1 -4
  17. package/{packages/core/dist → dist}/cli/utils/themes.d.ts.map +1 -1
  18. package/{packages/core/dist → dist}/cli/utils/themes.js +2 -22
  19. package/dist/cli/utils/themes.js.map +1 -0
  20. package/dist/cli/utils/themes.test.d.ts +12 -0
  21. package/{packages/core/dist → dist}/cli/utils/themes.test.js +16 -13
  22. package/dist/cli/utils/themes.test.js.map +1 -0
  23. package/{packages/core/dist → dist}/cli/workspace.test.js +5 -8
  24. package/{packages/core/dist → dist}/cli/workspace.test.js.map +1 -1
  25. package/{packages/core/dist → dist}/index.d.ts +1 -0
  26. package/{packages/core/dist → dist}/index.d.ts.map +1 -1
  27. package/{packages/core/dist → dist}/index.js +10 -0
  28. package/{packages/core/dist → dist}/index.js.map +1 -1
  29. package/dist/jira/jira-epic-creation.d.ts +109 -0
  30. package/dist/jira/jira-epic-creation.d.ts.map +1 -0
  31. package/dist/jira/jira-epic-creation.js +253 -0
  32. package/dist/jira/jira-epic-creation.js.map +1 -0
  33. package/dist/jira/jira-epic-creation.test.d.ts +16 -0
  34. package/dist/jira/jira-epic-creation.test.d.ts.map +1 -0
  35. package/dist/jira/jira-epic-creation.test.js +387 -0
  36. package/dist/jira/jira-epic-creation.test.js.map +1 -0
  37. package/dist/jira/jira-sprint-sync.d.ts +247 -0
  38. package/dist/jira/jira-sprint-sync.d.ts.map +1 -0
  39. package/dist/jira/jira-sprint-sync.js +670 -0
  40. package/dist/jira/jira-sprint-sync.js.map +1 -0
  41. package/dist/jira/jira-sprint-sync.test.d.ts +16 -0
  42. package/dist/jira/jira-sprint-sync.test.d.ts.map +1 -0
  43. package/dist/jira/jira-sprint-sync.test.js +845 -0
  44. package/dist/jira/jira-sprint-sync.test.js.map +1 -0
  45. package/{packages/core/dist → dist}/scripts/generate-spider.d.ts +11 -1
  46. package/{packages/core/dist → dist}/scripts/generate-spider.d.ts.map +1 -1
  47. package/{packages/core/dist → dist}/scripts/generate-spider.js +24 -1
  48. package/dist/scripts/generate-spider.js.map +1 -0
  49. package/{packages/core/dist → dist}/scripts/generate-spider.test.js +6 -4
  50. package/dist/scripts/generate-spider.test.js.map +1 -0
  51. package/dist/workflow/gate-handler.d.ts +94 -0
  52. package/dist/workflow/gate-handler.d.ts.map +1 -0
  53. package/dist/workflow/gate-handler.js +189 -0
  54. package/dist/workflow/gate-handler.js.map +1 -0
  55. package/dist/workflow/gate-handler.test.d.ts +14 -0
  56. package/dist/workflow/gate-handler.test.d.ts.map +1 -0
  57. package/dist/workflow/gate-handler.test.js +543 -0
  58. package/dist/workflow/gate-handler.test.js.map +1 -0
  59. package/{packages/core/dist → dist}/workflow/generic-handoff.d.ts +46 -0
  60. package/{packages/core/dist → dist}/workflow/generic-handoff.d.ts.map +1 -1
  61. package/{packages/core/dist → dist}/workflow/generic-handoff.js +53 -0
  62. package/{packages/core/dist → dist}/workflow/generic-handoff.js.map +1 -1
  63. package/{packages/core/dist → dist}/workflow/generic-handoff.test.js +2 -2
  64. package/{packages/core/dist → dist}/workflow/generic-handoff.test.js.map +1 -1
  65. package/dist/workflow/index.d.ts +16 -0
  66. package/dist/workflow/index.d.ts.map +1 -0
  67. package/dist/workflow/index.js +24 -0
  68. package/dist/workflow/index.js.map +1 -0
  69. package/dist/workflow/session-state.d.ts +92 -0
  70. package/dist/workflow/session-state.d.ts.map +1 -0
  71. package/dist/workflow/session-state.js +198 -0
  72. package/dist/workflow/session-state.js.map +1 -0
  73. package/dist/workflow/session-state.test.d.ts +8 -0
  74. package/dist/workflow/session-state.test.d.ts.map +1 -0
  75. package/dist/workflow/session-state.test.js +551 -0
  76. package/dist/workflow/session-state.test.js.map +1 -0
  77. package/dist/workflow/step-parser.d.ts +45 -0
  78. package/dist/workflow/step-parser.d.ts.map +1 -0
  79. package/dist/workflow/step-parser.js +147 -0
  80. package/dist/workflow/step-parser.js.map +1 -0
  81. package/dist/workflow/step-parser.test.d.ts +14 -0
  82. package/dist/workflow/step-parser.test.d.ts.map +1 -0
  83. package/dist/workflow/step-parser.test.js +470 -0
  84. package/dist/workflow/step-parser.test.js.map +1 -0
  85. package/dist/workflow/trimodal.d.ts +86 -0
  86. package/dist/workflow/trimodal.d.ts.map +1 -0
  87. package/dist/workflow/trimodal.js +118 -0
  88. package/dist/workflow/trimodal.js.map +1 -0
  89. package/dist/workflow/trimodal.test.d.ts +11 -0
  90. package/dist/workflow/trimodal.test.d.ts.map +1 -0
  91. package/dist/workflow/trimodal.test.js +395 -0
  92. package/dist/workflow/trimodal.test.js.map +1 -0
  93. package/dist/workflow/variable-resolver.d.ts +67 -0
  94. package/dist/workflow/variable-resolver.d.ts.map +1 -0
  95. package/dist/workflow/variable-resolver.js +156 -0
  96. package/dist/workflow/variable-resolver.js.map +1 -0
  97. package/dist/workflow/variable-resolver.test.d.ts +14 -0
  98. package/dist/workflow/variable-resolver.test.d.ts.map +1 -0
  99. package/dist/workflow/variable-resolver.test.js +400 -0
  100. package/dist/workflow/variable-resolver.test.js.map +1 -0
  101. package/dist/workflow/workflow-executor.d.ts +163 -0
  102. package/dist/workflow/workflow-executor.d.ts.map +1 -0
  103. package/dist/workflow/workflow-executor.js +197 -0
  104. package/dist/workflow/workflow-executor.js.map +1 -0
  105. package/dist/workflow/workflow-executor.test.d.ts +8 -0
  106. package/dist/workflow/workflow-executor.test.d.ts.map +1 -0
  107. package/dist/workflow/workflow-executor.test.js +444 -0
  108. package/dist/workflow/workflow-executor.test.js.map +1 -0
  109. package/{packages/core/dist → dist}/workflow/workflow-loader.test.js +5 -5
  110. package/dist/workflow/workflow-loader.test.js.map +1 -0
  111. package/{packages/core/dist → dist}/workflow/workflow-migration.test.js +8 -9
  112. package/{packages/core/dist → dist}/workflow/workflow-migration.test.js.map +1 -1
  113. package/dist/workflow/workflow-permissions.d.ts +55 -0
  114. package/dist/workflow/workflow-permissions.d.ts.map +1 -0
  115. package/dist/workflow/workflow-permissions.js +64 -0
  116. package/dist/workflow/workflow-permissions.js.map +1 -0
  117. package/dist/workflow/workflow-permissions.test.d.ts +15 -0
  118. package/dist/workflow/workflow-permissions.test.d.ts.map +1 -0
  119. package/dist/workflow/workflow-permissions.test.js +301 -0
  120. package/dist/workflow/workflow-permissions.test.js.map +1 -0
  121. package/{packages/core/dist → dist}/workflow/workflow-schema.d.ts +61 -2
  122. package/dist/workflow/workflow-schema.d.ts.map +1 -0
  123. package/dist/workflow/workflow-schema.js +454 -0
  124. package/dist/workflow/workflow-schema.js.map +1 -0
  125. package/{packages/core/dist → dist}/workflow/workflow-schema.test.js +6 -6
  126. package/{packages/core/dist → dist}/workflow/workflow-schema.test.js.map +1 -1
  127. package/dist/workflow/workflow-stepped-schema.test.d.ts +18 -0
  128. package/dist/workflow/workflow-stepped-schema.test.d.ts.map +1 -0
  129. package/dist/workflow/workflow-stepped-schema.test.js +608 -0
  130. package/dist/workflow/workflow-stepped-schema.test.js.map +1 -0
  131. package/package.json +38 -32
  132. package/README.md +0 -301
  133. package/packages/core/dist/cli/commands/cyclist.js.map +0 -1
  134. package/packages/core/dist/cli/commands/cyclist.test.js.map +0 -1
  135. package/packages/core/dist/cli/commands/update.js.map +0 -1
  136. package/packages/core/dist/cli/utils/constants.d.ts.map +0 -1
  137. package/packages/core/dist/cli/utils/themes.js.map +0 -1
  138. package/packages/core/dist/cli/utils/themes.test.d.ts +0 -12
  139. package/packages/core/dist/cli/utils/themes.test.js.map +0 -1
  140. package/packages/core/dist/scripts/generate-all-faces.d.ts +0 -10
  141. package/packages/core/dist/scripts/generate-all-faces.d.ts.map +0 -1
  142. package/packages/core/dist/scripts/generate-all-faces.js +0 -256
  143. package/packages/core/dist/scripts/generate-all-faces.js.map +0 -1
  144. package/packages/core/dist/scripts/generate-all-faces.test.d.ts +0 -17
  145. package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +0 -1
  146. package/packages/core/dist/scripts/generate-all-faces.test.js +0 -372
  147. package/packages/core/dist/scripts/generate-all-faces.test.js.map +0 -1
  148. package/packages/core/dist/scripts/generate-ascii-face.d.ts +0 -52
  149. package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +0 -1
  150. package/packages/core/dist/scripts/generate-ascii-face.js +0 -155
  151. package/packages/core/dist/scripts/generate-ascii-face.js.map +0 -1
  152. package/packages/core/dist/scripts/generate-face.d.ts +0 -52
  153. package/packages/core/dist/scripts/generate-face.d.ts.map +0 -1
  154. package/packages/core/dist/scripts/generate-face.js +0 -199
  155. package/packages/core/dist/scripts/generate-face.js.map +0 -1
  156. package/packages/core/dist/scripts/generate-face.test.d.ts +0 -13
  157. package/packages/core/dist/scripts/generate-face.test.d.ts.map +0 -1
  158. package/packages/core/dist/scripts/generate-face.test.js +0 -301
  159. package/packages/core/dist/scripts/generate-face.test.js.map +0 -1
  160. package/packages/core/dist/scripts/generate-spider.js.map +0 -1
  161. package/packages/core/dist/scripts/generate-spider.test.js.map +0 -1
  162. package/packages/core/dist/workflow/workflow-loader.test.js.map +0 -1
  163. package/packages/core/dist/workflow/workflow-schema.d.ts.map +0 -1
  164. package/packages/core/dist/workflow/workflow-schema.js +0 -230
  165. package/packages/core/dist/workflow/workflow-schema.js.map +0 -1
  166. package/pennyfarthing-dist/agents/README.md +0 -411
  167. package/pennyfarthing-dist/agents/architect.md +0 -185
  168. package/pennyfarthing-dist/agents/dev.md +0 -239
  169. package/pennyfarthing-dist/agents/devops.md +0 -197
  170. package/pennyfarthing-dist/agents/generic-handoff.md +0 -454
  171. package/pennyfarthing-dist/agents/generic-sm-finish.md +0 -261
  172. package/pennyfarthing-dist/agents/generic-sm-setup.md +0 -214
  173. package/pennyfarthing-dist/agents/orchestrator.md +0 -333
  174. package/pennyfarthing-dist/agents/pm.md +0 -164
  175. package/pennyfarthing-dist/agents/reviewer-preflight.md +0 -182
  176. package/pennyfarthing-dist/agents/reviewer.md +0 -335
  177. package/pennyfarthing-dist/agents/sm-file-summary.md +0 -109
  178. package/pennyfarthing-dist/agents/sm-handoff.md +0 -97
  179. package/pennyfarthing-dist/agents/sm.md +0 -509
  180. package/pennyfarthing-dist/agents/tea.md +0 -205
  181. package/pennyfarthing-dist/agents/tech-writer.md +0 -148
  182. package/pennyfarthing-dist/agents/testing-runner.md +0 -423
  183. package/pennyfarthing-dist/agents/ux-designer.md +0 -158
  184. package/pennyfarthing-dist/agents/workflow-status-check.md +0 -332
  185. package/pennyfarthing-dist/commands/architect.md +0 -62
  186. package/pennyfarthing-dist/commands/benchmark-control.md +0 -69
  187. package/pennyfarthing-dist/commands/benchmark.md +0 -467
  188. package/pennyfarthing-dist/commands/brainstorm.md +0 -91
  189. package/pennyfarthing-dist/commands/check.md +0 -156
  190. package/pennyfarthing-dist/commands/chore.md +0 -178
  191. package/pennyfarthing-dist/commands/close-epic.md +0 -136
  192. package/pennyfarthing-dist/commands/continue-session.md +0 -184
  193. package/pennyfarthing-dist/commands/create-branches-from-story.md +0 -374
  194. package/pennyfarthing-dist/commands/create-theme.md +0 -29
  195. package/pennyfarthing-dist/commands/dev.md +0 -60
  196. package/pennyfarthing-dist/commands/devops.md +0 -59
  197. package/pennyfarthing-dist/commands/git-cleanup.md +0 -340
  198. package/pennyfarthing-dist/commands/health-check.md +0 -108
  199. package/pennyfarthing-dist/commands/help.md +0 -264
  200. package/pennyfarthing-dist/commands/job-fair.md +0 -102
  201. package/pennyfarthing-dist/commands/list-themes.md +0 -17
  202. package/pennyfarthing-dist/commands/new-work.md +0 -127
  203. package/pennyfarthing-dist/commands/orchestrator.md +0 -56
  204. package/pennyfarthing-dist/commands/parallel-work.md +0 -71
  205. package/pennyfarthing-dist/commands/party-mode.md +0 -67
  206. package/pennyfarthing-dist/commands/permissions.md +0 -193
  207. package/pennyfarthing-dist/commands/pm.md +0 -60
  208. package/pennyfarthing-dist/commands/prime.md +0 -140
  209. package/pennyfarthing-dist/commands/release.md +0 -58
  210. package/pennyfarthing-dist/commands/repo-status.md +0 -49
  211. package/pennyfarthing-dist/commands/retro.md +0 -200
  212. package/pennyfarthing-dist/commands/reviewer.md +0 -64
  213. package/pennyfarthing-dist/commands/run-ci.md +0 -116
  214. package/pennyfarthing-dist/commands/set-theme.md +0 -52
  215. package/pennyfarthing-dist/commands/show-theme.md +0 -21
  216. package/pennyfarthing-dist/commands/sm.md +0 -70
  217. package/pennyfarthing-dist/commands/solo.md +0 -411
  218. package/pennyfarthing-dist/commands/sprint-planning.md +0 -109
  219. package/pennyfarthing-dist/commands/start-epic.md +0 -156
  220. package/pennyfarthing-dist/commands/sync-epic-to-jira.md +0 -184
  221. package/pennyfarthing-dist/commands/sync-work-with-sprint.md +0 -376
  222. package/pennyfarthing-dist/commands/tea.md +0 -63
  223. package/pennyfarthing-dist/commands/tech-writer.md +0 -53
  224. package/pennyfarthing-dist/commands/theme-maker.md +0 -671
  225. package/pennyfarthing-dist/commands/update-domain-docs.md +0 -83
  226. package/pennyfarthing-dist/commands/ux-designer.md +0 -62
  227. package/pennyfarthing-dist/commands/work.md +0 -111
  228. package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +0 -480
  229. package/pennyfarthing-dist/guides/AGENT-SCOPES.md +0 -201
  230. package/pennyfarthing-dist/guides/HOOKS.md +0 -230
  231. package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +0 -338
  232. package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +0 -193
  233. package/pennyfarthing-dist/guides/agent-template-strategic.md +0 -148
  234. package/pennyfarthing-dist/guides/agent-template-tactical.md +0 -162
  235. package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +0 -746
  236. package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +0 -574
  237. package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +0 -488
  238. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +0 -402
  239. package/pennyfarthing-dist/guides/permission-protocol.md +0 -188
  240. package/pennyfarthing-dist/guides/persona-loading.md +0 -46
  241. package/pennyfarthing-dist/guides/persona-system.md +0 -294
  242. package/pennyfarthing-dist/guides/shared-agent-behavior.md +0 -388
  243. package/pennyfarthing-dist/guides/shared-context.md +0 -147
  244. package/pennyfarthing-dist/guides/strategic-agent-behavior.md +0 -348
  245. package/pennyfarthing-dist/guides/tactical-agent-behavior.md +0 -1041
  246. package/pennyfarthing-dist/guides/workflow-schema.md +0 -195
  247. package/pennyfarthing-dist/guides/worktree-mode.md +0 -113
  248. package/pennyfarthing-dist/output-styles/teaching.md +0 -33
  249. package/pennyfarthing-dist/output-styles/terse.md +0 -20
  250. package/pennyfarthing-dist/output-styles/verbose.md +0 -28
  251. package/pennyfarthing-dist/personas/themes/1984.yaml +0 -312
  252. package/pennyfarthing-dist/personas/themes/a-team.yaml +0 -207
  253. package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +0 -300
  254. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +0 -330
  255. package/pennyfarthing-dist/personas/themes/all-stars.yaml +0 -332
  256. package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +0 -320
  257. package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +0 -306
  258. package/pennyfarthing-dist/personas/themes/arcane.yaml +0 -288
  259. package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +0 -331
  260. package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +0 -288
  261. package/pennyfarthing-dist/personas/themes/babylon-5.yaml +0 -288
  262. package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +0 -288
  263. package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +0 -288
  264. package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +0 -300
  265. package/pennyfarthing-dist/personas/themes/black-sails.yaml +0 -300
  266. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +0 -295
  267. package/pennyfarthing-dist/personas/themes/bobiverse.yaml +0 -288
  268. package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +0 -327
  269. package/pennyfarthing-dist/personas/themes/catch-22.yaml +0 -316
  270. package/pennyfarthing-dist/personas/themes/classical-composers.yaml +0 -310
  271. package/pennyfarthing-dist/personas/themes/control.yaml +0 -197
  272. package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +0 -320
  273. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +0 -323
  274. package/pennyfarthing-dist/personas/themes/deadwood.yaml +0 -300
  275. package/pennyfarthing-dist/personas/themes/dickens.yaml +0 -320
  276. package/pennyfarthing-dist/personas/themes/discworld.yaml +0 -332
  277. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +0 -290
  278. package/pennyfarthing-dist/personas/themes/don-quixote.yaml +0 -320
  279. package/pennyfarthing-dist/personas/themes/dune.yaml +0 -307
  280. package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +0 -320
  281. package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +0 -288
  282. package/pennyfarthing-dist/personas/themes/fargo.yaml +0 -330
  283. package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +0 -312
  284. package/pennyfarthing-dist/personas/themes/firefly.yaml +0 -328
  285. package/pennyfarthing-dist/personas/themes/foundation.yaml +0 -290
  286. package/pennyfarthing-dist/personas/themes/futurama.yaml +0 -321
  287. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +0 -290
  288. package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +0 -243
  289. package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +0 -308
  290. package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +0 -308
  291. package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +0 -330
  292. package/pennyfarthing-dist/personas/themes/hannibal.yaml +0 -300
  293. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +0 -324
  294. package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +0 -291
  295. package/pennyfarthing-dist/personas/themes/historical-figures.yaml +0 -288
  296. package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +0 -331
  297. package/pennyfarthing-dist/personas/themes/house-md.yaml +0 -321
  298. package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +0 -289
  299. package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +0 -300
  300. package/pennyfarthing-dist/personas/themes/jane-austen.yaml +0 -287
  301. package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +0 -320
  302. package/pennyfarthing-dist/personas/themes/justified.yaml +0 -300
  303. package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +0 -219
  304. package/pennyfarthing-dist/personas/themes/les-miserables.yaml +0 -299
  305. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +0 -334
  306. package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +0 -334
  307. package/pennyfarthing-dist/personas/themes/mad-max.yaml +0 -355
  308. package/pennyfarthing-dist/personas/themes/mad-men.yaml +0 -289
  309. package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +0 -300
  310. package/pennyfarthing-dist/personas/themes/mash.yaml +0 -334
  311. package/pennyfarthing-dist/personas/themes/mass-effect.yaml +0 -289
  312. package/pennyfarthing-dist/personas/themes/military-commanders.yaml +0 -306
  313. package/pennyfarthing-dist/personas/themes/moby-dick.yaml +0 -320
  314. package/pennyfarthing-dist/personas/themes/monty-python.yaml +0 -303
  315. package/pennyfarthing-dist/personas/themes/neuromancer.yaml +0 -300
  316. package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +0 -329
  317. package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +0 -242
  318. package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +0 -298
  319. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +0 -220
  320. package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +0 -320
  321. package/pennyfarthing-dist/personas/themes/rome.yaml +0 -300
  322. package/pennyfarthing-dist/personas/themes/russian-masters.yaml +0 -318
  323. package/pennyfarthing-dist/personas/themes/sandman.yaml +0 -288
  324. package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +0 -320
  325. package/pennyfarthing-dist/personas/themes/shakespeare.yaml +0 -301
  326. package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +0 -289
  327. package/pennyfarthing-dist/personas/themes/snow-crash.yaml +0 -288
  328. package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +0 -300
  329. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +0 -230
  330. package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +0 -210
  331. package/pennyfarthing-dist/personas/themes/star-wars.yaml +0 -303
  332. package/pennyfarthing-dist/personas/themes/succession.yaml +0 -300
  333. package/pennyfarthing-dist/personas/themes/superfriends.yaml +0 -208
  334. package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +0 -236
  335. package/pennyfarthing-dist/personas/themes/the-americans.yaml +0 -300
  336. package/pennyfarthing-dist/personas/themes/the-crown.yaml +0 -300
  337. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +0 -213
  338. package/pennyfarthing-dist/personas/themes/the-good-place.yaml +0 -322
  339. package/pennyfarthing-dist/personas/themes/the-matrix.yaml +0 -353
  340. package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +0 -300
  341. package/pennyfarthing-dist/personas/themes/the-office.yaml +0 -330
  342. package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +0 -308
  343. package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +0 -300
  344. package/pennyfarthing-dist/personas/themes/the-wire.yaml +0 -311
  345. package/pennyfarthing-dist/personas/themes/the-witcher.yaml +0 -300
  346. package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +0 -302
  347. package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +0 -300
  348. package/pennyfarthing-dist/personas/themes/watchmen.yaml +0 -291
  349. package/pennyfarthing-dist/personas/themes/west-wing.yaml +0 -291
  350. package/pennyfarthing-dist/personas/themes/world-explorers.yaml +0 -320
  351. package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +0 -307
  352. package/pennyfarthing-dist/personas/themes/x-files.yaml +0 -302
  353. package/pennyfarthing-dist/scripts/add-short-names.mjs +0 -264
  354. package/pennyfarthing-dist/scripts/agent-session.sh +0 -367
  355. package/pennyfarthing-dist/scripts/check-context.sh +0 -187
  356. package/pennyfarthing-dist/scripts/check.sh +0 -497
  357. package/pennyfarthing-dist/scripts/deploy.sh +0 -284
  358. package/pennyfarthing-dist/scripts/doctor-dogfood.sh +0 -395
  359. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +0 -61
  360. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +0 -66
  361. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -35
  362. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +0 -166
  363. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -50
  364. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -71
  365. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -54
  366. package/pennyfarthing-dist/scripts/hooks/session-start.sh +0 -98
  367. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +0 -59
  368. package/pennyfarthing-dist/scripts/install-git-hooks.sh +0 -91
  369. package/pennyfarthing-dist/scripts/prime.sh +0 -161
  370. package/pennyfarthing-dist/scripts/release.sh +0 -198
  371. package/pennyfarthing-dist/scripts/repo-utils.sh +0 -778
  372. package/pennyfarthing-dist/scripts/run-ci.sh +0 -219
  373. package/pennyfarthing-dist/scripts/run.sh +0 -65
  374. package/pennyfarthing-dist/scripts/statusline.sh +0 -264
  375. package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -582
  376. package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +0 -107
  377. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +0 -597
  378. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +0 -514
  379. package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +0 -517
  380. package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -331
  381. package/pennyfarthing-dist/scripts/uninstall.sh +0 -271
  382. package/pennyfarthing-dist/scripts/utils/background-tasks.sh +0 -177
  383. package/pennyfarthing-dist/scripts/utils/check-status.sh +0 -251
  384. package/pennyfarthing-dist/scripts/utils/checkpoint.sh +0 -136
  385. package/pennyfarthing-dist/scripts/utils/common.sh +0 -157
  386. package/pennyfarthing-dist/scripts/utils/create-feature-branches.sh +0 -230
  387. package/pennyfarthing-dist/scripts/utils/file-lock.sh +0 -269
  388. package/pennyfarthing-dist/scripts/utils/find-related-work.sh +0 -231
  389. package/pennyfarthing-dist/scripts/utils/find-root.sh +0 -33
  390. package/pennyfarthing-dist/scripts/utils/generate-skill-docs.sh +0 -110
  391. package/pennyfarthing-dist/scripts/utils/git-status-all.sh +0 -127
  392. package/pennyfarthing-dist/scripts/utils/ground-truth-judge.py +0 -289
  393. package/pennyfarthing-dist/scripts/utils/jira/jira-lib.mjs +0 -443
  394. package/pennyfarthing-dist/scripts/utils/jira/jira-sync-story.mjs +0 -208
  395. package/pennyfarthing-dist/scripts/utils/jira/jira-sync.mjs +0 -198
  396. package/pennyfarthing-dist/scripts/utils/jira-claim-story.sh +0 -162
  397. package/pennyfarthing-dist/scripts/utils/jira-lib.sh +0 -463
  398. package/pennyfarthing-dist/scripts/utils/jira-sync-story.sh +0 -8
  399. package/pennyfarthing-dist/scripts/utils/jira-sync.sh +0 -8
  400. package/pennyfarthing-dist/scripts/utils/log-skill-usage.sh +0 -74
  401. package/pennyfarthing-dist/scripts/utils/logging.sh +0 -186
  402. package/pennyfarthing-dist/scripts/utils/repo-scan.sh +0 -141
  403. package/pennyfarthing-dist/scripts/utils/retry.sh +0 -76
  404. package/pennyfarthing-dist/scripts/utils/run-timestamp.sh +0 -7
  405. package/pennyfarthing-dist/scripts/utils/session-cleanup.sh +0 -319
  406. package/pennyfarthing-dist/scripts/utils/skill-usage-report.sh +0 -193
  407. package/pennyfarthing-dist/scripts/utils/sprint-common.sh +0 -286
  408. package/pennyfarthing-dist/scripts/utils/sprint-metrics.sh +0 -241
  409. package/pennyfarthing-dist/scripts/utils/swebench-judge.py +0 -400
  410. package/pennyfarthing-dist/scripts/utils/sync-epic-to-jira.sh +0 -16
  411. package/pennyfarthing-dist/scripts/utils/test-setup.sh +0 -337
  412. package/pennyfarthing-dist/scripts/utils/validate-subagent-frontmatter.sh +0 -160
  413. package/pennyfarthing-dist/scripts/worktree-manager.sh +0 -498
  414. package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +0 -236
  415. package/pennyfarthing-dist/skills/changelog/SKILL.md +0 -367
  416. package/pennyfarthing-dist/skills/code-review/SKILL.md +0 -168
  417. package/pennyfarthing-dist/skills/context-engineering/SKILL.md +0 -268
  418. package/pennyfarthing-dist/skills/cyclist/SKILL.md +0 -171
  419. package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +0 -421
  420. package/pennyfarthing-dist/skills/finalize-run/SKILL.md +0 -258
  421. package/pennyfarthing-dist/skills/jira/SKILL.md +0 -281
  422. package/pennyfarthing-dist/skills/judge/SKILL.md +0 -524
  423. package/pennyfarthing-dist/skills/just/SKILL.md +0 -160
  424. package/pennyfarthing-dist/skills/mermaid/SKILL.md +0 -240
  425. package/pennyfarthing-dist/skills/otel/skill.md +0 -222
  426. package/pennyfarthing-dist/skills/permissions/skill.md +0 -172
  427. package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +0 -173
  428. package/pennyfarthing-dist/skills/skill-registry.schema.json +0 -102
  429. package/pennyfarthing-dist/skills/skill-registry.yaml +0 -335
  430. package/pennyfarthing-dist/skills/sprint-context/SKILL.md +0 -120
  431. package/pennyfarthing-dist/skills/story-management/SKILL.md +0 -208
  432. package/pennyfarthing-dist/skills/testing/SKILL.md +0 -99
  433. package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +0 -124
  434. package/pennyfarthing-dist/skills/theme/skill.md +0 -129
  435. package/pennyfarthing-dist/skills/theme-creation/SKILL.md +0 -169
  436. package/pennyfarthing-dist/skills/workflow/SKILL.md +0 -160
  437. package/pennyfarthing-dist/skills/yq/SKILL.md +0 -264
  438. package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +0 -187
  439. package/pennyfarthing-dist/templates/LEADERBOARD.template.md +0 -59
  440. package/pennyfarthing-dist/templates/agent-scopes.yaml.template +0 -276
  441. package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +0 -61
  442. package/pennyfarthing-dist/templates/persona-config.yaml.template +0 -22
  443. package/pennyfarthing-dist/templates/preferences.yaml.template +0 -15
  444. package/pennyfarthing-dist/templates/settings.local.json.template +0 -90
  445. package/pennyfarthing-dist/templates/setup-env.sh.template +0 -18
  446. package/pennyfarthing-dist/templates/shared-context.md.template +0 -70
  447. package/pennyfarthing-dist/templates/sidecar/decisions.md.template +0 -40
  448. package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +0 -37
  449. package/pennyfarthing-dist/templates/sidecar/patterns.md.template +0 -34
  450. package/pennyfarthing-dist/workflows/agent-docs.yaml +0 -70
  451. package/pennyfarthing-dist/workflows/bdd.yaml +0 -58
  452. package/pennyfarthing-dist/workflows/tdd.yaml +0 -50
  453. package/pennyfarthing-dist/workflows/trivial.yaml +0 -40
  454. /package/{packages/core/bin → bin}/pennyfarthing.js +0 -0
  455. /package/{packages/core/dist → dist}/bmad/context-reader.d.ts +0 -0
  456. /package/{packages/core/dist → dist}/bmad/context-reader.d.ts.map +0 -0
  457. /package/{packages/core/dist → dist}/bmad/context-reader.js +0 -0
  458. /package/{packages/core/dist → dist}/bmad/context-reader.js.map +0 -0
  459. /package/{packages/core/dist → dist}/bmad/context-reader.test.d.ts +0 -0
  460. /package/{packages/core/dist → dist}/bmad/context-reader.test.d.ts.map +0 -0
  461. /package/{packages/core/dist → dist}/bmad/context-reader.test.js +0 -0
  462. /package/{packages/core/dist → dist}/bmad/context-reader.test.js.map +0 -0
  463. /package/{packages/core/dist → dist}/bmad/epics-parser.d.ts +0 -0
  464. /package/{packages/core/dist → dist}/bmad/epics-parser.d.ts.map +0 -0
  465. /package/{packages/core/dist → dist}/bmad/epics-parser.js +0 -0
  466. /package/{packages/core/dist → dist}/bmad/epics-parser.js.map +0 -0
  467. /package/{packages/core/dist → dist}/bmad/epics-parser.test.d.ts +0 -0
  468. /package/{packages/core/dist → dist}/bmad/epics-parser.test.d.ts.map +0 -0
  469. /package/{packages/core/dist → dist}/bmad/epics-parser.test.js +0 -0
  470. /package/{packages/core/dist → dist}/bmad/epics-parser.test.js.map +0 -0
  471. /package/{packages/core/dist → dist}/bmad/index.d.ts +0 -0
  472. /package/{packages/core/dist → dist}/bmad/index.d.ts.map +0 -0
  473. /package/{packages/core/dist → dist}/bmad/index.js +0 -0
  474. /package/{packages/core/dist → dist}/bmad/index.js.map +0 -0
  475. /package/{packages/core/dist → dist}/bmad/status-sync.d.ts +0 -0
  476. /package/{packages/core/dist → dist}/bmad/status-sync.d.ts.map +0 -0
  477. /package/{packages/core/dist → dist}/bmad/status-sync.js +0 -0
  478. /package/{packages/core/dist → dist}/bmad/status-sync.js.map +0 -0
  479. /package/{packages/core/dist → dist}/bmad/status-sync.test.d.ts +0 -0
  480. /package/{packages/core/dist → dist}/bmad/status-sync.test.d.ts.map +0 -0
  481. /package/{packages/core/dist → dist}/bmad/status-sync.test.js +0 -0
  482. /package/{packages/core/dist → dist}/bmad/status-sync.test.js.map +0 -0
  483. /package/{packages/core/dist → dist}/bmad/story-exporter.d.ts +0 -0
  484. /package/{packages/core/dist → dist}/bmad/story-exporter.d.ts.map +0 -0
  485. /package/{packages/core/dist → dist}/bmad/story-exporter.js +0 -0
  486. /package/{packages/core/dist → dist}/bmad/story-exporter.js.map +0 -0
  487. /package/{packages/core/dist → dist}/bmad/story-exporter.test.d.ts +0 -0
  488. /package/{packages/core/dist → dist}/bmad/story-exporter.test.d.ts.map +0 -0
  489. /package/{packages/core/dist → dist}/bmad/story-exporter.test.js +0 -0
  490. /package/{packages/core/dist → dist}/bmad/story-exporter.test.js.map +0 -0
  491. /package/{packages/core/dist → dist}/bmad/story-parser.d.ts +0 -0
  492. /package/{packages/core/dist → dist}/bmad/story-parser.d.ts.map +0 -0
  493. /package/{packages/core/dist → dist}/bmad/story-parser.js +0 -0
  494. /package/{packages/core/dist → dist}/bmad/story-parser.js.map +0 -0
  495. /package/{packages/core/dist → dist}/bmad/story-parser.test.d.ts +0 -0
  496. /package/{packages/core/dist → dist}/bmad/story-parser.test.d.ts.map +0 -0
  497. /package/{packages/core/dist → dist}/bmad/story-parser.test.js +0 -0
  498. /package/{packages/core/dist → dist}/bmad/story-parser.test.js.map +0 -0
  499. /package/{packages/core/dist → dist}/cli/commands/command.d.ts +0 -0
  500. /package/{packages/core/dist → dist}/cli/commands/command.d.ts.map +0 -0
  501. /package/{packages/core/dist → dist}/cli/commands/command.js +0 -0
  502. /package/{packages/core/dist → dist}/cli/commands/command.js.map +0 -0
  503. /package/{packages/core/dist → dist}/cli/commands/cyclist.test.d.ts +0 -0
  504. /package/{packages/core/dist → dist}/cli/commands/cyclist.test.d.ts.map +0 -0
  505. /package/{packages/core/dist → dist}/cli/commands/doctor.d.ts +0 -0
  506. /package/{packages/core/dist → dist}/cli/commands/doctor.d.ts.map +0 -0
  507. /package/{packages/core/dist → dist}/cli/commands/doctor.js +0 -0
  508. /package/{packages/core/dist → dist}/cli/commands/doctor.js.map +0 -0
  509. /package/{packages/core/dist → dist}/cli/commands/init.d.ts +0 -0
  510. /package/{packages/core/dist → dist}/cli/commands/init.d.ts.map +0 -0
  511. /package/{packages/core/dist → dist}/cli/commands/init.js +0 -0
  512. /package/{packages/core/dist → dist}/cli/commands/init.js.map +0 -0
  513. /package/{packages/core/dist → dist}/cli/commands/skill.d.ts +0 -0
  514. /package/{packages/core/dist → dist}/cli/commands/skill.d.ts.map +0 -0
  515. /package/{packages/core/dist → dist}/cli/commands/skill.js +0 -0
  516. /package/{packages/core/dist → dist}/cli/commands/skill.js.map +0 -0
  517. /package/{packages/core/dist → dist}/cli/commands/theme.d.ts +0 -0
  518. /package/{packages/core/dist → dist}/cli/commands/theme.d.ts.map +0 -0
  519. /package/{packages/core/dist → dist}/cli/commands/theme.js +0 -0
  520. /package/{packages/core/dist → dist}/cli/commands/theme.js.map +0 -0
  521. /package/{packages/core/dist → dist}/cli/commands/uninstall.d.ts +0 -0
  522. /package/{packages/core/dist → dist}/cli/commands/uninstall.d.ts.map +0 -0
  523. /package/{packages/core/dist → dist}/cli/commands/uninstall.js +0 -0
  524. /package/{packages/core/dist → dist}/cli/commands/uninstall.js.map +0 -0
  525. /package/{packages/core/dist → dist}/cli/commands/update.d.ts +0 -0
  526. /package/{packages/core/dist → dist}/cli/commands/version.d.ts +0 -0
  527. /package/{packages/core/dist → dist}/cli/commands/version.d.ts.map +0 -0
  528. /package/{packages/core/dist → dist}/cli/commands/version.js +0 -0
  529. /package/{packages/core/dist → dist}/cli/commands/version.js.map +0 -0
  530. /package/{packages/core/dist → dist}/cli/customization.test.d.ts +0 -0
  531. /package/{packages/core/dist → dist}/cli/customization.test.d.ts.map +0 -0
  532. /package/{packages/core/dist → dist}/cli/customization.test.js +0 -0
  533. /package/{packages/core/dist → dist}/cli/customization.test.js.map +0 -0
  534. /package/{packages/core/dist → dist}/cli/cyclist-migration.test.d.ts +0 -0
  535. /package/{packages/core/dist → dist}/cli/cyclist-migration.test.d.ts.map +0 -0
  536. /package/{packages/core/dist → dist}/cli/index.d.ts +0 -0
  537. /package/{packages/core/dist → dist}/cli/index.d.ts.map +0 -0
  538. /package/{packages/core/dist → dist}/cli/index.js +0 -0
  539. /package/{packages/core/dist → dist}/cli/index.js.map +0 -0
  540. /package/{packages/core/dist → dist}/cli/ocean-profiles.test.d.ts +0 -0
  541. /package/{packages/core/dist → dist}/cli/ocean-profiles.test.d.ts.map +0 -0
  542. /package/{packages/core/dist → dist}/cli/ocean-profiles.test.js +0 -0
  543. /package/{packages/core/dist → dist}/cli/ocean-profiles.test.js.map +0 -0
  544. /package/{packages/core/dist → dist}/cli/theme-maker.test.d.ts +0 -0
  545. /package/{packages/core/dist → dist}/cli/theme-maker.test.d.ts.map +0 -0
  546. /package/{packages/core/dist → dist}/cli/theme-maker.test.js +0 -0
  547. /package/{packages/core/dist → dist}/cli/theme-maker.test.js.map +0 -0
  548. /package/{packages/core/dist → dist}/cli/utils/files.d.ts +0 -0
  549. /package/{packages/core/dist → dist}/cli/utils/files.d.ts.map +0 -0
  550. /package/{packages/core/dist → dist}/cli/utils/files.js +0 -0
  551. /package/{packages/core/dist → dist}/cli/utils/files.js.map +0 -0
  552. /package/{packages/core/dist → dist}/cli/utils/logger.d.ts +0 -0
  553. /package/{packages/core/dist → dist}/cli/utils/logger.d.ts.map +0 -0
  554. /package/{packages/core/dist → dist}/cli/utils/logger.js +0 -0
  555. /package/{packages/core/dist → dist}/cli/utils/logger.js.map +0 -0
  556. /package/{packages/core/dist → dist}/cli/utils/manifest.d.ts +0 -0
  557. /package/{packages/core/dist → dist}/cli/utils/manifest.d.ts.map +0 -0
  558. /package/{packages/core/dist → dist}/cli/utils/manifest.js +0 -0
  559. /package/{packages/core/dist → dist}/cli/utils/manifest.js.map +0 -0
  560. /package/{packages/core/dist → dist}/cli/utils/node-modules.d.ts +0 -0
  561. /package/{packages/core/dist → dist}/cli/utils/node-modules.d.ts.map +0 -0
  562. /package/{packages/core/dist → dist}/cli/utils/node-modules.js +0 -0
  563. /package/{packages/core/dist → dist}/cli/utils/node-modules.js.map +0 -0
  564. /package/{packages/core/dist → dist}/cli/utils/prompts.d.ts +0 -0
  565. /package/{packages/core/dist → dist}/cli/utils/prompts.d.ts.map +0 -0
  566. /package/{packages/core/dist → dist}/cli/utils/prompts.js +0 -0
  567. /package/{packages/core/dist → dist}/cli/utils/prompts.js.map +0 -0
  568. /package/{packages/core/dist → dist}/cli/utils/symlinks.d.ts +0 -0
  569. /package/{packages/core/dist → dist}/cli/utils/symlinks.d.ts.map +0 -0
  570. /package/{packages/core/dist → dist}/cli/utils/symlinks.js +0 -0
  571. /package/{packages/core/dist → dist}/cli/utils/symlinks.js.map +0 -0
  572. /package/{packages/core/dist → dist}/cli/utils/themes.test.d.ts.map +0 -0
  573. /package/{packages/core/dist → dist}/cli/utils/version.d.ts +0 -0
  574. /package/{packages/core/dist → dist}/cli/utils/version.d.ts.map +0 -0
  575. /package/{packages/core/dist → dist}/cli/utils/version.js +0 -0
  576. /package/{packages/core/dist → dist}/cli/utils/version.js.map +0 -0
  577. /package/{packages/core/dist → dist}/cli/workspace.test.d.ts +0 -0
  578. /package/{packages/core/dist → dist}/cli/workspace.test.d.ts.map +0 -0
  579. /package/{packages/core/dist → dist}/permissions/index.d.ts +0 -0
  580. /package/{packages/core/dist → dist}/permissions/index.d.ts.map +0 -0
  581. /package/{packages/core/dist → dist}/permissions/index.js +0 -0
  582. /package/{packages/core/dist → dist}/permissions/index.js.map +0 -0
  583. /package/{packages/core/dist → dist}/permissions/permission-schema.d.ts +0 -0
  584. /package/{packages/core/dist → dist}/permissions/permission-schema.d.ts.map +0 -0
  585. /package/{packages/core/dist → dist}/permissions/permission-schema.js +0 -0
  586. /package/{packages/core/dist → dist}/permissions/permission-schema.js.map +0 -0
  587. /package/{packages/core/dist → dist}/permissions/permission-schema.test.d.ts +0 -0
  588. /package/{packages/core/dist → dist}/permissions/permission-schema.test.d.ts.map +0 -0
  589. /package/{packages/core/dist → dist}/permissions/permission-schema.test.js +0 -0
  590. /package/{packages/core/dist → dist}/permissions/permission-schema.test.js.map +0 -0
  591. /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.d.ts +0 -0
  592. /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.d.ts.map +0 -0
  593. /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.js +0 -0
  594. /package/{packages/core/dist → dist}/scripts/add-ocean-profiles.js.map +0 -0
  595. /package/{packages/core/dist → dist}/scripts/benchmark-integration.d.ts +0 -0
  596. /package/{packages/core/dist → dist}/scripts/benchmark-integration.d.ts.map +0 -0
  597. /package/{packages/core/dist → dist}/scripts/benchmark-integration.js +0 -0
  598. /package/{packages/core/dist → dist}/scripts/benchmark-integration.js.map +0 -0
  599. /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.d.ts +0 -0
  600. /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.d.ts.map +0 -0
  601. /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.js +0 -0
  602. /package/{packages/core/dist → dist}/scripts/benchmark-integration.test.js.map +0 -0
  603. /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.d.ts +0 -0
  604. /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.d.ts.map +0 -0
  605. /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.js +0 -0
  606. /package/{packages/core/dist → dist}/scripts/debugging-scenarios.test.js.map +0 -0
  607. /package/{packages/core/dist → dist}/scripts/generate-all-spiders.d.ts +0 -0
  608. /package/{packages/core/dist → dist}/scripts/generate-all-spiders.d.ts.map +0 -0
  609. /package/{packages/core/dist → dist}/scripts/generate-all-spiders.js +0 -0
  610. /package/{packages/core/dist → dist}/scripts/generate-all-spiders.js.map +0 -0
  611. /package/{packages/core/dist → dist}/scripts/generate-report.d.ts +0 -0
  612. /package/{packages/core/dist → dist}/scripts/generate-report.d.ts.map +0 -0
  613. /package/{packages/core/dist → dist}/scripts/generate-report.js +0 -0
  614. /package/{packages/core/dist → dist}/scripts/generate-report.js.map +0 -0
  615. /package/{packages/core/dist → dist}/scripts/generate-report.test.d.ts +0 -0
  616. /package/{packages/core/dist → dist}/scripts/generate-report.test.d.ts.map +0 -0
  617. /package/{packages/core/dist → dist}/scripts/generate-report.test.js +0 -0
  618. /package/{packages/core/dist → dist}/scripts/generate-report.test.js.map +0 -0
  619. /package/{packages/core/dist → dist}/scripts/generate-spider-report.d.ts +0 -0
  620. /package/{packages/core/dist → dist}/scripts/generate-spider-report.d.ts.map +0 -0
  621. /package/{packages/core/dist → dist}/scripts/generate-spider-report.js +0 -0
  622. /package/{packages/core/dist → dist}/scripts/generate-spider-report.js.map +0 -0
  623. /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.d.ts +0 -0
  624. /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.d.ts.map +0 -0
  625. /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.js +0 -0
  626. /package/{packages/core/dist → dist}/scripts/generate-spider-report.test.js.map +0 -0
  627. /package/{packages/core/dist → dist}/scripts/generate-spider.test.d.ts +0 -0
  628. /package/{packages/core/dist → dist}/scripts/generate-spider.test.d.ts.map +0 -0
  629. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.d.ts +0 -0
  630. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.d.ts.map +0 -0
  631. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.js +0 -0
  632. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.js.map +0 -0
  633. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.d.ts +0 -0
  634. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.d.ts.map +0 -0
  635. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.js +0 -0
  636. /package/{packages/core/dist → dist}/scripts/job-fair-aggregator.test.js.map +0 -0
  637. /package/{packages/core/dist → dist}/scripts/run-ci.test.d.ts +0 -0
  638. /package/{packages/core/dist → dist}/scripts/run-ci.test.d.ts.map +0 -0
  639. /package/{packages/core/dist → dist}/scripts/run-ci.test.js +0 -0
  640. /package/{packages/core/dist → dist}/scripts/run-ci.test.js.map +0 -0
  641. /package/{packages/core/dist → dist}/scripts/theme-detail.test.d.ts +0 -0
  642. /package/{packages/core/dist → dist}/scripts/theme-detail.test.d.ts.map +0 -0
  643. /package/{packages/core/dist → dist}/scripts/theme-detail.test.js +0 -0
  644. /package/{packages/core/dist → dist}/scripts/theme-detail.test.js.map +0 -0
  645. /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.d.ts +0 -0
  646. /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.d.ts.map +0 -0
  647. /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.js +0 -0
  648. /package/{packages/core/dist → dist}/scripts/validate-ocean-profiles.js.map +0 -0
  649. /package/{packages/core/dist → dist}/workflow/generic-handoff.test.d.ts +0 -0
  650. /package/{packages/core/dist → dist}/workflow/generic-handoff.test.d.ts.map +0 -0
  651. /package/{packages/core/dist → dist}/workflow/generic-sm-finish.d.ts +0 -0
  652. /package/{packages/core/dist → dist}/workflow/generic-sm-finish.d.ts.map +0 -0
  653. /package/{packages/core/dist → dist}/workflow/generic-sm-finish.js +0 -0
  654. /package/{packages/core/dist → dist}/workflow/generic-sm-finish.js.map +0 -0
  655. /package/{packages/core/dist → dist}/workflow/generic-sm-setup.d.ts +0 -0
  656. /package/{packages/core/dist → dist}/workflow/generic-sm-setup.d.ts.map +0 -0
  657. /package/{packages/core/dist → dist}/workflow/generic-sm-setup.js +0 -0
  658. /package/{packages/core/dist → dist}/workflow/generic-sm-setup.js.map +0 -0
  659. /package/{packages/core/dist → dist}/workflow/sm-subagents.test.d.ts +0 -0
  660. /package/{packages/core/dist → dist}/workflow/sm-subagents.test.d.ts.map +0 -0
  661. /package/{packages/core/dist → dist}/workflow/sm-subagents.test.js +0 -0
  662. /package/{packages/core/dist → dist}/workflow/sm-subagents.test.js.map +0 -0
  663. /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.d.ts +0 -0
  664. /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.d.ts.map +0 -0
  665. /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.js +0 -0
  666. /package/{packages/core/dist → dist}/workflow/story-workflow-routing.test.js.map +0 -0
  667. /package/{packages/core/dist → dist}/workflow/test-cache.d.ts +0 -0
  668. /package/{packages/core/dist → dist}/workflow/test-cache.d.ts.map +0 -0
  669. /package/{packages/core/dist → dist}/workflow/test-cache.js +0 -0
  670. /package/{packages/core/dist → dist}/workflow/test-cache.js.map +0 -0
  671. /package/{packages/core/dist → dist}/workflow/test-cache.test.d.ts +0 -0
  672. /package/{packages/core/dist → dist}/workflow/test-cache.test.d.ts.map +0 -0
  673. /package/{packages/core/dist → dist}/workflow/test-cache.test.js +0 -0
  674. /package/{packages/core/dist → dist}/workflow/test-cache.test.js.map +0 -0
  675. /package/{packages/core/dist → dist}/workflow/workflow-loader.d.ts +0 -0
  676. /package/{packages/core/dist → dist}/workflow/workflow-loader.d.ts.map +0 -0
  677. /package/{packages/core/dist → dist}/workflow/workflow-loader.js +0 -0
  678. /package/{packages/core/dist → dist}/workflow/workflow-loader.js.map +0 -0
  679. /package/{packages/core/dist → dist}/workflow/workflow-loader.test.d.ts +0 -0
  680. /package/{packages/core/dist → dist}/workflow/workflow-loader.test.d.ts.map +0 -0
  681. /package/{packages/core/dist → dist}/workflow/workflow-migration.test.d.ts +0 -0
  682. /package/{packages/core/dist → dist}/workflow/workflow-migration.test.d.ts.map +0 -0
  683. /package/{packages/core/dist → dist}/workflow/workflow-router.d.ts +0 -0
  684. /package/{packages/core/dist → dist}/workflow/workflow-router.d.ts.map +0 -0
  685. /package/{packages/core/dist → dist}/workflow/workflow-router.js +0 -0
  686. /package/{packages/core/dist → dist}/workflow/workflow-router.js.map +0 -0
  687. /package/{packages/core/dist → dist}/workflow/workflow-router.test.d.ts +0 -0
  688. /package/{packages/core/dist → dist}/workflow/workflow-router.test.d.ts.map +0 -0
  689. /package/{packages/core/dist → dist}/workflow/workflow-router.test.js +0 -0
  690. /package/{packages/core/dist → dist}/workflow/workflow-router.test.js.map +0 -0
  691. /package/{packages/core/dist → dist}/workflow/workflow-schema.test.d.ts +0 -0
  692. /package/{packages/core/dist → dist}/workflow/workflow-schema.test.d.ts.map +0 -0
@@ -1,454 +0,0 @@
1
- ---
2
- name: generic-handoff
3
- description: Workflow-driven handoff that reads phase requirements from workflow definition
4
- tools: Bash, Read, Edit, Grep
5
- model: haiku
6
- ---
7
- You are a workflow-driven handoff assistant. Complete the handoff for story {STORY_ID}.
8
-
9
- ## Parameters (provided by calling agent)
10
-
11
- | Param | Required | Description |
12
- |-------|----------|-------------|
13
- | `STORY_ID` | Yes | Story identifier (e.g., "31-10") |
14
- | `WORKFLOW` | Yes | Workflow name (e.g., "tdd", "trivial") |
15
- | `CURRENT_PHASE` | Yes | Current phase name (e.g., "red", "green", "review") |
16
- | `REPOS` | Yes | Repository or "pennyfarthing" |
17
- | `SESSION_FILE` | No | Defaults to `.session/{STORY_ID}-session.md` |
18
- | `VERDICT` | No | For review phase: "approved" or "rejected" |
19
- | `TEST_RESULT` | No | For test gates: "RED" or "GREEN" |
20
- | `ASSESSMENT_SECTION` | No | Section name to verify exists (e.g., "TEA Assessment") |
21
- | `PR_NUMBER` | No | For green→review: PR number to verify |
22
- | `BRANCH` | No | Feature branch name |
23
-
24
- ## Workflow-Driven Logic
25
-
26
- This handoff uses the CLI wrapper (`scripts/generic-handoff-cli.sh`) which calls the
27
- TypeScript implementation in `packages/core/src/workflow/generic-handoff.ts`.
28
-
29
- **Key operations:**
30
- 1. Check gate conditions: `./scripts/generic-handoff-cli.sh check-gate`
31
- 2. Find next phase: `./scripts/generic-handoff-cli.sh next-phase`
32
- 3. Format transitions: `./scripts/generic-handoff-cli.sh format-transition`
33
-
34
- **Gate types:**
35
- - `tests_fail` - Tests must be RED (TEA → Dev)
36
- - `tests_pass` - Tests must be GREEN (Dev → Reviewer)
37
- - `approval` - Requires APPROVED or REJECTED verdict (Reviewer → SM/Dev)
38
- - `manual` - No checks required, always passes (SM setup/finish)
39
- - `(none)` - Phases without gates are treated as `manual` (always pass)
40
-
41
- ### Step 1: Find Current Phase and Gate Type
42
-
43
- ```bash
44
- # Get current phase details including gate type
45
- ./scripts/generic-handoff-cli.sh find-phase --workflow {WORKFLOW} --phase {CURRENT_PHASE}
46
- ```
47
-
48
- Returns JSON with phase name, agent, and gate type (or null if no gate).
49
-
50
- ### Step 2: Verify Assessment Exists
51
-
52
- If ASSESSMENT_SECTION is provided:
53
- ```bash
54
- SESSION_FILE="$CLAUDE_PROJECT_DIR/.session/{STORY_ID}-session.md"
55
- grep -q "## {ASSESSMENT_SECTION}" "$SESSION_FILE"
56
- ```
57
-
58
- If NOT found: **STOP** with "Assessment not written. Agent must write {ASSESSMENT_SECTION} before handoff."
59
-
60
- ### Step 3: Gate-Specific Pre-Flight Verification
61
-
62
- Based on the gate type from the workflow, run the appropriate checks.
63
-
64
- ---
65
-
66
- ## Gate Type: `tests_fail` (RED phase - TEA → Dev)
67
-
68
- ### Pre-Flight Checks
69
-
70
- 1. **Tests are committed:**
71
- ```bash
72
- cd $CLAUDE_PROJECT_DIR && git log -1 --oneline
73
- ```
74
- Should show recent test commit.
75
-
76
- 2. **Tests are RED (failing as expected):**
77
-
78
- First check test cache (Story 31-8):
79
- ```bash
80
- SESSION_FILE="$CLAUDE_PROJECT_DIR/.session/{STORY_ID}-session.md"
81
- CURRENT_SHA=$(cd $CLAUDE_PROJECT_DIR && git rev-parse HEAD)
82
-
83
- if grep -q "^## Test Cache" "$SESSION_FILE" 2>/dev/null; then
84
- CACHE_SHA=$(grep "| Git SHA |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
85
- if [[ "$CACHE_SHA" == "$CURRENT_SHA" ]]; then
86
- CACHE_RESULT=$(grep "| Result |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
87
- CACHE_TIME=$(grep "| Last Run |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
88
- 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)
89
- NOW_EPOCH=$(date +%s)
90
- AGE_MINUTES=$(( (NOW_EPOCH - CACHE_EPOCH) / 60 ))
91
-
92
- if [[ $AGE_MINUTES -lt 5 ]]; then
93
- echo "Using cached test result: $CACHE_RESULT (${AGE_MINUTES}m old)"
94
- if [[ "$CACHE_RESULT" == "RED" ]]; then
95
- echo "✓ Tests are RED (cached) - ready for Dev"
96
- else
97
- echo "✗ Tests are GREEN - should be RED. STOP."
98
- fi
99
- fi
100
- fi
101
- fi
102
- ```
103
-
104
- If no valid cache or TEST_RESULT not provided, delegate to testing-runner:
105
- ```yaml
106
- Task tool:
107
- subagent_type: "general-purpose"
108
- model: "haiku"
109
- prompt: |
110
- Read and follow: .pennyfarthing/agents/testing-runner.md
111
-
112
- REPOS: {REPOS}
113
- CONTEXT: TEA handoff - verify tests are RED
114
- RUN_ID: {STORY_ID}-tea-handoff
115
- ```
116
-
117
- **STOP if tests are GREEN** - TEA must verify tests exercise new functionality.
118
-
119
- ### Session Update for tests_fail
120
-
121
- Add to session file:
122
- - TEA handoff summary
123
- - Test count (failing/passing)
124
- - Session log entry with test commit SHA
125
-
126
- ---
127
-
128
- ## Gate Type: `tests_pass` (GREEN phase - Dev → Reviewer)
129
-
130
- ### Pre-Flight Checks
131
-
132
- Run ALL checks and STOP if any fail:
133
-
134
- 1. **Quality gate checks pass:**
135
-
136
- First check test cache (Story 31-8):
137
- ```bash
138
- SESSION_FILE="$CLAUDE_PROJECT_DIR/.session/{STORY_ID}-session.md"
139
- CURRENT_SHA=$(cd $CLAUDE_PROJECT_DIR && git rev-parse HEAD)
140
-
141
- USE_CACHED_TESTS=false
142
- if grep -q "^## Test Cache" "$SESSION_FILE" 2>/dev/null; then
143
- CACHE_SHA=$(grep "| Git SHA |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
144
- CACHE_RESULT=$(grep "| Result |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
145
- CACHE_TIME=$(grep "| Last Run |" "$SESSION_FILE" | sed 's/.*| //' | sed 's/ |$//' | xargs)
146
-
147
- if [[ "$CACHE_SHA" == "$CURRENT_SHA" ]]; then
148
- 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)
149
- NOW_EPOCH=$(date +%s)
150
- AGE_MINUTES=$(( (NOW_EPOCH - CACHE_EPOCH) / 60 ))
151
-
152
- if [[ $AGE_MINUTES -lt 5 ]]; then
153
- echo "✓ Using cached test result: $CACHE_RESULT (${AGE_MINUTES}m old)"
154
- if [[ "$CACHE_RESULT" == "GREEN" ]]; then
155
- echo "✓ Tests passed (cached) - skipping redundant run"
156
- USE_CACHED_TESTS=true
157
- elif [[ "$CACHE_RESULT" == "RED" ]]; then
158
- echo "✗ Cached tests show failures - STOP"
159
- # Report failure, don't proceed
160
- fi
161
- fi
162
- fi
163
- fi
164
- ```
165
-
166
- If cache valid and GREEN, skip test execution. Otherwise run full quality gate:
167
- ```bash
168
- $CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check.sh
169
- ```
170
- If exit code non-zero: **STOP** - "Quality checks failed. Dev must fix issues before handoff."
171
-
172
- 2. **Git working tree is clean:**
173
- ```bash
174
- git status --porcelain
175
- ```
176
- Should be empty. If not: **STOP** - "Uncommitted changes. Dev must commit first."
177
-
178
- 3. **Changes pushed to remote:**
179
- ```bash
180
- git log origin/{BRANCH}..HEAD --oneline
181
- ```
182
- Should be empty. If not: **STOP** - "Unpushed commits. Dev must push first."
183
-
184
- 4. **PR exists and is open:**
185
- ```bash
186
- gh pr view {PR_NUMBER} --json state
187
- ```
188
- Should show "OPEN". If not: **STOP** - "PR not found or not open."
189
-
190
- ### Session Update for tests_pass
191
-
192
- Add to session file:
193
- - "Reviewer Handoff" section with:
194
- - Repo, branch, PR link
195
- - Key files to review (from `git diff --stat develop...HEAD`)
196
- - What was implemented summary
197
- - Session log entry for implementation completion
198
-
199
- ---
200
-
201
- ## Gate Type: `approval` (Review phase - Reviewer → SM or Dev)
202
-
203
- ### Pre-Flight Checks
204
-
205
- 1. **Reviewer Assessment exists and contains verdict:**
206
- ```bash
207
- grep -q "## Reviewer Assessment" "$SESSION_FILE" && \
208
- grep -E "(APPROVED|REJECTED)" "$SESSION_FILE"
209
- ```
210
-
211
- 2. **Verdict matches VERDICT parameter:**
212
- - If VERDICT=approved, assessment must say APPROVED
213
- - If VERDICT=rejected, assessment must say REJECTED
214
-
215
- If mismatch: **STOP** - "Verdict mismatch. Check assessment."
216
-
217
- ### Session Update for approval
218
-
219
- **If VERDICT=approved:**
220
- - Update status to `approved`
221
- - Mark workflow complete
222
- - Add session log: "PR approved, ready for SM to finish"
223
-
224
- **If VERDICT=rejected:**
225
- - Keep status as `in_progress`
226
- - Add "Rejection Summary" section with issues
227
- - Determine loop-back phase (search backwards for `tests_pass` gate)
228
- - Add session log: "PR rejected, returning to Dev"
229
-
230
- ---
231
-
232
- ## Gate Type: `manual` (SM setup phase)
233
-
234
- ### Pre-Flight Checks
235
-
236
- No automated checks required. Always passes.
237
-
238
- ### Session Update for manual
239
-
240
- - Update phase tracking
241
- - Mark workflow checkbox complete
242
-
243
- ---
244
-
245
- ## Step 4: Determine Next Phase
246
-
247
- Use the CLI to find the next phase:
248
-
249
- ```bash
250
- # Normal progression (forward)
251
- ./scripts/generic-handoff-cli.sh next-phase --workflow {WORKFLOW} --phase {CURRENT_PHASE}
252
-
253
- # Rejection (loop back to previous tests_pass phase)
254
- ./scripts/generic-handoff-cli.sh next-phase --workflow {WORKFLOW} --phase {CURRENT_PHASE} --verdict rejected
255
- ```
256
-
257
- Returns JSON with next phase name, agent, and gate type.
258
-
259
- ## Step 5: Update Session File
260
-
261
- 1. Read current session file
262
- 2. Update `## Workflow Tracking` section:
263
-
264
- ```markdown
265
- **Workflow:** {WORKFLOW}
266
- **Phase:** {NEXT_PHASE}
267
- **Phase Started:** {NOW}
268
-
269
- ### Phase History
270
- | Phase | Started | Ended | Duration |
271
- |-------|---------|-------|----------|
272
- | {CURRENT_PHASE} | {PHASE_STARTED} | {NOW} | {DURATION} |
273
- ```
274
-
275
- 3. Mark current workflow checkbox as complete
276
- 4. Update status based on transition (see gate-specific sections above)
277
- 5. Add gate-specific handoff sections (see above)
278
- 6. Add or update `## Handoff History` section (tracks context at each handoff):
279
-
280
- ```markdown
281
- ## Handoff History
282
-
283
- | Phase | Agent | Timestamp | Context % | Mode |
284
- |-------|-------|-----------|-----------|------|
285
- | {CURRENT_PHASE} | {CURRENT_AGENT} | {NOW} | {CONTEXT_PERCENT}% | {HANDOFF_MODE} |
286
- ```
287
-
288
- If section already exists, append row to the table.
289
-
290
- ### Phase Transition Timestamps
291
-
292
- ```bash
293
- NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
294
- PHASE_STARTED=$(grep "^\*\*Phase Started:\*\*" "$SESSION_FILE" | head -1 | sed 's/\*\*Phase Started:\*\* //' | xargs)
295
-
296
- # Calculate duration using CLI
297
- DURATION=$(./scripts/generic-handoff-cli.sh calculate-duration --started-at "$PHASE_STARTED" --ended-at "$NOW")
298
- ```
299
-
300
- Or use format-transition to get the full markdown:
301
-
302
- ```bash
303
- ./scripts/generic-handoff-cli.sh format-transition \
304
- --workflow {WORKFLOW} \
305
- --from {CURRENT_PHASE} \
306
- --to {NEXT_PHASE} \
307
- --started-at "$PHASE_STARTED" \
308
- --ended-at "$NOW"
309
- ```
310
-
311
- ## Step 6: Check Context Usage and Determine Handoff Behavior
312
-
313
- After gate passes, check context usage to determine how to proceed:
314
-
315
- ```bash
316
- # Run context check script
317
- CONTEXT_OUTPUT=$($CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/check-context.sh 2>/dev/null)
318
- eval "$CONTEXT_OUTPUT"
319
-
320
- # CONTEXT_PERCENT and CONTEXT_STATUS are now set
321
- # CONTEXT_STATUS will be "OK" (<60%) or "HIGH" (>=60%)
322
- ```
323
-
324
- Then read user's handoff mode preference from Cyclist settings:
325
-
326
- ```bash
327
- # Cyclist settings file location
328
- SETTINGS_FILE="$CLAUDE_PROJECT_DIR/.pennyfarthing/cyclist.yaml"
329
-
330
- # Read handoff_mode (new format), fall back to auto_handoff (legacy format)
331
- HANDOFF_MODE="manual"
332
-
333
- if [ -f "$SETTINGS_FILE" ]; then
334
- # Try new format first: handoff_mode: auto|manual
335
- MODE=$(grep -E "handoff_mode:" "$SETTINGS_FILE" 2>/dev/null | head -1 | sed 's/.*handoff_mode:\s*//' | tr -d "'" | tr -d '"' | xargs)
336
- if [ "$MODE" = "auto" ] || [ "$MODE" = "manual" ]; then
337
- HANDOFF_MODE="$MODE"
338
- else
339
- # Fall back to legacy format: auto_handoff: true|false
340
- AUTO_HANDOFF=$(grep -E "auto_handoff:" "$SETTINGS_FILE" 2>/dev/null | head -1 | sed 's/.*auto_handoff:\s*//' | tr -d "'" | tr -d '"' | xargs)
341
- if [ "$AUTO_HANDOFF" = "true" ]; then
342
- HANDOFF_MODE="auto"
343
- fi
344
- fi
345
- fi
346
- ```
347
-
348
- ### Handoff Decision Matrix
349
-
350
- | Context | Mode | Action |
351
- |---------|------|--------|
352
- | OK (<60%) | auto | Invoke next agent directly |
353
- | OK (<60%) | manual | Report ready, user invokes next agent |
354
- | HIGH (>=60%) | auto | Report: "Context high. Start fresh with /{next_agent}" |
355
- | HIGH (>=60%) | manual | Report: "Context high. Start fresh with /{next_agent}" |
356
-
357
- **Include in report:**
358
- - Context percentage and token count
359
- - Handoff mode setting
360
- - Whether direct invocation is recommended
361
-
362
- ## Step 7: Report Result
363
-
364
- ```
365
- HANDOFF COMPLETE
366
-
367
- From: {CURRENT_PHASE} ({CURRENT_AGENT})
368
- To: {NEXT_PHASE} ({NEXT_AGENT})
369
- Gate: {GATE_TYPE} - PASSED
370
- Workflow: {WORKFLOW}
371
-
372
- Context: {CONTEXT_PERCENT}% ({CONTEXT_TOKENS} tokens)
373
- Handoff Mode: {HANDOFF_MODE}
374
- Action: {INVOKE_DIRECTLY | USER_INVOKE | FRESH_SESSION}
375
-
376
- Ready for {NEXT_AGENT}.
377
-
378
- <!-- CYCLIST:HANDOFF:/{NEXT_AGENT_COMMAND} -->
379
- ```
380
-
381
- **CRITICAL:** The `<!-- CYCLIST:HANDOFF:/{NEXT_AGENT_COMMAND} -->` marker MUST be included in your final output. This is parsed by Cyclist to show the handoff prompt button to the user.
382
-
383
- Map `{NEXT_AGENT}` to command:
384
- - TEA → `/tea`
385
- - Dev → `/dev`
386
- - Reviewer → `/reviewer`
387
- - SM → `/sm`
388
-
389
- ## Turn Efficiency
390
-
391
- See `shared-agent-behavior.md` → Turn Efficiency Protocol for core patterns.
392
-
393
- ## Error Recovery
394
-
395
- ### Retry Pattern
396
- 1. **Log the failure:** Note which step failed and why
397
- 2. **Diagnose:** What specifically went wrong?
398
- 3. **Adjust:** Try a different approach (max 2 retries)
399
- 4. **Escalate:** If still failing, report to calling agent
400
-
401
- ### Common Failures by Gate Type
402
-
403
- #### tests_fail (TEA → Dev)
404
- | Failure | Diagnosis | Fix |
405
- |---------|-----------|-----|
406
- | Tests all GREEN | Tests don't exercise new code | Report - TEA must verify tests are correct |
407
- | Tests not committed | git commit failed | Check staging, try commit again |
408
- | Assessment missing | TEA didn't write it | STOP - TEA must write assessment first |
409
-
410
- #### tests_pass (Dev → Reviewer)
411
- | Failure | Diagnosis | Fix |
412
- |---------|-----------|-----|
413
- | Quality checks failed | Lint/type/test issue | Report back to Dev - fix before handoff |
414
- | Uncommitted changes | Dev forgot to commit | Report - Dev must commit first |
415
- | Not pushed | Git push failed | Check branch, try push again |
416
- | PR not found | gh pr view failed | Verify PR was created, check PR number |
417
- | Assessment missing | Dev didn't write it | STOP - Dev must write assessment first |
418
-
419
- #### approval (Reviewer → SM/Dev)
420
- | Failure | Diagnosis | Fix |
421
- |---------|-----------|-----|
422
- | Assessment missing | Reviewer didn't write it | STOP - Reviewer must write assessment first |
423
- | Assessment says opposite | Wrong VERDICT parameter | Use correct VERDICT value |
424
- | Verdict unclear | Assessment doesn't say APPROVED/REJECTED | Reviewer must add explicit verdict |
425
-
426
- ### Escalation Format
427
-
428
- If unable to complete handoff:
429
- ```
430
- HANDOFF BLOCKED
431
-
432
- Step failed: [which step]
433
- Gate type: [gate type]
434
- Error: [error message]
435
- Diagnosis: [what went wrong]
436
-
437
- Recommended fix: [what calling agent should do]
438
- ```
439
-
440
- **Never silently fail.** Always report what happened.
441
-
442
- ## Mapping: Deprecated Handoffs → Generic
443
-
444
- These handoffs are replaced by generic-handoff:
445
-
446
- | Old Subagent | CURRENT_PHASE | ASSESSMENT_SECTION | Gate | Key Checks |
447
- |--------------|---------------|-------------------|------|------------|
448
- | tea-handoff | red | TEA Assessment | tests_fail | Tests committed, tests RED |
449
- | dev-handoff | green/implement | Dev Assessment | tests_pass | Quality gates, git clean, pushed, PR exists |
450
- | reviewer-handoff-approve | review | Reviewer Assessment | approval | Verdict = APPROVED |
451
- | reviewer-handoff-reject | review | Reviewer Assessment | approval | Verdict = REJECTED |
452
-
453
- **Note:** `sm-handoff` is NOT deprecated. It handles the SM→TEA transition which has
454
- special setup requirements (Jira claim, branch creation) not covered by generic-handoff.
@@ -1,261 +0,0 @@
1
- ---
2
- name: generic-sm-finish
3
- description: Generic SM finish subagent - combines preflight and execute phases
4
- tools: Bash, Read, Edit, Write
5
- model: haiku
6
- ---
7
- You are a SM finish assistant. Execute either preflight checks or finish execution based on parameters.
8
-
9
- ## Phases
10
-
11
- **PHASE: preflight** - Run pre-finish checks (PR, lint, Jira) before SM writes summary
12
- **PHASE: execute** - Execute finish steps (archive, Jira transition, cleanup) after SM approval
13
-
14
- ## Placeholders
15
-
16
- **Preflight Phase:**
17
- - `{PHASE}` = "preflight"
18
- - `{STORY_ID}` - e.g., "32-8"
19
- - `{JIRA_KEY}` - e.g., "MSSCI-11027" (optional - skip Jira ops if missing)
20
- - `{REPOS}` - "api", "ui", "pennyfarthing", or "both"
21
- - `{BRANCH}` - e.g., "feat/32-8-hunt-summary"
22
-
23
- **Execute Phase:**
24
- - `{PHASE}` = "execute"
25
- - `{STORY_ID}` - e.g., "32-8"
26
- - `{STORY_TITLE}` - e.g., "Add auto-PR flag to finish flow"
27
- - `{SUMMARY_CONTENT}` - Full markdown summary written by SM
28
- - `{ARCHIVE_PATH}` - e.g., "sprint/archive/story-32-8-20251220.md"
29
- - `{AUTO_PR}` - "true" or "false" (default: "false")
30
-
31
- ## Project Root
32
- $CLAUDE_PROJECT_DIR (set by SessionStart hook)
33
-
34
- ---
35
-
36
- # PHASE: preflight
37
-
38
- Execute mechanical checks before SM writes completion summary.
39
-
40
- ## Turn Efficiency
41
-
42
- See `shared-agent-behavior.md` → Turn Efficiency Protocol for core patterns.
43
-
44
- ## Step 1: Check PR Status
45
-
46
- ```bash
47
- cd $CLAUDE_PROJECT_DIR/${REPO}
48
- gh pr view {BRANCH} --json state,merged,mergeable,url 2>/dev/null || echo "NO_PR"
49
- ```
50
-
51
- Report:
52
- - `merged` - PR already merged, proceed
53
- - `open` - PR exists but not merged (warning)
54
- - `NO_PR` - No PR found
55
-
56
- ## Step 2: Auto-fix Lint Issues
57
-
58
- ```bash
59
- cd $CLAUDE_PROJECT_DIR/${REPO}
60
- just lint 2>&1 || true
61
- just lint-fix 2>&1 || true
62
- git status --short
63
- ```
64
-
65
- If files changed, commit and push:
66
- ```bash
67
- git add -A && git commit -m "fix: lint issues for story {STORY_ID}" && git push origin {BRANCH}
68
- ```
69
-
70
- ## Step 3: Check Jira Status (if JIRA_KEY provided)
71
-
72
- **Skip this step if `{JIRA_KEY}` is not provided, empty, or invalid format.**
73
-
74
- **IMPORTANT: Validate JIRA_KEY format before using:**
75
- - Valid format: `MSSCI-NNNNN` (project prefix, dash, 4-5 digit number)
76
- - Invalid examples: `MSSCI-36` (too short - that's an epic number, not an issue key)
77
- - If format invalid, treat as missing and skip Jira ops
78
-
79
- ```bash
80
- # Validate format: must be MSSCI- followed by 4-5 digits
81
- if [[ ! "{JIRA_KEY}" =~ ^MSSCI-[0-9]{4,5}$ ]]; then
82
- echo "JIRA_KEY '{JIRA_KEY}' appears invalid (expected MSSCI-NNNNN format). Skipping Jira ops."
83
- # Set jira_skipped: true in report
84
- fi
85
- ```
86
-
87
- If JIRA_KEY is valid:
88
- ```bash
89
- jira issue view {JIRA_KEY} --plain 2>/dev/null | grep -E "Status:|Assignee:"
90
- ```
91
-
92
- Verify ready for "Done" transition.
93
-
94
- If JIRA_KEY is missing/empty:
95
- - Set `jira_current: "N/A"` and `jira_ready: true` in report
96
- - Log: "Jira sync skipped - no JIRA_KEY provided"
97
-
98
- ## Step 4: Check Sprint YAML Entry
99
-
100
- ```bash
101
- grep -A20 "id: \"{STORY_ID}\"" $CLAUDE_PROJECT_DIR/sprint/current-sprint.yaml
102
- ```
103
-
104
- Extract acceptance criteria count.
105
-
106
- ## Step 5: Check Session File
107
-
108
- ```bash
109
- cat $CLAUDE_PROJECT_DIR/.session/{STORY_ID}-session.md
110
- ```
111
-
112
- Count checked vs unchecked acceptance criteria:
113
- - `- [x]` = checked
114
- - `- [ ]` = unchecked
115
-
116
- ## Step 6: Output JSON Report
117
-
118
- ```json
119
- {
120
- "pr_status": { "{REPO}": "merged|open|NO_PR" },
121
- "lint_status": { "{REPO}": "clean|fixed|failed" },
122
- "jira_current": "In Progress",
123
- "jira_ready": true,
124
- "jira_skipped": false,
125
- "acceptance_criteria": { "total": 7, "checked": 7 },
126
- "ready_to_finish": true,
127
- "issues": [],
128
- "warnings": ["PR for api is still open"]
129
- }
130
- ```
131
-
132
- **When JIRA_KEY is missing/empty:**
133
- ```json
134
- {
135
- "jira_current": "N/A",
136
- "jira_ready": true,
137
- "jira_skipped": true,
138
- ...
139
- }
140
- ```
141
-
142
- **ready_to_finish** is true when:
143
- - PR merged (or acceptable without PR)
144
- - Lint clean or fixed
145
- - All acceptance criteria checked
146
- - No critical issues
147
-
148
- ---
149
-
150
- # PHASE: execute
151
-
152
- Execute mechanical finish steps after SM approval.
153
-
154
- ## Turn Efficiency
155
-
156
- See `shared-agent-behavior.md` → Turn Efficiency Protocol for core patterns.
157
-
158
- ## Step 1: Archive Session File
159
-
160
- Archive path: `sprint/archive/story-{STORY_ID}-{YYYYMMDD}.md`
161
-
162
- ```bash
163
- mv $CLAUDE_PROJECT_DIR/.session/{STORY_ID}-session.md {ARCHIVE_PATH}
164
- ```
165
-
166
- **IMPORTANT:** Session file should NOT exist in .session/ after this.
167
-
168
- ## Step 2: Write Summary File
169
-
170
- Write to `sprint/context/story-{STORY_ID}-summary.md`:
171
-
172
- ```markdown
173
- {SUMMARY_CONTENT}
174
- ```
175
-
176
- ## Step 3: Update Sprint YAML
177
-
178
- Change story status:
179
- ```yaml
180
- status: in_progress → status: done
181
- completed: {TODAY} # Add completion date
182
- ```
183
-
184
- ## Step 4: Sync Jira (if configured)
185
-
186
- **Skip this step if no Jira key exists for this story.** Check sprint YAML or session file for `jira:` field.
187
-
188
- If Jira key exists:
189
- ```bash
190
- $CLAUDE_PROJECT_DIR/scripts/run.sh jira-sync-story.sh "{STORY_ID}" --transition --points 2>/dev/null || true
191
- ```
192
-
193
- If no Jira key:
194
- - Log: "Jira sync skipped - no Jira key configured for story"
195
- - Set `jira_synced: false` in completion flags (this is NOT an error)
196
-
197
- Non-blocking: Jira errors or missing keys don't prevent completion.
198
-
199
- ## Step 5: Clean Up
200
-
201
- ```bash
202
- # Move story context to archive
203
- mv $CLAUDE_PROJECT_DIR/.session/context-story-{STORY_ID}.md $CLAUDE_PROJECT_DIR/sprint/archive/ 2>/dev/null || true
204
-
205
- # Clean up temp files
206
- rm -f $CLAUDE_PROJECT_DIR/.session/*.log 2>/dev/null
207
- rm -f $CLAUDE_PROJECT_DIR/.session/*-handoff.md 2>/dev/null
208
- ```
209
-
210
- ## Step 6: Commit Archive
211
-
212
- ```bash
213
- git add sprint/archive/ sprint/context/ sprint/current-sprint.yaml .session/ && \
214
- git commit -m "chore({STORY_ID}): archive completed story and update sprint status"
215
- ```
216
-
217
- ## Step 7: Optional Auto-PR
218
-
219
- If `{AUTO_PR}` = "true":
220
- ```bash
221
- gh pr create --base develop --title "chore: archive story {STORY_ID}" --body "Automated story completion"
222
- ```
223
-
224
- ## Step 8: Output Completion Flags
225
-
226
- ```json
227
- {
228
- "success": true,
229
- "archived": true,
230
- "session_cleared": true,
231
- "archive_path": "{ARCHIVE_PATH}",
232
- "summary_path": "sprint/context/story-{STORY_ID}-summary.md",
233
- "jira_synced": true,
234
- "jira_skipped": false
235
- }
236
- ```
237
-
238
- **When no Jira key configured:**
239
- ```json
240
- {
241
- "success": true,
242
- "jira_synced": false,
243
- "jira_skipped": true,
244
- ...
245
- }
246
- ```
247
- Note: `jira_skipped: true` with `success: true` is valid - story completes without Jira.
248
-
249
- ---
250
-
251
- ## Error Handling
252
-
253
- **Critical failures** (stop execution):
254
- - Uncommitted changes in working directory
255
- - Session file missing
256
-
257
- **Non-critical warnings** (continue):
258
- - PR not merged yet
259
- - Lint issues remain
260
- - Jira sync failed
261
- - **No Jira key configured** - skip Jira operations entirely (NOT an error)