@pennyfarthing/core 11.2.1 → 11.3.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 (405) hide show
  1. package/README.md +102 -42
  2. package/package.json +1 -1
  3. package/packages/core/dist/cli/commands/doctor-legacy.test.js +2 -2
  4. package/packages/core/dist/cli/commands/doctor-legacy.test.js.map +1 -1
  5. package/packages/core/dist/cli/commands/doctor.d.ts +55 -0
  6. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
  7. package/packages/core/dist/cli/commands/doctor.js +324 -50
  8. package/packages/core/dist/cli/commands/doctor.js.map +1 -1
  9. package/packages/core/dist/cli/commands/init.d.ts +12 -0
  10. package/packages/core/dist/cli/commands/init.d.ts.map +1 -1
  11. package/packages/core/dist/cli/commands/init.js +45 -0
  12. package/packages/core/dist/cli/commands/init.js.map +1 -1
  13. package/packages/core/dist/cli/commands/pyproject-install.test.d.ts +19 -0
  14. package/packages/core/dist/cli/commands/pyproject-install.test.d.ts.map +1 -0
  15. package/packages/core/dist/cli/commands/pyproject-install.test.js +261 -0
  16. package/packages/core/dist/cli/commands/pyproject-install.test.js.map +1 -0
  17. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.d.ts +17 -0
  18. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.d.ts.map +1 -0
  19. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.js +470 -0
  20. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.js.map +1 -0
  21. package/packages/core/dist/cli/commands/update-consolidation.test.js +14 -6
  22. package/packages/core/dist/cli/commands/update-consolidation.test.js.map +1 -1
  23. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  24. package/packages/core/dist/cli/commands/update.js +31 -2
  25. package/packages/core/dist/cli/commands/update.js.map +1 -1
  26. package/packages/core/dist/cli/index.js +2 -0
  27. package/packages/core/dist/cli/index.js.map +1 -1
  28. package/packages/core/dist/cli/utils/python.d.ts.map +1 -1
  29. package/packages/core/dist/cli/utils/python.js +11 -0
  30. package/packages/core/dist/cli/utils/python.js.map +1 -1
  31. package/packages/core/dist/cli/utils/settings-hook-migration.test.d.ts +17 -0
  32. package/packages/core/dist/cli/utils/settings-hook-migration.test.d.ts.map +1 -0
  33. package/packages/core/dist/cli/utils/settings-hook-migration.test.js +382 -0
  34. package/packages/core/dist/cli/utils/settings-hook-migration.test.js.map +1 -0
  35. package/packages/core/dist/cli/utils/settings.d.ts +0 -4
  36. package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
  37. package/packages/core/dist/cli/utils/settings.js +45 -27
  38. package/packages/core/dist/cli/utils/settings.js.map +1 -1
  39. package/packages/core/dist/cli/utils/stale-artifacts.d.ts +59 -0
  40. package/packages/core/dist/cli/utils/stale-artifacts.d.ts.map +1 -0
  41. package/packages/core/dist/cli/utils/stale-artifacts.js +163 -0
  42. package/packages/core/dist/cli/utils/stale-artifacts.js.map +1 -0
  43. package/packages/core/dist/consultation/dialogue-manager.d.ts +1 -1
  44. package/packages/core/dist/consultation/dialogue-manager.d.ts.map +1 -1
  45. package/packages/core/dist/consultation/dialogue-manager.js +1 -1
  46. package/packages/core/dist/consultation/dialogue-manager.js.map +1 -1
  47. package/packages/core/dist/consultation/dialogue-manager.test.js.map +1 -1
  48. package/packages/core/dist/consultation/tandem-metrics.test.js.map +1 -1
  49. package/packages/core/dist/public/css/react.css +1 -1
  50. package/packages/core/dist/public/js/react/react.js +9 -9
  51. package/packages/core/dist/server/api/git.d.ts.map +1 -1
  52. package/packages/core/dist/server/api/git.js +0 -1
  53. package/packages/core/dist/server/api/git.js.map +1 -1
  54. package/packages/core/dist/server/api/index.d.ts +2 -0
  55. package/packages/core/dist/server/api/index.d.ts.map +1 -1
  56. package/packages/core/dist/server/api/index.js +2 -0
  57. package/packages/core/dist/server/api/index.js.map +1 -1
  58. package/packages/core/dist/server/api/project-info.d.ts +11 -0
  59. package/packages/core/dist/server/api/project-info.d.ts.map +1 -0
  60. package/packages/core/dist/server/api/project-info.js +18 -0
  61. package/packages/core/dist/server/api/project-info.js.map +1 -0
  62. package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
  63. package/packages/core/dist/server/otlp-receiver.js +18 -1
  64. package/packages/core/dist/server/otlp-receiver.js.map +1 -1
  65. package/packages/core/dist/server/otlp-receiver.test.js +1 -1
  66. package/packages/core/dist/server/otlp-receiver.test.js.map +1 -1
  67. package/packages/core/dist/server/server.d.ts.map +1 -1
  68. package/packages/core/dist/server/server.js +3 -2
  69. package/packages/core/dist/server/server.js.map +1 -1
  70. package/packages/core/dist/server/server.test.d.ts +1 -1
  71. package/packages/core/dist/server/server.test.js +8 -8
  72. package/packages/core/dist/server/settings.d.ts +1 -0
  73. package/packages/core/dist/server/settings.d.ts.map +1 -1
  74. package/packages/core/dist/server/settings.js +18 -0
  75. package/packages/core/dist/server/settings.js.map +1 -1
  76. package/packages/core/dist/workflow/tandem-workflow-templates.test.js +7 -5
  77. package/packages/core/dist/workflow/tandem-workflow-templates.test.js.map +1 -1
  78. package/packages/core/dist/workflow/workflow-migration.test.js +6 -5
  79. package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -1
  80. package/packages/core/dist/workflow/workflow-team-templates.test.d.ts +17 -0
  81. package/packages/core/dist/workflow/workflow-team-templates.test.d.ts.map +1 -0
  82. package/packages/core/dist/workflow/workflow-team-templates.test.js +275 -0
  83. package/packages/core/dist/workflow/workflow-team-templates.test.js.map +1 -0
  84. package/pennyfarthing-dist/agents/dev.md +19 -4
  85. package/pennyfarthing-dist/agents/devops.md +2 -10
  86. package/pennyfarthing-dist/agents/reviewer-preflight.md +4 -5
  87. package/pennyfarthing-dist/agents/reviewer.md +17 -4
  88. package/pennyfarthing-dist/agents/sm-finish.md +1 -1
  89. package/pennyfarthing-dist/agents/sm-setup.md +7 -7
  90. package/pennyfarthing-dist/agents/sm.md +16 -29
  91. package/pennyfarthing-dist/agents/tea.md +2 -2
  92. package/pennyfarthing-dist/agents/testing-runner.md +1 -1
  93. package/pennyfarthing-dist/commands/pf-architect.md +1 -1
  94. package/pennyfarthing-dist/commands/pf-ba.md +1 -1
  95. package/pennyfarthing-dist/commands/pf-chore.md +2 -2
  96. package/pennyfarthing-dist/commands/pf-dev.md +1 -1
  97. package/pennyfarthing-dist/commands/pf-devops.md +1 -1
  98. package/pennyfarthing-dist/commands/pf-epic.md +6 -6
  99. package/pennyfarthing-dist/commands/pf-git.md +10 -10
  100. package/pennyfarthing-dist/commands/pf-health-check.md +31 -12
  101. package/pennyfarthing-dist/commands/pf-help.md +12 -12
  102. package/pennyfarthing-dist/commands/pf-orchestrator.md +1 -1
  103. package/pennyfarthing-dist/commands/pf-pm.md +1 -1
  104. package/pennyfarthing-dist/commands/pf-prime.md +8 -8
  105. package/pennyfarthing-dist/commands/pf-reviewer.md +1 -1
  106. package/pennyfarthing-dist/commands/pf-session.md +7 -7
  107. package/pennyfarthing-dist/commands/pf-sm.md +1 -1
  108. package/pennyfarthing-dist/commands/pf-sprint.md +7 -7
  109. package/pennyfarthing-dist/commands/pf-tea.md +1 -1
  110. package/pennyfarthing-dist/commands/pf-tech-writer.md +1 -1
  111. package/pennyfarthing-dist/commands/pf-theme.md +9 -9
  112. package/pennyfarthing-dist/commands/pf-ux-designer.md +1 -1
  113. package/pennyfarthing-dist/commands/pf-work.md +1 -1
  114. package/pennyfarthing-dist/gates/{confidence-sm.md → confidence.md} +16 -17
  115. package/pennyfarthing-dist/gates/dev-exit.md +75 -0
  116. package/pennyfarthing-dist/gates/merge-ready.md +49 -0
  117. package/pennyfarthing-dist/gates/release-ready.md +95 -0
  118. package/pennyfarthing-dist/gates/reviewer-preflight-check.md +90 -0
  119. package/pennyfarthing-dist/gates/sm-setup-exit.md +82 -0
  120. package/pennyfarthing-dist/guides/agent-behavior.md +129 -20
  121. package/pennyfarthing-dist/guides/agent-coordination.md +10 -10
  122. package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +6 -6
  123. package/pennyfarthing-dist/guides/agent-template-tactical.md +1 -1
  124. package/pennyfarthing-dist/guides/bell-mode.md +1 -1
  125. package/pennyfarthing-dist/guides/bikerack.md +10 -10
  126. package/pennyfarthing-dist/guides/brownfield-tools.md +24 -24
  127. package/pennyfarthing-dist/guides/command-tag-taxonomy.md +1 -1
  128. package/pennyfarthing-dist/guides/gate-schema.md +2 -2
  129. package/pennyfarthing-dist/guides/gates.md +10 -5
  130. package/pennyfarthing-dist/guides/handoff-cli.md +8 -8
  131. package/pennyfarthing-dist/guides/hooks.md +27 -27
  132. package/pennyfarthing-dist/guides/prime.md +2 -2
  133. package/pennyfarthing-dist/guides/reflector.md +1 -1
  134. package/pennyfarthing-dist/guides/skill-schema.md +6 -6
  135. package/pennyfarthing-dist/guides/tandem-protocol.md +3 -3
  136. package/pennyfarthing-dist/guides/workflow-schema.md +1 -1
  137. package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
  138. package/pennyfarthing-dist/guides/xml-tags.md +8 -8
  139. package/pennyfarthing-dist/scripts/README.md +4 -4
  140. package/pennyfarthing-dist/scripts/core/agent-session.sh +2 -5
  141. package/pennyfarthing-dist/scripts/core/check-context.sh +1 -1
  142. package/pennyfarthing-dist/scripts/core/pf.sh +5 -0
  143. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +2 -5
  144. package/pennyfarthing-dist/scripts/core/prime.sh +2 -25
  145. package/pennyfarthing-dist/scripts/git/README.md +14 -14
  146. package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +2 -3
  147. package/pennyfarthing-dist/scripts/git/git-status-all.sh +2 -3
  148. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +2 -3
  149. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +2 -4
  150. package/pennyfarthing-dist/scripts/hooks/README.md +6 -6
  151. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +3 -3
  152. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +3 -3
  153. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +3 -3
  154. package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +3 -3
  155. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +5 -4
  156. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +2 -1
  157. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +3 -3
  158. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +3 -3
  159. package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +3 -3
  160. package/pennyfarthing-dist/scripts/hooks/session-start.sh +3 -3
  161. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +3 -3
  162. package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +3 -3
  163. package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +3 -4
  164. package/pennyfarthing-dist/scripts/lib/env.sh +34 -0
  165. package/pennyfarthing-dist/scripts/lib/find-root.sh +5 -0
  166. package/pennyfarthing-dist/scripts/lib/run-pf.sh +43 -0
  167. package/pennyfarthing-dist/scripts/misc/README.md +1 -1
  168. package/pennyfarthing-dist/scripts/misc/statusline.sh +3 -3
  169. package/pennyfarthing-dist/scripts/sprint/README.md +21 -21
  170. package/pennyfarthing-dist/scripts/workflow/README.md +2 -2
  171. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +2 -16
  172. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +3 -3
  173. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +3 -3
  174. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +3 -3
  175. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +3 -3
  176. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +3 -3
  177. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +3 -3
  178. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +3 -3
  179. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +3 -3
  180. package/pennyfarthing-dist/skills/pf-bc/examples.md +23 -23
  181. package/pennyfarthing-dist/skills/pf-bc/skill.md +17 -17
  182. package/pennyfarthing-dist/skills/pf-bc/usage.md +8 -8
  183. package/pennyfarthing-dist/skills/pf-jira/SKILL.md +15 -15
  184. package/pennyfarthing-dist/skills/pf-jira/examples.md +48 -48
  185. package/pennyfarthing-dist/skills/pf-jira/usage.md +15 -15
  186. package/pennyfarthing-dist/skills/pf-settings/skill.md +42 -0
  187. package/pennyfarthing-dist/skills/pf-sprint/examples.md +80 -80
  188. package/pennyfarthing-dist/skills/pf-sprint/skill.md +35 -35
  189. package/pennyfarthing-dist/skills/pf-sprint/usage.md +30 -30
  190. package/pennyfarthing-dist/skills/pf-theme/examples.md +15 -15
  191. package/pennyfarthing-dist/skills/pf-theme/skill.md +6 -6
  192. package/pennyfarthing-dist/skills/pf-theme/usage.md +5 -5
  193. package/pennyfarthing-dist/skills/pf-workflow/examples.md +27 -27
  194. package/pennyfarthing-dist/skills/pf-workflow/skill.md +11 -11
  195. package/pennyfarthing-dist/skills/pf-workflow/usage.md +11 -11
  196. package/pennyfarthing-dist/skills/skill-registry.yaml +34 -19
  197. package/pennyfarthing-dist/templates/pyproject.toml +27 -0
  198. package/pennyfarthing-dist/templates/settings.local.json.template +11 -11
  199. package/pennyfarthing-dist/workflows/bdd-tandem.yaml +7 -3
  200. package/pennyfarthing-dist/workflows/bdd-team.yaml +89 -0
  201. package/pennyfarthing-dist/workflows/bdd.yaml +7 -3
  202. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +1 -1
  203. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +1 -1
  204. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +1 -1
  205. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
  206. package/pennyfarthing-dist/workflows/installation-check/steps/step-01-foundation.md +77 -0
  207. package/pennyfarthing-dist/workflows/installation-check/steps/step-02-commands.md +82 -0
  208. package/pennyfarthing-dist/workflows/installation-check/steps/step-03-hooks.md +121 -0
  209. package/pennyfarthing-dist/workflows/installation-check/steps/step-04-scripts.md +83 -0
  210. package/pennyfarthing-dist/workflows/installation-check/steps/step-05-layout.md +81 -0
  211. package/pennyfarthing-dist/workflows/installation-check/steps/step-06-legacy.md +94 -0
  212. package/pennyfarthing-dist/workflows/installation-check/steps/step-07-tools.md +80 -0
  213. package/pennyfarthing-dist/workflows/installation-check/steps/step-08-summary.md +99 -0
  214. package/pennyfarthing-dist/workflows/installation-check/workflow.yaml +47 -0
  215. package/pennyfarthing-dist/workflows/project-setup/steps/step-01-discover.md +47 -0
  216. package/pennyfarthing-dist/workflows/tdd-tandem.yaml +7 -3
  217. package/pennyfarthing-dist/workflows/tdd-team.yaml +80 -0
  218. package/pennyfarthing-dist/workflows/tdd.yaml +7 -3
  219. package/pennyfarthing-dist/workflows/trivial.yaml +7 -3
  220. package/pennyfarthing_scripts/__init__.py +1 -1
  221. package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  222. package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
  223. package/pennyfarthing_scripts/__pycache__/cli.cpython-311.pyc +0 -0
  224. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  225. package/pennyfarthing_scripts/__pycache__/context.cpython-311.pyc +0 -0
  226. package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
  227. package/pennyfarthing_scripts/bc/__pycache__/__init__.cpython-311.pyc +0 -0
  228. package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-311.pyc +0 -0
  229. package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
  230. package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-311.pyc +0 -0
  231. package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
  232. package/pennyfarthing_scripts/bc/__pycache__/split.cpython-314.pyc +0 -0
  233. package/pennyfarthing_scripts/bc/cli.py +23 -2
  234. package/pennyfarthing_scripts/bc/focus.py +1 -0
  235. package/pennyfarthing_scripts/bc/split.py +52 -0
  236. package/pennyfarthing_scripts/bellmode_hook.py +2 -5
  237. package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-311.pyc +0 -0
  238. package/pennyfarthing_scripts/bikerack/__pycache__/audit_log_panel.cpython-314.pyc +0 -0
  239. package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
  240. package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
  241. package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
  242. package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-311.pyc +0 -0
  243. package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
  244. package/pennyfarthing_scripts/bikerack/__pycache__/context_meter_footer.cpython-314.pyc +0 -0
  245. package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
  246. package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
  247. package/pennyfarthing_scripts/bikerack/__pycache__/events.cpython-314.pyc +0 -0
  248. package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
  249. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-311.pyc +0 -0
  250. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  251. package/pennyfarthing_scripts/bikerack/__pycache__/portrait_resolver.cpython-314.pyc +0 -0
  252. package/pennyfarthing_scripts/bikerack/__pycache__/progress_panel.cpython-314.pyc +0 -0
  253. package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
  254. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_data.cpython-314.pyc +0 -0
  255. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_screen.cpython-314.pyc +0 -0
  256. package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
  257. package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
  258. package/pennyfarthing_scripts/bikerack/audit_log_panel.py +48 -6
  259. package/pennyfarthing_scripts/bikerack/context_meter_footer.py +53 -3
  260. package/pennyfarthing_scripts/bikerack/launcher.py +6 -6
  261. package/pennyfarthing_scripts/bikerack/progress_panel.py +0 -1
  262. package/pennyfarthing_scripts/bikerack/sprint_panel.py +1 -1
  263. package/pennyfarthing_scripts/bikerack/story_detail_data.py +4 -1
  264. package/pennyfarthing_scripts/bikerack/story_detail_screen.py +2 -1
  265. package/pennyfarthing_scripts/bikerack/tui.py +214 -10
  266. package/pennyfarthing_scripts/bikerack/ws_client.py +2 -2
  267. package/pennyfarthing_scripts/cli.py +5 -0
  268. package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-311.pyc +0 -0
  269. package/pennyfarthing_scripts/common/__pycache__/config.cpython-311.pyc +0 -0
  270. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  271. package/pennyfarthing_scripts/common/__pycache__/output.cpython-311.pyc +0 -0
  272. package/pennyfarthing_scripts/common/__pycache__/pr_config.cpython-314.pyc +0 -0
  273. package/pennyfarthing_scripts/common/config.py +29 -2
  274. package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-311.pyc +0 -0
  275. package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
  276. package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-311.pyc +0 -0
  277. package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-314.pyc +0 -0
  278. package/pennyfarthing_scripts/consultation/cli.py +3 -3
  279. package/pennyfarthing_scripts/context.py +3 -3
  280. package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-311.pyc +0 -0
  281. package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-311.pyc +0 -0
  282. package/pennyfarthing_scripts/epic/__pycache__/__init__.cpython-311.pyc +0 -0
  283. package/pennyfarthing_scripts/epic/__pycache__/cli.cpython-311.pyc +0 -0
  284. package/pennyfarthing_scripts/git/hooks_installer.py +2 -3
  285. package/pennyfarthing_scripts/git/status_all.py +1 -1
  286. package/pennyfarthing_scripts/git/worktree.py +2 -2
  287. package/pennyfarthing_scripts/git_group/__pycache__/__init__.cpython-311.pyc +0 -0
  288. package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-311.pyc +0 -0
  289. package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-314.pyc +0 -0
  290. package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-311.pyc +0 -0
  291. package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-311.pyc +0 -0
  292. package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-314.pyc +0 -0
  293. package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
  294. package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
  295. package/pennyfarthing_scripts/handoff/__pycache__/phase_check.cpython-314.pyc +0 -0
  296. package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
  297. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-311.pyc +0 -0
  298. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-311.pyc +0 -0
  299. package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-311.pyc +0 -0
  300. package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-311.pyc +0 -0
  301. package/pennyfarthing_scripts/hooks/__init__.py +8 -3
  302. package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  303. package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
  304. package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-311.pyc +0 -0
  305. package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
  306. package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-311.pyc +0 -0
  307. package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-314.pyc +0 -0
  308. package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-311.pyc +0 -0
  309. package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
  310. package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-311.pyc +0 -0
  311. package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
  312. package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-311.pyc +0 -0
  313. package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
  314. package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-311.pyc +0 -0
  315. package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
  316. package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-311.pyc +0 -0
  317. package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
  318. package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-311.pyc +0 -0
  319. package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
  320. package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-311.pyc +0 -0
  321. package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
  322. package/pennyfarthing_scripts/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
  323. package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-311.pyc +0 -0
  324. package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
  325. package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-311.pyc +0 -0
  326. package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
  327. package/pennyfarthing_scripts/hooks/bell_mode.py +0 -1
  328. package/pennyfarthing_scripts/hooks/pre_edit_check.py +0 -1
  329. package/pennyfarthing_scripts/hooks/reflector_check.py +1 -2
  330. package/pennyfarthing_scripts/hooks/schema_validation.py +0 -1
  331. package/pennyfarthing_scripts/hooks/session_start.py +6 -8
  332. package/pennyfarthing_scripts/hooks/statusline.py +10 -1
  333. package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-311.pyc +0 -0
  334. package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-311.pyc +0 -0
  335. package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-311.pyc +0 -0
  336. package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-311.pyc +0 -0
  337. package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-311.pyc +0 -0
  338. package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-311.pyc +0 -0
  339. package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-311.pyc +0 -0
  340. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-311.pyc +0 -0
  341. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-311.pyc +0 -0
  342. package/pennyfarthing_scripts/jira/__pycache__/create.cpython-311.pyc +0 -0
  343. package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-311.pyc +0 -0
  344. package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-311.pyc +0 -0
  345. package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-311.pyc +0 -0
  346. package/pennyfarthing_scripts/jira/__pycache__/story.cpython-311.pyc +0 -0
  347. package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-311.pyc +0 -0
  348. package/pennyfarthing_scripts/launch/__pycache__/__init__.cpython-311.pyc +0 -0
  349. package/pennyfarthing_scripts/launch/__pycache__/cli.cpython-311.pyc +0 -0
  350. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  351. package/pennyfarthing_scripts/prime/heatmap.py +3 -15
  352. package/pennyfarthing_scripts/session/__pycache__/__init__.cpython-311.pyc +0 -0
  353. package/pennyfarthing_scripts/session/__pycache__/cli.cpython-311.pyc +0 -0
  354. package/pennyfarthing_scripts/settings/__init__.py +0 -0
  355. package/pennyfarthing_scripts/settings/__pycache__/__init__.cpython-314.pyc +0 -0
  356. package/pennyfarthing_scripts/settings/__pycache__/cli.cpython-314.pyc +0 -0
  357. package/pennyfarthing_scripts/settings/__pycache__/settings.cpython-314.pyc +0 -0
  358. package/pennyfarthing_scripts/settings/cli.py +55 -0
  359. package/pennyfarthing_scripts/settings/settings.py +98 -0
  360. package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-311.pyc +0 -0
  361. package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-311.pyc +0 -0
  362. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-311.pyc +0 -0
  363. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  364. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-311.pyc +0 -0
  365. package/pennyfarthing_scripts/sprint/__pycache__/epic_update.cpython-311.pyc +0 -0
  366. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-311.pyc +0 -0
  367. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  368. package/pennyfarthing_scripts/sprint/__pycache__/status.cpython-311.pyc +0 -0
  369. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-311.pyc +0 -0
  370. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  371. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-311.pyc +0 -0
  372. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  373. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-311.pyc +0 -0
  374. package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-311.pyc +0 -0
  375. package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-311.pyc +0 -0
  376. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-311.pyc +0 -0
  377. package/pennyfarthing_scripts/sprint/cli.py +121 -0
  378. package/pennyfarthing_scripts/sprint/loader.py +154 -3
  379. package/pennyfarthing_scripts/sprint/story_update.py +7 -0
  380. package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  381. package/pennyfarthing_scripts/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
  382. package/pennyfarthing_scripts/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
  383. package/pennyfarthing_scripts/tests/test_bikerack.py +26 -26
  384. package/pennyfarthing_scripts/tests/test_confidence_sm_gate.py +17 -16
  385. package/pennyfarthing_scripts/tests/test_dialogue_manager.py +0 -1
  386. package/pennyfarthing_scripts/tests/test_resolve_gate_file_field.py +45 -47
  387. package/pennyfarthing_scripts/tests/test_workflow_list_team.py +143 -0
  388. package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-311.pyc +0 -0
  389. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-311.pyc +0 -0
  390. package/pennyfarthing_scripts/validate/__pycache__/__init__.cpython-311.pyc +0 -0
  391. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-311.pyc +0 -0
  392. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
  393. package/pennyfarthing_scripts/validate/adapters/team_mode.py +323 -0
  394. package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-311.pyc +0 -0
  395. package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
  396. package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-311.pyc +0 -0
  397. package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-314.pyc +0 -0
  398. package/pennyfarthing_scripts/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
  399. package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-311.pyc +0 -0
  400. package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-314.pyc +0 -0
  401. package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-311.pyc +0 -0
  402. package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-314.pyc +0 -0
  403. package/pennyfarthing_scripts/workflow/cli.py +15 -14
  404. package/pennyfarthing_scripts/workflow/state.py +0 -1
  405. package/pennyfarthing_scripts/workflow/team_lifecycle.py +3 -4
@@ -0,0 +1,89 @@
1
+ # BDD Team Workflow - BDD with Native Team Collaboration
2
+ #
3
+ # When to use: Best for UI/UX-heavy stories where sustained parallel
4
+ # collaboration during design and implementation provides more value than
5
+ # periodic tandem consultation. Use this instead of bdd-tandem when the
6
+ # designer-architect and dev-tester pairings need continuous interaction
7
+ # throughout their respective phases.
8
+ #
9
+ # Compared to bdd-tandem: Tandem spawns a Haiku subagent for a single
10
+ # request/response exchange. Team mode spawns full teammate sessions that
11
+ # work in parallel with the lead for the entire phase duration.
12
+ #
13
+ # Team pairings:
14
+ # - DESIGN phase: UX-Designer (lead) + Architect — Architect validates
15
+ # technical feasibility of design decisions in real-time
16
+ # - GREEN phase: Dev (lead) + TEA — TEA verifies tests stay green and
17
+ # flags regressions as Dev implements
18
+ #
19
+ # Fallback: When native teams are unavailable (non-interactive mode, feature
20
+ # flag off, or CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS not set), phases with
21
+ # team blocks fall back to solo execution. The lead agent works alone —
22
+ # consider using bdd-tandem as an alternative that works in all modes.
23
+ #
24
+ # Flow: SM → UX-Designer (+Architect) → TEA → Dev (+TEA) → Reviewer → SM
25
+
26
+ workflow:
27
+ name: bdd-team
28
+ description: BDD with native team collaboration — architect on design, TEA on green phase
29
+ version: "1.0.0"
30
+
31
+ phases:
32
+ - name: setup
33
+ agent: sm
34
+ output: [session_file, branches, story_context]
35
+
36
+ - name: design
37
+ agent: ux-designer
38
+ input: [session_file, story_context]
39
+ output: [design_spec, user_flows, wireframes, behavior_scenarios]
40
+ gate:
41
+ file: gates/design-review
42
+ type: design_review
43
+ condition: UX spec defines user flows and acceptance behaviors
44
+ team:
45
+ teammates:
46
+ - agent: architect
47
+ task: "Validate technical feasibility of design decisions. Flag constraints via SendMessage."
48
+
49
+ - name: red
50
+ agent: tea
51
+ input: [design_spec, behavior_scenarios, story_context]
52
+ output: [failing_tests]
53
+ gate:
54
+ file: gates/tests-fail
55
+ type: tests_fail
56
+ condition: Behavior scenarios have test coverage
57
+
58
+ - name: green
59
+ agent: dev
60
+ input: [failing_tests, design_spec, story_context]
61
+ output: [implementation, passing_tests]
62
+ gate:
63
+ file: gates/tests-pass
64
+ type: tests_pass
65
+ condition: All tests passing, UX spec implemented
66
+ team:
67
+ teammates:
68
+ - agent: tea
69
+ task: "Verify tests stay green and flag regressions as Dev implements."
70
+
71
+ - name: review
72
+ agent: reviewer
73
+ input: [implementation, passing_tests, design_spec]
74
+ output: [approval]
75
+ gate:
76
+ file: gates/approval
77
+ type: approval
78
+ condition: Code review approved, UX requirements met
79
+
80
+ - name: finish
81
+ agent: sm
82
+ input: [approval]
83
+ output: [archived_session, story_summary]
84
+
85
+ triggers:
86
+ tags: [team, bdd-team]
87
+ points:
88
+ min: 3
89
+ default: false
@@ -13,6 +13,10 @@ workflow:
13
13
  - name: setup
14
14
  agent: sm
15
15
  output: [session_file, branches, story_context]
16
+ gate:
17
+ file: gates/sm-setup-exit
18
+ type: sm_setup_exit
19
+ condition: Session file created with workflow, phase, context, and branch
16
20
 
17
21
  - name: design
18
22
  agent: ux-designer
@@ -37,9 +41,9 @@ workflow:
37
41
  input: [failing_tests, design_spec, story_context]
38
42
  output: [implementation, passing_tests]
39
43
  gate:
40
- file: gates/tests-pass
41
- type: tests_pass
42
- condition: All tests passing, UX spec implemented
44
+ file: gates/dev-exit
45
+ type: dev_exit
46
+ condition: Tests green, tree clean, no debug code, correct branch
43
47
 
44
48
  - name: review
45
49
  agent: reviewer
@@ -170,7 +170,7 @@ Display completion message:
170
170
 
171
171
  Next steps:
172
172
  - Use `/pf-sprint` to view the backlog
173
- - Use `pf sprint epic promote` to move to a sprint when ready
173
+ - Use `pf.sh sprint epic promote` to move to a sprint when ready
174
174
  ```
175
175
 
176
176
  ## SUCCESS CRITERIA:
@@ -32,7 +32,7 @@ Build a complete picture of uncommitted changes across ALL repos defined in `.cl
32
32
  **CRITICAL: Use the multi-repo script, not plain `git status`.**
33
33
 
34
34
  ```bash
35
- pf git status
35
+ pf.sh git status
36
36
  ```
37
37
 
38
38
  This shows branch, staged/unstaged changes, and unpushed commits for **all repos** defined in the project configuration.
@@ -34,7 +34,7 @@ Git cleanup summary report including:
34
34
  ### 4.1 Final Git Status (All Repos)
35
35
 
36
36
  ```bash
37
- pf git status
37
+ pf.sh git status
38
38
  ```
39
39
 
40
40
  Expected: Clean working directory in all repos, or only intentionally skipped files.
@@ -68,7 +68,7 @@ To run git-cleanup again:
68
68
  Or for a quick status check across all repos:
69
69
 
70
70
  ```bash
71
- pf git status
71
+ pf.sh git status
72
72
  ```
73
73
 
74
74
  ---
@@ -0,0 +1,77 @@
1
+ # Step 1: Foundation Check
2
+
3
+ <step-meta>
4
+ step: 1
5
+ name: foundation
6
+ workflow: installation-check
7
+ agent: devops
8
+ gate: false
9
+ next: step-02-commands
10
+ </step-meta>
11
+
12
+ <purpose>
13
+ Verify the core Pennyfarthing installation exists and is intact. This checks the manifest, core framework directories, symlinks, and file integrity — the foundation everything else depends on.
14
+ </purpose>
15
+
16
+ <prerequisites>
17
+ - Project has been initialized with `pennyfarthing init`
18
+ - Running from the project root directory
19
+ </prerequisites>
20
+
21
+ <instructions>
22
+ 1. Run the doctor command for the installation category
23
+ 2. For each result, explain what it checks and why it matters:
24
+ - **manifest/exists**: The manifest tracks installed version and file hashes. Without it, Pennyfarthing can't detect drift or apply updates.
25
+ - **core/* directories**: These contain agents, commands, guides, skills, personas, and scripts. Missing directories mean broken agent invocation.
26
+ - **symlink/* checks** (symlink mode only): Symlinks to node_modules keep files in sync with the installed package version.
27
+ - **core/integrity**: Detects locally modified framework files that may conflict with updates.
28
+ - **core/completeness**: Flags missing files that should have been installed.
29
+ 3. For any failures, explain the impact and offer remediation
30
+ 4. Present the collaboration menu
31
+ </instructions>
32
+
33
+ <actions>
34
+ - Run: `pennyfarthing doctor --json --category installation`
35
+ - Check: manifest.json exists at `.pennyfarthing/manifest.json`
36
+ - Check: Core directories exist under `.claude/pennyfarthing/` or via symlinks
37
+ </actions>
38
+
39
+ <output>
40
+ Present results in a clear table format:
41
+
42
+ ```markdown
43
+ ## Foundation Check Results
44
+
45
+ | Check | Status | Detail |
46
+ |-------|--------|--------|
47
+ | manifest | ... | ... |
48
+ | core files | ... | ... |
49
+ | symlinks | ... | ... |
50
+
51
+ ### Issues Found
52
+ [Explain each failure/warning with remediation steps]
53
+ ```
54
+ </output>
55
+
56
+ <collaboration-menu>
57
+ - **[F] Fix** - Run `pennyfarthing doctor --fix --category installation` to auto-repair
58
+ - **[E] Explain** - Deep dive on a specific check result
59
+ - **[C] Continue** - Proceed to Commands & Skills check
60
+ - **[R] Recheck** - Re-run after manual changes
61
+ </collaboration-menu>
62
+
63
+ <next-step>
64
+ After reviewing foundation results, proceed to step-02-commands.md for Commands & Skills verification.
65
+ </next-step>
66
+
67
+ ## Failure Modes
68
+
69
+ - Running from wrong directory (not project root)
70
+ - Manifest missing entirely (needs `pennyfarthing init`)
71
+ - Broken symlinks after `node_modules` cleanup without reinstall
72
+
73
+ ## Success Metrics
74
+
75
+ - All manifest and core file checks pass
76
+ - User understands each check's purpose
77
+ - Any failures have clear remediation path
@@ -0,0 +1,82 @@
1
+ # Step 2: Commands & Skills
2
+
3
+ <step-meta>
4
+ step: 2
5
+ name: commands
6
+ workflow: installation-check
7
+ agent: devops
8
+ gate: false
9
+ next: step-03-hooks
10
+ </step-meta>
11
+
12
+ <purpose>
13
+ Verify that slash commands, skills, user project files, and configuration are properly installed. These are the agent interface layer — what users and agents interact with directly.
14
+ </purpose>
15
+
16
+ <prerequisites>
17
+ - Foundation check (step 1) completed
18
+ - `.claude/` directory exists
19
+ </prerequisites>
20
+
21
+ <instructions>
22
+ 1. Run the doctor command for the commands category
23
+ 2. For each result, explain what it checks and why it matters:
24
+ - **core/commands**: Slash commands (`.claude/commands/pf-*.md`) should be file copies (not symlinks) to avoid node_modules drift. Stale copies mean agents use outdated instructions.
25
+ - **core/skills**: Skills (`.claude/skills/pf-*/`) should also be file copies. Missing skills break agent workflows.
26
+ - **project/directory**: `.claude/project/` holds user-specific project configuration.
27
+ - **project/sidecars**: `.pennyfarthing/sidecars/` stores per-agent learning files that accumulate context across sessions.
28
+ - **persona-config**: `.pennyfarthing/config.local.yaml` sets the active theme. Without it, agents use default (unthemed) personas.
29
+ - **settings.local.json**: The most critical user file — registers hooks with Claude Code. Missing = no hooks, no OTEL, no bell mode.
30
+ 3. For warnings about stale/symlinked commands, explain the migration from symlinks to copies (v11.3.0+)
31
+ 4. Present the collaboration menu
32
+ </instructions>
33
+
34
+ <actions>
35
+ - Run: `pennyfarthing doctor --json --category commands`
36
+ - Check: `.claude/commands/` contains `pf-*` files (copies, not symlinks)
37
+ - Check: `.claude/skills/` contains `pf-*` directories (copies, not symlinks)
38
+ - Check: `.pennyfarthing/config.local.yaml` exists
39
+ </actions>
40
+
41
+ <output>
42
+ Present results in a clear table format:
43
+
44
+ ```markdown
45
+ ## Commands & Skills Check Results
46
+
47
+ | Check | Status | Detail |
48
+ |-------|--------|--------|
49
+ | commands | ... | ... |
50
+ | skills | ... | ... |
51
+ | project dir | ... | ... |
52
+ | sidecars | ... | ... |
53
+ | persona config | ... | ... |
54
+ | settings.local.json | ... | ... |
55
+
56
+ ### Issues Found
57
+ [Explain each failure/warning with remediation steps]
58
+ ```
59
+ </output>
60
+
61
+ <collaboration-menu>
62
+ - **[F] Fix** - Run `pennyfarthing doctor --fix --category commands` to auto-repair
63
+ - **[E] Explain** - Deep dive on a specific check result
64
+ - **[C] Continue** - Proceed to Hook Configuration check
65
+ - **[R] Recheck** - Re-run after manual changes
66
+ </collaboration-menu>
67
+
68
+ <next-step>
69
+ After reviewing command and skill results, proceed to step-03-hooks.md for Hook Configuration verification.
70
+ </next-step>
71
+
72
+ ## Failure Modes
73
+
74
+ - Commands still symlinked from pre-v11.3 installs
75
+ - Skills missing after partial update
76
+ - settings.local.json deleted by user accidentally
77
+
78
+ ## Success Metrics
79
+
80
+ - All commands and skills are file copies (not symlinks)
81
+ - settings.local.json exists
82
+ - User understands the symlink-to-copy migration
@@ -0,0 +1,121 @@
1
+ # Step 3: Hook Configuration
2
+
3
+ <step-meta>
4
+ step: 3
5
+ name: hooks
6
+ workflow: installation-check
7
+ agent: devops
8
+ gate: true
9
+ next: step-04-scripts
10
+ </step-meta>
11
+
12
+ <purpose>
13
+ Verify all 9 hook configurations in settings.local.json. Hooks are the runtime integration between Pennyfarthing and Claude Code — each one controls a critical behavior. This is the most complex and consequential category, which is why it has a gate.
14
+ </purpose>
15
+
16
+ <prerequisites>
17
+ - settings.local.json exists (verified in step 2)
18
+ - User understands that hooks are registered in `.claude/settings.local.json`
19
+ </prerequisites>
20
+
21
+ <instructions>
22
+ 1. Run the doctor command for the hooks category
23
+ 2. For each of the 9 hook checks, explain what it does, why it matters, and the impact of it being missing:
24
+
25
+ **SessionStart hooks:**
26
+ - **session-start-hook**: Exports `PROJECT_ROOT` env var. Without it, agents can't find project files. The most critical hook.
27
+ - **otel-auto-start**: Starts WheelHub server and configures 5 OTEL env vars for telemetry. Legacy `.sh` version only sets 2 of 5 vars.
28
+ - **auto-load-sm**: Auto-invokes `/sm` agent on new sessions. Without it, users must manually run `/sm` every time.
29
+
30
+ **Stop hooks:**
31
+ - **stop-hook**: Runs reflector-check to enforce CYCLIST markers at turn end. Without it, Cyclist QuickActions won't render.
32
+
33
+ **PostToolUse hooks:**
34
+ - **post-tool-use-hook**: Bell mode — injects queued messages via `additionalContext`. Without it, `/bell` messages are lost.
35
+ - **sprint-yaml-validation**: Validates sprint YAML after edits. Without it, malformed YAML breaks SprintPanel.
36
+
37
+ **PreToolUse hooks:**
38
+ - **context-circuit-breaker**: Auto-saves session when context exceeds threshold. Without it, long sessions lose work.
39
+ - **schema-validation**: Validates XML schema on Write to session/skill/step files. Without it, malformed files slip through.
40
+
41
+ **Permissions:**
42
+ - **benchmark-permissions**: `Bash(claude:*)` needed for parallel benchmarks. Without it, only sequential runs work.
43
+
44
+ 3. For each warning/failure, explain the specific impact and offer targeted fix
45
+ 4. Present gate criteria for user approval
46
+
47
+ **IMPORTANT:** Modifying settings.local.json affects all Claude Code sessions. Explain this to the user before applying fixes.
48
+ </instructions>
49
+
50
+ <actions>
51
+ - Run: `pennyfarthing doctor --json --category hooks`
52
+ - Read: `.claude/settings.local.json` to show current hook configuration
53
+ </actions>
54
+
55
+ <output>
56
+ Present results grouped by hook type:
57
+
58
+ ```markdown
59
+ ## Hook Configuration Results
60
+
61
+ ### SessionStart Hooks
62
+ | Hook | Status | Detail |
63
+ |------|--------|--------|
64
+ | session-start | ... | ... |
65
+ | otel-auto-start | ... | ... |
66
+ | auto-load-sm | ... | ... |
67
+
68
+ ### Stop Hooks
69
+ | Hook | Status | Detail |
70
+ |------|--------|--------|
71
+ | reflector-check | ... | ... |
72
+
73
+ ### PostToolUse Hooks
74
+ | Hook | Status | Detail |
75
+ |------|--------|--------|
76
+ | bell-mode | ... | ... |
77
+ | sprint-yaml | ... | ... |
78
+
79
+ ### PreToolUse Hooks
80
+ | Hook | Status | Detail |
81
+ |------|--------|--------|
82
+ | context-circuit-breaker | ... | ... |
83
+ | schema-validation | ... | ... |
84
+
85
+ ### Permissions
86
+ | Check | Status | Detail |
87
+ |-------|--------|--------|
88
+ | benchmark-permissions | ... | ... |
89
+ ```
90
+ </output>
91
+
92
+ <gate>
93
+ ## Completion Criteria
94
+ - [ ] All 9 hook checks reviewed with user
95
+ - [ ] User understands what each hook controls
96
+ - [ ] Any fixes to settings.local.json approved by user
97
+ - [ ] User confirmed hook configuration is acceptable
98
+ </gate>
99
+
100
+ <collaboration-menu>
101
+ - **[F] Fix** - Run `pennyfarthing doctor --fix --category hooks` to add missing hooks
102
+ - **[E] Explain** - Deep dive on a specific hook's behavior
103
+ - **[C] Continue** - Approve configuration and proceed to Scripts check
104
+ - **[R] Recheck** - Re-run after manual edits to settings.local.json
105
+ </collaboration-menu>
106
+
107
+ <next-step>
108
+ After user approves hook configuration, proceed to step-04-scripts.md for Hook Scripts verification.
109
+ </next-step>
110
+
111
+ ## Failure Modes
112
+
113
+ - Applying fixes without understanding what each hook does
114
+ - Not realizing settings.local.json changes affect all sessions
115
+ - Skipping gate without reviewing critical hooks (session-start, context-circuit-breaker)
116
+
117
+ ## Success Metrics
118
+
119
+ - All 9 hooks configured or user made informed decision to skip
120
+ - User understands the relationship between hooks and features
121
+ - Gate approval recorded
@@ -0,0 +1,83 @@
1
+ # Step 4: Hook Scripts
2
+
3
+ <step-meta>
4
+ step: 4
5
+ name: scripts
6
+ workflow: installation-check
7
+ agent: devops
8
+ gate: false
9
+ next: step-05-layout
10
+ </step-meta>
11
+
12
+ <purpose>
13
+ Verify that hook script files exist on disk and are executable. Step 3 checked that hooks are registered in settings.local.json — this step checks that the script files those hooks point to actually exist and can run.
14
+ </purpose>
15
+
16
+ <prerequisites>
17
+ - Hook configuration reviewed (step 3)
18
+ - Installation type known (symlink vs copy mode)
19
+ </prerequisites>
20
+
21
+ <instructions>
22
+ 1. Run the doctor command for the scripts category
23
+ 2. For each result, explain the relationship between the settings entry and the script file:
24
+ - **hook/* checks**: Scripts in `.pennyfarthing/scripts/hooks/` (symlink mode) or `.claude/pennyfarthing/scripts/hooks/` (copy mode). These are the actual bash scripts that hooks execute.
25
+ - **Execute permissions**: Scripts must be executable (`chmod +x`). A registered hook pointing to a non-executable script causes "Permission denied" errors on every tool use.
26
+ - **git-hook/* checks**: Scripts in `.git/hooks/` (pre-commit, pre-push, post-merge). Framework repos should use symlinks to `pennyfarthing-dist/scripts/hooks/`; end-user repos use copies.
27
+ 3. For git hooks, explain the difference between framework symlinks and user copies
28
+ 4. Present the collaboration menu
29
+ </instructions>
30
+
31
+ <actions>
32
+ - Run: `pennyfarthing doctor --json --category scripts`
33
+ - Check: Hook scripts at `.pennyfarthing/scripts/hooks/` are executable
34
+ - Check: Git hooks at `.git/hooks/` are up-to-date
35
+ </actions>
36
+
37
+ <output>
38
+ Present results in two sections:
39
+
40
+ ```markdown
41
+ ## Hook Scripts
42
+
43
+ | Script | Status | Detail |
44
+ |--------|--------|--------|
45
+ | session-start.sh | ... | ... |
46
+ | pre-edit-check.sh | ... | ... |
47
+ | context-warning.sh | ... | ... |
48
+ | context-circuit-breaker.sh | ... | ... |
49
+ | bell-mode-hook.sh | ... | ... |
50
+ | question-reflector-check.sh | ... | ... |
51
+ | sprint-yaml-validation.sh | ... | ... |
52
+
53
+ ## Git Hooks
54
+
55
+ | Hook | Status | Detail |
56
+ |------|--------|--------|
57
+ | pre-commit | ... | ... |
58
+ | pre-push | ... | ... |
59
+ | post-merge | ... | ... |
60
+ ```
61
+ </output>
62
+
63
+ <collaboration-menu>
64
+ - **[F] Fix** - Run `pennyfarthing doctor --fix --category scripts` to fix permissions and stale hooks
65
+ - **[E] Explain** - Deep dive on a specific script's behavior
66
+ - **[C] Continue** - Proceed to Layout check
67
+ - **[R] Recheck** - Re-run after manual changes
68
+ </collaboration-menu>
69
+
70
+ <next-step>
71
+ After reviewing script results, proceed to step-05-layout.md for Directory & File Layout verification.
72
+ </next-step>
73
+
74
+ ## Failure Modes
75
+
76
+ - Scripts missing after partial update (need `pennyfarthing update`)
77
+ - Execute permission stripped by git or file copy operations
78
+ - Git hooks stale after package version bump
79
+
80
+ ## Success Metrics
81
+
82
+ - All hook scripts exist and are executable
83
+ - Git hooks match package source (or are custom non-pennyfarthing hooks)
@@ -0,0 +1,81 @@
1
+ # Step 5: Directory & File Layout
2
+
3
+ <step-meta>
4
+ step: 5
5
+ name: layout
6
+ workflow: installation-check
7
+ agent: devops
8
+ gate: false
9
+ next: step-06-legacy
10
+ </step-meta>
11
+
12
+ <purpose>
13
+ Verify that files and directories are at their correct locations. Pennyfarthing has migrated file locations across versions — this step ensures everything is at the current canonical paths and flags any files stuck at old locations.
14
+ </purpose>
15
+
16
+ <prerequisites>
17
+ - Foundation and commands checks completed (steps 1-2)
18
+ </prerequisites>
19
+
20
+ <instructions>
21
+ 1. Run the doctor command for the layout category
22
+ 2. For each result, explain the expected location and why it matters:
23
+ - **dir/sprint**: `sprint/` directory holds sprint tracking YAML files.
24
+ - **dir/session**: `.session/` stores active work session files for each story.
25
+ - **layout/manifest**: `.pennyfarthing/manifest.json` tracks installed version.
26
+ - **layout/config**: `.pennyfarthing/config.local.yaml` stores theme and local settings.
27
+ - **layout/settings**: `.claude/settings.local.json` registers hooks with Claude Code.
28
+ - **layout/sidecars**: `.pennyfarthing/sidecars/` stores per-agent learning files.
29
+ - **layout/project-hooks**: `.pennyfarthing/project/hooks/` stores user-customized hook scripts (setup-env.sh, auto-load-sm.sh).
30
+ - **layout/*-old-location**: Files found at legacy paths that should be migrated.
31
+ 3. For old-location warnings, explain when the migration happened and what the fix does
32
+ 4. Present the collaboration menu
33
+ </instructions>
34
+
35
+ <actions>
36
+ - Run: `pennyfarthing doctor --json --category layout`
37
+ - Check: `sprint/` and `.session/` directories exist
38
+ - Check: Files at canonical `.pennyfarthing/` locations
39
+ </actions>
40
+
41
+ <output>
42
+ Present results:
43
+
44
+ ```markdown
45
+ ## Directory & File Layout Results
46
+
47
+ | Check | Status | Detail |
48
+ |-------|--------|--------|
49
+ | sprint dir | ... | ... |
50
+ | session dir | ... | ... |
51
+ | manifest location | ... | ... |
52
+ | config location | ... | ... |
53
+ | settings location | ... | ... |
54
+ | sidecars location | ... | ... |
55
+ | project hooks | ... | ... |
56
+
57
+ ### Migration Needed
58
+ [List any files at old locations with migration path]
59
+ ```
60
+ </output>
61
+
62
+ <collaboration-menu>
63
+ - **[F] Fix** - Run `pennyfarthing doctor --fix --category layout` to migrate files
64
+ - **[E] Explain** - Deep dive on the file layout evolution
65
+ - **[C] Continue** - Proceed to Legacy cleanup check
66
+ - **[R] Recheck** - Re-run after manual moves
67
+ </collaboration-menu>
68
+
69
+ <next-step>
70
+ After reviewing layout results, proceed to step-06-legacy.md for Legacy artifact cleanup.
71
+ </next-step>
72
+
73
+ ## Failure Modes
74
+
75
+ - Moving files manually without updating references in settings.local.json
76
+ - Missing sprint/ or .session/ directories (need `pennyfarthing init`)
77
+
78
+ ## Success Metrics
79
+
80
+ - All files at canonical locations
81
+ - No old-location warnings remaining