@pennyfarthing/core 11.2.0 → 11.2.2

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 (367) hide show
  1. package/README.md +100 -40
  2. package/package.json +2 -1
  3. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
  4. package/packages/core/dist/cli/commands/doctor.js +474 -66
  5. package/packages/core/dist/cli/commands/doctor.js.map +1 -1
  6. package/packages/core/dist/cli/commands/init.js +4 -4
  7. package/packages/core/dist/cli/commands/init.js.map +1 -1
  8. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  9. package/packages/core/dist/cli/commands/update.js +4 -5
  10. package/packages/core/dist/cli/commands/update.js.map +1 -1
  11. package/packages/core/dist/cli/utils/constants.d.ts +3 -8
  12. package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
  13. package/packages/core/dist/cli/utils/constants.js +3 -4
  14. package/packages/core/dist/cli/utils/constants.js.map +1 -1
  15. package/packages/core/dist/cli/utils/settings.d.ts +7 -0
  16. package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
  17. package/packages/core/dist/cli/utils/settings.js +70 -29
  18. package/packages/core/dist/cli/utils/settings.js.map +1 -1
  19. package/packages/core/dist/cli/utils/symlinks.js +16 -16
  20. package/packages/core/dist/cli/utils/symlinks.js.map +1 -1
  21. package/packages/core/dist/consultation/dialogue-manager.d.ts +1 -1
  22. package/packages/core/dist/consultation/dialogue-manager.d.ts.map +1 -1
  23. package/packages/core/dist/consultation/dialogue-manager.js +1 -1
  24. package/packages/core/dist/consultation/dialogue-manager.js.map +1 -1
  25. package/packages/core/dist/consultation/dialogue-manager.test.js.map +1 -1
  26. package/packages/core/dist/consultation/tandem-metrics.d.ts +91 -0
  27. package/packages/core/dist/consultation/tandem-metrics.d.ts.map +1 -0
  28. package/packages/core/dist/consultation/tandem-metrics.js +131 -0
  29. package/packages/core/dist/consultation/tandem-metrics.js.map +1 -0
  30. package/packages/core/dist/consultation/tandem-metrics.test.d.ts +18 -0
  31. package/packages/core/dist/consultation/tandem-metrics.test.d.ts.map +1 -0
  32. package/packages/core/dist/consultation/tandem-metrics.test.js +457 -0
  33. package/packages/core/dist/consultation/tandem-metrics.test.js.map +1 -0
  34. package/packages/core/dist/public/css/react.css +1 -1
  35. package/packages/core/dist/public/js/react/react.js +14 -14
  36. package/packages/core/dist/server/api/agent-load.js +1 -1
  37. package/packages/core/dist/server/api/agent-load.js.map +1 -1
  38. package/packages/core/dist/server/api/git.d.ts.map +1 -1
  39. package/packages/core/dist/server/api/git.js +0 -1
  40. package/packages/core/dist/server/api/git.js.map +1 -1
  41. package/packages/core/dist/server/api/index.d.ts +2 -0
  42. package/packages/core/dist/server/api/index.d.ts.map +1 -1
  43. package/packages/core/dist/server/api/index.js +2 -0
  44. package/packages/core/dist/server/api/index.js.map +1 -1
  45. package/packages/core/dist/server/api/project-info.d.ts +11 -0
  46. package/packages/core/dist/server/api/project-info.d.ts.map +1 -0
  47. package/packages/core/dist/server/api/project-info.js +18 -0
  48. package/packages/core/dist/server/api/project-info.js.map +1 -0
  49. package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
  50. package/packages/core/dist/server/otlp-receiver.js +18 -1
  51. package/packages/core/dist/server/otlp-receiver.js.map +1 -1
  52. package/packages/core/dist/server/otlp-receiver.test.js +1 -1
  53. package/packages/core/dist/server/otlp-receiver.test.js.map +1 -1
  54. package/packages/core/dist/server/server.d.ts +0 -3
  55. package/packages/core/dist/server/server.d.ts.map +1 -1
  56. package/packages/core/dist/server/server.js +5 -38
  57. package/packages/core/dist/server/server.js.map +1 -1
  58. package/packages/core/dist/server/server.test.d.ts +1 -1
  59. package/packages/core/dist/server/server.test.js +12 -23
  60. package/packages/core/dist/server/server.test.js.map +1 -1
  61. package/packages/core/dist/server/settings.d.ts +1 -0
  62. package/packages/core/dist/server/settings.d.ts.map +1 -1
  63. package/packages/core/dist/server/settings.js +13 -0
  64. package/packages/core/dist/server/settings.js.map +1 -1
  65. package/packages/core/dist/shared/capabilities.d.ts +88 -0
  66. package/packages/core/dist/shared/capabilities.d.ts.map +1 -0
  67. package/packages/core/dist/shared/capabilities.js +133 -0
  68. package/packages/core/dist/shared/capabilities.js.map +1 -0
  69. package/packages/core/dist/shared/capabilities.test.d.ts +2 -0
  70. package/packages/core/dist/shared/capabilities.test.d.ts.map +1 -0
  71. package/packages/core/dist/shared/capabilities.test.js +217 -0
  72. package/packages/core/dist/shared/capabilities.test.js.map +1 -0
  73. package/packages/core/dist/shared/spawn-prompt.d.ts +47 -0
  74. package/packages/core/dist/shared/spawn-prompt.d.ts.map +1 -0
  75. package/packages/core/dist/shared/spawn-prompt.js +82 -0
  76. package/packages/core/dist/shared/spawn-prompt.js.map +1 -0
  77. package/packages/core/dist/shared/spawn-prompt.test.d.ts +2 -0
  78. package/packages/core/dist/shared/spawn-prompt.test.d.ts.map +1 -0
  79. package/packages/core/dist/shared/spawn-prompt.test.js +251 -0
  80. package/packages/core/dist/shared/spawn-prompt.test.js.map +1 -0
  81. package/packages/core/dist/workflow/tandem-workflow-templates.test.d.ts +18 -0
  82. package/packages/core/dist/workflow/tandem-workflow-templates.test.d.ts.map +1 -0
  83. package/packages/core/dist/workflow/tandem-workflow-templates.test.js +434 -0
  84. package/packages/core/dist/workflow/tandem-workflow-templates.test.js.map +1 -0
  85. package/packages/core/dist/workflow/team-lifecycle.d.ts +169 -0
  86. package/packages/core/dist/workflow/team-lifecycle.d.ts.map +1 -0
  87. package/packages/core/dist/workflow/team-lifecycle.js +217 -0
  88. package/packages/core/dist/workflow/team-lifecycle.js.map +1 -0
  89. package/packages/core/dist/workflow/team-lifecycle.test.d.ts +20 -0
  90. package/packages/core/dist/workflow/team-lifecycle.test.d.ts.map +1 -0
  91. package/packages/core/dist/workflow/team-lifecycle.test.js +966 -0
  92. package/packages/core/dist/workflow/team-lifecycle.test.js.map +1 -0
  93. package/packages/core/dist/workflow/workflow-schema.d.ts +32 -0
  94. package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
  95. package/packages/core/dist/workflow/workflow-schema.js +120 -0
  96. package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
  97. package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -1
  98. package/packages/core/dist/workflow/workflow-schema.test.js +570 -1
  99. package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -1
  100. package/packages/core/dist/workflow/workflow-team-templates.test.d.ts +17 -0
  101. package/packages/core/dist/workflow/workflow-team-templates.test.d.ts.map +1 -0
  102. package/packages/core/dist/workflow/workflow-team-templates.test.js +275 -0
  103. package/packages/core/dist/workflow/workflow-team-templates.test.js.map +1 -0
  104. package/pennyfarthing-dist/agents/dev.md +21 -12
  105. package/pennyfarthing-dist/agents/reviewer.md +23 -4
  106. package/pennyfarthing-dist/agents/sm-finish.md +19 -2
  107. package/pennyfarthing-dist/agents/sm-setup.md +7 -7
  108. package/pennyfarthing-dist/agents/sm.md +12 -12
  109. package/pennyfarthing-dist/agents/tea.md +2 -2
  110. package/pennyfarthing-dist/agents/testing-runner.md +1 -1
  111. package/pennyfarthing-dist/commands/pf-architect.md +1 -1
  112. package/pennyfarthing-dist/commands/pf-ba.md +1 -1
  113. package/pennyfarthing-dist/commands/pf-chore.md +2 -2
  114. package/pennyfarthing-dist/commands/pf-dev.md +1 -1
  115. package/pennyfarthing-dist/commands/pf-devops.md +1 -1
  116. package/pennyfarthing-dist/commands/pf-epic.md +6 -6
  117. package/pennyfarthing-dist/commands/pf-git.md +12 -10
  118. package/pennyfarthing-dist/commands/pf-health-check.md +1 -1
  119. package/pennyfarthing-dist/commands/pf-help.md +12 -12
  120. package/pennyfarthing-dist/commands/pf-orchestrator.md +1 -1
  121. package/pennyfarthing-dist/commands/pf-pm.md +1 -1
  122. package/pennyfarthing-dist/commands/pf-prime.md +8 -8
  123. package/pennyfarthing-dist/commands/pf-reviewer.md +1 -1
  124. package/pennyfarthing-dist/commands/pf-session.md +7 -7
  125. package/pennyfarthing-dist/commands/pf-sm.md +1 -1
  126. package/pennyfarthing-dist/commands/pf-sprint.md +7 -7
  127. package/pennyfarthing-dist/commands/pf-tea.md +1 -1
  128. package/pennyfarthing-dist/commands/pf-tech-writer.md +1 -1
  129. package/pennyfarthing-dist/commands/pf-theme.md +9 -9
  130. package/pennyfarthing-dist/commands/pf-ux-designer.md +1 -1
  131. package/pennyfarthing-dist/commands/pf-work.md +1 -1
  132. package/pennyfarthing-dist/gates/approval.md +63 -0
  133. package/pennyfarthing-dist/gates/confidence-sm.md +71 -0
  134. package/pennyfarthing-dist/gates/context-ok.md +56 -0
  135. package/pennyfarthing-dist/gates/evaluations/confidence-sm.md +54 -0
  136. package/pennyfarthing-dist/gates/quality-pass.md +67 -0
  137. package/pennyfarthing-dist/gates/tests-fail.md +84 -0
  138. package/pennyfarthing-dist/gates/tests-pass.md +79 -0
  139. package/pennyfarthing-dist/guides/agent-behavior.md +84 -29
  140. package/pennyfarthing-dist/guides/agent-coordination.md +10 -10
  141. package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +6 -6
  142. package/pennyfarthing-dist/guides/agent-template-tactical.md +1 -1
  143. package/pennyfarthing-dist/guides/bell-mode.md +1 -1
  144. package/pennyfarthing-dist/guides/bikerack.md +10 -10
  145. package/pennyfarthing-dist/guides/brownfield-tools.md +24 -24
  146. package/pennyfarthing-dist/guides/command-tag-taxonomy.md +1 -1
  147. package/pennyfarthing-dist/guides/gate-schema.md +2 -2
  148. package/pennyfarthing-dist/guides/gates.md +3 -3
  149. package/pennyfarthing-dist/guides/handoff-cli.md +8 -8
  150. package/pennyfarthing-dist/guides/hooks.md +29 -29
  151. package/pennyfarthing-dist/guides/prime.md +2 -2
  152. package/pennyfarthing-dist/guides/reflector.md +1 -1
  153. package/pennyfarthing-dist/guides/skill-schema.md +6 -6
  154. package/pennyfarthing-dist/guides/tandem-protocol.md +3 -3
  155. package/pennyfarthing-dist/guides/workflow-schema.md +1 -1
  156. package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
  157. package/pennyfarthing-dist/guides/xml-tags.md +8 -8
  158. package/pennyfarthing-dist/scripts/README.md +4 -4
  159. package/pennyfarthing-dist/scripts/core/agent-session.sh +2 -5
  160. package/pennyfarthing-dist/scripts/core/check-context.sh +3 -1
  161. package/pennyfarthing-dist/scripts/core/pf.sh +5 -0
  162. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +4 -89
  163. package/pennyfarthing-dist/scripts/core/prime.sh +2 -25
  164. package/pennyfarthing-dist/scripts/git/README.md +14 -14
  165. package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +2 -3
  166. package/pennyfarthing-dist/scripts/git/git-status-all.sh +2 -3
  167. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +2 -3
  168. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +2 -4
  169. package/pennyfarthing-dist/scripts/hooks/README.md +6 -6
  170. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +4 -183
  171. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +4 -95
  172. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +4 -65
  173. package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +3 -31
  174. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +5 -4
  175. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +29 -34
  176. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +4 -71
  177. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +3 -19
  178. package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +4 -30
  179. package/pennyfarthing-dist/scripts/hooks/session-start.sh +3 -32
  180. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +4 -65
  181. package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +4 -78
  182. package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +3 -93
  183. package/pennyfarthing-dist/scripts/lib/env.sh +34 -0
  184. package/pennyfarthing-dist/scripts/lib/run-pf.sh +39 -0
  185. package/pennyfarthing-dist/scripts/misc/README.md +1 -1
  186. package/pennyfarthing-dist/scripts/misc/statusline.sh +4 -301
  187. package/pennyfarthing-dist/scripts/sprint/README.md +21 -21
  188. package/pennyfarthing-dist/scripts/workflow/README.md +2 -2
  189. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +2 -16
  190. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +3 -3
  191. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +3 -3
  192. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +3 -3
  193. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +3 -3
  194. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +3 -3
  195. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +3 -3
  196. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +3 -3
  197. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +3 -3
  198. package/pennyfarthing-dist/skills/pf-bc/examples.md +23 -23
  199. package/pennyfarthing-dist/skills/pf-bc/skill.md +17 -17
  200. package/pennyfarthing-dist/skills/pf-bc/usage.md +8 -8
  201. package/pennyfarthing-dist/skills/pf-jira/SKILL.md +15 -15
  202. package/pennyfarthing-dist/skills/pf-jira/examples.md +48 -48
  203. package/pennyfarthing-dist/skills/pf-jira/usage.md +15 -15
  204. package/pennyfarthing-dist/skills/pf-sprint/examples.md +80 -80
  205. package/pennyfarthing-dist/skills/pf-sprint/skill.md +35 -35
  206. package/pennyfarthing-dist/skills/pf-sprint/usage.md +30 -30
  207. package/pennyfarthing-dist/skills/pf-theme/examples.md +15 -15
  208. package/pennyfarthing-dist/skills/pf-theme/skill.md +6 -6
  209. package/pennyfarthing-dist/skills/pf-theme/usage.md +5 -5
  210. package/pennyfarthing-dist/skills/pf-workflow/examples.md +27 -27
  211. package/pennyfarthing-dist/skills/pf-workflow/skill.md +11 -11
  212. package/pennyfarthing-dist/skills/pf-workflow/usage.md +11 -11
  213. package/pennyfarthing-dist/skills/skill-registry.yaml +19 -19
  214. package/pennyfarthing-dist/templates/settings.local.json.template +19 -10
  215. package/pennyfarthing-dist/workflows/bdd-team.yaml +89 -0
  216. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +1 -1
  217. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +1 -1
  218. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +1 -1
  219. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
  220. package/pennyfarthing-dist/workflows/project-setup/steps/step-01-discover.md +47 -0
  221. package/pennyfarthing-dist/workflows/tdd-team.yaml +80 -0
  222. package/pennyfarthing-dist/workflows/tdd.yaml +11 -2
  223. package/pennyfarthing_scripts/CLAUDE.md +19 -10
  224. package/pennyfarthing_scripts/__init__.py +1 -1
  225. package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
  226. package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
  227. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  228. package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
  229. package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
  230. package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
  231. package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  232. package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
  233. package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
  234. package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
  235. package/pennyfarthing_scripts/bc/__pycache__/split.cpython-314.pyc +0 -0
  236. package/pennyfarthing_scripts/bc/cli.py +2 -2
  237. package/pennyfarthing_scripts/bellmode_hook.py +9 -296
  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__/context_meter_footer.cpython-314.pyc +0 -0
  243. package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
  244. package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
  245. package/pennyfarthing_scripts/bikerack/__pycache__/events.cpython-314.pyc +0 -0
  246. package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
  247. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  248. package/pennyfarthing_scripts/bikerack/__pycache__/portrait_resolver.cpython-314.pyc +0 -0
  249. package/pennyfarthing_scripts/bikerack/__pycache__/progress_panel.cpython-314.pyc +0 -0
  250. package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
  251. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_data.cpython-314.pyc +0 -0
  252. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_screen.cpython-314.pyc +0 -0
  253. package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
  254. package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
  255. package/pennyfarthing_scripts/bikerack/audit_log_panel.py +161 -0
  256. package/pennyfarthing_scripts/bikerack/base_panel.py +27 -4
  257. package/pennyfarthing_scripts/bikerack/changed_panel.py +96 -4
  258. package/pennyfarthing_scripts/bikerack/context_meter_footer.py +88 -0
  259. package/pennyfarthing_scripts/bikerack/debug_panel.py +1 -1
  260. package/pennyfarthing_scripts/bikerack/diffs_panel.py +30 -0
  261. package/pennyfarthing_scripts/bikerack/events.py +28 -0
  262. package/pennyfarthing_scripts/bikerack/launcher.py +6 -6
  263. package/pennyfarthing_scripts/bikerack/portrait_resolver.py +139 -0
  264. package/pennyfarthing_scripts/bikerack/progress_panel.py +0 -1
  265. package/pennyfarthing_scripts/bikerack/sprint_panel.py +373 -142
  266. package/pennyfarthing_scripts/bikerack/story_detail_data.py +247 -0
  267. package/pennyfarthing_scripts/bikerack/story_detail_screen.py +177 -0
  268. package/pennyfarthing_scripts/bikerack/tui.py +304 -62
  269. package/pennyfarthing_scripts/bikerack/ws_client.py +2 -2
  270. package/pennyfarthing_scripts/cli.py +5 -0
  271. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  272. package/pennyfarthing_scripts/common/config.py +29 -2
  273. package/pennyfarthing_scripts/common/pr_config.py +38 -0
  274. package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
  275. package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-314.pyc +0 -0
  276. package/pennyfarthing_scripts/consultation/cli.py +3 -3
  277. package/pennyfarthing_scripts/context.py +3 -3
  278. package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
  279. package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
  280. package/pennyfarthing_scripts/git/__pycache__/repos.cpython-314.pyc +0 -0
  281. package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
  282. package/pennyfarthing_scripts/git/hooks_installer.py +2 -3
  283. package/pennyfarthing_scripts/git/status_all.py +1 -1
  284. package/pennyfarthing_scripts/git/worktree.py +2 -2
  285. package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-314.pyc +0 -0
  286. package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-314.pyc +0 -0
  287. package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
  288. package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
  289. package/pennyfarthing_scripts/handoff/__pycache__/phase_check.cpython-314.pyc +0 -0
  290. package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
  291. package/pennyfarthing_scripts/handoff/cli.py +33 -1
  292. package/pennyfarthing_scripts/handoff/complete_phase.py +28 -0
  293. package/pennyfarthing_scripts/handoff/marker.py +15 -15
  294. package/pennyfarthing_scripts/handoff/phase_check.py +96 -0
  295. package/pennyfarthing_scripts/handoff/resolve_gate.py +13 -1
  296. package/pennyfarthing_scripts/hooks/__init__.py +442 -0
  297. package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
  298. package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
  299. package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-314.pyc +0 -0
  300. package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
  301. package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
  302. package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
  303. package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
  304. package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
  305. package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
  306. package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
  307. package/pennyfarthing_scripts/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
  308. package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
  309. package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
  310. package/pennyfarthing_scripts/hooks/bell_mode.py +214 -0
  311. package/pennyfarthing_scripts/hooks/cli.py +96 -0
  312. package/pennyfarthing_scripts/hooks/context_breaker.py +104 -0
  313. package/pennyfarthing_scripts/hooks/context_warning.py +66 -0
  314. package/pennyfarthing_scripts/hooks/cyclist_pretooluse.py +129 -0
  315. package/pennyfarthing_scripts/hooks/pre_edit_check.py +77 -0
  316. package/pennyfarthing_scripts/hooks/reflector_check.py +270 -0
  317. package/pennyfarthing_scripts/hooks/schema_validation.py +202 -0
  318. package/pennyfarthing_scripts/hooks/session_start.py +294 -0
  319. package/pennyfarthing_scripts/hooks/session_stop.py +111 -0
  320. package/pennyfarthing_scripts/hooks/sprint_yaml_validation.py +97 -0
  321. package/pennyfarthing_scripts/hooks/statusline.py +429 -0
  322. package/pennyfarthing_scripts/hooks.py +27 -432
  323. package/pennyfarthing_scripts/pretooluse_hook.py +3 -185
  324. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  325. package/pennyfarthing_scripts/prime/heatmap.py +3 -15
  326. package/pennyfarthing_scripts/prime/workflow.py +2 -1
  327. package/pennyfarthing_scripts/schema_validation_hook.py +3 -298
  328. package/pennyfarthing_scripts/session_start_hook.py +4 -186
  329. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  330. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  331. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  332. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  333. package/pennyfarthing_scripts/sprint/cli.py +121 -0
  334. package/pennyfarthing_scripts/sprint/loader.py +154 -3
  335. package/pennyfarthing_scripts/sprint/story_update.py +26 -0
  336. package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  337. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  338. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_list_team.cpython-314-pytest-9.0.2.pyc +0 -0
  339. package/pennyfarthing_scripts/tests/test_bikerack.py +26 -26
  340. package/pennyfarthing_scripts/tests/test_dialogue_manager.py +0 -1
  341. package/pennyfarthing_scripts/tests/test_sprint_panel.py +344 -265
  342. package/pennyfarthing_scripts/tests/test_workflow_list_team.py +147 -0
  343. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
  344. package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
  345. package/pennyfarthing_scripts/validate/adapters/__pycache__/tandem_awareness.cpython-314.pyc +0 -0
  346. package/pennyfarthing_scripts/validate/adapters/__pycache__/team_mode.cpython-314.pyc +0 -0
  347. package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
  348. package/pennyfarthing_scripts/validate/adapters/team_mode.py +323 -0
  349. package/pennyfarthing_scripts/validate/adapters/workflow.py +19 -0
  350. package/pennyfarthing_scripts/welcome_hook.py +3 -149
  351. package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
  352. package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-314.pyc +0 -0
  353. package/pennyfarthing_scripts/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
  354. package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-314.pyc +0 -0
  355. package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-314.pyc +0 -0
  356. package/pennyfarthing_scripts/workflow/__pycache__/team_lifecycle.cpython-314.pyc +0 -0
  357. package/pennyfarthing_scripts/workflow/cli.py +22 -20
  358. package/pennyfarthing_scripts/workflow/state.py +0 -1
  359. package/pennyfarthing_scripts/workflow/team_lifecycle.py +256 -0
  360. package/packages/core/dist/cli/cyclist-migration.test.d.ts +0 -16
  361. package/packages/core/dist/cli/cyclist-migration.test.d.ts.map +0 -1
  362. package/packages/core/dist/cli/cyclist-migration.test.js +0 -229
  363. package/packages/core/dist/cli/cyclist-migration.test.js.map +0 -1
  364. package/packages/core/dist/scripts/theme-detail.test.d.ts +0 -10
  365. package/packages/core/dist/scripts/theme-detail.test.d.ts.map +0 -1
  366. package/packages/core/dist/scripts/theme-detail.test.js +0 -199
  367. package/packages/core/dist/scripts/theme-detail.test.js.map +0 -1
@@ -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
@@ -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
  ---
@@ -20,6 +20,53 @@ Discover the project structure, detect repositories, identify tech stack, and ga
20
20
  - User-confirmed discovery ready for repos.yaml generation
21
21
  </output>
22
22
 
23
+ ## PRE-FLIGHT: Environment Check
24
+
25
+ Before discovery, verify the environment is clean.
26
+
27
+ ### Check for Global `pf` Installation
28
+
29
+ A globally installed `pf` CLI causes version drift between projects. All `pf`
30
+ invocations should go through `uv run` via the shell shims in `.pennyfarthing/scripts/`.
31
+
32
+ ```bash
33
+ # Check for global pf binary
34
+ which pf 2>/dev/null
35
+ ```
36
+
37
+ **If `which pf` returns a path**, the user has a stale global install. Guide them through removal:
38
+
39
+ 1. **Check the source** of the global install:
40
+ ```bash
41
+ which pf
42
+ head -3 "$(which pf)" 2>/dev/null
43
+ pip3 show pennyfarthing-scripts 2>/dev/null | grep -E "^(Version|Location|Editable)"
44
+ uv tool list 2>/dev/null | grep pennyfarthing
45
+ ```
46
+
47
+ 2. **Remove based on source:**
48
+
49
+ | Source | Command |
50
+ |--------|---------|
51
+ | `uv tool` | `uv tool uninstall pennyfarthing-scripts` |
52
+ | `pip` (Homebrew Python) | `pip3 uninstall pennyfarthing-scripts --break-system-packages -y` |
53
+ | `pip` (venv/system) | `pip3 uninstall pennyfarthing-scripts -y` |
54
+ | `pipx` | `pipx uninstall pennyfarthing-scripts` |
55
+
56
+ 3. **Verify removal:**
57
+ ```bash
58
+ hash -r # Clear shell cache
59
+ which pf 2>/dev/null && echo "STILL INSTALLED — check for multiple installs" || echo "Clean"
60
+ ```
61
+
62
+ 4. **Explain to user:** Pennyfarthing hooks use `uv run` to resolve `pf` from the
63
+ local project's `pyproject.toml`. This ensures each project runs its own version
64
+ of the CLI without cross-project contamination. No global install is needed.
65
+
66
+ **If `which pf` returns nothing**, the environment is clean — continue to discovery.
67
+
68
+ ---
69
+
23
70
  ## DISCOVERY TASKS
24
71
 
25
72
  ### 1. Detect Repository Structure
@@ -0,0 +1,80 @@
1
+ # TDD Team Workflow - TDD with Native Team Collaboration
2
+ #
3
+ # When to use: Best for 5+ point feature stories where sustained parallel
4
+ # collaboration provides more value than periodic tandem consultation.
5
+ # Use this instead of tdd-tandem when teammates need to work alongside the
6
+ # lead for the full phase — e.g., Architect reviewing patterns as Dev
7
+ # implements, not just answering a single question.
8
+ #
9
+ # Compared to tdd-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
+ # - GREEN phase: Dev (lead) + Architect — Architect reviews implementation
15
+ # approach and patterns in real-time via SendMessage
16
+ # - REVIEW phase: Reviewer (lead) + Architect — Architect validates
17
+ # architectural patterns during code review
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 tdd-tandem as an alternative that works in all modes.
23
+ #
24
+ # Flow: SM → TEA → Dev (+Architect) → Reviewer (+Architect) → SM
25
+
26
+ workflow:
27
+ name: tdd-team
28
+ description: TDD with native team collaboration — architect pairing on green and review phases
29
+ version: "1.0.0"
30
+
31
+ phases:
32
+ - name: setup
33
+ agent: sm
34
+ output: [session_file, branches, story_context]
35
+
36
+ - name: red
37
+ agent: tea
38
+ input: [session_file, story_context]
39
+ output: [failing_tests]
40
+ gate:
41
+ file: gates/tests-fail
42
+ type: tests_fail
43
+ condition: All acceptance criteria have test coverage
44
+
45
+ - name: green
46
+ agent: dev
47
+ input: [failing_tests, story_context]
48
+ output: [implementation, passing_tests]
49
+ gate:
50
+ file: gates/tests-pass
51
+ type: tests_pass
52
+ condition: All tests passing, no skipped tests
53
+ team:
54
+ teammates:
55
+ - agent: architect
56
+ task: "Review implementation approach and patterns. Send observations via SendMessage as Dev works."
57
+
58
+ - name: review
59
+ agent: reviewer
60
+ input: [implementation, passing_tests]
61
+ output: [approval]
62
+ gate:
63
+ file: gates/approval
64
+ type: approval
65
+ condition: Code review approved, no blocking issues
66
+ team:
67
+ teammates:
68
+ - agent: architect
69
+ task: "Validate architectural patterns and coupling. Flag concerns via SendMessage."
70
+
71
+ - name: finish
72
+ agent: sm
73
+ input: [approval]
74
+ output: [archived_session, story_summary]
75
+
76
+ triggers:
77
+ tags: [team, tdd-team]
78
+ points:
79
+ min: 5
80
+ default: false
@@ -1,7 +1,7 @@
1
1
  # TDD Workflow - Test-Driven Development
2
2
  # Default workflow for feature development in Pennyfarthing
3
3
  #
4
- # Flow: SM → TEA → Dev → Reviewer → SM
4
+ # Flow: SM → TEA → Dev → TEA (verify) → Reviewer → SM
5
5
  # Scale routing: 1-2 pts use 'trivial' workflow instead
6
6
 
7
7
  workflow:
@@ -32,9 +32,18 @@ workflow:
32
32
  type: tests_pass
33
33
  condition: All tests passing, no skipped tests
34
34
 
35
+ - name: verify
36
+ agent: tea
37
+ input: [implementation, passing_tests]
38
+ output: [quality_verified]
39
+ gate:
40
+ file: gates/quality-pass
41
+ type: quality_pass
42
+ condition: Lint, typecheck, and all tests passing
43
+
35
44
  - name: review
36
45
  agent: reviewer
37
- input: [implementation, passing_tests]
46
+ input: [implementation, passing_tests, quality_verified]
38
47
  output: [approval]
39
48
  gate:
40
49
  file: gates/approval
@@ -184,16 +184,25 @@ Options: `--session-id`, `--no-persona`, `--json`, `--minimal`, `--full`, `--qui
184
184
  | `pf debug deadcode exports` | Unused TypeScript exports | `deadcode/cli.py` |
185
185
  | `pf debug healthscore analyze` | Composite health score | `healthscore/cli.py` |
186
186
 
187
- ## Hooks (non-CLI)
188
-
189
- | File | Hook Type | Purpose |
190
- |------|-----------|---------|
191
- | `hooks.py` | PostToolUse | Main hook dispatcher |
192
- | `bellmode_hook.py` | PostToolUse | Bell mode message injection |
193
- | `pretooluse_hook.py` | PreToolUse | Permission and safety gates |
194
- | `schema_validation_hook.py` | PreToolUse:Write | Schema validation on file writes |
195
- | `welcome_hook.py` | PostToolUse | Welcome message on session start |
196
- | `patch_mode.py` | PostToolUse | Patch mode interrupt handling |
187
+ ## Hooks (`pf hooks`)
188
+
189
+ All hooks are in `hooks/` subpackage, invoked via `pf hooks <name>`.
190
+
191
+ | Command | Hook Type | Purpose |
192
+ |---------|-----------|---------|
193
+ | `pf hooks session-start` | SessionStart | Session setup, checkpoint, WheelHub, welcome |
194
+ | `pf hooks session-stop` | Stop | Save checkpoint for cross-session continuity |
195
+ | `pf hooks reflector-check` | Stop | Enforce CYCLIST reflector markers |
196
+ | `pf hooks pre-edit-check` | PreToolUse | Block edits to protected files |
197
+ | `pf hooks context-warning` | PreToolUse | Warn when context usage is high |
198
+ | `pf hooks context-breaker` | PreToolUse | Block tool execution at critical context |
199
+ | `pf hooks cyclist-pretooluse` | PreToolUse | Route approval through WheelHub |
200
+ | `pf hooks schema-validation` | PreToolUse:Write | Validate session/skill/step schema |
201
+ | `pf hooks bell-mode` | PostToolUse | Bell queue + tandem injection |
202
+ | `pf hooks sprint-yaml` | PostToolUse | Validate sprint YAML (YAML 1.2) |
203
+ | `pf hooks statusline` | statusLine | Render Claude Code status bar |
204
+
205
+ Legacy shims (`bellmode_hook.py`, `pretooluse_hook.py`, etc.) re-export from `hooks/` for backward compat.
197
206
 
198
207
  ## Architecture
199
208
 
@@ -14,4 +14,4 @@ Modules:
14
14
  swebench: SWE-bench patch parsing and scenario utilities
15
15
  """
16
16
 
17
- __version__ = "7.6.1"
17
+ __version__ = "8.1.0"
@@ -34,7 +34,7 @@ from pennyfarthing_scripts.bc.focus import (
34
34
  def _get_current_layout() -> dict | None:
35
35
  """Fetch the current layout from a running Cyclist or BikeRack server.
36
36
 
37
- Reads .wheelhub-port (shared by both Cyclist and BikeRack) and fetches
37
+ Reads .bikerack-port (shared by both Cyclist and BikeRack) and fetches
38
38
  the layout endpoint.
39
39
 
40
40
  Returns:
@@ -45,7 +45,7 @@ def _get_current_layout() -> dict | None:
45
45
  root = _get_root()
46
46
 
47
47
  candidates = [
48
- (root / ".wheelhub-port", "/api/settings/bikerack-layout"),
48
+ (root / ".bikerack-port", "/api/settings/bikerack-layout"),
49
49
  ]
50
50
 
51
51
  for port_file, endpoint in candidates: