@pennyfarthing/core 11.1.1 → 11.2.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 (487) hide show
  1. package/README.md +8 -8
  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 +381 -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 +11 -0
  16. package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
  17. package/packages/core/dist/cli/utils/settings.js +65 -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/tandem-metrics.d.ts +91 -0
  22. package/packages/core/dist/consultation/tandem-metrics.d.ts.map +1 -0
  23. package/packages/core/dist/consultation/tandem-metrics.js +131 -0
  24. package/packages/core/dist/consultation/tandem-metrics.js.map +1 -0
  25. package/packages/core/dist/consultation/tandem-metrics.test.d.ts +18 -0
  26. package/packages/core/dist/consultation/tandem-metrics.test.d.ts.map +1 -0
  27. package/packages/core/dist/consultation/tandem-metrics.test.js +457 -0
  28. package/packages/core/dist/consultation/tandem-metrics.test.js.map +1 -0
  29. package/packages/core/dist/public/js/react/react.js +14 -14
  30. package/packages/core/dist/scripts/benchmark-integration.d.ts +182 -0
  31. package/packages/core/dist/scripts/benchmark-integration.d.ts.map +1 -0
  32. package/packages/core/dist/scripts/benchmark-integration.js +691 -0
  33. package/packages/core/dist/scripts/benchmark-integration.js.map +1 -0
  34. package/packages/core/dist/scripts/job-fair-aggregator.d.ts +150 -0
  35. package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +1 -0
  36. package/packages/core/dist/scripts/job-fair-aggregator.js +547 -0
  37. package/packages/core/dist/scripts/job-fair-aggregator.js.map +1 -0
  38. package/packages/core/dist/server/api/agent-load.js +1 -1
  39. package/packages/core/dist/server/api/agent-load.js.map +1 -1
  40. package/packages/core/dist/server/otlp-receiver.d.ts +16 -11
  41. package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
  42. package/packages/core/dist/server/otlp-receiver.js +185 -24
  43. package/packages/core/dist/server/otlp-receiver.js.map +1 -1
  44. package/packages/core/dist/server/otlp-receiver.test.d.ts +21 -0
  45. package/packages/core/dist/server/otlp-receiver.test.d.ts.map +1 -0
  46. package/packages/core/dist/server/otlp-receiver.test.js +446 -0
  47. package/packages/core/dist/server/otlp-receiver.test.js.map +1 -0
  48. package/packages/core/dist/server/server.d.ts +0 -3
  49. package/packages/core/dist/server/server.d.ts.map +1 -1
  50. package/packages/core/dist/server/server.js +3 -37
  51. package/packages/core/dist/server/server.js.map +1 -1
  52. package/packages/core/dist/server/server.test.d.ts +1 -1
  53. package/packages/core/dist/server/server.test.js +12 -23
  54. package/packages/core/dist/server/server.test.js.map +1 -1
  55. package/packages/core/dist/shared/capabilities.d.ts +88 -0
  56. package/packages/core/dist/shared/capabilities.d.ts.map +1 -0
  57. package/packages/core/dist/shared/capabilities.js +133 -0
  58. package/packages/core/dist/shared/capabilities.js.map +1 -0
  59. package/packages/core/dist/shared/capabilities.test.d.ts +2 -0
  60. package/packages/core/dist/shared/capabilities.test.d.ts.map +1 -0
  61. package/packages/core/dist/shared/capabilities.test.js +217 -0
  62. package/packages/core/dist/shared/capabilities.test.js.map +1 -0
  63. package/packages/core/dist/shared/portrait-resolver.d.ts +9 -0
  64. package/packages/core/dist/shared/portrait-resolver.d.ts.map +1 -1
  65. package/packages/core/dist/shared/portrait-resolver.js +27 -0
  66. package/packages/core/dist/shared/portrait-resolver.js.map +1 -1
  67. package/packages/core/dist/shared/portrait-resolver.test.js +47 -1
  68. package/packages/core/dist/shared/portrait-resolver.test.js.map +1 -1
  69. package/packages/core/dist/shared/spawn-prompt.d.ts +47 -0
  70. package/packages/core/dist/shared/spawn-prompt.d.ts.map +1 -0
  71. package/packages/core/dist/shared/spawn-prompt.js +82 -0
  72. package/packages/core/dist/shared/spawn-prompt.js.map +1 -0
  73. package/packages/core/dist/shared/spawn-prompt.test.d.ts +2 -0
  74. package/packages/core/dist/shared/spawn-prompt.test.d.ts.map +1 -0
  75. package/packages/core/dist/shared/spawn-prompt.test.js +251 -0
  76. package/packages/core/dist/shared/spawn-prompt.test.js.map +1 -0
  77. package/packages/core/dist/shared/tandem-portrait-inventory.test.d.ts +13 -0
  78. package/packages/core/dist/shared/tandem-portrait-inventory.test.d.ts.map +1 -0
  79. package/packages/core/dist/shared/tandem-portrait-inventory.test.js +126 -0
  80. package/packages/core/dist/shared/tandem-portrait-inventory.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/workflow-schema.d.ts +32 -0
  86. package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
  87. package/packages/core/dist/workflow/workflow-schema.js +120 -0
  88. package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
  89. package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -1
  90. package/packages/core/dist/workflow/workflow-schema.test.js +570 -1
  91. package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -1
  92. package/pennyfarthing-dist/agents/dev.md +7 -11
  93. package/pennyfarthing-dist/agents/reviewer.md +9 -3
  94. package/pennyfarthing-dist/agents/sm-finish.md +18 -1
  95. package/pennyfarthing-dist/agents/sm-setup.md +1 -1
  96. package/pennyfarthing-dist/agents/sm.md +2 -2
  97. package/pennyfarthing-dist/agents/tea.md +1 -1
  98. package/pennyfarthing-dist/agents/testing-runner.md +2 -1
  99. package/pennyfarthing-dist/commands/pf-chore.md +2 -2
  100. package/pennyfarthing-dist/commands/pf-git.md +4 -2
  101. package/pennyfarthing-dist/commands/pf-standalone.md +7 -2
  102. package/pennyfarthing-dist/gates/approval.md +63 -0
  103. package/pennyfarthing-dist/gates/confidence-sm.md +71 -0
  104. package/pennyfarthing-dist/gates/context-ok.md +56 -0
  105. package/pennyfarthing-dist/gates/evaluations/confidence-sm.md +54 -0
  106. package/pennyfarthing-dist/gates/quality-pass.md +67 -0
  107. package/pennyfarthing-dist/gates/tests-fail.md +84 -0
  108. package/pennyfarthing-dist/gates/tests-pass.md +79 -0
  109. package/pennyfarthing-dist/guides/agent-behavior.md +23 -19
  110. package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +1 -1
  111. package/pennyfarthing-dist/guides/bell-mode.md +1 -1
  112. package/pennyfarthing-dist/guides/bikerack.md +3 -3
  113. package/pennyfarthing-dist/guides/hooks.md +29 -29
  114. package/pennyfarthing-dist/guides/reflector.md +1 -1
  115. package/pennyfarthing-dist/guides/tandem-protocol.md +3 -3
  116. package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
  117. package/pennyfarthing-dist/guides/xml-tags.md +2 -2
  118. package/pennyfarthing-dist/scripts/README.md +1 -1
  119. package/pennyfarthing-dist/scripts/core/check-context.sh +3 -1
  120. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +5 -87
  121. package/pennyfarthing-dist/scripts/git/README.md +24 -14
  122. package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +5 -266
  123. package/pennyfarthing-dist/scripts/git/git-status-all.sh +5 -151
  124. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +6 -144
  125. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +5 -496
  126. package/pennyfarthing-dist/scripts/hooks/README.md +6 -6
  127. package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
  128. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +4 -183
  129. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +4 -95
  130. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +4 -65
  131. package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +3 -31
  132. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +9 -11
  133. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +27 -33
  134. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +4 -71
  135. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +3 -19
  136. package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +4 -30
  137. package/pennyfarthing-dist/scripts/hooks/session-start.sh +3 -32
  138. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +4 -65
  139. package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +4 -78
  140. package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +4 -93
  141. package/pennyfarthing-dist/scripts/misc/README.md +1 -1
  142. package/pennyfarthing-dist/scripts/misc/statusline.sh +4 -301
  143. package/pennyfarthing-dist/scripts/portraits/generate-tandem-portraits.sh +76 -0
  144. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +4 -221
  145. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +5 -13
  146. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +4 -123
  147. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +4 -33
  148. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +4 -156
  149. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +4 -131
  150. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +4 -249
  151. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +4 -160
  152. package/pennyfarthing-dist/skills/pf-bc/usage.md +1 -1
  153. package/pennyfarthing-dist/skills/pf-jira/examples.md +5 -2
  154. package/pennyfarthing-dist/skills/pf-workflow/examples.md +27 -16
  155. package/pennyfarthing-dist/skills/pf-workflow/skill.md +9 -12
  156. package/pennyfarthing-dist/skills/pf-workflow/usage.md +33 -8
  157. package/pennyfarthing-dist/templates/settings.local.json.template +19 -10
  158. package/pennyfarthing-dist/workflows/bdd-tandem.yaml +18 -6
  159. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +1 -1
  160. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +1 -1
  161. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
  162. package/pennyfarthing-dist/workflows/review-tandem.yaml +65 -0
  163. package/pennyfarthing-dist/workflows/tdd-tandem.yaml +16 -8
  164. package/pennyfarthing-dist/workflows/tdd.yaml +11 -2
  165. package/pennyfarthing_scripts/CLAUDE.md +45 -14
  166. package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  167. package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
  168. package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
  169. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  170. package/pennyfarthing_scripts/__pycache__/config.cpython-314.pyc +0 -0
  171. package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
  172. package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
  173. package/pennyfarthing_scripts/__pycache__/jira.cpython-314.pyc +0 -0
  174. package/pennyfarthing_scripts/__pycache__/jira_bidirectional_sync.cpython-314.pyc +0 -0
  175. package/pennyfarthing_scripts/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
  176. package/pennyfarthing_scripts/__pycache__/jira_sync.cpython-314.pyc +0 -0
  177. package/pennyfarthing_scripts/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
  178. package/pennyfarthing_scripts/__pycache__/output.cpython-314.pyc +0 -0
  179. package/pennyfarthing_scripts/__pycache__/patch_mode.cpython-314.pyc +0 -0
  180. package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
  181. package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  182. package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
  183. package/pennyfarthing_scripts/__pycache__/sprint.cpython-314.pyc +0 -0
  184. package/pennyfarthing_scripts/__pycache__/workflow.cpython-311.pyc +0 -0
  185. package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
  186. package/pennyfarthing_scripts/bc/__pycache__/__init__.cpython-314.pyc +0 -0
  187. package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
  188. package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
  189. package/pennyfarthing_scripts/bc/cli.py +3 -5
  190. package/pennyfarthing_scripts/bellmode_hook.py +12 -296
  191. package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
  192. package/pennyfarthing_scripts/bikerack/__pycache__/__main__.cpython-314.pyc +0 -0
  193. package/pennyfarthing_scripts/bikerack/__pycache__/audit_log_panel.cpython-314.pyc +0 -0
  194. package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
  195. package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
  196. package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
  197. package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
  198. package/pennyfarthing_scripts/bikerack/__pycache__/context_meter_footer.cpython-314.pyc +0 -0
  199. package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
  200. package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
  201. package/pennyfarthing_scripts/bikerack/__pycache__/events.cpython-314.pyc +0 -0
  202. package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
  203. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  204. package/pennyfarthing_scripts/bikerack/__pycache__/portrait_resolver.cpython-314.pyc +0 -0
  205. package/pennyfarthing_scripts/bikerack/__pycache__/progress_panel.cpython-314.pyc +0 -0
  206. package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
  207. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_data.cpython-314.pyc +0 -0
  208. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_screen.cpython-314.pyc +0 -0
  209. package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
  210. package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
  211. package/pennyfarthing_scripts/bikerack/audit_log_panel.py +119 -0
  212. package/pennyfarthing_scripts/bikerack/background_panel.py +86 -5
  213. package/pennyfarthing_scripts/bikerack/base_panel.py +87 -2
  214. package/pennyfarthing_scripts/bikerack/changed_panel.py +125 -29
  215. package/pennyfarthing_scripts/bikerack/context_meter_footer.py +88 -0
  216. package/pennyfarthing_scripts/bikerack/debug_panel.py +32 -2
  217. package/pennyfarthing_scripts/bikerack/diffs_panel.py +104 -17
  218. package/pennyfarthing_scripts/bikerack/events.py +28 -0
  219. package/pennyfarthing_scripts/bikerack/git_panel.py +103 -33
  220. package/pennyfarthing_scripts/bikerack/launcher.py +15 -15
  221. package/pennyfarthing_scripts/bikerack/portrait_resolver.py +139 -0
  222. package/pennyfarthing_scripts/bikerack/progress_panel.py +315 -0
  223. package/pennyfarthing_scripts/bikerack/sprint_panel.py +395 -32
  224. package/pennyfarthing_scripts/bikerack/story_detail_data.py +244 -0
  225. package/pennyfarthing_scripts/bikerack/story_detail_screen.py +176 -0
  226. package/pennyfarthing_scripts/bikerack/tui.py +575 -37
  227. package/pennyfarthing_scripts/bikerack/ws_client.py +2 -2
  228. package/pennyfarthing_scripts/brownfield/__pycache__/__init__.cpython-314.pyc +0 -0
  229. package/pennyfarthing_scripts/brownfield/__pycache__/__main__.cpython-314.pyc +0 -0
  230. package/pennyfarthing_scripts/brownfield/__pycache__/cli.cpython-314.pyc +0 -0
  231. package/pennyfarthing_scripts/brownfield/__pycache__/discover.cpython-314.pyc +0 -0
  232. package/pennyfarthing_scripts/cli.py +42 -65
  233. package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
  234. package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
  235. package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
  236. package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
  237. package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
  238. package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
  239. package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-314.pyc +0 -0
  240. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  241. package/pennyfarthing_scripts/common/__pycache__/output.cpython-314.pyc +0 -0
  242. package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
  243. package/pennyfarthing_scripts/common/pr_config.py +38 -0
  244. package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
  245. package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
  246. package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
  247. package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
  248. package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
  249. package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
  250. package/pennyfarthing_scripts/consultation/__init__.py +1 -0
  251. package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
  252. package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-314.pyc +0 -0
  253. package/pennyfarthing_scripts/consultation/__pycache__/dialogue_manager.cpython-314.pyc +0 -0
  254. package/pennyfarthing_scripts/consultation/cli.py +149 -0
  255. package/pennyfarthing_scripts/consultation/dialogue_manager.py +417 -0
  256. package/pennyfarthing_scripts/context.py +3 -3
  257. package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
  258. package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
  259. package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
  260. package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
  261. package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
  262. package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
  263. package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
  264. package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
  265. package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
  266. package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
  267. package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
  268. package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
  269. package/pennyfarthing_scripts/epic/__pycache__/__init__.cpython-314.pyc +0 -0
  270. package/pennyfarthing_scripts/epic/__pycache__/cli.cpython-314.pyc +0 -0
  271. package/pennyfarthing_scripts/git/__init__.py +12 -1
  272. package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
  273. package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
  274. package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
  275. package/pennyfarthing_scripts/git/create_branches.py +3 -4
  276. package/pennyfarthing_scripts/git/hooks_installer.py +152 -0
  277. package/pennyfarthing_scripts/git/repos.py +196 -0
  278. package/pennyfarthing_scripts/git/status_all.py +27 -11
  279. package/pennyfarthing_scripts/git/worktree.py +302 -0
  280. package/pennyfarthing_scripts/git_group/__pycache__/__init__.cpython-314.pyc +0 -0
  281. package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-314.pyc +0 -0
  282. package/pennyfarthing_scripts/git_group/cli.py +143 -40
  283. package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-314.pyc +0 -0
  284. package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-314.pyc +0 -0
  285. package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
  286. package/pennyfarthing_scripts/handoff/__pycache__/gate_file.cpython-314.pyc +0 -0
  287. package/pennyfarthing_scripts/handoff/__pycache__/gate_runner.cpython-314.pyc +0 -0
  288. package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
  289. package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
  290. package/pennyfarthing_scripts/handoff/cli.py +33 -1
  291. package/pennyfarthing_scripts/handoff/complete_phase.py +40 -0
  292. package/pennyfarthing_scripts/handoff/marker.py +15 -15
  293. package/pennyfarthing_scripts/handoff/phase_check.py +96 -0
  294. package/pennyfarthing_scripts/handoff/resolve_gate.py +18 -15
  295. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  296. package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  297. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  298. package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
  299. package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
  300. package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-314.pyc +0 -0
  301. package/pennyfarthing_scripts/hooks/__init__.py +437 -0
  302. package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
  303. package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
  304. package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-314.pyc +0 -0
  305. package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
  306. package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
  307. package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
  308. package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
  309. package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
  310. package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
  311. package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
  312. package/pennyfarthing_scripts/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
  313. package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
  314. package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
  315. package/pennyfarthing_scripts/hooks/bell_mode.py +215 -0
  316. package/pennyfarthing_scripts/hooks/cli.py +96 -0
  317. package/pennyfarthing_scripts/hooks/context_breaker.py +104 -0
  318. package/pennyfarthing_scripts/hooks/context_warning.py +66 -0
  319. package/pennyfarthing_scripts/hooks/cyclist_pretooluse.py +129 -0
  320. package/pennyfarthing_scripts/hooks/pre_edit_check.py +78 -0
  321. package/pennyfarthing_scripts/hooks/reflector_check.py +271 -0
  322. package/pennyfarthing_scripts/hooks/schema_validation.py +203 -0
  323. package/pennyfarthing_scripts/hooks/session_start.py +296 -0
  324. package/pennyfarthing_scripts/hooks/session_stop.py +111 -0
  325. package/pennyfarthing_scripts/hooks/sprint_yaml_validation.py +97 -0
  326. package/pennyfarthing_scripts/hooks/statusline.py +420 -0
  327. package/pennyfarthing_scripts/hooks.py +27 -446
  328. package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
  329. package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
  330. package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
  331. package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
  332. package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
  333. package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-314.pyc +0 -0
  334. package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
  335. package/pennyfarthing_scripts/jira/__pycache__/__main__.cpython-314.pyc +0 -0
  336. package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
  337. package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-314.pyc +0 -0
  338. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
  339. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
  340. package/pennyfarthing_scripts/jira/__pycache__/compat.cpython-314.pyc +0 -0
  341. package/pennyfarthing_scripts/jira/__pycache__/create.cpython-314.pyc +0 -0
  342. package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-314.pyc +0 -0
  343. package/pennyfarthing_scripts/jira/__pycache__/mappings.cpython-314.pyc +0 -0
  344. package/pennyfarthing_scripts/jira/__pycache__/models.cpython-314.pyc +0 -0
  345. package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-314.pyc +0 -0
  346. package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
  347. package/pennyfarthing_scripts/jira/__pycache__/story.cpython-314.pyc +0 -0
  348. package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-314.pyc +0 -0
  349. package/pennyfarthing_scripts/launch/__pycache__/__init__.cpython-314.pyc +0 -0
  350. package/pennyfarthing_scripts/launch/__pycache__/cli.cpython-314.pyc +0 -0
  351. package/pennyfarthing_scripts/migration/__pycache__/__init__.cpython-314.pyc +0 -0
  352. package/pennyfarthing_scripts/migration/__pycache__/__main__.cpython-314.pyc +0 -0
  353. package/pennyfarthing_scripts/migration/__pycache__/cli.cpython-314.pyc +0 -0
  354. package/pennyfarthing_scripts/migration/__pycache__/session.cpython-314.pyc +0 -0
  355. package/pennyfarthing_scripts/migration/__pycache__/skill.cpython-314.pyc +0 -0
  356. package/pennyfarthing_scripts/migration/__pycache__/step.cpython-314.pyc +0 -0
  357. package/pennyfarthing_scripts/migration/__pycache__/validate.cpython-314.pyc +0 -0
  358. package/pennyfarthing_scripts/preflight/__pycache__/__init__.cpython-314.pyc +0 -0
  359. package/pennyfarthing_scripts/preflight/__pycache__/__main__.cpython-314.pyc +0 -0
  360. package/pennyfarthing_scripts/preflight/__pycache__/cli.cpython-314.pyc +0 -0
  361. package/pennyfarthing_scripts/preflight/__pycache__/finish.cpython-314.pyc +0 -0
  362. package/pennyfarthing_scripts/pretooluse_hook.py +3 -185
  363. package/pennyfarthing_scripts/prime/__pycache__/__init__.cpython-314.pyc +0 -0
  364. package/pennyfarthing_scripts/prime/__pycache__/__main__.cpython-314.pyc +0 -0
  365. package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
  366. package/pennyfarthing_scripts/prime/__pycache__/loader.cpython-314.pyc +0 -0
  367. package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
  368. package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
  369. package/pennyfarthing_scripts/prime/__pycache__/session.cpython-314.pyc +0 -0
  370. package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
  371. package/pennyfarthing_scripts/prime/__pycache__/version_sentinel.cpython-314.pyc +0 -0
  372. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  373. package/pennyfarthing_scripts/prime/heatmap.py +655 -0
  374. package/pennyfarthing_scripts/prime/workflow.py +2 -1
  375. package/pennyfarthing_scripts/schema_validation_hook.py +3 -298
  376. package/pennyfarthing_scripts/session/__pycache__/__init__.cpython-314.pyc +0 -0
  377. package/pennyfarthing_scripts/session/__pycache__/cli.cpython-314.pyc +0 -0
  378. package/pennyfarthing_scripts/session_start_hook.py +4 -186
  379. package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
  380. package/pennyfarthing_scripts/sprint/__pycache__/__main__.cpython-314.pyc +0 -0
  381. package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-314.pyc +0 -0
  382. package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  383. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  384. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  385. package/pennyfarthing_scripts/sprint/__pycache__/epic_update.cpython-314.pyc +0 -0
  386. package/pennyfarthing_scripts/sprint/__pycache__/import_epic.cpython-314.pyc +0 -0
  387. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  388. package/pennyfarthing_scripts/sprint/__pycache__/status.cpython-314.pyc +0 -0
  389. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  390. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  391. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  392. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  393. package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-314.pyc +0 -0
  394. package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-314.pyc +0 -0
  395. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  396. package/pennyfarthing_scripts/sprint/loader.py +15 -1
  397. package/pennyfarthing_scripts/sprint/story_update.py +19 -0
  398. package/pennyfarthing_scripts/story/__pycache__/__init__.cpython-314.pyc +0 -0
  399. package/pennyfarthing_scripts/story/__pycache__/__main__.cpython-314.pyc +0 -0
  400. package/pennyfarthing_scripts/story/__pycache__/cli.cpython-314.pyc +0 -0
  401. package/pennyfarthing_scripts/story/__pycache__/create.cpython-314.pyc +0 -0
  402. package/pennyfarthing_scripts/story/__pycache__/size.cpython-314.pyc +0 -0
  403. package/pennyfarthing_scripts/story/__pycache__/template.cpython-314.pyc +0 -0
  404. package/pennyfarthing_scripts/tests/__pycache__/__init__.cpython-314.pyc +0 -0
  405. package/pennyfarthing_scripts/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
  406. package/pennyfarthing_scripts/tests/__pycache__/test_108_1_gate_migration.cpython-314-pytest-9.0.2.pyc +0 -0
  407. package/pennyfarthing_scripts/tests/__pycache__/test_archive_epic.cpython-314-pytest-9.0.2.pyc +0 -0
  408. package/pennyfarthing_scripts/tests/__pycache__/test_bc.cpython-314-pytest-9.0.2.pyc +0 -0
  409. package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  410. package/pennyfarthing_scripts/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
  411. package/pennyfarthing_scripts/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
  412. package/pennyfarthing_scripts/tests/__pycache__/test_cli_normalization.cpython-314-pytest-9.0.2.pyc +0 -0
  413. package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
  414. package/pennyfarthing_scripts/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
  415. package/pennyfarthing_scripts/tests/__pycache__/test_confidence_sm_evaluation.cpython-314-pytest-9.0.2.pyc +0 -0
  416. package/pennyfarthing_scripts/tests/__pycache__/test_confidence_sm_gate.cpython-314-pytest-9.0.2.pyc +0 -0
  417. package/pennyfarthing_scripts/tests/__pycache__/test_dialogue_manager.cpython-314-pytest-9.0.2.pyc +0 -0
  418. package/pennyfarthing_scripts/tests/__pycache__/test_epic_shard_validation.cpython-314-pytest-9.0.2.pyc +0 -0
  419. package/pennyfarthing_scripts/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
  420. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  421. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_e2e.cpython-314-pytest-9.0.2.pyc +0 -0
  422. package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
  423. package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
  424. package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
  425. package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
  426. package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
  427. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
  428. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_panel.cpython-314-pytest-9.0.2.pyc +0 -0
  429. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
  430. package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
  431. package/pennyfarthing_scripts/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
  432. package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
  433. package/pennyfarthing_scripts/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
  434. package/pennyfarthing_scripts/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
  435. package/pennyfarthing_scripts/tests/__pycache__/test_topology_loader.cpython-314-pytest-9.0.2.pyc +0 -0
  436. package/pennyfarthing_scripts/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
  437. package/pennyfarthing_scripts/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
  438. package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
  439. package/pennyfarthing_scripts/tests/__pycache__/test_version_sentinel.cpython-314-pytest-9.0.2.pyc +0 -0
  440. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
  441. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  442. package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
  443. package/pennyfarthing_scripts/tests/test_bikerack.py +51 -51
  444. package/pennyfarthing_scripts/tests/test_dialogue_manager.py +811 -0
  445. package/pennyfarthing_scripts/tests/test_handoff_cli.py +16 -11
  446. package/pennyfarthing_scripts/tests/test_sprint_panel.py +344 -265
  447. package/pennyfarthing_scripts/tests/test_workflow_check.py +2 -3
  448. package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-314.pyc +0 -0
  449. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
  450. package/pennyfarthing_scripts/validate/__pycache__/__init__.cpython-314.pyc +0 -0
  451. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
  452. package/pennyfarthing_scripts/validate/adapters/__pycache__/__init__.cpython-314.pyc +0 -0
  453. package/pennyfarthing_scripts/validate/adapters/__pycache__/agent.cpython-314.pyc +0 -0
  454. package/pennyfarthing_scripts/validate/adapters/__pycache__/schema.cpython-314.pyc +0 -0
  455. package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
  456. package/pennyfarthing_scripts/validate/adapters/__pycache__/sprint.cpython-314.pyc +0 -0
  457. package/pennyfarthing_scripts/validate/adapters/__pycache__/tandem_awareness.cpython-314.pyc +0 -0
  458. package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
  459. package/pennyfarthing_scripts/validate/adapters/tandem_awareness.py +254 -0
  460. package/pennyfarthing_scripts/validate/adapters/workflow.py +19 -0
  461. package/pennyfarthing_scripts/validate/cli.py +17 -5
  462. package/pennyfarthing_scripts/welcome_hook.py +3 -149
  463. package/pennyfarthing_scripts/workflow/__init__.py +40 -0
  464. package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
  465. package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-314.pyc +0 -0
  466. package/pennyfarthing_scripts/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
  467. package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-314.pyc +0 -0
  468. package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-314.pyc +0 -0
  469. package/pennyfarthing_scripts/workflow/cli.py +1100 -0
  470. package/pennyfarthing_scripts/workflow/helpers.py +241 -0
  471. package/pennyfarthing_scripts/{workflow.py → workflow/scale.py} +0 -104
  472. package/pennyfarthing_scripts/workflow/state.py +112 -0
  473. package/pennyfarthing_scripts/workflow/team_lifecycle.py +257 -0
  474. package/packages/core/dist/scripts/theme-detail.test.d.ts +0 -10
  475. package/packages/core/dist/scripts/theme-detail.test.js +0 -199
  476. package/pennyfarthing-dist/skills/pf-workflow/scripts/list-workflows.sh +0 -91
  477. package/pennyfarthing-dist/skills/pf-workflow/scripts/resume-workflow.sh +0 -163
  478. package/pennyfarthing-dist/skills/pf-workflow/scripts/show-workflow.sh +0 -138
  479. package/pennyfarthing-dist/skills/pf-workflow/scripts/start-workflow.sh +0 -273
  480. package/pennyfarthing-dist/skills/pf-workflow/scripts/workflow-status.sh +0 -167
  481. package/pennyfarthing_scripts/gate/__pycache__/__init__.cpython-314.pyc +0 -0
  482. package/pennyfarthing_scripts/gate/__pycache__/cli.cpython-314.pyc +0 -0
  483. package/pennyfarthing_scripts/gate/__pycache__/validate.cpython-314.pyc +0 -0
  484. package/pennyfarthing_scripts/tests/__pycache__/test_108_2_remove_handoff_fallback.cpython-314-pytest-9.0.2.pyc +0 -0
  485. package/pennyfarthing_scripts/tests/__pycache__/test_gate_file_resolution.cpython-314-pytest-9.0.2.pyc +0 -0
  486. package/pennyfarthing_scripts/tests/__pycache__/test_gate_runner.cpython-314-pytest-9.0.2.pyc +0 -0
  487. package/pennyfarthing_scripts/tests/__pycache__/test_resolve_gate_file_field.cpython-314-pytest-9.0.2.pyc +0 -0
@@ -0,0 +1,67 @@
1
+ <gate name="quality-pass" model="haiku">
2
+
3
+ <purpose>
4
+ Verify that all project quality gates pass locally — lint, type checks, and
5
+ tests — before handing off to the next phase. This gate wraps the check.py
6
+ quality runner to ensure the codebase is clean enough for Reviewer's time.
7
+ </purpose>
8
+
9
+ <pass>
10
+ Run the quality gate script for the repos listed in the session file:
11
+
12
+ ```bash
13
+ source .venv/bin/activate && python3 .pennyfarthing/scripts/workflow/check.py
14
+ ```
15
+
16
+ The script runs lint, type checks, and tests concurrently. Exit code 0 means
17
+ all checks passed.
18
+
19
+ If ALL checks pass, return:
20
+
21
+ ```yaml
22
+ GATE_RESULT:
23
+ status: pass
24
+ gate: quality-pass
25
+ message: "All quality gates passing — lint, typecheck, tests clean."
26
+ checks:
27
+ - name: lint
28
+ status: pass
29
+ detail: "Lint clean"
30
+ - name: typecheck
31
+ status: pass
32
+ detail: "Type checks passing"
33
+ - name: tests
34
+ status: pass
35
+ detail: "All tests passing"
36
+ ```
37
+ </pass>
38
+
39
+ <fail>
40
+ If the script exits non-zero, parse its output to identify which checks failed.
41
+ The script prints `[PASS]` or `[FAIL]` for each check (Lint, Type Check, Tests).
42
+
43
+ Return with actionable recovery guidance:
44
+
45
+ ```yaml
46
+ GATE_RESULT:
47
+ status: fail
48
+ gate: quality-pass
49
+ message: "Quality gate failed: {summary of failures}"
50
+ checks:
51
+ - name: lint
52
+ status: pass | fail
53
+ detail: "{lint results or specific failures}"
54
+ - name: typecheck
55
+ status: pass | fail
56
+ detail: "{typecheck results or specific errors}"
57
+ - name: tests
58
+ status: pass | fail
59
+ detail: "{test results or failing test details}"
60
+ recovery:
61
+ - "Fix lint errors: run `npm run lint` to see details"
62
+ - "Fix type errors: run `tsc --noEmit` to see details"
63
+ - "Fix failing tests: run `pnpm test` to see details"
64
+ ```
65
+ </fail>
66
+
67
+ </gate>
@@ -0,0 +1,84 @@
1
+ <gate name="tests-fail" model="haiku">
2
+
3
+ <purpose>
4
+ Verify tests are RED — failing tests exist that cover the acceptance
5
+ criteria. TEA has written tests but implementation hasn't started.
6
+ This gate runs after the TEA agent's red phase to confirm the codebase
7
+ has proper test coverage before Dev begins implementation.
8
+ </purpose>
9
+
10
+ <pass>
11
+ Run these checks and report results:
12
+
13
+ 1. **Failing tests exist:** Run the project test suite for the repos listed in the session file.
14
+ - For `pennyfarthing` repo: `cd pennyfarthing && python3 -m pytest` or `pnpm test`
15
+ - Record: total tests, passed, failed, skipped
16
+ - At least one test MUST be failing (RED state)
17
+
18
+ 2. **Tests cover acceptance criteria:** Read the session file's Acceptance Criteria section.
19
+ - Cross-reference test names/descriptions against each AC
20
+ - Each AC should have at least one corresponding test
21
+
22
+ 3. **Tests are committed:** Run `git status --porcelain` to check for uncommitted test files.
23
+ - All test files should be committed to the branch
24
+ - No uncommitted test files should exist
25
+
26
+ If ALL checks pass, return:
27
+
28
+ ```yaml
29
+ GATE_RESULT:
30
+ status: pass
31
+ gate: tests-fail
32
+ message: "{N} failing tests covering {M} acceptance criteria. Tests committed."
33
+ checks:
34
+ - name: failing-tests
35
+ status: pass
36
+ detail: "{failed}/{total} tests failing (RED state confirmed)"
37
+ - name: ac-coverage
38
+ status: pass
39
+ detail: "All {M} acceptance criteria have test coverage"
40
+ - name: tests-committed
41
+ status: pass
42
+ detail: "All test files committed to branch"
43
+ ```
44
+ </pass>
45
+
46
+ <fail>
47
+ If ANY check fails, diagnose and report:
48
+
49
+ 1. **No failing tests found:** TEA didn't write tests or tests are already passing.
50
+ - This means implementation may have leaked into the red phase
51
+ - Or tests are not properly asserting against unimplemented code
52
+
53
+ 2. **Tests don't cover ACs:** Some acceptance criteria lack test coverage.
54
+ - List which ACs are missing tests
55
+ - TEA needs to add additional test cases
56
+
57
+ 3. **Tests aren't committed:** Uncommitted test files exist.
58
+ - List uncommitted test files
59
+ - TEA needs to commit before handoff
60
+
61
+ Return with actionable recovery guidance:
62
+
63
+ ```yaml
64
+ GATE_RESULT:
65
+ status: fail
66
+ gate: tests-fail
67
+ message: "Gate failed: {summary of what's missing}"
68
+ checks:
69
+ - name: failing-tests
70
+ status: pass | fail
71
+ detail: "{description of test state}"
72
+ - name: ac-coverage
73
+ status: pass | fail
74
+ detail: "{list of uncovered ACs}"
75
+ - name: tests-committed
76
+ status: pass | fail
77
+ detail: "{list of uncommitted files}"
78
+ recovery:
79
+ - "Write failing tests for: {uncovered ACs}"
80
+ - "Commit test files: git add {files} && git commit"
81
+ ```
82
+ </fail>
83
+
84
+ </gate>
@@ -0,0 +1,79 @@
1
+ <gate name="tests-pass" model="haiku">
2
+
3
+ <purpose>
4
+ Verify that all tests pass and the working tree is clean before handing off
5
+ to the reviewer. This gate runs after the Dev agent's implementation phase
6
+ to confirm the codebase is in a GREEN state.
7
+ </purpose>
8
+
9
+ <pass>
10
+ Run these checks and report results:
11
+
12
+ 1. **Test suite:** Run the project test suite for the repos listed in the session file.
13
+ - For `pennyfarthing` repo: `cd pennyfarthing && pnpm test`
14
+ - For `orchestrator` repo: tests in the orchestrator root if applicable
15
+ - Record: total tests, passed, failed, skipped
16
+
17
+ 2. **Working tree:** Run `git status --porcelain` in each repo listed in session `**Repos:**`.
18
+ - Verify no uncommitted or untracked files (empty output = clean)
19
+
20
+ 3. **Branch status:** Run `git branch --show-current` and `git log --oneline -1`.
21
+ - Confirm on the expected feature branch from session `**Branch:**`
22
+
23
+ If ALL checks pass, return:
24
+
25
+ ```yaml
26
+ GATE_RESULT:
27
+ status: pass
28
+ gate: tests-pass
29
+ message: "All {N} tests passing. Working tree clean. Branch: {branch}"
30
+ checks:
31
+ - name: test-suite
32
+ status: pass
33
+ detail: "{passed}/{total} tests passing ({skipped} skipped)"
34
+ - name: working-tree
35
+ status: pass
36
+ detail: "No uncommitted changes"
37
+ - name: branch-status
38
+ status: pass
39
+ detail: "On branch {branch}, HEAD at {short-sha}"
40
+ ```
41
+ </pass>
42
+
43
+ <fail>
44
+ If ANY check fails, diagnose and report:
45
+
46
+ 1. **Failing tests:** List each failing test file and line number.
47
+ - Run tests with verbose output to capture failure details.
48
+ - Group failures by file.
49
+
50
+ 2. **Dirty working tree:** List uncommitted and untracked files.
51
+ - Run `git status --porcelain` and report each file with its status code.
52
+
53
+ 3. **Wrong branch:** Report actual vs expected branch name.
54
+
55
+ Return with actionable recovery guidance:
56
+
57
+ ```yaml
58
+ GATE_RESULT:
59
+ status: fail
60
+ gate: tests-pass
61
+ message: "Gate failed: {summary of failures}"
62
+ checks:
63
+ - name: test-suite
64
+ status: pass | fail
65
+ detail: "{description of test results or failures}"
66
+ - name: working-tree
67
+ status: pass | fail
68
+ detail: "{list of uncommitted files, or 'clean'}"
69
+ - name: branch-status
70
+ status: pass | fail
71
+ detail: "{branch info or mismatch details}"
72
+ recovery:
73
+ - "Fix failing tests in: {file1}, {file2}"
74
+ - "Commit or stash uncommitted changes before handoff"
75
+ - "Switch to correct branch: git checkout {expected-branch}"
76
+ ```
77
+ </fail>
78
+
79
+ </gate>
@@ -49,7 +49,7 @@ On activation, check session file for a `**Tandem:**` line (e.g., `**Tandem:** a
49
49
 
50
50
  **If tandem is configured:**
51
51
 
52
- 1. **Resolve backseat persona** from theme:
52
+ 1. **Resolve backseat persona** from theme using the `pf theme`
53
53
  ```bash
54
54
  THEME=$(yq '.theme' .pennyfarthing/config.local.yaml)
55
55
  PARTNER_CHARACTER=$(yq ".agents.{PARTNER}.character" .pennyfarthing/personas/themes/${THEME}.yaml)
@@ -98,16 +98,17 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
98
98
  ## Reflector
99
99
 
100
100
  <critical>
101
- **EVERY TURN MUST END WITH A CYCLIST MARKER.** Stop hook enforces this.
102
-
103
- | Situation | Marker |
104
- |-----------|--------|
105
- | Workflow handoff | `<!-- CYCLIST:HANDOFF:/agent -->` |
106
- | Handoff + context >80% | `<!-- CYCLIST:CONTEXT_CLEAR:/agent -->` |
107
- | Yes/no question | `<!-- CYCLIST:QUESTION:yesno -->` |
108
- | Open-ended question | `<!-- CYCLIST:QUESTION:open -->` |
109
- | Multiple choice | `<!-- CYCLIST:CHOICES:a,b,c -->` |
110
- | Everything else | `<!-- CYCLIST:CONTINUE -->` |
101
+ **Cyclist only:** EVERY TURN MUST END WITH A CYCLIST MARKER. Stop hook enforces this.
102
+ **CLI mode:** Do NOT emit CYCLIST markers — they are inert outside Cyclist.
103
+
104
+ | Situation | Cyclist Marker | CLI Behavior |
105
+ |-----------|---------------|--------------|
106
+ | Workflow handoff | `<!-- CYCLIST:HANDOFF:/agent -->` | Use AGENT_COMMAND `action` field |
107
+ | Handoff + context >80% | `<!-- CYCLIST:CONTEXT_CLEAR:/agent -->` | Tell user to `/clear` then run agent |
108
+ | Yes/no question | `<!-- CYCLIST:QUESTION:yesno -->` | Ask user directly |
109
+ | Open-ended question | `<!-- CYCLIST:QUESTION:open -->` | Ask user directly |
110
+ | Multiple choice | `<!-- CYCLIST:CHOICES:a,b,c -->` | Ask user directly |
111
+ | Everything else | `<!-- CYCLIST:CONTINUE -->` | (no marker needed) |
111
112
  </critical>
112
113
 
113
114
  ---
@@ -124,7 +125,12 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
124
125
  - If fail → fix issues, retry from step 3 (max 3 retries)
125
126
  - If pass → continue
126
127
  7. `pf handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}`
127
- 8. `pf handoff marker {next_agent}` → emit marker → EXIT
128
+ 8. `pf handoff marker {next_agent}` → AGENT_COMMAND block
129
+ 9. **Act on AGENT_COMMAND:**
130
+ - Has `marker:` field → emit the CYCLIST marker (Cyclist path)
131
+ - `action: "inline_handoff"` → run `activation_command` via Bash, output result, adopt new agent identity
132
+ - `action: "tirepump_handoff"` → tell user: "Context is high. Run `/clear` then `{fallback}`"
133
+ - No action, no marker → output `fallback` text and EXIT
128
134
 
129
135
  **Agents drive exit directly — no handoff subagent.** Scripts handle routing and session updates atomically.
130
136
  </agent-exit-protocol>
@@ -135,14 +141,12 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
135
141
  On activation, check if story phase belongs to you:
136
142
 
137
143
  ```bash
138
- OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
139
- # If OWNER != your agent → emit handoff marker and EXIT
144
+ pf handoff phase-check {your_agent_name}
140
145
  ```
141
146
 
142
- Output:
143
- ```
144
- <!-- CYCLIST:HANDOFF:/{OWNER} -->
147
+ If result has `action: "redirect"`:
145
148
 
146
- Run `/pf-{OWNER}` to continue
147
- ```
149
+ - **Cyclist:** Emit `<!-- CYCLIST:HANDOFF:/{phase_owner} -->` and EXIT
150
+ - **CLI + relay ON:** Run `pf agent start {phase_owner} --tier handoff --quiet` via Bash, adopt new identity
151
+ - **CLI + relay OFF:** Output `Run /pf-{phase_owner} to continue` and EXIT
148
152
  </wrong-phase-detection>
@@ -175,7 +175,7 @@ Logic for checking if this agent owns the current phase.
175
175
 
176
176
  Read `**Workflow:**` and `**Phase:**` from session. Query:
177
177
  ```bash
178
- OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
178
+ OWNER=$(pf workflow phase-check {workflow} {phase})
179
179
  ```
180
180
 
181
181
  **If OWNER != "dev":** Run `pf handoff marker $OWNER`, output result, tell user.
@@ -26,7 +26,7 @@ User queues message in Editor
26
26
  |------|---------|
27
27
  | `packages/cyclist/src/bell-mode.ts` | State management: `isBellModeEnabled()`, `setBellMode()`, `toggleBellMode()` |
28
28
  | `packages/cyclist/src/api/bell.ts` | WebSocket broadcast of bell-consumed events |
29
- | `pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh` | PostToolUse hook — reads queue, returns `additionalContext` |
29
+ | `pf hooks bell-mode` | PostToolUse hook — reads queue, returns `additionalContext` |
30
30
  | `packages/cyclist/src/public/hooks/useMessageQueue.ts` | React hook: `queueMessage()`, `dequeueMessage()`, `injectMessage()`, `handleTurnComplete()` |
31
31
  | `packages/cyclist/src/public/contexts/MessageQueueContext.tsx` | Shared React context (single queue instance across components) |
32
32
  | `packages/cyclist/src/public/components/ControlBar.tsx` | Bell mode toggle button |
@@ -92,10 +92,10 @@ Client-side detection is URL-based: the presence of `?panel=X` triggers standalo
92
92
 
93
93
  | File | Purpose |
94
94
  |------|---------|
95
- | `.bikerack-port` | Port number, written after `server.listen()` — readiness signal |
96
- | `.bikerack-pid` | WheelHub PID, written by launcher — enables `pf bikerack stop` |
95
+ | `.wheelhub-port` | Port number, written after `server.listen()` — readiness signal |
96
+ | `.wheelhub-pid` | WheelHub PID, written by launcher — enables `pf bikerack stop` |
97
97
 
98
- Both are deleted on shutdown. Separate from Cyclist's `.cyclist-port` and `.cyclist-pid` for coexistence.
98
+ Both are deleted on shutdown. Shared with Cyclist (single WheelHub namespace).
99
99
 
100
100
  ## Layout Persistence
101
101
 
@@ -4,7 +4,7 @@ Pennyfarthing uses Claude Code hooks to integrate with session lifecycle events
4
4
 
5
5
  ## Overview
6
6
 
7
- Hooks are shell scripts that Claude Code runs at specific events:
7
+ Hooks are commands that Claude Code runs at specific events:
8
8
 
9
9
  | Hook Type | When It Runs | Purpose |
10
10
  |-----------|--------------|---------|
@@ -16,18 +16,18 @@ Hooks are shell scripts that Claude Code runs at specific events:
16
16
 
17
17
  ### SessionStart Hooks
18
18
 
19
- #### session-start.sh
19
+ #### pf hooks session-start
20
20
 
21
- **Location:** `.pennyfarthing/scripts/hooks/session-start.sh`
21
+ **Location:** `pf hooks session-start`
22
22
 
23
23
  Initializes the Pennyfarthing environment:
24
24
  - Creates `.session/` directory structure
25
25
  - Clears stale agent state from previous sessions
26
26
  - Sets `PROJECT_ROOT` and `SESSION_ID` environment variables
27
27
 
28
- #### session-stop.sh
28
+ #### pf hooks session-stop
29
29
 
30
- **Location:** `.pennyfarthing/scripts/hooks/session-stop.sh`
30
+ **Location:** `pf hooks session-stop`
31
31
 
32
32
  Cleans up session state when Claude Code exits.
33
33
 
@@ -44,68 +44,68 @@ Project-specific environment setup. Edit this file to:
44
44
 
45
45
  **Location:** `.pennyfarthing/scripts/hooks/otel-auto-config.sh`
46
46
 
47
- Auto-configures OTEL telemetry for Cyclist web mode. Checks for a `.cyclist-port` file and sets `OTEL_EXPORTER_OTLP_PROTOCOL` and `OTEL_EXPORTER_OTLP_ENDPOINT` to route Claude Code telemetry to the running Cyclist/BikeRack server.
47
+ Auto-configures OTEL telemetry for Cyclist web mode. Checks for a `.wheelhub-port` file and sets `OTEL_EXPORTER_OTLP_PROTOCOL` and `OTEL_EXPORTER_OTLP_ENDPOINT` to route Claude Code telemetry to the running Cyclist/BikeRack server.
48
48
 
49
- #### welcome-hook.sh
49
+ #### pf hooks session-start (welcome)
50
50
 
51
- **Location:** `.pennyfarthing/scripts/hooks/welcome-hook.sh`
51
+ **Location:** `pf hooks session-start`
52
52
 
53
- Displays a welcome message on session start. In CLI mode, shows ASCII art. In Cyclist mode, sends a WebSocket message to display the logo. Runs once per session (lock file guard).
53
+ Welcome display is now folded into `pf hooks session-start`. In CLI mode, shows ASCII art. In Cyclist mode, sends a WebSocket message to display the logo. Runs once per session (lock file guard).
54
54
 
55
55
  ### PreToolUse Hooks
56
56
 
57
- #### pre-edit-check.sh
57
+ #### pf hooks pre-edit-check
58
58
 
59
- **Location:** `.pennyfarthing/scripts/hooks/pre-edit-check.sh`
59
+ **Location:** `pf hooks pre-edit-check`
60
60
 
61
61
  Protects sensitive files from accidental edits:
62
62
  - Blocks: `.env`, `.pem`, `.key`, credentials, secrets
63
63
  - Blocks: `.git/`, `node_modules/`, `vendor/`
64
64
  - Blocks: `.pennyfarthing/*` (managed files)
65
65
 
66
- #### cyclist-pretooluse-hook.sh
66
+ #### pf hooks cyclist-pretooluse
67
67
 
68
- **Location:** `.pennyfarthing/scripts/hooks/cyclist-pretooluse-hook.sh`
68
+ **Location:** `pf hooks cyclist-pretooluse`
69
69
 
70
70
  Cyclist-specific pre-tool validation. Runs additional safety checks when operating inside Cyclist.
71
71
 
72
- #### context-warning.sh
72
+ #### pf hooks context-warning
73
73
 
74
- **Location:** `.pennyfarthing/scripts/hooks/context-warning.sh`
74
+ **Location:** `pf hooks context-warning`
75
75
 
76
76
  Warns agents when context usage is high. Outputs a warning at 60% usage and a critical warning at 85%. Never blocks — warning only (always exits 0).
77
77
 
78
- #### context-circuit-breaker.sh
78
+ #### pf hooks context-breaker
79
79
 
80
- **Location:** `.pennyfarthing/scripts/hooks/context-circuit-breaker.sh`
80
+ **Location:** `pf hooks context-breaker`
81
81
 
82
- Hard stop when context reaches 80% (configurable via `CRITICAL_THRESHOLD`). Unlike `context-warning.sh`, this **blocks tool execution** (exit 2). Auto-saves the active agent to a checkpoint so `/pf-session continue` can restore it with FULL tier context.
82
+ Hard stop when context reaches 80% (configurable via `CRITICAL_THRESHOLD`). Unlike `pf hooks context-warning`, this **blocks tool execution** (exit 2). Auto-saves the active agent to a checkpoint so `/pf-session continue` can restore it with FULL tier context.
83
83
 
84
- #### schema-validation.sh
84
+ #### pf hooks schema-validation
85
85
 
86
- **Location:** `.pennyfarthing/scripts/hooks/schema-validation.sh`
86
+ **Location:** `pf hooks schema-validation`
87
87
 
88
88
  Validates file writes against XML schema rules for agent definitions, workflow files, and other structured content.
89
89
 
90
- #### sprint-yaml-validation.sh
90
+ #### pf hooks sprint-yaml
91
91
 
92
- **Location:** `.pennyfarthing/scripts/hooks/sprint-yaml-validation.sh`
92
+ **Location:** `pf hooks sprint-yaml`
93
93
 
94
94
  Validates sprint YAML files on write to prevent structural corruption.
95
95
 
96
96
  ### PostToolUse Hooks
97
97
 
98
- #### bell-mode-hook.sh
98
+ #### pf hooks bell-mode
99
99
 
100
- **Location:** `.pennyfarthing/scripts/hooks/bell-mode-hook.sh`
100
+ **Location:** `pf hooks bell-mode`
101
101
 
102
102
  Bell mode message injection. Checks the bell mode queue and injects queued messages into the agent's context at the next tool execution. Also handles tandem observation injection.
103
103
 
104
- #### question-reflector-check.sh / question_reflector_check.py
104
+ #### pf hooks reflector-check
105
105
 
106
- **Location:** `.pennyfarthing/scripts/hooks/question-reflector-check.sh`
106
+ **Location:** `pf hooks reflector-check`
107
107
 
108
- Stop hook enforcing that every agent turn ends with a CYCLIST marker. Detects questions, handoff phrases, and validates marker presence. Blocks turns without valid markers in Cyclist mode. The `.sh` file wraps the Python implementation.
108
+ Stop hook enforcing that every agent turn ends with a CYCLIST marker. Detects questions, handoff phrases, and validates marker presence. Blocks turns without valid markers in Cyclist mode.
109
109
 
110
110
  ### Git Hooks
111
111
 
@@ -133,7 +133,7 @@ Hooks are configured in `.claude/settings.local.json`:
133
133
  "hooks": [
134
134
  {
135
135
  "type": "command",
136
- "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/pennyfarthing/scripts/hooks/session-start.sh"
136
+ "command": "pf hooks session-start"
137
137
  }
138
138
  ]
139
139
  }
@@ -144,7 +144,7 @@ Hooks are configured in `.claude/settings.local.json`:
144
144
  "hooks": [
145
145
  {
146
146
  "type": "command",
147
- "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/pennyfarthing/scripts/hooks/pre-edit-check.sh"
147
+ "command": "pf hooks pre-edit-check"
148
148
  }
149
149
  ]
150
150
  }
@@ -41,7 +41,7 @@ Marker pattern: /<!--\s*CYCLIST:(\w+)(?::([^>]+?))?\s*-->/gi
41
41
  | `packages/cyclist/src/public/components/QuickActions.tsx` | Renders action buttons from detected markers |
42
42
  | `packages/cyclist/src/public/hooks/useMarkerActions.ts` | Detects markers, builds action metadata |
43
43
  | `pennyfarthing-dist/scripts/hooks/question_reflector_check.py` | Stop hook — enforces marker presence |
44
- | `pennyfarthing-dist/scripts/hooks/question-reflector-check.sh` | Bash wrapper for stop hook |
44
+ | `pf hooks reflector-check` | CLI entry point for stop hook |
45
45
 
46
46
  ## Enforcement Hook
47
47
 
@@ -13,7 +13,7 @@ Primary Agent (Opus) Backseat Agent (Haiku, background)
13
13
  │ │ .session/{story}-tandem-{partner}.md
14
14
  │ │
15
15
  ├── PostToolUse hook fires ────┤
16
- │ bell-mode-hook.sh detects
16
+ pf hooks bell-mode detects
17
17
  │ new observation, injects │
18
18
  │ "[Tandem] Character: ..." │
19
19
  │ │
@@ -163,8 +163,8 @@ For active, synchronous agent-to-agent questions (as opposed to passive observat
163
163
  | `observation-writer.ts` | Built | TypeScript API for observation file I/O |
164
164
  | `file-watch.ts` | Built | File system change detection |
165
165
  | `tool-watch.ts` | Built | Tool call log monitoring |
166
- | `bell-mode-hook.sh` | Built | PostToolUse hook with tandem injection |
166
+ | `pf hooks bell-mode` | Built | PostToolUse hook with tandem injection |
167
167
  | `bellmode_hook.py` | Built | Python implementation of bell mode hook |
168
- | `statusline.sh` | Built | CLI statusline with tandem indicator |
168
+ | `pf hooks statusline` | Built | CLI statusline with tandem indicator |
169
169
  | `tandem-backseat.md` | Built | Backseat agent prompt template |
170
170
  | `agent-behavior.md` | Built | Shared agent behavior with tandem protocol |
@@ -86,8 +86,8 @@ Ports are stored in the session file and passed to agents.
86
86
  | Command | Purpose |
87
87
  |---------|---------|
88
88
  | `/pf-session parallel` | Start a new parallel work session |
89
- | `.pennyfarthing/scripts/git/worktree-manager.sh list` | Show active worktrees |
90
- | `.pennyfarthing/scripts/git/worktree-manager.sh remove <name>` | Clean up a worktree |
89
+ | `pf git worktree list` | Show active worktrees |
90
+ | `pf git worktree remove <name>` | Clean up a worktree |
91
91
 
92
92
  ## TDD Flow in Worktrees
93
93
 
@@ -104,7 +104,7 @@ Agents use worktree paths from session file for all operations.
104
104
  When story is complete, SM archives the session and the worktree can be removed:
105
105
 
106
106
  ```bash
107
- .pennyfarthing/scripts/git/worktree-manager.sh remove wt-5-3a
107
+ pf git worktree remove wt-5-3a
108
108
  ```
109
109
 
110
110
  This removes:
@@ -124,7 +124,7 @@ Tags used by agents participating in the TDD workflow cycle (SM, TEA, Dev, Revie
124
124
 
125
125
  **Purpose:** Verify agent owns the current workflow phase before proceeding. Prevents agents from acting on stories they shouldn't own.
126
126
 
127
- **Usage:** SM, TEA, Dev, Reviewer - runs `phase-owner.sh` on activation to determine correct owner.
127
+ **Usage:** SM, TEA, Dev, Reviewer - runs `pf workflow phase-check` on activation to determine correct owner.
128
128
 
129
129
  ```markdown
130
130
  <phase-check>
@@ -132,7 +132,7 @@ Tags used by agents participating in the TDD workflow cycle (SM, TEA, Dev, Revie
132
132
 
133
133
  Read `**Workflow:**` and `**Phase:**` from session. Query:
134
134
  ```bash
135
- OWNER=$(.pennyfarthing/scripts/workflow/phase-owner.sh {workflow} {phase})
135
+ OWNER=$(pf workflow phase-check {workflow} {phase})
136
136
  ```
137
137
 
138
138
  **If OWNER != "dev":** Run `pf handoff marker $OWNER`, output result, tell user.
@@ -11,7 +11,7 @@ scripts/
11
11
  ├── sprint/ # Sprint YAML operations (migrated to pf sprint CLI)
12
12
  ├── story/ # Story operations (create-story.sh)
13
13
  ├── jira/ # Jira integration (jira-claim-story.sh)
14
- ├── git/ # Git operations (release.sh, worktree-manager.sh)
14
+ ├── git/ # Git operations (deprecated shims → pf git CLI)
15
15
  ├── theme/ # Theme operations (list-themes.sh)
16
16
  ├── test/ # Test infrastructure (test-setup.sh)
17
17
  ├── lib/ # Shared bash libraries (common.sh, logging.sh)
@@ -12,6 +12,8 @@
12
12
 
13
13
  set -euo pipefail
14
14
 
15
+ echo "DEPRECATED: check-context.sh — use 'pf context' instead" >&2
16
+
15
17
  # Find project root (where pennyfarthing_scripts lives)
16
18
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
17
19
 
@@ -154,7 +156,7 @@ if last_total:
154
156
  status = 'HIGH' if usable_pct > $WARNING_THRESHOLD else 'OK'
155
157
  relay = '$RELAY_MODE' == 'true'
156
158
  tirepump = (relay or '$PERMISSION_MODE' == 'turbo') and usable_pct > $TIREPUMP_THRESHOLD
157
- is_cyclist = os.environ.get('CYCLIST') == '1' or Path('$PROJECT_DIR/packages/cyclist/.cyclist-port').exists()
159
+ is_cyclist = os.environ.get('CYCLIST') == '1' or Path('$PROJECT_DIR/packages/cyclist/.wheelhub-port').exists()
158
160
 
159
161
  print(f'CONTEXT_TOKENS={last_total}')
160
162
  print(f'CONTEXT_PERCENT={total_pct}')