@pennyfarthing/core 11.0.0 → 11.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) hide show
  1. package/README.md +81 -23
  2. package/package.json +1 -1
  3. package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.d.ts +20 -0
  4. package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.d.ts.map +1 -0
  5. package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.js +278 -0
  6. package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.js.map +1 -0
  7. package/packages/core/dist/cli/utils/constants.d.ts +8 -2
  8. package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
  9. package/packages/core/dist/cli/utils/constants.js +4 -1
  10. package/packages/core/dist/cli/utils/constants.js.map +1 -1
  11. package/packages/core/dist/cli/utils/constants.test.d.ts +10 -0
  12. package/packages/core/dist/cli/utils/constants.test.d.ts.map +1 -0
  13. package/packages/core/dist/cli/utils/constants.test.js +38 -0
  14. package/packages/core/dist/cli/utils/constants.test.js.map +1 -0
  15. package/packages/core/dist/consultation/consultation-protocol.d.ts +139 -0
  16. package/packages/core/dist/consultation/consultation-protocol.d.ts.map +1 -0
  17. package/packages/core/dist/consultation/consultation-protocol.js +178 -0
  18. package/packages/core/dist/consultation/consultation-protocol.js.map +1 -0
  19. package/packages/core/dist/consultation/consultation-protocol.test.d.ts +20 -0
  20. package/packages/core/dist/consultation/consultation-protocol.test.d.ts.map +1 -0
  21. package/packages/core/dist/consultation/consultation-protocol.test.js +474 -0
  22. package/packages/core/dist/consultation/consultation-protocol.test.js.map +1 -0
  23. package/packages/core/dist/consultation/dialogue-manager.d.ts +75 -0
  24. package/packages/core/dist/consultation/dialogue-manager.d.ts.map +1 -0
  25. package/packages/core/dist/consultation/dialogue-manager.js +334 -0
  26. package/packages/core/dist/consultation/dialogue-manager.js.map +1 -0
  27. package/packages/core/dist/consultation/dialogue-manager.test.d.ts +19 -0
  28. package/packages/core/dist/consultation/dialogue-manager.test.d.ts.map +1 -0
  29. package/packages/core/dist/consultation/dialogue-manager.test.js +444 -0
  30. package/packages/core/dist/consultation/dialogue-manager.test.js.map +1 -0
  31. package/packages/core/dist/public/js/react/react.js +3 -3
  32. package/packages/core/dist/scripts/theme-detail.test.d.ts +10 -0
  33. package/packages/core/dist/scripts/theme-detail.test.js +199 -0
  34. package/packages/core/dist/server/api/git.d.ts +13 -1
  35. package/packages/core/dist/server/api/git.d.ts.map +1 -1
  36. package/packages/core/dist/server/api/git.js +53 -34
  37. package/packages/core/dist/server/api/git.js.map +1 -1
  38. package/packages/core/dist/server/api/health-score.d.ts.map +1 -1
  39. package/packages/core/dist/server/api/health-score.js +25 -1
  40. package/packages/core/dist/server/api/health-score.js.map +1 -1
  41. package/packages/core/dist/server/api/settings.d.ts.map +1 -1
  42. package/packages/core/dist/server/api/settings.js +63 -1
  43. package/packages/core/dist/server/api/settings.js.map +1 -1
  44. package/packages/core/dist/server/api/theme-agents.d.ts.map +1 -1
  45. package/packages/core/dist/server/api/theme-agents.js +61 -0
  46. package/packages/core/dist/server/api/theme-agents.js.map +1 -1
  47. package/packages/core/dist/server/server.d.ts.map +1 -1
  48. package/packages/core/dist/server/server.js +17 -12
  49. package/packages/core/dist/server/server.js.map +1 -1
  50. package/packages/core/dist/shared/skill-search.test.js +2 -2
  51. package/packages/core/dist/workflow/gate-file-validation.d.ts +49 -0
  52. package/packages/core/dist/workflow/gate-file-validation.d.ts.map +1 -0
  53. package/packages/core/dist/workflow/gate-file-validation.js +157 -0
  54. package/packages/core/dist/workflow/gate-file-validation.js.map +1 -0
  55. package/packages/core/dist/workflow/gate-file-validation.test.d.ts +19 -0
  56. package/packages/core/dist/workflow/gate-file-validation.test.d.ts.map +1 -0
  57. package/packages/core/dist/workflow/gate-file-validation.test.js +536 -0
  58. package/packages/core/dist/workflow/gate-file-validation.test.js.map +1 -0
  59. package/packages/core/dist/workflow/gate-schema-validation.test.d.ts +14 -0
  60. package/packages/core/dist/workflow/gate-schema-validation.test.d.ts.map +1 -0
  61. package/packages/core/dist/workflow/gate-schema-validation.test.js +339 -0
  62. package/packages/core/dist/workflow/gate-schema-validation.test.js.map +1 -0
  63. package/packages/core/dist/workflow/handoff.js +2 -2
  64. package/packages/core/dist/workflow/handoff.js.map +1 -1
  65. package/packages/core/dist/workflow/handoff.test.js +16 -0
  66. package/packages/core/dist/workflow/handoff.test.js.map +1 -1
  67. package/packages/core/dist/workflow/workflow-schema.d.ts +4 -2
  68. package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
  69. package/packages/core/dist/workflow/workflow-schema.js +43 -8
  70. package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
  71. package/pennyfarthing-dist/agents/README.md +6 -14
  72. package/pennyfarthing-dist/agents/architect.md +43 -29
  73. package/pennyfarthing-dist/agents/ba.md +30 -29
  74. package/pennyfarthing-dist/agents/dev.md +32 -43
  75. package/pennyfarthing-dist/agents/devops.md +57 -21
  76. package/pennyfarthing-dist/agents/orchestrator.md +3 -10
  77. package/pennyfarthing-dist/agents/pm.md +45 -31
  78. package/pennyfarthing-dist/agents/reviewer.md +20 -66
  79. package/pennyfarthing-dist/agents/sm-setup.md +2 -2
  80. package/pennyfarthing-dist/agents/sm.md +8 -30
  81. package/pennyfarthing-dist/agents/tea.md +25 -41
  82. package/pennyfarthing-dist/agents/tech-writer.md +33 -90
  83. package/pennyfarthing-dist/agents/ux-designer.md +39 -39
  84. package/pennyfarthing-dist/commands/benchmark-control.md +8 -64
  85. package/pennyfarthing-dist/commands/benchmark.md +8 -480
  86. package/pennyfarthing-dist/commands/job-fair.md +8 -97
  87. package/pennyfarthing-dist/commands/pf-benchmark-control.md +70 -0
  88. package/pennyfarthing-dist/commands/pf-benchmark.md +486 -0
  89. package/pennyfarthing-dist/commands/pf-chore.md +4 -4
  90. package/pennyfarthing-dist/commands/pf-ci.md +40 -0
  91. package/pennyfarthing-dist/commands/pf-close-epic.md +9 -27
  92. package/pennyfarthing-dist/commands/pf-continue-session.md +9 -213
  93. package/pennyfarthing-dist/commands/pf-create-branches-from-story.md +11 -353
  94. package/pennyfarthing-dist/commands/pf-docs.md +28 -0
  95. package/pennyfarthing-dist/commands/pf-epic.md +67 -0
  96. package/pennyfarthing-dist/commands/pf-git-cleanup.md +11 -52
  97. package/pennyfarthing-dist/commands/pf-git.md +75 -0
  98. package/pennyfarthing-dist/commands/pf-help.md +110 -128
  99. package/pennyfarthing-dist/commands/pf-job-fair.md +102 -0
  100. package/pennyfarthing-dist/commands/pf-new-work.md +9 -18
  101. package/pennyfarthing-dist/commands/pf-parallel-work.md +6 -66
  102. package/pennyfarthing-dist/commands/pf-release.md +11 -76
  103. package/pennyfarthing-dist/commands/pf-repo-status.md +11 -44
  104. package/pennyfarthing-dist/commands/pf-run-ci.md +8 -111
  105. package/pennyfarthing-dist/commands/pf-session.md +51 -0
  106. package/pennyfarthing-dist/commands/pf-solo.md +447 -0
  107. package/pennyfarthing-dist/commands/pf-sprint-planning.md +8 -104
  108. package/pennyfarthing-dist/commands/pf-standalone.md +1 -1
  109. package/pennyfarthing-dist/commands/pf-start-epic.md +9 -163
  110. package/pennyfarthing-dist/commands/pf-sync-epic-to-jira.md +8 -179
  111. package/pennyfarthing-dist/commands/pf-sync-work-with-sprint.md +8 -368
  112. package/pennyfarthing-dist/commands/pf-update-domain-docs.md +8 -78
  113. package/pennyfarthing-dist/commands/solo.md +8 -442
  114. package/pennyfarthing-dist/guides/agent-behavior.md +13 -13
  115. package/pennyfarthing-dist/guides/agent-coordination.md +7 -7
  116. package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +6 -5
  117. package/pennyfarthing-dist/guides/bikerack.md +128 -0
  118. package/pennyfarthing-dist/guides/brownfield-tools.md +133 -0
  119. package/pennyfarthing-dist/guides/command-tag-taxonomy.md +2 -2
  120. package/pennyfarthing-dist/guides/gate-schema.md +227 -0
  121. package/pennyfarthing-dist/guides/gates.md +120 -0
  122. package/pennyfarthing-dist/guides/handoff-cli.md +116 -0
  123. package/pennyfarthing-dist/guides/hooks.md +86 -4
  124. package/pennyfarthing-dist/guides/output-styles.md +65 -0
  125. package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +5 -5
  126. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +4 -4
  127. package/pennyfarthing-dist/guides/prompt-patterns.md +5 -5
  128. package/pennyfarthing-dist/guides/reflector.md +4 -4
  129. package/pennyfarthing-dist/guides/session-artifacts.md +1 -1
  130. package/pennyfarthing-dist/guides/skill-schema.md +1 -1
  131. package/pennyfarthing-dist/guides/tandem-protocol.md +13 -1
  132. package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
  133. package/pennyfarthing-dist/guides/xml-tags.md +5 -4
  134. package/pennyfarthing-dist/personas/themes/hogans-heroes.yaml +11 -22
  135. package/pennyfarthing-dist/personas/themes/stephen-king.yaml +13 -24
  136. package/pennyfarthing-dist/scripts/core/dialogue-manager.sh +322 -0
  137. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +1 -1
  138. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +19 -14
  139. package/pennyfarthing-dist/scripts/portraits/generate-portraits.py +191 -57
  140. package/pennyfarthing-dist/scripts/portraits/generate-portraits.sh +26 -10
  141. package/pennyfarthing-dist/skills/pf-changelog/SKILL.md +4 -4
  142. package/pennyfarthing-dist/skills/pf-sprint/skill.md +1 -1
  143. package/pennyfarthing-dist/skills/skill-registry.schema.json +4 -0
  144. package/pennyfarthing-dist/skills/skill-registry.yaml +5 -0
  145. package/pennyfarthing-dist/workflows/2party-tdd.yaml +11 -0
  146. package/pennyfarthing-dist/workflows/agent-docs.yaml +2 -0
  147. package/pennyfarthing-dist/workflows/bdd-tandem.yaml +4 -0
  148. package/pennyfarthing-dist/workflows/bdd.yaml +4 -0
  149. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
  150. package/pennyfarthing-dist/workflows/tdd-tandem.yaml +3 -0
  151. package/pennyfarthing-dist/workflows/tdd.yaml +3 -0
  152. package/pennyfarthing-dist/workflows/trivial.yaml +2 -0
  153. package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
  154. package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
  155. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  156. package/pennyfarthing_scripts/__pycache__/config.cpython-314.pyc +0 -0
  157. package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
  158. package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
  159. package/pennyfarthing_scripts/__pycache__/jira_bidirectional_sync.cpython-314.pyc +0 -0
  160. package/pennyfarthing_scripts/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
  161. package/pennyfarthing_scripts/__pycache__/jira_sync.cpython-314.pyc +0 -0
  162. package/pennyfarthing_scripts/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
  163. package/pennyfarthing_scripts/__pycache__/output.cpython-314.pyc +0 -0
  164. package/pennyfarthing_scripts/__pycache__/patch_mode.cpython-314.pyc +0 -0
  165. package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
  166. package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  167. package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
  168. package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
  169. package/pennyfarthing_scripts/bc/__pycache__/__init__.cpython-314.pyc +0 -0
  170. package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
  171. package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
  172. package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
  173. package/pennyfarthing_scripts/bikerack/__pycache__/__main__.cpython-314.pyc +0 -0
  174. package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
  175. package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
  176. package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
  177. package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
  178. package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
  179. package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
  180. package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
  181. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  182. package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
  183. package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
  184. package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
  185. package/pennyfarthing_scripts/bikerack/cli.py +10 -11
  186. package/pennyfarthing_scripts/bikerack/debug_panel.py +218 -0
  187. package/pennyfarthing_scripts/bikerack/diffs_panel.py +203 -27
  188. package/pennyfarthing_scripts/brownfield/__pycache__/__init__.cpython-314.pyc +0 -0
  189. package/pennyfarthing_scripts/brownfield/__pycache__/__main__.cpython-314.pyc +0 -0
  190. package/pennyfarthing_scripts/brownfield/__pycache__/cli.cpython-314.pyc +0 -0
  191. package/pennyfarthing_scripts/brownfield/__pycache__/discover.cpython-314.pyc +0 -0
  192. package/pennyfarthing_scripts/cli.py +114 -0
  193. package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
  194. package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
  195. package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
  196. package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
  197. package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
  198. package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
  199. package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-314.pyc +0 -0
  200. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  201. package/pennyfarthing_scripts/common/__pycache__/output.cpython-314.pyc +0 -0
  202. package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
  203. package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
  204. package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
  205. package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
  206. package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
  207. package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
  208. package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
  209. package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
  210. package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
  211. package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
  212. package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
  213. package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
  214. package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
  215. package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
  216. package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
  217. package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
  218. package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
  219. package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
  220. package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
  221. package/pennyfarthing_scripts/epic/__init__.py +0 -0
  222. package/pennyfarthing_scripts/epic/cli.py +64 -0
  223. package/pennyfarthing_scripts/gate/__init__.py +1 -0
  224. package/pennyfarthing_scripts/gate/__pycache__/__init__.cpython-314.pyc +0 -0
  225. package/pennyfarthing_scripts/gate/__pycache__/cli.cpython-314.pyc +0 -0
  226. package/pennyfarthing_scripts/gate/__pycache__/validate.cpython-314.pyc +0 -0
  227. package/pennyfarthing_scripts/gate/cli.py +56 -0
  228. package/pennyfarthing_scripts/gate/validate.py +266 -0
  229. package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
  230. package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
  231. package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
  232. package/pennyfarthing_scripts/git_group/__init__.py +0 -0
  233. package/pennyfarthing_scripts/git_group/cli.py +100 -0
  234. package/pennyfarthing_scripts/handoff/__init__.py +1 -0
  235. package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-314.pyc +0 -0
  236. package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-314.pyc +0 -0
  237. package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
  238. package/pennyfarthing_scripts/handoff/__pycache__/gate_file.cpython-314.pyc +0 -0
  239. package/pennyfarthing_scripts/handoff/__pycache__/gate_runner.cpython-314.pyc +0 -0
  240. package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
  241. package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
  242. package/pennyfarthing_scripts/handoff/cli.py +120 -0
  243. package/pennyfarthing_scripts/handoff/complete_phase.py +155 -0
  244. package/pennyfarthing_scripts/handoff/gate_file.py +105 -0
  245. package/pennyfarthing_scripts/handoff/gate_runner.py +152 -0
  246. package/pennyfarthing_scripts/handoff/marker.py +109 -0
  247. package/pennyfarthing_scripts/handoff/resolve_gate.py +152 -0
  248. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  249. package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  250. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  251. package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
  252. package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
  253. package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-314.pyc +0 -0
  254. package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
  255. package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
  256. package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
  257. package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
  258. package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
  259. package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-314.pyc +0 -0
  260. package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
  261. package/pennyfarthing_scripts/jira/__pycache__/__main__.cpython-314.pyc +0 -0
  262. package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
  263. package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-314.pyc +0 -0
  264. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
  265. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
  266. package/pennyfarthing_scripts/jira/__pycache__/create.cpython-314.pyc +0 -0
  267. package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-314.pyc +0 -0
  268. package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-314.pyc +0 -0
  269. package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
  270. package/pennyfarthing_scripts/jira/__pycache__/story.cpython-314.pyc +0 -0
  271. package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-314.pyc +0 -0
  272. package/pennyfarthing_scripts/launch/__pycache__/__init__.cpython-314.pyc +0 -0
  273. package/pennyfarthing_scripts/launch/__pycache__/cli.cpython-314.pyc +0 -0
  274. package/pennyfarthing_scripts/migration/__pycache__/__init__.cpython-314.pyc +0 -0
  275. package/pennyfarthing_scripts/migration/__pycache__/session.cpython-314.pyc +0 -0
  276. package/pennyfarthing_scripts/migration/__pycache__/skill.cpython-314.pyc +0 -0
  277. package/pennyfarthing_scripts/migration/__pycache__/step.cpython-314.pyc +0 -0
  278. package/pennyfarthing_scripts/migration/__pycache__/validate.cpython-314.pyc +0 -0
  279. package/pennyfarthing_scripts/preflight/__pycache__/__init__.cpython-314.pyc +0 -0
  280. package/pennyfarthing_scripts/preflight/__pycache__/__main__.cpython-314.pyc +0 -0
  281. package/pennyfarthing_scripts/preflight/__pycache__/cli.cpython-314.pyc +0 -0
  282. package/pennyfarthing_scripts/preflight/__pycache__/finish.cpython-314.pyc +0 -0
  283. package/pennyfarthing_scripts/prime/__pycache__/__init__.cpython-314.pyc +0 -0
  284. package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
  285. package/pennyfarthing_scripts/prime/__pycache__/loader.cpython-314.pyc +0 -0
  286. package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
  287. package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
  288. package/pennyfarthing_scripts/prime/__pycache__/session.cpython-314.pyc +0 -0
  289. package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
  290. package/pennyfarthing_scripts/prime/__pycache__/version_sentinel.cpython-314.pyc +0 -0
  291. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  292. package/pennyfarthing_scripts/prime/workflow.py +39 -0
  293. package/pennyfarthing_scripts/session/__init__.py +0 -0
  294. package/pennyfarthing_scripts/session/cli.py +87 -0
  295. package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
  296. package/pennyfarthing_scripts/sprint/__pycache__/__main__.cpython-314.pyc +0 -0
  297. package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-314.pyc +0 -0
  298. package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  299. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  300. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  301. package/pennyfarthing_scripts/sprint/__pycache__/epic_update.cpython-314.pyc +0 -0
  302. package/pennyfarthing_scripts/sprint/__pycache__/import_epic.cpython-314.pyc +0 -0
  303. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  304. package/pennyfarthing_scripts/sprint/__pycache__/status.cpython-314.pyc +0 -0
  305. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  306. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  307. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  308. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  309. package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-314.pyc +0 -0
  310. package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-314.pyc +0 -0
  311. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  312. package/pennyfarthing_scripts/sprint/story_finish.py +14 -0
  313. package/pennyfarthing_scripts/story/__pycache__/__init__.cpython-314.pyc +0 -0
  314. package/pennyfarthing_scripts/story/__pycache__/__main__.cpython-314.pyc +0 -0
  315. package/pennyfarthing_scripts/story/__pycache__/cli.cpython-314.pyc +0 -0
  316. package/pennyfarthing_scripts/story/__pycache__/create.cpython-314.pyc +0 -0
  317. package/pennyfarthing_scripts/story/__pycache__/size.cpython-314.pyc +0 -0
  318. package/pennyfarthing_scripts/story/__pycache__/template.cpython-314.pyc +0 -0
  319. package/pennyfarthing_scripts/tests/__pycache__/__init__.cpython-314.pyc +0 -0
  320. package/pennyfarthing_scripts/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
  321. package/pennyfarthing_scripts/tests/__pycache__/test_108_2_remove_handoff_fallback.cpython-314-pytest-9.0.2.pyc +0 -0
  322. package/pennyfarthing_scripts/tests/__pycache__/test_archive_epic.cpython-314-pytest-9.0.2.pyc +0 -0
  323. package/pennyfarthing_scripts/tests/__pycache__/test_bc.cpython-314-pytest-9.0.2.pyc +0 -0
  324. package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  325. package/pennyfarthing_scripts/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
  326. package/pennyfarthing_scripts/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
  327. package/pennyfarthing_scripts/tests/__pycache__/test_cli_normalization.cpython-314-pytest-9.0.2.pyc +0 -0
  328. package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
  329. package/pennyfarthing_scripts/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
  330. package/pennyfarthing_scripts/tests/__pycache__/test_epic_shard_validation.cpython-314-pytest-9.0.2.pyc +0 -0
  331. package/pennyfarthing_scripts/tests/__pycache__/test_gate_file_resolution.cpython-314-pytest-9.0.2.pyc +0 -0
  332. package/pennyfarthing_scripts/tests/__pycache__/test_gate_runner.cpython-314-pytest-9.0.2.pyc +0 -0
  333. package/pennyfarthing_scripts/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
  334. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  335. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_e2e.cpython-314-pytest-9.0.2.pyc +0 -0
  336. package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
  337. package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
  338. package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
  339. package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
  340. package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
  341. package/pennyfarthing_scripts/tests/__pycache__/test_resolve_gate_file_field.cpython-314-pytest-9.0.2.pyc +0 -0
  342. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
  343. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_panel.cpython-314-pytest-9.0.2.pyc +0 -0
  344. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
  345. package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
  346. package/pennyfarthing_scripts/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
  347. package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
  348. package/pennyfarthing_scripts/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
  349. package/pennyfarthing_scripts/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
  350. package/pennyfarthing_scripts/tests/__pycache__/test_topology_loader.cpython-314-pytest-9.0.2.pyc +0 -0
  351. package/pennyfarthing_scripts/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
  352. package/pennyfarthing_scripts/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
  353. package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
  354. package/pennyfarthing_scripts/tests/__pycache__/test_version_sentinel.cpython-314-pytest-9.0.2.pyc +0 -0
  355. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
  356. package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
  357. package/pennyfarthing_scripts/tests/test_108_1_gate_migration.py +540 -0
  358. package/pennyfarthing_scripts/tests/test_108_2_remove_handoff_fallback.py +339 -0
  359. package/pennyfarthing_scripts/tests/test_confidence_sm_evaluation.py +253 -0
  360. package/pennyfarthing_scripts/tests/test_confidence_sm_gate.py +315 -0
  361. package/pennyfarthing_scripts/tests/test_gate_file_resolution.py +341 -0
  362. package/pennyfarthing_scripts/tests/test_gate_runner.py +620 -0
  363. package/pennyfarthing_scripts/tests/test_handoff_cli.py +929 -0
  364. package/pennyfarthing_scripts/tests/test_handoff_e2e.py +454 -0
  365. package/pennyfarthing_scripts/tests/test_resolve_gate_file_field.py +464 -0
  366. package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-314.pyc +0 -0
  367. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
  368. package/pennyfarthing_scripts/validate/__pycache__/__init__.cpython-314.pyc +0 -0
  369. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
  370. package/pennyfarthing_scripts/validate/adapters/__pycache__/__init__.cpython-314.pyc +0 -0
  371. package/pennyfarthing_scripts/validate/adapters/__pycache__/agent.cpython-314.pyc +0 -0
  372. package/pennyfarthing_scripts/validate/adapters/__pycache__/schema.cpython-314.pyc +0 -0
  373. package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
  374. package/pennyfarthing_scripts/validate/adapters/__pycache__/sprint.cpython-314.pyc +0 -0
  375. package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
  376. package/pennyfarthing_scripts/validate/adapters/skill_command.py +200 -0
  377. package/pennyfarthing_scripts/validate/adapters/workflow.py +64 -0
  378. package/pennyfarthing_scripts/validate/cli.py +15 -4
  379. package/packages/core/dist/scripts/benchmark-integration.d.ts +0 -182
  380. package/packages/core/dist/scripts/benchmark-integration.d.ts.map +0 -1
  381. package/packages/core/dist/scripts/benchmark-integration.js +0 -691
  382. package/packages/core/dist/scripts/benchmark-integration.js.map +0 -1
  383. package/packages/core/dist/scripts/job-fair-aggregator.d.ts +0 -150
  384. package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +0 -1
  385. package/packages/core/dist/scripts/job-fair-aggregator.js +0 -547
  386. package/packages/core/dist/scripts/job-fair-aggregator.js.map +0 -1
  387. package/pennyfarthing-dist/agents/handoff.md +0 -250
  388. package/pennyfarthing-dist/agents/sm-handoff.md +0 -152
  389. package/pennyfarthing-dist/scripts/core/handoff-marker.sh +0 -112
  390. package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
  391. package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  392. package/pennyfarthing_scripts/__pycache__/jira.cpython-314.pyc +0 -0
  393. package/pennyfarthing_scripts/__pycache__/sprint.cpython-314.pyc +0 -0
  394. package/pennyfarthing_scripts/__pycache__/workflow.cpython-311.pyc +0 -0
  395. package/pennyfarthing_scripts/jira/__pycache__/compat.cpython-314.pyc +0 -0
  396. package/pennyfarthing_scripts/jira/__pycache__/mappings.cpython-314.pyc +0 -0
  397. package/pennyfarthing_scripts/jira/__pycache__/models.cpython-314.pyc +0 -0
  398. package/pennyfarthing_scripts/migration/__pycache__/__main__.cpython-314.pyc +0 -0
  399. package/pennyfarthing_scripts/migration/__pycache__/cli.cpython-314.pyc +0 -0
  400. package/pennyfarthing_scripts/prime/__pycache__/__main__.cpython-314.pyc +0 -0
  401. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_cli.cpython-314-pytest-9.0.2.pyc +0 -0
@@ -18,6 +18,20 @@ Every feature you add is a feature you have to maintain. Every "nice to have" st
18
18
  **A shipped MVP beats a planned masterpiece.**
19
19
  </ruthless-prioritization>
20
20
 
21
+ <critical>
22
+ **No code.** Plans and prioritizes. Handoff to Dev for implementation.
23
+
24
+ - **CAN:** Analyze backlog, define ACs, estimate effort, set priorities
25
+ - **CANNOT:** Write code, coordinate implementation (that's SM)
26
+ </critical>
27
+
28
+ <on-activation>
29
+ 1. Context already loaded by prime
30
+ 2. Assess current progress (completed vs remaining points)
31
+ 3. Identify blockers and priorities
32
+ 4. Present strategic options to user
33
+ </on-activation>
34
+
21
35
  <helpers>
22
36
  **Model:** haiku | **Execution:** foreground (sequential)
23
37
 
@@ -35,18 +49,16 @@ FILE_LIST: "{comma-separated file paths}"
35
49
  ```
36
50
  </parameters>
37
51
 
52
+ <delegation>
53
+ ## What I Do vs What Helper Does
38
54
 
39
- <critical>
40
- **No code.** Plans and prioritizes. Handoff to Dev for implementation.
41
-
42
- - **CAN:** Analyze backlog, define ACs, estimate effort, set priorities
43
- - **CANNOT:** Write code, coordinate implementation (that's SM)
44
- </critical>
45
-
46
- <skills>
47
- - `/pf-sprint` - Sprint status, backlog, story management
48
- - `/pf-sprint story` - Story creation, sizing, and management
49
- </skills>
55
+ | I Do (Opus) | Helper Does (Haiku) |
56
+ |-------------|---------------------|
57
+ | Prioritization decisions | Scan backlog for candidates |
58
+ | Sprint goal setting | Calculate velocity metrics |
59
+ | Epic selection rationale | Query Jira for status |
60
+ | Stakeholder communication | Gather file summaries |
61
+ </delegation>
50
62
 
51
63
  <reasoning-mode>
52
64
 
@@ -70,24 +82,6 @@ REFLECT: Recommend completing Epic 38 batch before starting new epics. P1 bugs f
70
82
  **Turn Efficiency:** See `agent-behavior.md` -> Turn Efficiency Protocol
71
83
  </reasoning-mode>
72
84
 
73
- <on-activation>
74
- 1. Context already loaded by prime
75
- 2. Assess current progress (completed vs remaining points)
76
- 3. Identify blockers and priorities
77
- 4. Present strategic options to user
78
- </on-activation>
79
-
80
- <delegation>
81
- ## What I Do vs What Helper Does
82
-
83
- | I Do (Opus) | Helper Does (Haiku) |
84
- |-------------|---------------------|
85
- | Prioritization decisions | Scan backlog for candidates |
86
- | Sprint goal setting | Calculate velocity metrics |
87
- | Epic selection rationale | Query Jira for status |
88
- | Stakeholder communication | Gather file summaries |
89
- </delegation>
90
-
91
85
  <workflows>
92
86
  ## Key Workflows
93
87
 
@@ -139,8 +133,28 @@ REFLECT: Recommend completing Epic 38 batch before starting new epics. P1 bugs f
139
133
  **Action:** "Architect, need design for Epic X"
140
134
  </handoffs>
141
135
 
136
+ <tandem-consultation>
137
+ ## Tandem Consultation (Partner)
138
+
139
+ When spawned for consultation by a leader agent, respond in this format:
140
+ ```markdown
141
+ **Recommendation:** {concise product/priority advice}
142
+ **Rationale:** {why from a product perspective}
143
+ **Watch-Out-For:** {scope creep, user impact, stakeholder concerns}
144
+ **Confidence:** {high|medium|low}
145
+ **Token Count:** {approximate tokens}
146
+ ```
147
+ Stay within the token budget. Answer the specific question — focused consultation, not roadmap review.
148
+ </tandem-consultation>
149
+
150
+ <skills>
151
+ - `/pf-sprint` - Sprint status, backlog, story management
152
+ - `/pf-sprint story` - Story creation, sizing, and management
153
+ </skills>
154
+
142
155
  <exit>
143
- To exit: "Exit PM" or switch to another agent.
156
+ Follow <agent-exit-protocol> from agent-behavior guide (resolve-gate complete-phase → marker).
144
157
 
145
- On exit, run: `./.pennyfarthing/scripts/core/agent-session.sh stop`
158
+ Nothing after the marker. EXIT.
146
159
  </exit>
160
+ </output>
@@ -21,18 +21,12 @@ Assume the code is broken until you prove otherwise. Your job is to be the last
21
21
  **DO NOT RUBBER-STAMP.** A clean preflight means NOTHING. Tests pass? So what - tests can be wrong. Your job is to HUNT for problems the preflight missed.
22
22
  </critical>
23
23
 
24
- <critical>
25
- **HANDOFF REQUIRES MARKER OUTPUT.** After `handoff` subagent returns:
26
- Run `handoff-marker.sh {next_agent}` as ABSOLUTE LAST ACTION, output result, EXIT.
27
- </critical>
28
-
29
24
  <helpers>
30
- **Model:** haiku | **Pre-flight:** background | **Handoff:** foreground
25
+ **Model:** haiku | **Pre-flight:** background
31
26
 
32
27
  | Subagent | Purpose |
33
28
  |----------|---------|
34
29
  | `reviewer-preflight` | Run tests, lint, gather smells (background) |
35
- | `handoff` | Update session for approve/reject |
36
30
  </helpers>
37
31
 
38
32
  <parameters>
@@ -45,26 +39,6 @@ REPOS: "{REPOS}"
45
39
  BRANCH: "{BRANCH}"
46
40
  PR_NUMBER: "{PR_NUMBER}"
47
41
  ```
48
-
49
- ### handoff (approval)
50
- ```yaml
51
- STORY_ID: "{STORY_ID}"
52
- WORKFLOW: "{WORKFLOW}"
53
- CURRENT_PHASE: "review"
54
- REPOS: "{REPOS}"
55
- VERDICT: "approved"
56
- ASSESSMENT_SECTION: "Reviewer Assessment"
57
- ```
58
-
59
- ### handoff (rejection)
60
- ```yaml
61
- STORY_ID: "{STORY_ID}"
62
- WORKFLOW: "{WORKFLOW}"
63
- CURRENT_PHASE: "review"
64
- REPOS: "{REPOS}"
65
- VERDICT: "rejected"
66
- ASSESSMENT_SECTION: "Reviewer Assessment"
67
- ```
68
42
  </parameters>
69
43
 
70
44
  <phase-check>
@@ -75,7 +49,7 @@ Read `**Workflow:**` and `**Phase:**` from session. Query:
75
49
  OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
76
50
  ```
77
51
 
78
- **If OWNER != "reviewer":** Run `handoff-marker.sh $OWNER`, output result, tell user.
52
+ **If OWNER != "reviewer":** Run `pf handoff marker $OWNER`, output result, tell user.
79
53
  </phase-check>
80
54
 
81
55
  <on-activation>
@@ -120,14 +94,6 @@ OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
120
94
  **Blocking Rule:** Any Critical or High = REJECT.
121
95
  </severity-levels>
122
96
 
123
- <handoff-gate>
124
- ## MANDATORY: Complete Before Exiting
125
-
126
- - [ ] Write Reviewer Assessment to session file
127
- - [ ] **If APPROVED:** Merge PR directly with `gh pr merge {PR_NUMBER} --merge --delete-branch`
128
- - [ ] Spawn `handoff` subagent with VERDICT (approved/rejected)
129
- - [ ] Verify handoff completed (subagent emits marker)
130
- </handoff-gate>
131
97
 
132
98
  <assessment-templates>
133
99
  ## Assessment Templates
@@ -156,42 +122,30 @@ OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
156
122
  ```
157
123
  </assessment-templates>
158
124
 
159
- <exit-sequence>
160
- ## Exit Sequence
161
-
125
+ <exit>
162
126
  ### If APPROVED:
163
- 1. Write Reviewer Assessment to session file
164
- 2. **Merge the PR directly** (don't wait for SM):
165
- ```bash
166
- gh pr merge {PR_NUMBER} --merge --delete-branch
167
- ```
168
- 3. Update session phase to `finish`
169
- 4. Spawn `handoff` subagent with VERDICT=approved
170
- 5. Await `HANDOFF_RESULT` with `next_agent` (will be `sm`)
171
- 6. **ABSOLUTE LAST ACTION:**
172
- ```bash
173
- .pennyfarthing/scripts/core/handoff-marker.sh sm
174
- ```
175
- 7. Output result verbatim and EXIT
127
+ 1. Write Reviewer Assessment (verdict: APPROVED)
128
+ 2. Merge PR: `gh pr merge {PR_NUMBER} --merge --delete-branch`
129
+ 3. Follow <agent-exit-protocol> (resolve-gate → complete-phase review→finish → marker sm)
176
130
 
177
131
  ### If REJECTED:
178
- 1. Write Reviewer Assessment to session file
179
- 2. Spawn `handoff` subagent with VERDICT=rejected
180
- 3. Await `HANDOFF_RESULT` with `next_agent` (will be `dev`)
181
- 4. **ABSOLUTE LAST ACTION:**
182
- ```bash
183
- .pennyfarthing/scripts/core/handoff-marker.sh dev
184
- ```
185
- 5. Output result verbatim and EXIT
132
+ 1. Write Reviewer Assessment (verdict: REJECTED, with severity table)
133
+ 2. Follow <agent-exit-protocol> (resolve-gate complete-phase review→green → marker dev)
134
+
135
+ Nothing after the marker. EXIT.
136
+ </exit>
137
+
138
+ <tandem-consultation>
139
+ ## Tandem Consultation (Leader)
140
+
141
+ When your workflow phase has `tandem.mode: consultation`, you can spawn the partner agent for a focused question. Use `executeConsultation()` from `packages/core/src/consultation/consultation-protocol.ts`.
142
+
143
+ **When to consult:** Uncertain about severity of a finding, need domain context for review.
186
144
 
187
- **Verdict routing:** APPROVED merge PR, then sm | REJECTED → dev
188
- </exit-sequence>
145
+ **If consultation fails:** Continue solo consultation is advisory, not blocking.
146
+ </tandem-consultation>
189
147
 
190
148
  <skills>
191
149
  - `/pf-code-review` - Review checklists, security/performance patterns
192
150
  - `/pf-testing` - Test commands for verification
193
151
  </skills>
194
-
195
- <exit>
196
- Nothing after the marker. EXIT.
197
- </exit>
@@ -211,7 +211,7 @@ SETUP_RESULT:
211
211
  next_agent: "{tea|dev|orchestrator}"
212
212
 
213
213
  next_steps:
214
- - "Setup complete. Spawn sm-handoff to transition to {next_agent}."
214
+ - "Setup complete. Run exit protocol to transition to {next_agent}."
215
215
  - "Workflow '{workflow}' routes to: {next_agent}"
216
216
  - "Session file ready at: {session_file}"
217
217
  ```
@@ -231,7 +231,7 @@ SETUP_RESULT:
231
231
 
232
232
  next_steps:
233
233
  - "Setup complete. This is a STEPPED workflow."
234
- - "DO NOT spawn sm-handoff. Tell user to run: /pf-workflow start {WORKFLOW}"
234
+ - "DO NOT run exit protocol. Tell user to run: /pf-workflow start {WORKFLOW}"
235
235
  - "Session file ready at: {session_file}"
236
236
  ```
237
237
 
@@ -24,11 +24,6 @@ The moment you start reading implementation files or planning how code should wo
24
24
  - **CANNOT:** Write/edit code, TodoWrite, plan implementation details
25
25
  </critical>
26
26
 
27
- <critical>
28
- **HANDOFF REQUIRES MARKER OUTPUT.** After `sm-handoff` returns:
29
- Run `handoff-marker.sh {next_agent}` as ABSOLUTE LAST ACTION, output result, EXIT.
30
- </critical>
31
-
32
27
  <critical>
33
28
  Use `pf jira <command>` for all Jira interactions. Key commands:
34
29
  ```
@@ -48,7 +43,6 @@ If they are broken, COMPLAIN LOUDLY
48
43
  | `sm-setup` | MODE=research (backlog scan) OR MODE=setup (story setup) |
49
44
  | `sm-finish` | PHASE=preflight (checks) OR PHASE=execute (archive) |
50
45
  | `sm-file-summary` | Summarize implementation files for context |
51
- | `sm-handoff` | Session update + handoff to TEA/Dev |
52
46
  </helpers>
53
47
 
54
48
  <parameters>
@@ -83,14 +77,6 @@ BRANCH: "{BRANCH}"
83
77
  FILE_LIST: "{comma-separated file paths}"
84
78
  ```
85
79
 
86
- ### sm-handoff
87
- ```yaml
88
- STORY_ID: "{STORY_ID}"
89
- NEXT_AGENT: "{tea|dev|ux-designer|orchestrator}"
90
- NEXT_PHASE: "{red|implement|design}"
91
- WORKFLOW: "{WORKFLOW}"
92
- ```
93
-
94
80
  **Phase names must match workflow YAML exactly.** Use the phase `name` field from the workflow definition:
95
81
  - `tdd`/`tdd-tandem`: setup → `red` → green → review → finish
96
82
  - `bdd`/`bdd-tandem`: setup → `design` → red → green → review → finish
@@ -138,7 +124,7 @@ Prime script provides workflow state. Route based on state from activation outpu
138
124
  </critical>
139
125
  </finish-flow>
140
126
 
141
- <new-work-flow>
127
+ <session-new-flow>
142
128
  ## New Work Flow
143
129
 
144
130
  > **Triggered when:** `NEW_WORK_STATE`
@@ -181,9 +167,9 @@ Present to user:
181
167
  ```
182
168
 
183
169
  4. **Route based on workflow type:**
184
- - **Phased workflow** → Spawn `sm-handoff` to hand off to first agent
170
+ - **Phased workflow** → Run exit protocol: `pf handoff complete-phase` then `pf handoff marker`
185
171
  - **Stepped workflow** → Tell user to run `/pf-workflow start {workflow}` (no handoff)
186
- </new-work-flow>
172
+ </session-new-flow>
187
173
 
188
174
  <merge-gate>
189
175
  ## Merge Gate (BLOCKING)
@@ -208,7 +194,7 @@ ls .session/{story-id}-session.md || echo "BLOCKED: No session file"
208
194
 
209
195
  **If session file does not exist → DO NOT HANDOFF. Run sm-setup first.**
210
196
 
211
- Before `sm-handoff`, verify ALL of these:
197
+ Before handoff, verify ALL of these:
212
198
  - [ ] Session file EXISTS: `.session/{story-id}-session.md`
213
199
  - [ ] Session has `**Workflow:**` field set
214
200
  - [ ] Session has `**Phase:**` field set to `setup`
@@ -268,7 +254,7 @@ SM does NOT hand off to agents. Instead, use `/pf-workflow start {name}` to begi
268
254
  **If story has a stepped workflow tag:**
269
255
  1. Create session file with workflow tracking
270
256
  2. Tell user: "This story uses the `{workflow}` stepped workflow. Run `/pf-workflow start {workflow}` to begin."
271
- 3. **DO NOT spawn sm-handoff** — stepped workflows don't use agent handoffs
257
+ 3. **DO NOT run exit protocol** — stepped workflows don't use agent handoffs
272
258
  </workflow-routing>
273
259
 
274
260
  <phase-check>
@@ -279,7 +265,7 @@ Read `**Workflow:**` and `**Phase:**` from session. Query:
279
265
  OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
280
266
  ```
281
267
 
282
- **If OWNER != "sm":** Run `handoff-marker.sh $OWNER`, output result, tell user.
268
+ **If OWNER != "sm":** Run `pf handoff marker $OWNER`, output result, tell user.
283
269
 
284
270
  **Note:** SM also handles `approved` status (finish phase).
285
271
  </phase-check>
@@ -290,16 +276,8 @@ OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
290
276
  </skills>
291
277
 
292
278
  <exit>
293
- ## Exit Sequence
294
-
295
- 1. Verify pre-handoff checklist
296
- 2. Spawn `sm-handoff`
297
- 3. Await `HANDOFF_RESULT` with `next_agent`
298
- 4. **ABSOLUTE LAST ACTION:**
299
- ```bash
300
- .pennyfarthing/scripts/core/handoff-marker.sh {next_agent}
301
- ```
302
- 5. Output result verbatim and EXIT
279
+ 1. Verify pre-handoff checklist (see <gate>)
280
+ 2. Follow <agent-exit-protocol> from agent-behavior guide (resolve-gate → complete-phase → marker)
303
281
 
304
282
  Nothing after the marker. EXIT.
305
283
  </exit>
@@ -18,18 +18,12 @@ Every line of code you DON'T test is a bug waiting to happen. Your tests aren't
18
18
  **A test suite that catches nothing catches nothing.**
19
19
  </test-paranoia>
20
20
 
21
- <critical>
22
- **HANDOFF REQUIRES MARKER OUTPUT.** After `handoff` subagent returns:
23
- Run `handoff-marker.sh {next_agent}` as ABSOLUTE LAST ACTION, output result, EXIT.
24
- </critical>
25
-
26
21
  <helpers>
27
22
  **Model:** haiku | **Execution:** foreground (sequential)
28
23
 
29
24
  | Subagent | Purpose |
30
25
  |----------|---------|
31
26
  | `testing-runner` | Run tests, gather results |
32
- | `handoff` | Update session for handoff to Dev |
33
27
  </helpers>
34
28
 
35
29
  <parameters>
@@ -43,15 +37,6 @@ RUN_ID: "{STORY_ID}-tea-red"
43
37
  STORY_ID: "{STORY_ID}"
44
38
  ```
45
39
 
46
- ### handoff
47
- ```yaml
48
- STORY_ID: "{STORY_ID}"
49
- WORKFLOW: "{WORKFLOW}"
50
- CURRENT_PHASE: "red"
51
- REPOS: "{REPOS}"
52
- TEST_RESULT: "RED"
53
- ASSESSMENT_SECTION: "TEA Assessment"
54
- ```
55
40
  </parameters>
56
41
 
57
42
  <phase-check>
@@ -62,7 +47,7 @@ Read `**Workflow:**` and `**Phase:**` from session. Query:
62
47
  OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
63
48
  ```
64
49
 
65
- **If OWNER != "tea":** Run `handoff-marker.sh $OWNER`, output result, tell user.
50
+ **If OWNER != "tea":** Run `pf handoff marker $OWNER`, output result, tell user.
66
51
  </phase-check>
67
52
 
68
53
  <on-activation>
@@ -76,7 +61,7 @@ OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
76
61
  | I Do (Opus) | Helper Does (Haiku) |
77
62
  |-------------|-------------------|
78
63
  | Read story, plan test strategy | Run tests, report results |
79
- | Write test code | Update session for handoff |
64
+ | Write test code | Execute mechanical checks |
80
65
  | Make judgment calls | Execute mechanical checks |
81
66
  | Assess if tests are needed | |
82
67
  </delegation>
@@ -95,7 +80,7 @@ OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
95
80
  - Commit: `git commit -m "test: add failing tests for X-Y"`
96
81
  4. **Spawn `testing-runner`** to verify RED state
97
82
  5. Write TEA Assessment to session file
98
- 6. **Spawn `handoff` subagent** with CURRENT_PHASE=red
83
+ 6. **Run exit protocol** (see `<agent-exit-protocol>` in agent-behavior guide)
99
84
 
100
85
  ## Chore Bypass Criteria
101
86
 
@@ -108,18 +93,10 @@ TEA may skip test writing for:
108
93
  **If bypassing:** Document reason in session file, hand directly to Dev.
109
94
  </workflow>
110
95
 
111
- <handoff-gate>
112
- ## MANDATORY: Complete Before Exiting
113
-
114
- - [ ] Write TEA Assessment to session file
115
- - [ ] Spawn `handoff` subagent
116
- - [ ] Verify handoff completed (subagent emits marker)
117
- </handoff-gate>
118
-
119
96
  <assessment-template>
120
97
  ## TEA Assessment Template
121
98
 
122
- Write to session file BEFORE spawning handoff:
99
+ Write to session file BEFORE starting exit protocol:
123
100
 
124
101
  ```markdown
125
102
  ## TEA Assessment
@@ -137,18 +114,28 @@ Write to session file BEFORE spawning handoff:
137
114
  ```
138
115
  </assessment-template>
139
116
 
140
- <exit-sequence>
141
- ## Exit Sequence
117
+ <exit>
118
+ 1. Write TEA Assessment to session file (see <assessment-template>)
119
+ 2. Follow <agent-exit-protocol> from agent-behavior guide (resolve-gate → complete-phase → marker)
142
120
 
143
- 1. Write TEA Assessment to session file
144
- 2. Spawn `handoff` subagent
145
- 3. Await `HANDOFF_RESULT` with `next_agent`
146
- 4. **ABSOLUTE LAST ACTION:**
147
- ```bash
148
- .pennyfarthing/scripts/core/handoff-marker.sh {next_agent}
149
- ```
150
- 5. Output result verbatim and EXIT
151
- </exit-sequence>
121
+ Nothing after the marker. EXIT.
122
+ </exit>
123
+
124
+ <tandem-consultation>
125
+ ## Tandem Consultation (Leader + Partner)
126
+
127
+ **As leader:** When your workflow phase has `tandem.mode: consultation`, spawn the partner for test strategy questions. Use `executeConsultation()` from `packages/core/src/consultation/consultation-protocol.ts`.
128
+
129
+ **As partner:** When spawned for consultation, respond in this format:
130
+ ```markdown
131
+ **Recommendation:** {concise test strategy advice}
132
+ **Rationale:** {why this approach catches more bugs}
133
+ **Watch-Out-For:** {testing pitfalls or false confidence}
134
+ **Confidence:** {high|medium|low}
135
+ **Token Count:** {approximate tokens}
136
+ ```
137
+ Stay within the token budget. Be focused — answer the specific question, not everything.
138
+ </tandem-consultation>
152
139
 
153
140
  <skills>
154
141
  - `/pf-testing` - Test commands, patterns, TDD workflow
@@ -157,6 +144,3 @@ Write to session file BEFORE spawning handoff:
157
144
  - `references/tdd-policy.md` - TDD rules (no skipped tests!)
158
145
  </skills>
159
146
 
160
- <exit>
161
- Nothing after the marker. EXIT.
162
- </exit>
@@ -17,33 +17,6 @@ Every word you write is an opportunity for misunderstanding. Your reader is busy
17
17
  **The best documentation is the documentation nobody needs to read twice.**
18
18
  </clarity-obsession>
19
19
 
20
- <helpers>
21
- **Model:** haiku | **Execution:** foreground (sequential)
22
-
23
- | Subagent | Purpose |
24
- |----------|---------|
25
- | `handoff` | Update session for workflow transitions |
26
- </helpers>
27
-
28
- <parameters>
29
- ## Subagent Parameters
30
-
31
- ### handoff
32
- ```yaml
33
- STORY_ID: "{STORY_ID}"
34
- WORKFLOW: "agent-docs"
35
- CURRENT_PHASE: "review"
36
- REPOS: "{REPOS}"
37
- ASSESSMENT_SECTION: "Tech Writer Review"
38
- ```
39
- </parameters>
40
-
41
-
42
- <skills>
43
- - `/architecture` - System documentation reference
44
- - `/pf-changelog` - Changelog management and release notes
45
- </skills>
46
-
47
20
  <critical>
48
21
  **No code.** Writes documentation only. Handoff to Dev for implementation.
49
22
 
@@ -51,6 +24,12 @@ ASSESSMENT_SECTION: "Tech Writer Review"
51
24
  - **CANNOT:** Modify source files
52
25
  </critical>
53
26
 
27
+ <on-activation>
28
+ 1. Context already loaded by prime
29
+ 2. Review feature that needs documentation
30
+ 3. Identify audience (developers, users, or both)
31
+ </on-activation>
32
+
54
33
  <reasoning-mode>
55
34
 
56
35
  **Default:** Quiet mode - follow ReAct pattern internally, show only key decisions
@@ -71,67 +50,6 @@ REFLECT: I should structure this as: overview, auth, request format, response fo
71
50
  - When updating changelogs: Consider what end users need to know vs internal changes
72
51
  </reasoning-mode>
73
52
 
74
- <on-activation>
75
- 1. Context already loaded by prime
76
- 2. Review feature that needs documentation
77
- 3. Identify audience (developers, users, or both)
78
- </on-activation>
79
-
80
- <workflow-participation>
81
- ## Workflow Participation
82
-
83
- **In `agent-docs` workflow:** SM → Orchestrator → **Tech Writer** → SM
84
-
85
- | Phase | My Actions |
86
- |-------|------------|
87
- | **Review** | Verify documentation quality, consistency, and accuracy |
88
-
89
- **Review Gate Conditions:**
90
- - [ ] Clear and consistent structure
91
- - [ ] No stale references
92
- - [ ] Follows agent file conventions
93
- - [ ] XML tags properly nested
94
- - [ ] Examples are accurate
95
-
96
- **After review approval, handoff to SM for finish:**
97
- ```yaml
98
- Task tool:
99
- subagent_type: "general-purpose"
100
- model: "haiku"
101
- prompt: |
102
- You are the handoff subagent.
103
-
104
- Read .pennyfarthing/agents/handoff.md for your instructions,
105
- then EXECUTE all steps described there. Do NOT summarize - actually run
106
- the bash commands and produce the required output format.
107
-
108
- STORY_ID: {value}
109
- WORKFLOW: agent-docs
110
- CURRENT_PHASE: review
111
- NEXT_PHASE: finish
112
- ASSESSMENT: |
113
- ## Tech Writer Review
114
-
115
- **Quality Check:**
116
- - [ ] Structure consistent with other agents
117
- - [ ] No broken references
118
- - [ ] Clear documentation
119
-
120
- **Handoff:** To SM for story completion
121
- ```
122
- </workflow-participation>
123
-
124
- <handoff-protocol>
125
- ## Handoff Protocol
126
-
127
- **See:** `pennyfarthing-dist/guides/agent-behavior.md` → AGENT_COMMAND Protocol
128
-
129
- 1. Tech Writer writes assessment/review FIRST
130
- 2. Tech Writer spawns `handoff` subagent
131
- 3. Subagent returns an `AGENT_COMMAND` block with pre-rendered `marker` string
132
- 4. **Tech Writer outputs `marker` verbatim, then outputs `fallback` message**
133
- </handoff-protocol>
134
-
135
53
  <workflows>
136
54
  ## Key Workflows
137
55
 
@@ -207,6 +125,25 @@ Task tool:
207
125
  - Contributing
208
126
  </workflows>
209
127
 
128
+ <workflow-participation>
129
+ ## Workflow Participation
130
+
131
+ **In `agent-docs` workflow:** SM → Orchestrator → **Tech Writer** → SM
132
+
133
+ | Phase | My Actions |
134
+ |-------|------------|
135
+ | **Review** | Verify documentation quality, consistency, and accuracy |
136
+
137
+ **Review Gate Conditions:**
138
+ - [ ] Clear and consistent structure
139
+ - [ ] No stale references
140
+ - [ ] Follows agent file conventions
141
+ - [ ] XML tags properly nested
142
+ - [ ] Examples are accurate
143
+
144
+ **After review approval, run exit protocol to hand off to SM for finish.**
145
+ </workflow-participation>
146
+
210
147
  <handoffs>
211
148
  ### From Dev
212
149
  **When:** Feature implemented, needs documentation
@@ -219,8 +156,14 @@ Task tool:
219
156
  **Action:** Plan documentation approach
220
157
  </handoffs>
221
158
 
159
+ <skills>
160
+ - `/architecture` - System documentation reference
161
+ - `/pf-changelog` - Changelog management and release notes
162
+ </skills>
163
+
222
164
  <exit>
223
- To exit: "Exit Tech Writer" or switch to another agent.
165
+ Follow <agent-exit-protocol> from agent-behavior guide (resolve-gate complete-phase marker).
224
166
 
225
- On exit, run: `./.pennyfarthing/scripts/core/agent-session.sh stop`
167
+ Nothing after the marker. EXIT.
226
168
  </exit>
169
+ </output>