@pennyfarthing/core 10.0.3 → 10.1.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 (282) hide show
  1. package/README.md +9 -7
  2. package/package.json +7 -1
  3. package/packages/core/dist/cli/commands/cyclist.d.ts +5 -1
  4. package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -1
  5. package/packages/core/dist/cli/commands/cyclist.js +4 -4
  6. package/packages/core/dist/cli/commands/cyclist.js.map +1 -1
  7. package/packages/core/dist/cli/commands/cyclist.test.js +2 -2
  8. package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -1
  9. package/packages/core/dist/cli/commands/doctor-legacy.test.js +17 -16
  10. package/packages/core/dist/cli/commands/doctor-legacy.test.js.map +1 -1
  11. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
  12. package/packages/core/dist/cli/commands/doctor.js +251 -4
  13. package/packages/core/dist/cli/commands/doctor.js.map +1 -1
  14. package/packages/core/dist/cli/commands/init.d.ts +7 -0
  15. package/packages/core/dist/cli/commands/init.d.ts.map +1 -1
  16. package/packages/core/dist/cli/commands/init.js +43 -7
  17. package/packages/core/dist/cli/commands/init.js.map +1 -1
  18. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  19. package/packages/core/dist/cli/commands/update.js +26 -0
  20. package/packages/core/dist/cli/commands/update.js.map +1 -1
  21. package/packages/core/dist/cli/index.js +1 -1
  22. package/packages/core/dist/cli/index.js.map +1 -1
  23. package/packages/core/dist/cli/ocean-profiles.test.js +1 -1
  24. package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -1
  25. package/packages/core/dist/cli/utils/files.d.ts +10 -0
  26. package/packages/core/dist/cli/utils/files.d.ts.map +1 -1
  27. package/packages/core/dist/cli/utils/files.js +35 -0
  28. package/packages/core/dist/cli/utils/files.js.map +1 -1
  29. package/packages/core/dist/cli/utils/python.d.ts +22 -0
  30. package/packages/core/dist/cli/utils/python.d.ts.map +1 -0
  31. package/packages/core/dist/cli/utils/python.js +102 -0
  32. package/packages/core/dist/cli/utils/python.js.map +1 -0
  33. package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
  34. package/packages/core/dist/cli/utils/settings.js +10 -0
  35. package/packages/core/dist/cli/utils/settings.js.map +1 -1
  36. package/packages/core/dist/scripts/generate-report.d.ts.map +1 -1
  37. package/packages/core/dist/scripts/generate-report.js +11 -7
  38. package/packages/core/dist/scripts/generate-report.js.map +1 -1
  39. package/packages/core/dist/scripts/generate-spider-report.d.ts.map +1 -1
  40. package/packages/core/dist/scripts/generate-spider-report.js +12 -8
  41. package/packages/core/dist/scripts/generate-spider-report.js.map +1 -1
  42. package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -1
  43. package/packages/core/dist/scripts/generate-spider.js +6 -4
  44. package/packages/core/dist/scripts/generate-spider.js.map +1 -1
  45. package/packages/core/dist/scripts/generate-spider.test.js +2 -2
  46. package/packages/core/dist/scripts/generate-spider.test.js.map +1 -1
  47. package/pennyfarthing-dist/agents/README.md +1 -3
  48. package/pennyfarthing-dist/agents/architect.md +0 -6
  49. package/pennyfarthing-dist/agents/devops.md +0 -6
  50. package/pennyfarthing-dist/agents/orchestrator.md +0 -6
  51. package/pennyfarthing-dist/agents/pm.md +1 -7
  52. package/pennyfarthing-dist/agents/sm-finish.md +1 -1
  53. package/pennyfarthing-dist/agents/sm-setup.md +2 -2
  54. package/pennyfarthing-dist/agents/sm.md +4 -11
  55. package/pennyfarthing-dist/commands/architect.md +11 -3
  56. package/pennyfarthing-dist/commands/close-epic.md +24 -131
  57. package/pennyfarthing-dist/commands/create-theme.md +14 -24
  58. package/pennyfarthing-dist/commands/dev.md +11 -3
  59. package/pennyfarthing-dist/commands/devops.md +11 -3
  60. package/pennyfarthing-dist/commands/health-check.md +1 -3
  61. package/pennyfarthing-dist/commands/help.md +8 -12
  62. package/pennyfarthing-dist/commands/list-themes.md +14 -16
  63. package/pennyfarthing-dist/commands/orchestrator.md +11 -3
  64. package/pennyfarthing-dist/commands/parallel-work.md +1 -3
  65. package/pennyfarthing-dist/commands/pm.md +11 -3
  66. package/pennyfarthing-dist/commands/prime.md +6 -6
  67. package/pennyfarthing-dist/commands/repo-status.md +2 -2
  68. package/pennyfarthing-dist/commands/reviewer.md +11 -3
  69. package/pennyfarthing-dist/commands/run-ci.md +1 -1
  70. package/pennyfarthing-dist/commands/set-theme.md +14 -51
  71. package/pennyfarthing-dist/commands/setup.md +1 -1
  72. package/pennyfarthing-dist/commands/show-theme.md +14 -16
  73. package/pennyfarthing-dist/commands/sm.md +11 -3
  74. package/pennyfarthing-dist/commands/sprint.md +8 -8
  75. package/pennyfarthing-dist/commands/tea.md +11 -3
  76. package/pennyfarthing-dist/commands/tech-writer.md +11 -3
  77. package/pennyfarthing-dist/commands/theme-maker.md +14 -671
  78. package/pennyfarthing-dist/commands/theme.md +95 -0
  79. package/pennyfarthing-dist/commands/ux-designer.md +11 -3
  80. package/pennyfarthing-dist/commands/work.md +3 -5
  81. package/pennyfarthing-dist/guides/agent-coordination.md +11 -13
  82. package/pennyfarthing-dist/guides/agent-template-tactical.md +2 -3
  83. package/pennyfarthing-dist/guides/command-tag-taxonomy.md +212 -0
  84. package/pennyfarthing-dist/guides/hooks.md +5 -5
  85. package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +3 -3
  86. package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +9 -59
  87. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +4 -5
  88. package/pennyfarthing-dist/guides/prime.md +2 -2
  89. package/pennyfarthing-dist/guides/skill-schema.md +25 -26
  90. package/pennyfarthing-dist/guides/xml-tags.md +2 -2
  91. package/pennyfarthing-dist/scripts/README.md +2 -2
  92. package/pennyfarthing-dist/scripts/core/agent-session.sh +6 -2
  93. package/pennyfarthing-dist/scripts/core/prime.sh +8 -10
  94. package/pennyfarthing-dist/scripts/git/git-status-all.sh +1 -1
  95. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +8 -6
  96. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +3 -3
  97. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +14 -12
  98. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +4 -3
  99. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +11 -5
  100. package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +1 -1
  101. package/pennyfarthing-dist/scripts/misc/README.md +1 -1
  102. package/pennyfarthing-dist/scripts/misc/repo-utils.sh +3 -3
  103. package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +1 -2
  104. package/pennyfarthing-dist/scripts/sprint/README.md +32 -17
  105. package/pennyfarthing-dist/scripts/story/README.md +1 -1
  106. package/pennyfarthing-dist/scripts/test/test-setup.sh +1 -1
  107. package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +5 -5
  108. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +3 -79
  109. package/pennyfarthing-dist/scripts/theme/README.md +1 -1
  110. package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +0 -1
  111. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +62 -17
  112. package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +2 -2
  113. package/pennyfarthing-dist/skills/skill-registry.yaml +41 -28
  114. package/pennyfarthing-dist/skills/sprint/skill.md +386 -68
  115. package/pennyfarthing-dist/skills/story/skill.md +14 -206
  116. package/pennyfarthing-dist/skills/theme/skill.md +290 -75
  117. package/pennyfarthing-dist/skills/theme-creation/SKILL.md +23 -166
  118. package/pennyfarthing-dist/skills/workflow/skill.md +4 -4
  119. package/pennyfarthing-dist/templates/agent-scopes.yaml.template +0 -11
  120. package/pennyfarthing-dist/templates/auto-load-sm.sh.template +14 -0
  121. package/pennyfarthing-dist/templates/settings.local.json.template +9 -0
  122. package/pennyfarthing-dist/workflows/2party-tdd.yaml +399 -0
  123. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +42 -25
  124. package/pennyfarthing-dist/workflows/git-cleanup.yaml +1 -1
  125. package/pennyfarthing-dist/workflows/project-setup/steps/step-10-complete.md +1 -1
  126. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  127. package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
  128. package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  129. package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
  130. package/pennyfarthing_scripts/cli.py +15 -0
  131. package/pennyfarthing_scripts/codemarkers/__init__.py +19 -0
  132. package/pennyfarthing_scripts/codemarkers/__main__.py +6 -0
  133. package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
  134. package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
  135. package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
  136. package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
  137. package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
  138. package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
  139. package/pennyfarthing_scripts/codemarkers/analyze.py +326 -0
  140. package/pennyfarthing_scripts/codemarkers/cli.py +129 -0
  141. package/pennyfarthing_scripts/codemarkers/formatters.py +89 -0
  142. package/pennyfarthing_scripts/codemarkers/models.py +45 -0
  143. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  144. package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
  145. package/pennyfarthing_scripts/common/config.py +2 -1
  146. package/pennyfarthing_scripts/complexity/__init__.py +15 -0
  147. package/pennyfarthing_scripts/complexity/__main__.py +6 -0
  148. package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
  149. package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
  150. package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
  151. package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
  152. package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
  153. package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
  154. package/pennyfarthing_scripts/complexity/analyze.py +207 -0
  155. package/pennyfarthing_scripts/complexity/cli.py +78 -0
  156. package/pennyfarthing_scripts/complexity/formatters.py +64 -0
  157. package/pennyfarthing_scripts/complexity/models.py +32 -0
  158. package/pennyfarthing_scripts/deadcode/__init__.py +6 -0
  159. package/pennyfarthing_scripts/deadcode/__main__.py +6 -0
  160. package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
  161. package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
  162. package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
  163. package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
  164. package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
  165. package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
  166. package/pennyfarthing_scripts/deadcode/analyze.py +323 -0
  167. package/pennyfarthing_scripts/deadcode/cli.py +163 -0
  168. package/pennyfarthing_scripts/deadcode/formatters.py +106 -0
  169. package/pennyfarthing_scripts/deadcode/models.py +54 -0
  170. package/pennyfarthing_scripts/dependencies/__init__.py +20 -0
  171. package/pennyfarthing_scripts/dependencies/__main__.py +5 -0
  172. package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
  173. package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
  174. package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
  175. package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
  176. package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
  177. package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
  178. package/pennyfarthing_scripts/dependencies/analyze.py +155 -0
  179. package/pennyfarthing_scripts/dependencies/cli.py +72 -0
  180. package/pennyfarthing_scripts/dependencies/formatters.py +63 -0
  181. package/pennyfarthing_scripts/dependencies/models.py +39 -0
  182. package/pennyfarthing_scripts/healthscore/__init__.py +21 -0
  183. package/pennyfarthing_scripts/healthscore/__main__.py +6 -0
  184. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  185. package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  186. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  187. package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
  188. package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
  189. package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-314.pyc +0 -0
  190. package/pennyfarthing_scripts/healthscore/analyze.py +161 -0
  191. package/pennyfarthing_scripts/healthscore/cli.py +76 -0
  192. package/pennyfarthing_scripts/healthscore/formatters.py +46 -0
  193. package/pennyfarthing_scripts/healthscore/models.py +44 -0
  194. package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
  195. package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
  196. package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
  197. package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
  198. package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
  199. package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-314.pyc +0 -0
  200. package/pennyfarthing_scripts/hotspots/analyze.py +28 -1
  201. package/pennyfarthing_scripts/hotspots/cli.py +11 -9
  202. package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
  203. package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
  204. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
  205. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
  206. package/pennyfarthing_scripts/jira/__pycache__/create.cpython-314.pyc +0 -0
  207. package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-314.pyc +0 -0
  208. package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
  209. package/pennyfarthing_scripts/jira/bidirectional.py +42 -15
  210. package/pennyfarthing_scripts/jira/cli.py +78 -1
  211. package/pennyfarthing_scripts/jira/client.py +28 -0
  212. package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
  213. package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
  214. package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
  215. package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
  216. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  217. package/pennyfarthing_scripts/prime/workflow.py +5 -3
  218. package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-314.pyc +0 -0
  219. package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  220. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  221. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  222. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  223. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  224. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  225. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  226. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  227. package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-314.pyc +0 -0
  228. package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-314.pyc +0 -0
  229. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  230. package/pennyfarthing_scripts/sprint/archive.py +63 -6
  231. package/pennyfarthing_scripts/sprint/archive_epic.py +198 -85
  232. package/pennyfarthing_scripts/sprint/cli.py +1565 -65
  233. package/pennyfarthing_scripts/sprint/epic_add.py +173 -0
  234. package/pennyfarthing_scripts/sprint/loader.py +46 -2
  235. package/pennyfarthing_scripts/sprint/story_add.py +202 -27
  236. package/pennyfarthing_scripts/sprint/story_finish.py +211 -0
  237. package/pennyfarthing_scripts/sprint/validate_cmd.py +44 -5
  238. package/pennyfarthing_scripts/sprint/validator.py +13 -3
  239. package/pennyfarthing_scripts/sprint/work.py +43 -3
  240. package/pennyfarthing_scripts/sprint/yaml_io.py +124 -15
  241. package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
  242. package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
  243. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
  244. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
  245. package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
  246. package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
  247. package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
  248. package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
  249. package/pennyfarthing_scripts/tests/test_codemarkers.py +682 -0
  250. package/pennyfarthing_scripts/tests/test_healthscore.py +524 -0
  251. package/pennyfarthing_scripts/tests/test_sprint_package.py +166 -0
  252. package/pennyfarthing_scripts/tests/test_yaml_io.py +117 -0
  253. package/pennyfarthing_scripts/theme/__init__.py +5 -0
  254. package/pennyfarthing_scripts/theme/__main__.py +6 -0
  255. package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-314.pyc +0 -0
  256. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
  257. package/pennyfarthing_scripts/theme/cli.py +286 -0
  258. package/scripts/README.md +53 -0
  259. package/scripts/postinstall.cjs +34 -0
  260. package/pennyfarthing-dist/agents/workflow-status-check.md +0 -96
  261. package/pennyfarthing-dist/scripts/sprint/archive-story.sh +0 -133
  262. package/pennyfarthing-dist/scripts/sprint/available-stories.sh +0 -91
  263. package/pennyfarthing-dist/scripts/sprint/check-story.sh +0 -158
  264. package/pennyfarthing-dist/scripts/sprint/get-epic-field.sh +0 -52
  265. package/pennyfarthing-dist/scripts/sprint/get-story-field.sh +0 -63
  266. package/pennyfarthing-dist/scripts/sprint/list-future.sh +0 -145
  267. package/pennyfarthing-dist/scripts/sprint/new-sprint.sh +0 -110
  268. package/pennyfarthing-dist/scripts/sprint/promote-epic.sh +0 -148
  269. package/pennyfarthing-dist/scripts/sprint/sprint-common.sh +0 -415
  270. package/pennyfarthing-dist/scripts/sprint/sprint-info.sh +0 -33
  271. package/pennyfarthing-dist/scripts/sprint/sprint-metrics.sh +0 -230
  272. package/pennyfarthing-dist/scripts/sprint/sprint-status.sh +0 -134
  273. package/pennyfarthing-dist/scripts/sprint/validate-sprint-yaml.sh +0 -139
  274. package/pennyfarthing-dist/skills/sprint/scripts/archive-story.sh +0 -101
  275. package/pennyfarthing-dist/skills/sprint/scripts/available-stories.sh +0 -97
  276. package/pennyfarthing-dist/skills/sprint/scripts/check-story.sh +0 -164
  277. package/pennyfarthing-dist/skills/sprint/scripts/create-jira-epic.sh +0 -23
  278. package/pennyfarthing-dist/skills/sprint/scripts/new-sprint.sh +0 -116
  279. package/pennyfarthing-dist/skills/sprint/scripts/promote-epic.sh +0 -164
  280. package/pennyfarthing-dist/skills/sprint/scripts/sprint-info.sh +0 -39
  281. package/pennyfarthing-dist/skills/sprint/scripts/sprint-status.sh +0 -147
  282. package/pennyfarthing-dist/skills/sprint/scripts/sync-epic-jira.sh +0 -23
@@ -1,178 +1,35 @@
1
1
  ---
2
2
  name: theme-creation
3
- description: Create custom persona themes for Pennyfarthing. Use when users want to create, generate, or customize agent personas/themes, especially with AI-driven generation.
3
+ description: |
4
+ DEPRECATED: Use /theme maker instead.
5
+ Theme creation has been consolidated under /theme.
6
+ deprecated: true
7
+ redirect: theme
4
8
  ---
5
9
 
6
- # Theme Creation Skill
10
+ # /theme-creation - DEPRECATED
7
11
 
8
- <run>/theme-maker</run>
12
+ <run>
13
+ This skill is deprecated. Use `/theme maker` instead.
14
+ </run>
9
15
 
10
- <output>Interactive wizard that guides users through AI-driven, Guided, or Manual theme creation modes to build custom persona themes for Pennyfarthing agents</output>
16
+ <output>
17
+ Redirects to the consolidated `/theme` skill.
18
+ </output>
11
19
 
12
- ## Overview
20
+ Theme creation has been consolidated into the `/theme` skill. Use:
13
21
 
14
- This skill covers creating custom persona themes for Pennyfarthing agents. Themes define how each agent (SM, TEA, Dev, Reviewer, etc.) presents themselves with character names, styles, quotes, and personality traits.
22
+ | Old Command | New Command |
23
+ |-------------|-------------|
24
+ | `/theme-maker` | `/theme maker` |
25
+ | `/create-theme <name>` | `/theme create <name>` |
15
26
 
16
- ## When to Use This Skill
17
-
18
- **Invoke `/theme-maker` when the user:**
19
- - Asks to "create a theme" or "make a theme"
20
- - Wants "AI-driven theme generation"
21
- - Says "generate personas" or "generate characters"
22
- - Mentions a fictional universe and wants agents based on it
23
- - Asks for "custom personas" or "themed agents"
24
- - Wants to "customize agent characters"
25
- - Mentions any fictional universe + "theme" (e.g., "Star Wars theme", "pirates theme")
26
-
27
- **Trigger phrases:**
28
- - "create a [X] theme"
29
- - "make a theme based on [X]"
30
- - "generate [X] personas"
31
- - "I want [X] themed agents"
32
- - "AI-driven theme generation"
33
- - "custom theme for [universe]"
34
-
35
- ## Available Commands
27
+ The `/theme` skill now handles all theme operations:
36
28
 
37
29
  | Command | Purpose |
38
30
  |---------|---------|
39
- | `/theme-maker` | Interactive wizard with AI-driven, Guided, or Manual modes |
40
- | `/create-theme <name>` | Quick CLI-based theme creation (copies from base) |
41
- | `/set-theme <name>` | Activate an existing theme |
42
- | `/list-themes` | Show available themes |
43
- | `/show-theme <name>` | Display theme details |
44
-
45
- ## Theme Creation Modes
46
-
47
- ### AI-Driven Mode (Recommended)
48
-
49
- Best for: Users who describe a concept and want the AI to generate everything.
50
-
51
- **Flow:**
52
- 1. User provides universe/concept (e.g., "Gilligan's Island, humorous")
53
- 2. AI generates all 10 agent personas automatically
54
- 3. User previews and confirms or regenerates
55
- 4. Theme file written to `.claude/pennyfarthing/themes/`
56
-
57
- **What gets generated:**
58
- - Character names fitting the universe
59
- - OCEAN personality profiles (O/C/E/A/N scores 1-5)
60
- - Communication styles
61
- - Signature quotes
62
- - Emojis and visual descriptions
63
- - Helper assistants for each agent
64
-
65
- ### Guided Mode
66
-
67
- Best for: Users who want to pick characters from suggestions.
68
-
69
- **Flow:**
70
- 1. User provides universe/concept
71
- 2. AI suggests 3-4 character options per agent
72
- 3. User picks (or enters custom) for each
73
- 4. AI fills in remaining details (style, quote, OCEAN)
74
-
75
- ### Manual Mode
76
-
77
- Best for: Users who know exactly what they want.
78
-
79
- **Flow:**
80
- 1. User provides theme description
81
- 2. User enters character, style, quote for each agent
82
- 3. Optional: Specify OCEAN scores or let AI generate
83
- 4. Theme file created with user's exact specifications
84
-
85
- ## Agent Roles Reference
86
-
87
- When generating or suggesting characters, match to these roles:
88
-
89
- | Agent | Role | Character Should Be |
90
- |-------|------|---------------------|
91
- | orchestrator | Meta-coordinator | Pattern-seer, guide, overseer |
92
- | sm | Scrum Master | Leader, coordinator, keeps team together |
93
- | tea | Test Engineer | Analyst, detail-oriented, finds flaws |
94
- | dev | Developer | Builder, practical, gets things done |
95
- | reviewer | Code Reviewer | Critical, honest, high standards |
96
- | architect | System Architect | Big-picture thinker, systems designer |
97
- | pm | Product Manager | Strategic, stakeholder manager |
98
- | tech-writer | Documentation | Clear communicator, precise |
99
- | ux-designer | UX Design | User advocate, feels the experience |
100
- | devops | Infrastructure | Reliable, keeps systems running |
101
-
102
- ## Theme File Location
103
-
104
- - **User themes:** `.claude/pennyfarthing/themes/{name}.yaml`
105
- - **Built-in themes:** `pennyfarthing-dist/personas/themes/`
106
-
107
- ## OCEAN Personality Profiles
108
-
109
- Each agent gets an OCEAN profile (Big Five personality traits):
110
-
111
- | Dimension | Low (1-2) | High (4-5) |
112
- |-----------|-----------|------------|
113
- | **O**penness | Traditional, practical | Creative, curious |
114
- | **C**onscientiousness | Flexible, spontaneous | Organized, disciplined |
115
- | **E**xtraversion | Reserved, reflective | Outgoing, energetic |
116
- | **A**greeableness | Competitive, skeptical | Cooperative, trusting |
117
- | **N**euroticism | Calm, stable | Emotional, reactive |
118
-
119
- ## Examples
120
-
121
- ### Example 1: AI-Driven Theme Creation
122
-
123
- **User:** "Create a Gilligan's Island theme, make it humorous"
124
-
125
- **Action:** Invoke `/theme-maker`, select AI-Driven mode, generate 10 agents based on the show's characters.
126
-
127
- ### Example 2: Quick Theme from Base
128
-
129
- **User:** "Create a theme called my-team based on discworld"
130
-
131
- **Action:** Run `/create-theme my-team --base discworld`
132
-
133
- ### Example 3: List and Switch Themes
134
-
135
- **User:** "What themes are available? Switch to star-trek."
136
-
137
- **Action:** Run `/list-themes`, then `/set-theme star-trek`
138
-
139
- ## Validation Rules for Theme Names
140
-
141
- - Lowercase letters only
142
- - Must start with a letter
143
- - Hyphens allowed (no underscores or spaces)
144
- - No conflicts with existing themes
145
-
146
- ## Portrait Generation
147
-
148
- Each agent can have a `visual` field that describes their appearance for portrait generation.
149
-
150
- **Generate all portraits for a theme:**
151
- ```bash
152
- ./scripts/generate-portraits.sh --theme {name}
153
- ```
154
-
155
- **Generate a single agent's portrait:**
156
- ```bash
157
- ./scripts/generate-portraits.sh --theme {name} --role {role}
158
- ```
159
-
160
- **Dry run (preview):**
161
- ```bash
162
- ./scripts/generate-portraits.sh --theme {name} --dry-run
163
- ```
164
-
165
- **Requirements:**
166
- - Python 3 venv at `.venv/` with: `pip install diffusers transformers accelerate torch pillow pyyaml tqdm`
167
- - Apple Silicon Mac (MPS) or NVIDIA GPU (CUDA)
168
- - ~6.5GB model download on first run
169
-
170
- **Output:** `pennyfarthing-dist/personas/portraits/{theme}/{shortName}-{OCEAN}.png`
171
-
172
- ## Post-Creation Steps
173
-
174
- After creating a theme:
175
- 1. Theme file at `.claude/pennyfarthing/themes/{name}.yaml`
176
- 2. Activate with `/set-theme {name}`
177
- 3. Generate portraits with `./scripts/generate-portraits.sh --theme {name}`
178
- 4. Edit YAML directly for fine-tuning
31
+ | `/theme list` | List available themes |
32
+ | `/theme show [name]` | Show theme details |
33
+ | `/theme set <name>` | Set active theme |
34
+ | `/theme create <name>` | Create from base theme |
35
+ | `/theme maker` | Interactive AI-driven wizard |
@@ -257,7 +257,7 @@ Fix session file when handoffs didn't update phase tracking properly. This corre
257
257
 
258
258
  **When to use:**
259
259
  - SM detects wrong phase after handoff
260
- - `workflow-status-check` shows stale state
260
+ - Prime activation output shows stale state
261
261
  - Phase History table is incomplete
262
262
 
263
263
  **Run:**
@@ -340,6 +340,6 @@ workflow:
340
340
 
341
341
  For comprehensive documentation on creating stepped workflows, see:
342
342
 
343
- - **[docs/BIKELANE.md](../../docs/BIKELANE.md)** - Full BikeLane user guide
344
- - **[docs/adr/0005-bmad-workflow-import.md](../../docs/adr/0005-bmad-workflow-import.md)** - Technical ADR
345
- - **[pennyfarthing-dist/workflows/architecture.yaml](../workflows/architecture.yaml)** - Example implementation
343
+ - **[guides/bikelane.md](../../guides/bikelane.md)** - Full BikeLane user guide
344
+ - **[docs/adr/0013-bmad-workflow-import.md](../../docs/adr/0013-bmad-workflow-import.md)** - Technical ADR
345
+ - **[pennyfarthing-dist/workflows/architecture.yaml](../../workflows/architecture.yaml)** - Example implementation
@@ -67,7 +67,6 @@ strategic_agents:
67
67
  - Skill(tea)
68
68
  - Skill(dev)
69
69
  - Skill(reviewer)
70
- - Task(workflow-status-check)
71
70
  - Task(sm-*)
72
71
  context_files:
73
72
  - sprint/current-sprint.yaml
@@ -209,16 +208,6 @@ helper_subagents:
209
208
  - Bash # Run test commands only
210
209
  - Grep # Search test output
211
210
 
212
- workflow-status-check:
213
- description: "Scans session files and git status"
214
- scope: task
215
- model: haiku
216
- permissions:
217
- - Read
218
- - Glob
219
- - Grep
220
- - Bash # Git commands only
221
-
222
211
  sm-story-setup:
223
212
  description: "Creates branches and session files"
224
213
  scope: task
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env bash
2
+ # Auto-load /sm agent on new session start
3
+ # Injects additionalContext telling Claude to invoke the SM agent
4
+
5
+ set -euo pipefail
6
+
7
+ cat <<'EOF'
8
+ {
9
+ "hookSpecificOutput": {
10
+ "hookEventName": "SessionStart",
11
+ "additionalContext": "IMPORTANT: Auto-invoke the /sm agent immediately. Run the Skill tool with skill: \"sm\" as your first action. Do not greet the user or do anything else first."
12
+ }
13
+ }
14
+ EOF
@@ -51,6 +51,15 @@
51
51
  "command": "\"$CLAUDE_PROJECT_DIR\"/.pennyfarthing/project/hooks/setup-env.sh"
52
52
  }
53
53
  ]
54
+ },
55
+ {
56
+ "matcher": "startup",
57
+ "hooks": [
58
+ {
59
+ "type": "command",
60
+ "command": "\"$CLAUDE_PROJECT_DIR\"/.pennyfarthing/project/hooks/auto-load-sm.sh"
61
+ }
62
+ ]
54
63
  }
55
64
  ],
56
65
  "Stop": [
@@ -0,0 +1,399 @@
1
+ # 2-Party TDD Workflow - Story Refinement + Test-Driven Development
2
+ #
3
+ # Adds a story refinement gate before standard TDD. SM runs two focused
4
+ # brainstorm parties to surface gaps before TEA and Dev receive the story.
5
+ #
6
+ # Flow: SM → SM(party:dev) → SM(party:tea) → SM(quality) → TEA → Dev → QA → Reviewer → SM
7
+ #
8
+ # Review rejection loop:
9
+ # If Reviewer finds issues and tests passed → tests are incomplete.
10
+ # Reviewer writes findings to story → TEA writes failing tests → Dev fixes → QA verifies → Reviewer again.
11
+ # If Reviewer finds only lint/format issues → Dev fixes → QA verifies → Reviewer again.
12
+ # QA verification ensures Reviewer only sees verified-clean code.
13
+ #
14
+ # PR policy:
15
+ # Dev pushes the branch but does NOT create a PR.
16
+ # SM prepares PR content, user approves before submission.
17
+ # Default pr_mode: draft. User can set to "ready" in pennyfarthing config.
18
+ #
19
+ # Post-PR lifecycle:
20
+ # External reviews (AI bots, humans) are triaged via party-mode evaluation.
21
+ # Default stance: we do NOT adopt suggestions unless the team agrees.
22
+ # All reply comments are drafted locally and approved by user before posting.
23
+ # Communication with maintainers is irreversible — protect relationships.
24
+ # PR is monitored through merge/close, story status updated throughout.
25
+ #
26
+ # The "2 party" name refers to the two stakeholder perspectives consulted:
27
+ # Party 1: What does Dev need to succeed?
28
+ # Party 2: What does TEA need to succeed?
29
+
30
+ workflow:
31
+ name: 2party-tdd
32
+ description: Story refinement via two stakeholder parties, then TDD
33
+ version: "2.0.0"
34
+
35
+ phases:
36
+ - name: setup
37
+ agent: sm
38
+ output: [session_file, branches, story_context]
39
+
40
+ - name: refine-dev
41
+ agent: sm
42
+ input: [session_file, story_context]
43
+ output: [dev_gaps, refined_story]
44
+ instructions: |
45
+ Run a party-mode brainstorm with the prompt:
46
+
47
+ "What is missing from this story for Dev to be successful?"
48
+
49
+ Perspectives to include: Dev, Architect, Reviewer.
50
+ Focus areas: implementation clarity, acceptance criteria gaps,
51
+ ambiguous requirements, missing technical context, dependency risks.
52
+
53
+ Present findings to user. User decides what to add/change.
54
+ Update the story description with agreed refinements.
55
+ gate:
56
+ type: approval
57
+ condition: User reviewed dev-perspective gaps and decided on each item
58
+
59
+ - name: refine-tea
60
+ agent: sm
61
+ input: [session_file, refined_story]
62
+ output: [tea_gaps, refined_story]
63
+ instructions: |
64
+ Run a party-mode brainstorm with the prompt:
65
+
66
+ "What is missing from this story for TEA to be successful?"
67
+
68
+ Perspectives to include: TEA, Dev, Reviewer.
69
+ Focus areas: testability, acceptance criteria specificity,
70
+ edge cases, test data needs, integration test boundaries,
71
+ what "done" looks like in test terms.
72
+
73
+ Present findings to user. User decides what to add/change.
74
+ Update the story description with agreed refinements.
75
+ gate:
76
+ type: approval
77
+ condition: User reviewed tea-perspective gaps and decided on each item
78
+
79
+ - name: quality-pass
80
+ agent: sm
81
+ input: [refined_story, dev_gaps, tea_gaps]
82
+ output: [final_story]
83
+ instructions: |
84
+ Final quality check on the refined story before handoff to TEA.
85
+
86
+ Verify:
87
+ - Acceptance criteria are specific and testable
88
+ - No ambiguous language remains ("should", "maybe", "as needed")
89
+ - Implementation approach is clear enough for Dev
90
+ - Test strategy is clear enough for TEA
91
+ - Dependencies and blockers are documented
92
+ - Story scope hasn't crept beyond original intent
93
+
94
+ Fix any remaining issues, then hand off to TEA.
95
+ gate:
96
+ type: approval
97
+ condition: Story passes quality check and is ready for TEA
98
+
99
+ - name: red
100
+ agent: tea
101
+ input: [final_story, session_file]
102
+ output: [failing_tests]
103
+ instructions: |
104
+ Write failing tests for all acceptance criteria.
105
+
106
+ In addition to functional tests, include a quality gate check
107
+ that verifies new files pass the project's lint and format rules.
108
+ This catches code generation issues (wrong API usage, style
109
+ violations) at the test level rather than leaving them for review.
110
+
111
+ Examples by ecosystem:
112
+ - Node: spawn eslint and prettier --check on new files
113
+ - Go: spawn go vet and golangci-lint on new packages
114
+ - Python: spawn ruff check and ruff format --check
115
+ - Rust: spawn cargo clippy and cargo fmt --check
116
+ - Generic: check if the project has a top-level quality command
117
+ and spawn it (npm test, make lint, just check, etc.)
118
+
119
+ Include this as the last test function, e.g. testCodeQuality().
120
+ This ensures Dev can't commit GREEN without passing all gates.
121
+
122
+ In the TEA Assessment handoff, list what quality gates Dev
123
+ should expect to pass beyond the functional tests.
124
+ gate:
125
+ type: tests_fail
126
+ condition: All acceptance criteria have test coverage, including quality gate check
127
+
128
+ - name: green
129
+ agent: dev
130
+ input: [failing_tests, final_story]
131
+ output: [implementation, passing_tests]
132
+ instructions: |
133
+ Make tests GREEN. Implement minimal code to pass all failing tests.
134
+ Commit implementation. Push branch.
135
+ Hand off to QA/TEA for verification before review.
136
+
137
+ DO NOT create a PR — that happens in finish phase.
138
+
139
+ # QA verifies GREEN before Reviewer sees it
140
+ - name: verify
141
+ agent: tea
142
+ input: [implementation, passing_tests]
143
+ output: [verification_report]
144
+ instructions: |
145
+ QA verification of Dev's GREEN implementation.
146
+
147
+ Run the project's full quality gate — not just the new tests,
148
+ but everything CI would check: lint, format, type checks,
149
+ schema validation, and any other project-defined checks.
150
+ Use `/check` or `/run-ci` to discover and run all gates.
151
+
152
+ If verification fails, hand back to Dev with specifics.
153
+ If verification passes, hand off to Reviewer.
154
+
155
+ Reviewer should only receive code that is verified clean.
156
+ gate:
157
+ type: quality_pass
158
+ condition: >
159
+ All project quality gates pass locally — tests, lint, format,
160
+ type checks, and any CI-equivalent checks. Dev's implementation
161
+ is verified clean before Reviewer spends time on it.
162
+
163
+ - name: review
164
+ agent: reviewer
165
+ input: [verification_report, implementation, passing_tests]
166
+ output: [review_findings]
167
+ instructions: |
168
+ Adversarial code review. Write ALL findings to the story in
169
+ sprint/current-sprint.yaml under review_findings field.
170
+
171
+ On REJECT:
172
+ - Write findings with severity to story (review_findings field)
173
+ - Set review_verdict: rejected in story
174
+ - If findings are testable (logic bugs, missing edge cases):
175
+ Set workflow_phase to review-fix-tea → TEA writes failing tests first
176
+ - If findings are lint/format/dead-code only:
177
+ Set workflow_phase to review-fix-dev → Dev fixes directly
178
+ - DO NOT merge or create PRs
179
+
180
+ On APPROVE:
181
+ - Set review_verdict: approved in story
182
+ - DO NOT merge the PR — hand off to SM for finish phase
183
+ gate:
184
+ type: approval
185
+ condition: Code review passed, no blocking issues
186
+
187
+ # Review rejection loops — TEA writes tests for what Reviewer caught
188
+ - name: review-fix-tea
189
+ agent: tea
190
+ input: [review_findings, failing_tests]
191
+ output: [additional_failing_tests]
192
+ instructions: |
193
+ Reviewer found issues that tests missed. Read review_findings
194
+ from the story. Write failing tests for each testable finding.
195
+ Commit RED tests. Hand off to Dev.
196
+ gate:
197
+ type: tests_fail
198
+ condition: New tests cover reviewer findings
199
+
200
+ # Review rejection loop — Dev fixes all issues
201
+ - name: review-fix-dev
202
+ agent: dev
203
+ input: [review_findings, implementation]
204
+ output: [fixed_implementation]
205
+ instructions: |
206
+ Read review_findings from the story. Fix ALL findings:
207
+ - HIGH: Must fix (lint, format, dead code, logic)
208
+ - MEDIUM: Should fix
209
+ - LOW: Fix if trivial
210
+
211
+ Commit fixes. Push branch. Hand off to QA/TEA for verification.
212
+ Do NOT self-certify — someone else verifies your fix.
213
+
214
+ # QA verifies Dev's fixes before sending back to Reviewer
215
+ - name: review-fix-verify
216
+ agent: tea
217
+ input: [fixed_implementation, review_findings]
218
+ output: [verification_report]
219
+ instructions: |
220
+ QA verification step. Dev claims the fixes are done — verify it.
221
+
222
+ Run the project's full quality gate:
223
+ - Use `/check` or `/run-ci` to discover and run all gates
224
+ - Tests, lint, format, type checks, schema validation
225
+ - Confirm each review finding is actually addressed
226
+
227
+ If verification fails, hand back to Dev with specifics.
228
+ If verification passes, hand off to Reviewer for re-review.
229
+ gate:
230
+ type: quality_pass
231
+ condition: >
232
+ All project quality gates pass. Each review finding verified
233
+ as addressed. Code is clean enough for Reviewer's time.
234
+ next: review
235
+
236
+ # --- Post-implementation: PR lifecycle ---
237
+
238
+ - name: pr-prepare
239
+ agent: sm
240
+ input: [approval]
241
+ output: [pr_draft]
242
+ instructions: |
243
+ Prepare the PR for submission. This is our "one shot" with
244
+ the upstream maintainer — get it right before anyone sees it.
245
+
246
+ Steps:
247
+ 1. Draft PR title and description locally (do not post yet)
248
+ 2. Review the diff for:
249
+ - Unsigned commits
250
+ - Extra files that shouldn't be included
251
+ - Sensitive data leaks (.env, credentials, local paths)
252
+ - Missing sections in the PR description
253
+ 3. Run CI-equivalent checks locally one final time
254
+ 4. Present PR description and diff summary to user for approval
255
+ 5. Only after user approves: create PR (draft by default,
256
+ or per user pr_mode preference in pennyfarthing config)
257
+ gate:
258
+ type: approval
259
+ condition: User has reviewed and approved PR content before submission
260
+
261
+ # External review triage — AI reviewers and humans will comment
262
+ - name: pr-review-triage
263
+ agent: sm
264
+ input: [pr_draft]
265
+ output: [external_review_analysis]
266
+ instructions: |
267
+ Monitor the PR for external reviews (AI bots like CodeRabbit,
268
+ human reviewers, maintainer feedback). When reviews arrive:
269
+
270
+ CRITICAL PRINCIPLES:
271
+ - External reviewers lack our context: ADRs, story intent,
272
+ architectural decisions, and why we chose this approach.
273
+ - Default stance: we do NOT adopt a suggestion unless the
274
+ team agrees it fits. Silence is not consent — we must
275
+ actively agree to adopt each suggestion.
276
+ - Communication between humans cannot be undone. Damage to
277
+ relationships with maintainers is permanent. Every reply
278
+ is drafted locally and approved by the user before posting.
279
+
280
+ For each review comment or suggestion:
281
+ 1. Categorize: bug fix, style preference, architectural
282
+ concern, nitpick, misunderstanding, valid improvement
283
+ 2. Gather context the reviewer is missing (ADRs, story
284
+ decisions, prior art in the codebase)
285
+ 3. Present to user with initial assessment
286
+
287
+ When comments are gathered, hand off to pr-review-party
288
+ for structured evaluation.
289
+
290
+ - name: pr-review-party
291
+ agent: sm
292
+ input: [external_review_analysis]
293
+ output: [review_decisions]
294
+ instructions: |
295
+ Run a party-mode evaluation of external review comments.
296
+
297
+ Prompt (tune as needed):
298
+ "Evaluate each external review suggestion against:
299
+ 1. The intent and scope of this PR
300
+ 2. Fit with project architecture and ADRs
301
+ 3. Viability — does the proposed fix actually work?
302
+ 4. Negative impact — could this fix break something else?
303
+ 5. Precedent — does this conflict with established patterns?
304
+ 6. Effort vs value — is this worth doing now?"
305
+
306
+ Perspectives: Dev, Architect, Reviewer, PM.
307
+
308
+ For each suggestion, produce one of:
309
+ - ADOPT: Team agrees. Will fix, test, and reply with thanks.
310
+ - DECLINE: Doesn't fit. Draft a respectful reply explaining
311
+ why, with context the reviewer was missing.
312
+ - DEFER: Valid but out of scope. Draft reply acknowledging
313
+ the point and noting it for a future PR/issue.
314
+ - CLARIFY: Need more info from the reviewer. Draft a question.
315
+
316
+ Present decisions to user. User has final say on every item.
317
+ gate:
318
+ type: approval
319
+ condition: User has decided on every external review comment
320
+
321
+ - name: pr-review-respond
322
+ agent: dev
323
+ input: [review_decisions]
324
+ output: [fixes, draft_replies]
325
+ instructions: |
326
+ For each ADOPT decision:
327
+ 1. Implement the fix
328
+ 2. Write or update tests if needed
329
+ 3. Run full quality gate
330
+ 4. Draft a reply comment (e.g., "Good catch, fixed in abc123")
331
+
332
+ For each DECLINE/DEFER/CLARIFY decision:
333
+ 1. Draft a reply comment explaining the team's position
334
+ 2. Include context the reviewer was missing
335
+ 3. Be respectful — this is a relationship, not a debate
336
+
337
+ CRITICAL: Do NOT post any comments. All replies are drafted
338
+ locally and presented to the user for approval. The user may
339
+ edit wording, tone, or content before any reply is posted.
340
+
341
+ Commit fixes. Push branch. Present all draft replies to user.
342
+ gate:
343
+ type: approval
344
+ condition: >
345
+ User has approved every draft reply. Fixes pass quality
346
+ gates. No reply is posted without explicit user approval.
347
+
348
+ - name: pr-replies-post
349
+ agent: sm
350
+ input: [draft_replies]
351
+ output: [posted_replies]
352
+ instructions: |
353
+ Post user-approved replies to the PR. For each reply:
354
+ 1. Confirm user approval one final time
355
+ 2. Post the comment via gh CLI
356
+ 3. Log the posted reply for audit
357
+
358
+ After all replies posted, return to pr-review-triage to
359
+ monitor for follow-up comments. This loop continues until
360
+ the PR is merged, closed, or the user decides to stop.
361
+ next: pr-monitor
362
+
363
+ - name: pr-monitor
364
+ agent: sm
365
+ input: [posted_replies]
366
+ output: [pr_status]
367
+ instructions: |
368
+ Monitor the PR status. Check for:
369
+ - New review comments → back to pr-review-triage
370
+ - CI failures → hand to Dev for fixes
371
+ - Approval from maintainer → update story status
372
+ - Merge → move to pr-complete
373
+ - Close (rejected) → move to pr-complete with rejected status
374
+
375
+ Update the story workflow_phase as status changes.
376
+ If new comments arrive, loop back to pr-review-triage.
377
+ next_on:
378
+ new_comments: pr-review-triage
379
+ ci_failure: review-fix-dev
380
+ merged: pr-complete
381
+ closed: pr-complete
382
+
383
+ - name: pr-complete
384
+ agent: sm
385
+ input: [pr_status]
386
+ output: [archived_session, story_summary]
387
+ instructions: |
388
+ PR is merged or closed. Finalize the story:
389
+ 1. Update story status (done if merged, blocked/cancelled if closed)
390
+ 2. Update Jira ticket
391
+ 3. Archive session file
392
+ 4. Clean up branches if merged
393
+ 5. Write story summary for sprint record
394
+
395
+ triggers:
396
+ types: [feature, enhancement]
397
+ tags: [2party, refinement, complex]
398
+ points:
399
+ min: 3