@pennyfarthing/core 11.2.1 → 11.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/README.md +102 -42
  2. package/package.json +1 -1
  3. package/packages/core/dist/cli/commands/doctor-legacy.test.js +2 -2
  4. package/packages/core/dist/cli/commands/doctor-legacy.test.js.map +1 -1
  5. package/packages/core/dist/cli/commands/doctor.d.ts +55 -0
  6. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
  7. package/packages/core/dist/cli/commands/doctor.js +324 -50
  8. package/packages/core/dist/cli/commands/doctor.js.map +1 -1
  9. package/packages/core/dist/cli/commands/init.d.ts +12 -0
  10. package/packages/core/dist/cli/commands/init.d.ts.map +1 -1
  11. package/packages/core/dist/cli/commands/init.js +45 -0
  12. package/packages/core/dist/cli/commands/init.js.map +1 -1
  13. package/packages/core/dist/cli/commands/pyproject-install.test.d.ts +19 -0
  14. package/packages/core/dist/cli/commands/pyproject-install.test.d.ts.map +1 -0
  15. package/packages/core/dist/cli/commands/pyproject-install.test.js +261 -0
  16. package/packages/core/dist/cli/commands/pyproject-install.test.js.map +1 -0
  17. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.d.ts +17 -0
  18. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.d.ts.map +1 -0
  19. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.js +470 -0
  20. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.js.map +1 -0
  21. package/packages/core/dist/cli/commands/update-consolidation.test.js +14 -6
  22. package/packages/core/dist/cli/commands/update-consolidation.test.js.map +1 -1
  23. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  24. package/packages/core/dist/cli/commands/update.js +31 -2
  25. package/packages/core/dist/cli/commands/update.js.map +1 -1
  26. package/packages/core/dist/cli/index.js +2 -0
  27. package/packages/core/dist/cli/index.js.map +1 -1
  28. package/packages/core/dist/cli/utils/python.d.ts.map +1 -1
  29. package/packages/core/dist/cli/utils/python.js +11 -0
  30. package/packages/core/dist/cli/utils/python.js.map +1 -1
  31. package/packages/core/dist/cli/utils/settings-hook-migration.test.d.ts +17 -0
  32. package/packages/core/dist/cli/utils/settings-hook-migration.test.d.ts.map +1 -0
  33. package/packages/core/dist/cli/utils/settings-hook-migration.test.js +382 -0
  34. package/packages/core/dist/cli/utils/settings-hook-migration.test.js.map +1 -0
  35. package/packages/core/dist/cli/utils/settings.d.ts +0 -4
  36. package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
  37. package/packages/core/dist/cli/utils/settings.js +45 -27
  38. package/packages/core/dist/cli/utils/settings.js.map +1 -1
  39. package/packages/core/dist/cli/utils/stale-artifacts.d.ts +59 -0
  40. package/packages/core/dist/cli/utils/stale-artifacts.d.ts.map +1 -0
  41. package/packages/core/dist/cli/utils/stale-artifacts.js +163 -0
  42. package/packages/core/dist/cli/utils/stale-artifacts.js.map +1 -0
  43. package/packages/core/dist/consultation/dialogue-manager.d.ts +1 -1
  44. package/packages/core/dist/consultation/dialogue-manager.d.ts.map +1 -1
  45. package/packages/core/dist/consultation/dialogue-manager.js +1 -1
  46. package/packages/core/dist/consultation/dialogue-manager.js.map +1 -1
  47. package/packages/core/dist/consultation/dialogue-manager.test.js.map +1 -1
  48. package/packages/core/dist/consultation/tandem-metrics.test.js.map +1 -1
  49. package/packages/core/dist/public/css/react.css +1 -1
  50. package/packages/core/dist/public/js/react/react.js +9 -9
  51. package/packages/core/dist/server/api/git.d.ts.map +1 -1
  52. package/packages/core/dist/server/api/git.js +0 -1
  53. package/packages/core/dist/server/api/git.js.map +1 -1
  54. package/packages/core/dist/server/api/index.d.ts +2 -0
  55. package/packages/core/dist/server/api/index.d.ts.map +1 -1
  56. package/packages/core/dist/server/api/index.js +2 -0
  57. package/packages/core/dist/server/api/index.js.map +1 -1
  58. package/packages/core/dist/server/api/project-info.d.ts +11 -0
  59. package/packages/core/dist/server/api/project-info.d.ts.map +1 -0
  60. package/packages/core/dist/server/api/project-info.js +18 -0
  61. package/packages/core/dist/server/api/project-info.js.map +1 -0
  62. package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
  63. package/packages/core/dist/server/otlp-receiver.js +18 -1
  64. package/packages/core/dist/server/otlp-receiver.js.map +1 -1
  65. package/packages/core/dist/server/otlp-receiver.test.js +1 -1
  66. package/packages/core/dist/server/otlp-receiver.test.js.map +1 -1
  67. package/packages/core/dist/server/server.d.ts.map +1 -1
  68. package/packages/core/dist/server/server.js +3 -2
  69. package/packages/core/dist/server/server.js.map +1 -1
  70. package/packages/core/dist/server/server.test.d.ts +1 -1
  71. package/packages/core/dist/server/server.test.js +8 -8
  72. package/packages/core/dist/server/settings.d.ts +1 -0
  73. package/packages/core/dist/server/settings.d.ts.map +1 -1
  74. package/packages/core/dist/server/settings.js +18 -0
  75. package/packages/core/dist/server/settings.js.map +1 -1
  76. package/packages/core/dist/workflow/tandem-workflow-templates.test.js +7 -5
  77. package/packages/core/dist/workflow/tandem-workflow-templates.test.js.map +1 -1
  78. package/packages/core/dist/workflow/workflow-migration.test.js +6 -5
  79. package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -1
  80. package/packages/core/dist/workflow/workflow-team-templates.test.d.ts +17 -0
  81. package/packages/core/dist/workflow/workflow-team-templates.test.d.ts.map +1 -0
  82. package/packages/core/dist/workflow/workflow-team-templates.test.js +275 -0
  83. package/packages/core/dist/workflow/workflow-team-templates.test.js.map +1 -0
  84. package/pennyfarthing-dist/agents/dev.md +19 -4
  85. package/pennyfarthing-dist/agents/devops.md +2 -10
  86. package/pennyfarthing-dist/agents/reviewer-preflight.md +4 -5
  87. package/pennyfarthing-dist/agents/reviewer.md +17 -4
  88. package/pennyfarthing-dist/agents/sm-finish.md +1 -1
  89. package/pennyfarthing-dist/agents/sm-setup.md +7 -7
  90. package/pennyfarthing-dist/agents/sm.md +16 -29
  91. package/pennyfarthing-dist/agents/tea.md +2 -2
  92. package/pennyfarthing-dist/agents/testing-runner.md +1 -1
  93. package/pennyfarthing-dist/commands/pf-architect.md +1 -1
  94. package/pennyfarthing-dist/commands/pf-ba.md +1 -1
  95. package/pennyfarthing-dist/commands/pf-chore.md +2 -2
  96. package/pennyfarthing-dist/commands/pf-dev.md +1 -1
  97. package/pennyfarthing-dist/commands/pf-devops.md +1 -1
  98. package/pennyfarthing-dist/commands/pf-epic.md +6 -6
  99. package/pennyfarthing-dist/commands/pf-git.md +10 -10
  100. package/pennyfarthing-dist/commands/pf-health-check.md +31 -12
  101. package/pennyfarthing-dist/commands/pf-help.md +12 -12
  102. package/pennyfarthing-dist/commands/pf-orchestrator.md +1 -1
  103. package/pennyfarthing-dist/commands/pf-pm.md +1 -1
  104. package/pennyfarthing-dist/commands/pf-prime.md +8 -8
  105. package/pennyfarthing-dist/commands/pf-reviewer.md +1 -1
  106. package/pennyfarthing-dist/commands/pf-session.md +7 -7
  107. package/pennyfarthing-dist/commands/pf-sm.md +1 -1
  108. package/pennyfarthing-dist/commands/pf-sprint.md +7 -7
  109. package/pennyfarthing-dist/commands/pf-tea.md +1 -1
  110. package/pennyfarthing-dist/commands/pf-tech-writer.md +1 -1
  111. package/pennyfarthing-dist/commands/pf-theme.md +9 -9
  112. package/pennyfarthing-dist/commands/pf-ux-designer.md +1 -1
  113. package/pennyfarthing-dist/commands/pf-work.md +1 -1
  114. package/pennyfarthing-dist/gates/{confidence-sm.md → confidence.md} +16 -17
  115. package/pennyfarthing-dist/gates/dev-exit.md +75 -0
  116. package/pennyfarthing-dist/gates/merge-ready.md +49 -0
  117. package/pennyfarthing-dist/gates/release-ready.md +95 -0
  118. package/pennyfarthing-dist/gates/reviewer-preflight-check.md +90 -0
  119. package/pennyfarthing-dist/gates/sm-setup-exit.md +82 -0
  120. package/pennyfarthing-dist/guides/agent-behavior.md +129 -20
  121. package/pennyfarthing-dist/guides/agent-coordination.md +10 -10
  122. package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +6 -6
  123. package/pennyfarthing-dist/guides/agent-template-tactical.md +1 -1
  124. package/pennyfarthing-dist/guides/bell-mode.md +1 -1
  125. package/pennyfarthing-dist/guides/bikerack.md +10 -10
  126. package/pennyfarthing-dist/guides/brownfield-tools.md +24 -24
  127. package/pennyfarthing-dist/guides/command-tag-taxonomy.md +1 -1
  128. package/pennyfarthing-dist/guides/gate-schema.md +2 -2
  129. package/pennyfarthing-dist/guides/gates.md +10 -5
  130. package/pennyfarthing-dist/guides/handoff-cli.md +8 -8
  131. package/pennyfarthing-dist/guides/hooks.md +27 -27
  132. package/pennyfarthing-dist/guides/prime.md +2 -2
  133. package/pennyfarthing-dist/guides/reflector.md +1 -1
  134. package/pennyfarthing-dist/guides/skill-schema.md +6 -6
  135. package/pennyfarthing-dist/guides/tandem-protocol.md +3 -3
  136. package/pennyfarthing-dist/guides/workflow-schema.md +1 -1
  137. package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
  138. package/pennyfarthing-dist/guides/xml-tags.md +8 -8
  139. package/pennyfarthing-dist/scripts/README.md +4 -4
  140. package/pennyfarthing-dist/scripts/core/agent-session.sh +2 -5
  141. package/pennyfarthing-dist/scripts/core/check-context.sh +1 -1
  142. package/pennyfarthing-dist/scripts/core/pf.sh +5 -0
  143. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +2 -5
  144. package/pennyfarthing-dist/scripts/core/prime.sh +2 -25
  145. package/pennyfarthing-dist/scripts/git/README.md +14 -14
  146. package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +2 -3
  147. package/pennyfarthing-dist/scripts/git/git-status-all.sh +2 -3
  148. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +2 -3
  149. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +2 -4
  150. package/pennyfarthing-dist/scripts/hooks/README.md +6 -6
  151. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +3 -3
  152. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +3 -3
  153. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +3 -3
  154. package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +3 -3
  155. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +5 -4
  156. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +2 -1
  157. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +3 -3
  158. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +3 -3
  159. package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +3 -3
  160. package/pennyfarthing-dist/scripts/hooks/session-start.sh +3 -3
  161. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +3 -3
  162. package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +3 -3
  163. package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +3 -4
  164. package/pennyfarthing-dist/scripts/lib/env.sh +34 -0
  165. package/pennyfarthing-dist/scripts/lib/find-root.sh +5 -0
  166. package/pennyfarthing-dist/scripts/lib/run-pf.sh +43 -0
  167. package/pennyfarthing-dist/scripts/misc/README.md +1 -1
  168. package/pennyfarthing-dist/scripts/misc/statusline.sh +3 -3
  169. package/pennyfarthing-dist/scripts/sprint/README.md +21 -21
  170. package/pennyfarthing-dist/scripts/workflow/README.md +2 -2
  171. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +2 -16
  172. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +3 -3
  173. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +3 -3
  174. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +3 -3
  175. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +3 -3
  176. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +3 -3
  177. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +3 -3
  178. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +3 -3
  179. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +3 -3
  180. package/pennyfarthing-dist/skills/pf-bc/examples.md +23 -23
  181. package/pennyfarthing-dist/skills/pf-bc/skill.md +17 -17
  182. package/pennyfarthing-dist/skills/pf-bc/usage.md +8 -8
  183. package/pennyfarthing-dist/skills/pf-jira/SKILL.md +15 -15
  184. package/pennyfarthing-dist/skills/pf-jira/examples.md +48 -48
  185. package/pennyfarthing-dist/skills/pf-jira/usage.md +15 -15
  186. package/pennyfarthing-dist/skills/pf-settings/skill.md +42 -0
  187. package/pennyfarthing-dist/skills/pf-sprint/examples.md +80 -80
  188. package/pennyfarthing-dist/skills/pf-sprint/skill.md +35 -35
  189. package/pennyfarthing-dist/skills/pf-sprint/usage.md +30 -30
  190. package/pennyfarthing-dist/skills/pf-theme/examples.md +15 -15
  191. package/pennyfarthing-dist/skills/pf-theme/skill.md +6 -6
  192. package/pennyfarthing-dist/skills/pf-theme/usage.md +5 -5
  193. package/pennyfarthing-dist/skills/pf-workflow/examples.md +27 -27
  194. package/pennyfarthing-dist/skills/pf-workflow/skill.md +11 -11
  195. package/pennyfarthing-dist/skills/pf-workflow/usage.md +11 -11
  196. package/pennyfarthing-dist/skills/skill-registry.yaml +34 -19
  197. package/pennyfarthing-dist/templates/pyproject.toml +27 -0
  198. package/pennyfarthing-dist/templates/settings.local.json.template +11 -11
  199. package/pennyfarthing-dist/workflows/bdd-tandem.yaml +7 -3
  200. package/pennyfarthing-dist/workflows/bdd-team.yaml +89 -0
  201. package/pennyfarthing-dist/workflows/bdd.yaml +7 -3
  202. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +1 -1
  203. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +1 -1
  204. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +1 -1
  205. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
  206. package/pennyfarthing-dist/workflows/installation-check/steps/step-01-foundation.md +77 -0
  207. package/pennyfarthing-dist/workflows/installation-check/steps/step-02-commands.md +82 -0
  208. package/pennyfarthing-dist/workflows/installation-check/steps/step-03-hooks.md +121 -0
  209. package/pennyfarthing-dist/workflows/installation-check/steps/step-04-scripts.md +83 -0
  210. package/pennyfarthing-dist/workflows/installation-check/steps/step-05-layout.md +81 -0
  211. package/pennyfarthing-dist/workflows/installation-check/steps/step-06-legacy.md +94 -0
  212. package/pennyfarthing-dist/workflows/installation-check/steps/step-07-tools.md +80 -0
  213. package/pennyfarthing-dist/workflows/installation-check/steps/step-08-summary.md +99 -0
  214. package/pennyfarthing-dist/workflows/installation-check/workflow.yaml +47 -0
  215. package/pennyfarthing-dist/workflows/project-setup/steps/step-01-discover.md +47 -0
  216. package/pennyfarthing-dist/workflows/tdd-tandem.yaml +7 -3
  217. package/pennyfarthing-dist/workflows/tdd-team.yaml +80 -0
  218. package/pennyfarthing-dist/workflows/tdd.yaml +7 -3
  219. package/pennyfarthing-dist/workflows/trivial.yaml +7 -3
  220. package/pennyfarthing_scripts/__init__.py +1 -1
  221. package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  222. package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
  223. package/pennyfarthing_scripts/__pycache__/cli.cpython-311.pyc +0 -0
  224. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  225. package/pennyfarthing_scripts/__pycache__/context.cpython-311.pyc +0 -0
  226. package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
  227. package/pennyfarthing_scripts/bc/__pycache__/__init__.cpython-311.pyc +0 -0
  228. package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-311.pyc +0 -0
  229. package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
  230. package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-311.pyc +0 -0
  231. package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
  232. package/pennyfarthing_scripts/bc/__pycache__/split.cpython-314.pyc +0 -0
  233. package/pennyfarthing_scripts/bc/cli.py +23 -2
  234. package/pennyfarthing_scripts/bc/focus.py +1 -0
  235. package/pennyfarthing_scripts/bc/split.py +52 -0
  236. package/pennyfarthing_scripts/bellmode_hook.py +2 -5
  237. package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-311.pyc +0 -0
  238. package/pennyfarthing_scripts/bikerack/__pycache__/audit_log_panel.cpython-314.pyc +0 -0
  239. package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
  240. package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
  241. package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
  242. package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-311.pyc +0 -0
  243. package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
  244. package/pennyfarthing_scripts/bikerack/__pycache__/context_meter_footer.cpython-314.pyc +0 -0
  245. package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
  246. package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
  247. package/pennyfarthing_scripts/bikerack/__pycache__/events.cpython-314.pyc +0 -0
  248. package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
  249. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-311.pyc +0 -0
  250. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  251. package/pennyfarthing_scripts/bikerack/__pycache__/portrait_resolver.cpython-314.pyc +0 -0
  252. package/pennyfarthing_scripts/bikerack/__pycache__/progress_panel.cpython-314.pyc +0 -0
  253. package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
  254. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_data.cpython-314.pyc +0 -0
  255. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_screen.cpython-314.pyc +0 -0
  256. package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
  257. package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
  258. package/pennyfarthing_scripts/bikerack/audit_log_panel.py +48 -6
  259. package/pennyfarthing_scripts/bikerack/context_meter_footer.py +53 -3
  260. package/pennyfarthing_scripts/bikerack/launcher.py +6 -6
  261. package/pennyfarthing_scripts/bikerack/progress_panel.py +0 -1
  262. package/pennyfarthing_scripts/bikerack/sprint_panel.py +1 -1
  263. package/pennyfarthing_scripts/bikerack/story_detail_data.py +4 -1
  264. package/pennyfarthing_scripts/bikerack/story_detail_screen.py +2 -1
  265. package/pennyfarthing_scripts/bikerack/tui.py +214 -10
  266. package/pennyfarthing_scripts/bikerack/ws_client.py +2 -2
  267. package/pennyfarthing_scripts/cli.py +5 -0
  268. package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-311.pyc +0 -0
  269. package/pennyfarthing_scripts/common/__pycache__/config.cpython-311.pyc +0 -0
  270. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  271. package/pennyfarthing_scripts/common/__pycache__/output.cpython-311.pyc +0 -0
  272. package/pennyfarthing_scripts/common/__pycache__/pr_config.cpython-314.pyc +0 -0
  273. package/pennyfarthing_scripts/common/config.py +29 -2
  274. package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-311.pyc +0 -0
  275. package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
  276. package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-311.pyc +0 -0
  277. package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-314.pyc +0 -0
  278. package/pennyfarthing_scripts/consultation/cli.py +3 -3
  279. package/pennyfarthing_scripts/context.py +3 -3
  280. package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-311.pyc +0 -0
  281. package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-311.pyc +0 -0
  282. package/pennyfarthing_scripts/epic/__pycache__/__init__.cpython-311.pyc +0 -0
  283. package/pennyfarthing_scripts/epic/__pycache__/cli.cpython-311.pyc +0 -0
  284. package/pennyfarthing_scripts/git/hooks_installer.py +2 -3
  285. package/pennyfarthing_scripts/git/status_all.py +1 -1
  286. package/pennyfarthing_scripts/git/worktree.py +2 -2
  287. package/pennyfarthing_scripts/git_group/__pycache__/__init__.cpython-311.pyc +0 -0
  288. package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-311.pyc +0 -0
  289. package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-314.pyc +0 -0
  290. package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-311.pyc +0 -0
  291. package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-311.pyc +0 -0
  292. package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-314.pyc +0 -0
  293. package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
  294. package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
  295. package/pennyfarthing_scripts/handoff/__pycache__/phase_check.cpython-314.pyc +0 -0
  296. package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
  297. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-311.pyc +0 -0
  298. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-311.pyc +0 -0
  299. package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-311.pyc +0 -0
  300. package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-311.pyc +0 -0
  301. package/pennyfarthing_scripts/hooks/__init__.py +8 -3
  302. package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  303. package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
  304. package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-311.pyc +0 -0
  305. package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
  306. package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-311.pyc +0 -0
  307. package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-314.pyc +0 -0
  308. package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-311.pyc +0 -0
  309. package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
  310. package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-311.pyc +0 -0
  311. package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
  312. package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-311.pyc +0 -0
  313. package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
  314. package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-311.pyc +0 -0
  315. package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
  316. package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-311.pyc +0 -0
  317. package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
  318. package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-311.pyc +0 -0
  319. package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
  320. package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-311.pyc +0 -0
  321. package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
  322. package/pennyfarthing_scripts/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
  323. package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-311.pyc +0 -0
  324. package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
  325. package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-311.pyc +0 -0
  326. package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
  327. package/pennyfarthing_scripts/hooks/bell_mode.py +0 -1
  328. package/pennyfarthing_scripts/hooks/pre_edit_check.py +0 -1
  329. package/pennyfarthing_scripts/hooks/reflector_check.py +1 -2
  330. package/pennyfarthing_scripts/hooks/schema_validation.py +0 -1
  331. package/pennyfarthing_scripts/hooks/session_start.py +6 -8
  332. package/pennyfarthing_scripts/hooks/statusline.py +10 -1
  333. package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-311.pyc +0 -0
  334. package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-311.pyc +0 -0
  335. package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-311.pyc +0 -0
  336. package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-311.pyc +0 -0
  337. package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-311.pyc +0 -0
  338. package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-311.pyc +0 -0
  339. package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-311.pyc +0 -0
  340. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-311.pyc +0 -0
  341. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-311.pyc +0 -0
  342. package/pennyfarthing_scripts/jira/__pycache__/create.cpython-311.pyc +0 -0
  343. package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-311.pyc +0 -0
  344. package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-311.pyc +0 -0
  345. package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-311.pyc +0 -0
  346. package/pennyfarthing_scripts/jira/__pycache__/story.cpython-311.pyc +0 -0
  347. package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-311.pyc +0 -0
  348. package/pennyfarthing_scripts/launch/__pycache__/__init__.cpython-311.pyc +0 -0
  349. package/pennyfarthing_scripts/launch/__pycache__/cli.cpython-311.pyc +0 -0
  350. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  351. package/pennyfarthing_scripts/prime/heatmap.py +3 -15
  352. package/pennyfarthing_scripts/session/__pycache__/__init__.cpython-311.pyc +0 -0
  353. package/pennyfarthing_scripts/session/__pycache__/cli.cpython-311.pyc +0 -0
  354. package/pennyfarthing_scripts/settings/__init__.py +0 -0
  355. package/pennyfarthing_scripts/settings/__pycache__/__init__.cpython-314.pyc +0 -0
  356. package/pennyfarthing_scripts/settings/__pycache__/cli.cpython-314.pyc +0 -0
  357. package/pennyfarthing_scripts/settings/__pycache__/settings.cpython-314.pyc +0 -0
  358. package/pennyfarthing_scripts/settings/cli.py +55 -0
  359. package/pennyfarthing_scripts/settings/settings.py +98 -0
  360. package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-311.pyc +0 -0
  361. package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-311.pyc +0 -0
  362. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-311.pyc +0 -0
  363. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  364. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-311.pyc +0 -0
  365. package/pennyfarthing_scripts/sprint/__pycache__/epic_update.cpython-311.pyc +0 -0
  366. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-311.pyc +0 -0
  367. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  368. package/pennyfarthing_scripts/sprint/__pycache__/status.cpython-311.pyc +0 -0
  369. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-311.pyc +0 -0
  370. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  371. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-311.pyc +0 -0
  372. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  373. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-311.pyc +0 -0
  374. package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-311.pyc +0 -0
  375. package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-311.pyc +0 -0
  376. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-311.pyc +0 -0
  377. package/pennyfarthing_scripts/sprint/cli.py +121 -0
  378. package/pennyfarthing_scripts/sprint/loader.py +154 -3
  379. package/pennyfarthing_scripts/sprint/story_update.py +7 -0
  380. package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  381. package/pennyfarthing_scripts/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
  382. package/pennyfarthing_scripts/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
  383. package/pennyfarthing_scripts/tests/test_bikerack.py +26 -26
  384. package/pennyfarthing_scripts/tests/test_confidence_sm_gate.py +17 -16
  385. package/pennyfarthing_scripts/tests/test_dialogue_manager.py +0 -1
  386. package/pennyfarthing_scripts/tests/test_resolve_gate_file_field.py +45 -47
  387. package/pennyfarthing_scripts/tests/test_workflow_list_team.py +143 -0
  388. package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-311.pyc +0 -0
  389. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-311.pyc +0 -0
  390. package/pennyfarthing_scripts/validate/__pycache__/__init__.cpython-311.pyc +0 -0
  391. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-311.pyc +0 -0
  392. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
  393. package/pennyfarthing_scripts/validate/adapters/team_mode.py +323 -0
  394. package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-311.pyc +0 -0
  395. package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
  396. package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-311.pyc +0 -0
  397. package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-314.pyc +0 -0
  398. package/pennyfarthing_scripts/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
  399. package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-311.pyc +0 -0
  400. package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-314.pyc +0 -0
  401. package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-311.pyc +0 -0
  402. package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-314.pyc +0 -0
  403. package/pennyfarthing_scripts/workflow/cli.py +15 -14
  404. package/pennyfarthing_scripts/workflow/state.py +0 -1
  405. package/pennyfarthing_scripts/workflow/team_lifecycle.py +3 -4
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # DEPRECATED: This script is a shim. Logic has moved to Python.
3
- # Use: pf hooks bell-mode
4
- exec pf hooks bell-mode
2
+ # Shim: delegates to Python CLI via uv run (dogfooding) or global pf (consumer).
3
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
4
+ exec_pf hooks bell-mode
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # DEPRECATED: This script is a shim. Logic has moved to Python.
3
- # Use: pf hooks context-breaker
4
- exec pf hooks context-breaker
2
+ # Shim: delegates to Python CLI via uv run (dogfooding) or global pf (consumer).
3
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
4
+ exec_pf hooks context-breaker
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # DEPRECATED: This script is a shim. Logic has moved to Python.
3
- # Use: pf hooks context-warning
4
- exec pf hooks context-warning
2
+ # Shim: delegates to Python CLI via uv run (dogfooding) or global pf (consumer).
3
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
4
+ exec_pf hooks context-warning
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # DEPRECATED: This script is a shim. Logic has moved to Python.
3
- # Use: pf hooks cyclist-pretooluse
4
- exec pf hooks cyclist-pretooluse
2
+ # Shim: delegates to Python CLI via uv run (dogfooding) or global pf (consumer).
3
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
4
+ exec_pf hooks cyclist-pretooluse
@@ -1,7 +1,7 @@
1
1
  #!/bin/bash
2
2
  # otel-auto-config.sh - Auto-configure OTEL for Cyclist web mode (Story 20-1)
3
3
  #
4
- # This hook checks for a .wheelhub-port file in the project directory.
4
+ # This hook checks for a .bikerack-port file in the project directory.
5
5
  # If found, it sets the OTEL environment variables to connect Claude Code
6
6
  # telemetry to the running Cyclist server.
7
7
  #
@@ -9,15 +9,15 @@
9
9
  # source /path/to/otel-auto-config.sh
10
10
  #
11
11
  # Prerequisites:
12
- # - Cyclist must be running in web mode (writes .wheelhub-port file)
12
+ # - Cyclist must be running in web mode (writes .bikerack-port file)
13
13
  # - CLAUDE_PROJECT_DIR must be set (standard in Claude Code environment)
14
14
 
15
15
  # Determine project directory
16
16
  PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
17
17
 
18
- # Read port from .wheelhub-port (used by both Cyclist and BikeRack)
18
+ # Read port from .bikerack-port (used by both Cyclist and BikeRack)
19
19
  PORT=""
20
- PORT_FILE="$PROJECT_DIR/.wheelhub-port"
20
+ PORT_FILE="$PROJECT_DIR/.bikerack-port"
21
21
  if [[ -f "$PORT_FILE" ]]; then
22
22
  PORT=$(cat "$PORT_FILE" 2>/dev/null)
23
23
  # Validate port is a number
@@ -28,6 +28,7 @@ fi
28
28
 
29
29
  # Configure OTEL if a valid port was found
30
30
  if [[ -n "$PORT" ]]; then
31
+ export CLAUDE_CODE_ENABLE_TELEMETRY=1
31
32
  export OTEL_EXPORTER_OTLP_PROTOCOL="http/json"
32
33
  export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:$PORT"
33
34
 
@@ -134,7 +134,8 @@ fi
134
134
  SPRINT_YAML_FILES=$(git diff --cached --name-only -- 'sprint/*.yaml' 'sprint/archive/*.yaml' 2>/dev/null \
135
135
  | grep -v 'sprint-template\.yaml$' \
136
136
  | grep -v 'sprint/completed\.yaml$' \
137
- | grep -v 'sprint/context/archived/' || true)
137
+ | grep -v 'sprint/context/archived/' \
138
+ | grep -v 'sprints\.yaml$' || true)
138
139
 
139
140
  if [[ -n "$SPRINT_YAML_FILES" ]]; then
140
141
  echo "Sprint YAML files staged for commit:"
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # DEPRECATED: This script is a shim. Logic has moved to Python.
3
- # Use: pf hooks pre-edit-check
4
- exec pf hooks pre-edit-check
2
+ # Shim: delegates to Python CLI via uv run (dogfooding) or global pf (consumer).
3
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
4
+ exec_pf hooks pre-edit-check
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # DEPRECATED: This script is a shim. Logic has moved to Python.
3
- # Use: pf hooks reflector-check
4
- exec pf hooks reflector-check
2
+ # Shim: delegates to Python CLI via uv run (dogfooding) or global pf (consumer).
3
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
4
+ exec_pf hooks reflector-check
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # DEPRECATED: This script is a shim. Logic has moved to Python.
3
- # Use: pf hooks schema-validation
4
- exec pf hooks schema-validation
2
+ # Shim: delegates to Python CLI via uv run (dogfooding) or global pf (consumer).
3
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
4
+ exec_pf hooks schema-validation
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # DEPRECATED: This script is a shim. Logic has moved to Python.
3
- # Use: pf hooks session-start
4
- exec pf hooks session-start
2
+ # Shim: delegates to Python CLI via uv run no global pf install needed.
3
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
4
+ exec_pf hooks session-start
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # DEPRECATED: This script is a shim. Logic has moved to Python.
3
- # Use: pf hooks session-stop
4
- exec pf hooks session-stop
2
+ # Shim: delegates to Python CLI via uv run no global pf install needed.
3
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
4
+ exec_pf hooks session-stop
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # DEPRECATED: This script is a shim. Logic has moved to Python.
3
- # Use: pf hooks sprint-yaml
4
- exec pf hooks sprint-yaml
2
+ # Shim: delegates to Python CLI via uv run no global pf install needed.
3
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
4
+ exec_pf hooks sprint-yaml
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # DEPRECATED: This script is a shim. Logic has moved to Python.
3
- # Welcome is now part of session-start.
4
- # Use: pf hooks session-start
5
- exec pf hooks session-start
2
+ # Shim: delegates to Python CLI via uv run no global pf install needed.
3
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
4
+ exec_pf hooks session-start
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env bash
2
+ # Resolve CLAUDE_PROJECT_DIR in any context (hooks, Bash tool, subshells).
3
+ #
4
+ # Claude Code sets CLAUDE_PROJECT_DIR for hook execution but NOT for the
5
+ # Bash tool environment. This script fills the gap by walking up from PWD
6
+ # to find .pennyfarthing/, mirroring find-root.sh's fallback strategy.
7
+ #
8
+ # Usage:
9
+ # source .pennyfarthing/scripts/lib/env.sh # relative (Bash tool)
10
+ # source "$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/env.sh" # hooks (already set)
11
+ #
12
+ # After sourcing, CLAUDE_PROJECT_DIR is exported and safe to use.
13
+
14
+ if [[ -z "${CLAUDE_PROJECT_DIR:-}" ]]; then
15
+ _d="$PWD"
16
+ while [[ ! -d "$_d/.pennyfarthing" ]] && [[ "$_d" != "/" ]]; do
17
+ _d="$(dirname "$_d")"
18
+ done
19
+ if [[ -d "$_d/.pennyfarthing" ]]; then
20
+ # Guard against nested .pennyfarthing (e.g., inlined child repo).
21
+ # If the found dir sits inside a parent that also has .pennyfarthing/,
22
+ # prefer the parent (outermost project root).
23
+ _parent="$(dirname "$_d")"
24
+ while [[ "$_parent" != "/" ]]; do
25
+ if [[ -d "$_parent/.pennyfarthing" ]]; then
26
+ _d="$_parent"
27
+ fi
28
+ _parent="$(dirname "$_parent")"
29
+ done
30
+ unset _parent
31
+ export CLAUDE_PROJECT_DIR="$_d"
32
+ fi
33
+ unset _d
34
+ fi
@@ -29,6 +29,11 @@ if [[ -n "$_caller_script" ]]; then
29
29
  _pkg="${_pkg%/.pennyfarthing}"
30
30
  if [[ "$_pkg" == */node_modules/* ]]; then
31
31
  PROJECT_ROOT="${_pkg%/node_modules/*}"
32
+ elif [[ -d "$_pkg/.pennyfarthing" ]]; then
33
+ PROJECT_ROOT="$_pkg"
34
+ elif [[ -d "$_pkg/../.pennyfarthing" ]]; then
35
+ # Dogfooding: pennyfarthing/ inlined inside orchestrator
36
+ PROJECT_ROOT="$(cd "$_pkg/.." && pwd -P)"
32
37
  else
33
38
  PROJECT_ROOT="$_pkg"
34
39
  fi
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env bash
2
+ # Shared utility: Run the `pf` CLI via uv run — no global install needed.
3
+ #
4
+ # Resolution order for pyproject.toml:
5
+ # 1. Dogfooding: $PROJECT_ROOT/pennyfarthing/pyproject.toml (inlined repo)
6
+ # 2. Consumer: $PROJECT_ROOT/pyproject.toml (project declares dependency)
7
+ #
8
+ # Usage from hook shims:
9
+ # source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
10
+ # exec_pf hooks session-start
11
+
12
+ # Resolve PROJECT_ROOT if not already set
13
+ _lib_dir="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd -P)"
14
+ source "$_lib_dir/find-root.sh"
15
+
16
+ # Find the pyproject.toml that provides pennyfarthing-scripts
17
+ _pf_project=""
18
+ if [[ -f "$PROJECT_ROOT/pennyfarthing/pyproject.toml" ]]; then
19
+ # Dogfooding: inlined framework repo
20
+ _pf_project="$PROJECT_ROOT/pennyfarthing"
21
+ elif [[ -f "$PROJECT_ROOT/pyproject.toml" ]]; then
22
+ # Consumer: project-level pyproject.toml with pennyfarthing-scripts dep
23
+ _pf_project="$PROJECT_ROOT"
24
+ elif [[ -f "$PROJECT_ROOT/.pennyfarthing/pyproject.toml" ]]; then
25
+ # Consumer: auto-generated by pennyfarthing init
26
+ _pf_project="$PROJECT_ROOT/.pennyfarthing"
27
+ fi
28
+
29
+ if [[ -z "$_pf_project" ]]; then
30
+ echo "Error: No pyproject.toml found for pennyfarthing-scripts" >&2
31
+ echo "Expected: $PROJECT_ROOT/pennyfarthing/pyproject.toml (dogfooding)" >&2
32
+ echo " or: $PROJECT_ROOT/pyproject.toml (consumer)" >&2
33
+ echo " or: $PROJECT_ROOT/.pennyfarthing/pyproject.toml (auto-generated)" >&2
34
+ exit 1
35
+ fi
36
+
37
+ run_pf() {
38
+ uv run --project "$_pf_project" pf "$@"
39
+ }
40
+
41
+ exec_pf() {
42
+ exec uv run --project "$_pf_project" pf "$@"
43
+ }
@@ -9,7 +9,7 @@ Uncategorized utilities and one-off scripts.
9
9
  | `deploy.sh` | Deployment script |
10
10
  | `doctor-dogfood.sh` | Health check for framework/orchestrator development setup |
11
11
  | `run-ci.sh` | Run CI locally |
12
- | `pf hooks statusline` | Status line configuration |
12
+ | `pf.sh hooks statusline` | Status line configuration |
13
13
  | `uninstall.sh` | Uninstall Pennyfarthing from project |
14
14
  | `backlog.sh` | Backlog operations |
15
15
  | `repo-utils.sh` | Multi-repo utilities |
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env bash
2
- # DEPRECATED: This script is a shim. Logic has moved to Python.
3
- # Use: pf hooks statusline
4
- exec pf hooks statusline
2
+ # Shim: delegates to Python CLI via uv run no global pf install needed.
3
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
4
+ exec_pf hooks statusline
@@ -1,35 +1,35 @@
1
1
  # Sprint Scripts
2
2
 
3
- Sprint management is handled by the Python CLI: `pf sprint [COMMAND]`.
3
+ Sprint management is handled by the Python CLI: `pf.sh sprint [COMMAND]`.
4
4
 
5
5
  ## Commands
6
6
 
7
7
  | Command | Purpose |
8
8
  |---------|---------|
9
- | `pf sprint status` | Show current sprint status and metrics |
10
- | `pf sprint backlog` | List available stories grouped by epic |
11
- | `pf sprint info` | Sprint info as JSON (for Cyclist sidebar) |
12
- | `pf sprint metrics` | Sprint velocity and progress metrics |
13
- | `pf sprint check <id>` | Check story/epic availability (JSON) |
14
- | `pf sprint future` | Show future initiatives and epics |
15
- | `pf sprint new` | Initialize a new sprint |
16
- | `pf sprint validate <file>` | Validate sprint YAML structure |
17
- | `pf sprint archive <id>` | Archive a completed story |
18
- | `pf sprint work <id>` | Start work on a story |
19
- | `pf sprint story field <id> <field>` | Get a story field value |
20
- | `pf sprint epic field <id> <field>` | Get an epic field value |
21
- | `pf sprint epic promote <id>` | Move epic from future to current sprint |
22
- | `pf sprint epic show <id>` | Show epic details |
23
- | `pf sprint epic cancel <id>` | Cancel an epic |
24
- | `pf sprint epic archive` | Archive completed epics |
9
+ | `pf.sh sprint status` | Show current sprint status and metrics |
10
+ | `pf.sh sprint backlog` | List available stories grouped by epic |
11
+ | `pf.sh sprint info` | Sprint info as JSON (for Cyclist sidebar) |
12
+ | `pf.sh sprint metrics` | Sprint velocity and progress metrics |
13
+ | `pf.sh sprint check <id>` | Check story/epic availability (JSON) |
14
+ | `pf.sh sprint future` | Show future initiatives and epics |
15
+ | `pf.sh sprint new` | Initialize a new sprint |
16
+ | `pf.sh sprint validate <file>` | Validate sprint YAML structure |
17
+ | `pf.sh sprint archive <id>` | Archive a completed story |
18
+ | `pf.sh sprint work <id>` | Start work on a story |
19
+ | `pf.sh sprint story field <id> <field>` | Get a story field value |
20
+ | `pf.sh sprint epic field <id> <field>` | Get an epic field value |
21
+ | `pf.sh sprint epic promote <id>` | Move epic from future to current sprint |
22
+ | `pf.sh sprint epic show <id>` | Show epic details |
23
+ | `pf.sh sprint epic cancel <id>` | Cancel an epic |
24
+ | `pf.sh sprint epic archive` | Archive completed epics |
25
25
 
26
26
  ## Usage
27
27
 
28
28
  ```bash
29
- pf sprint status
30
- pf sprint backlog
31
- pf sprint future epic-55
32
- pf sprint epic promote epic-41
29
+ pf.sh sprint status
30
+ pf.sh sprint backlog
31
+ pf.sh sprint future epic-55
32
+ pf.sh sprint epic promote epic-41
33
33
  ```
34
34
 
35
35
  ## Ownership
@@ -6,7 +6,7 @@ Scripts for workflow mechanics, phase transitions, and quality gates.
6
6
 
7
7
  | Script | Purpose |
8
8
  |--------|---------|
9
- | `finish-story.sh` | **DEPRECATED** — forwards to `pf sprint story finish` |
9
+ | `finish-story.sh` | **DEPRECATED** — forwards to `pf.sh sprint story finish` |
10
10
  | `fix-session-phase.sh` | Repair session file phase state |
11
11
  | `check.sh` | Quality gates runner (lint, type check, tests) |
12
12
  | `list-workflows.sh` | List available workflows |
@@ -18,7 +18,7 @@ Scripts for workflow mechanics, phase transitions, and quality gates.
18
18
  ## Usage
19
19
 
20
20
  ```bash
21
- pf sprint story finish MSSCI-12345
21
+ pf.sh sprint story finish MSSCI-12345
22
22
  .pennyfarthing/scripts/workflow/start-workflow.sh prd --mode create
23
23
  ```
24
24
 
@@ -1,20 +1,6 @@
1
1
  #!/bin/bash
2
2
  # DEPRECATED: Use `pf sprint story finish` instead.
3
- #
4
- # This shell script had a bug where yq paths targeted .epics[].stories[]
5
- # but the sprint YAML uses sharded epic files with .stories[] at root.
6
- # The Python implementation (pennyfarthing_scripts.sprint.story_finish)
7
- # correctly handles sharded YAML via read_sprint/write_sprint.
8
- #
9
- # Usage: finish-story.sh <story-id> [--dry-run]
10
-
11
3
  set -euo pipefail
12
-
13
4
  echo "DEPRECATED: finish-story.sh is deprecated. Forwarding to 'pf sprint story finish'." >&2
14
-
15
- ARGS=()
16
- for arg in "$@"; do
17
- ARGS+=("$arg")
18
- done
19
-
20
- exec pf sprint story finish "${ARGS[@]}"
5
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
6
+ exec_pf sprint story finish "$@"
@@ -1,5 +1,5 @@
1
- #!/bin/bash
1
+ #!/usr/bin/env bash
2
2
  # DEPRECATED: Use `pf workflow fix-phase` instead.
3
- # This shim forwards to the Python CLI for backward compatibility.
4
3
  echo "Warning: fix-session-phase.sh is deprecated. Use: pf workflow fix-phase $*" >&2
5
- exec pf workflow fix-phase "$@"
4
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
5
+ exec_pf workflow fix-phase "$@"
@@ -1,5 +1,5 @@
1
- #!/bin/bash
1
+ #!/usr/bin/env bash
2
2
  # DEPRECATED: Use `pf workflow type` instead.
3
- # This shim forwards to the Python CLI for backward compatibility.
4
3
  echo "Warning: get-workflow-type.sh is deprecated. Use: pf workflow type $*" >&2
5
- exec pf workflow type "$@"
4
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
5
+ exec_pf workflow type "$@"
@@ -1,5 +1,5 @@
1
- #!/bin/bash
1
+ #!/usr/bin/env bash
2
2
  # DEPRECATED: Use `pf workflow list` instead.
3
- # This shim forwards to the Python CLI for backward compatibility.
4
3
  echo "Warning: list-workflows.sh is deprecated. Use: pf workflow list" >&2
5
- exec pf workflow list "$@"
4
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
5
+ exec_pf workflow list "$@"
@@ -1,5 +1,5 @@
1
- #!/bin/bash
1
+ #!/usr/bin/env bash
2
2
  # DEPRECATED: Use `pf workflow phase-check` instead.
3
- # This shim forwards to the Python CLI for backward compatibility.
4
3
  echo "Warning: phase-owner.sh is deprecated. Use: pf workflow phase-check $*" >&2
5
- exec pf workflow phase-check "$@"
4
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
5
+ exec_pf workflow phase-check "$@"
@@ -1,5 +1,5 @@
1
- #!/bin/bash
1
+ #!/usr/bin/env bash
2
2
  # DEPRECATED: Use `pf workflow resume` instead.
3
- # This shim forwards to the Python CLI for backward compatibility.
4
3
  echo "Warning: resume-workflow.sh is deprecated. Use: pf workflow resume $*" >&2
5
- exec pf workflow resume "$@"
4
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
5
+ exec_pf workflow resume "$@"
@@ -1,5 +1,5 @@
1
- #!/bin/bash
1
+ #!/usr/bin/env bash
2
2
  # DEPRECATED: Use `pf workflow show` instead.
3
- # This shim forwards to the Python CLI for backward compatibility.
4
3
  echo "Warning: show-workflow.sh is deprecated. Use: pf workflow show $*" >&2
5
- exec pf workflow show "$@"
4
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
5
+ exec_pf workflow show "$@"
@@ -1,5 +1,5 @@
1
- #!/bin/bash
1
+ #!/usr/bin/env bash
2
2
  # DEPRECATED: Use `pf workflow start` instead.
3
- # This shim forwards to the Python CLI for backward compatibility.
4
3
  echo "Warning: start-workflow.sh is deprecated. Use: pf workflow start $*" >&2
5
- exec pf workflow start "$@"
4
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
5
+ exec_pf workflow start "$@"
@@ -1,5 +1,5 @@
1
- #!/bin/bash
1
+ #!/usr/bin/env bash
2
2
  # DEPRECATED: Use `pf workflow status` instead.
3
- # This shim forwards to the Python CLI for backward compatibility.
4
3
  echo "Warning: workflow-status.sh is deprecated. Use: pf workflow status $*" >&2
5
- exec pf workflow status "$@"
4
+ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)/../lib/run-pf.sh"
5
+ exec_pf workflow status "$@"
@@ -4,80 +4,80 @@
4
4
 
5
5
  ```bash
6
6
  # Focus on Sprint panel
7
- pf bc sprint
7
+ pf.sh bc sprint
8
8
 
9
9
  # Focus on Diffs panel
10
- pf bc diffs
10
+ pf.sh bc diffs
11
11
 
12
12
  # Focus on Acceptance Criteria
13
- pf bc ac
13
+ pf.sh bc ac
14
14
 
15
15
  # Focus on Git panel
16
- pf bc git
16
+ pf.sh bc git
17
17
 
18
18
  # Preview without changing
19
- pf bc sprint --dry-run
19
+ pf.sh bc sprint --dry-run
20
20
  ```
21
21
 
22
22
  ## Clearing Focus
23
23
 
24
24
  ```bash
25
25
  # Remove focus setting
26
- pf bc reset
26
+ pf.sh bc reset
27
27
 
28
28
  # Preview
29
- pf bc reset --dry-run
29
+ pf.sh bc reset --dry-run
30
30
  ```
31
31
 
32
32
  ## Named Layouts
33
33
 
34
34
  ```bash
35
35
  # Save current layout as "normal"
36
- pf bc save normal
36
+ pf.sh bc save normal
37
37
 
38
38
  # Save current layout as "review"
39
- pf bc save review
39
+ pf.sh bc save review
40
40
 
41
41
  # Save current layout as "debug"
42
- pf bc save debug
42
+ pf.sh bc save debug
43
43
 
44
44
  # List all saved layouts
45
- pf bc list
45
+ pf.sh bc list
46
46
 
47
47
  # Switch to review layout
48
- pf bc load review
48
+ pf.sh bc load review
49
49
 
50
50
  # Switch back to normal
51
- pf bc load normal
51
+ pf.sh bc load normal
52
52
 
53
53
  # Delete a specific layout
54
- pf bc clear review
54
+ pf.sh bc clear review
55
55
 
56
56
  # Delete all layouts
57
- pf bc clear-all
57
+ pf.sh bc clear-all
58
58
  ```
59
59
 
60
60
  ## Common Workflows
61
61
 
62
62
  ### During code review
63
63
  ```bash
64
- pf bc save normal # Save current layout first
65
- pf bc diffs # Focus on diffs
64
+ pf.sh bc save normal # Save current layout first
65
+ pf.sh bc diffs # Focus on diffs
66
66
  # ... do review ...
67
- pf bc load normal # Restore normal layout
67
+ pf.sh bc load normal # Restore normal layout
68
68
  ```
69
69
 
70
70
  ### Debugging session
71
71
  ```bash
72
- pf bc save normal
73
- pf bc debug # Focus debug panel
72
+ pf.sh bc save normal
73
+ pf.sh bc debug # Focus debug panel
74
74
  # ... debug ...
75
- pf bc reset # Clear focus
75
+ pf.sh bc reset # Clear focus
76
76
  ```
77
77
 
78
78
  ### Sprint planning
79
79
  ```bash
80
- pf bc sprint # Focus sprint panel
80
+ pf.sh bc sprint # Focus sprint panel
81
81
  # ... review backlog ...
82
- pf bc reset
82
+ pf.sh bc reset
83
83
  ```
@@ -16,28 +16,28 @@ Set or clear the focused panel in Cyclist/BikeRack. Save and restore named layou
16
16
 
17
17
  | Command | CLI | Purpose |
18
18
  |---------|-----|---------|
19
- | `/bc sprint` | `pf bc sprint [--dry-run]` | Focus Sprint panel |
20
- | `/bc git` | `pf bc git [--dry-run]` | Focus Git panel |
21
- | `/bc diffs` | `pf bc diffs [--dry-run]` | Focus Diffs panel |
22
- | `/bc todo` | `pf bc todo [--dry-run]` | Focus Todo panel |
23
- | `/bc workflow` | `pf bc workflow [--dry-run]` | Focus Workflow panel |
24
- | `/bc background` | `pf bc background [--dry-run]` | Focus Background panel |
25
- | `/bc audit-log` | `pf bc audit-log [--dry-run]` | Focus Audit Log panel |
26
- | `/bc changed` | `pf bc changed [--dry-run]` | Focus Changed panel |
27
- | `/bc ac` | `pf bc ac [--dry-run]` | Focus Acceptance Criteria panel |
28
- | `/bc debug` | `pf bc debug [--dry-run]` | Focus Debug panel |
29
- | `/bc settings` | `pf bc settings [--dry-run]` | Focus Settings panel |
30
- | `/bc reset` | `pf bc reset [--dry-run]` | Clear focus setting |
19
+ | `/bc sprint` | `pf.sh bc sprint [--dry-run]` | Focus Sprint panel |
20
+ | `/bc git` | `pf.sh bc git [--dry-run]` | Focus Git panel |
21
+ | `/bc diffs` | `pf.sh bc diffs [--dry-run]` | Focus Diffs panel |
22
+ | `/bc todo` | `pf.sh bc todo [--dry-run]` | Focus Todo panel |
23
+ | `/bc workflow` | `pf.sh bc workflow [--dry-run]` | Focus Workflow panel |
24
+ | `/bc background` | `pf.sh bc background [--dry-run]` | Focus Background panel |
25
+ | `/bc audit-log` | `pf.sh bc audit-log [--dry-run]` | Focus Audit Log panel |
26
+ | `/bc changed` | `pf.sh bc changed [--dry-run]` | Focus Changed panel |
27
+ | `/bc ac` | `pf.sh bc ac [--dry-run]` | Focus Acceptance Criteria panel |
28
+ | `/bc debug` | `pf.sh bc debug [--dry-run]` | Focus Debug panel |
29
+ | `/bc settings` | `pf.sh bc settings [--dry-run]` | Focus Settings panel |
30
+ | `/bc reset` | `pf.sh bc reset [--dry-run]` | Clear focus setting |
31
31
 
32
32
  ### Named Layouts
33
33
 
34
34
  | Command | CLI | Purpose |
35
35
  |---------|-----|---------|
36
- | `/bc save <name>` | `pf bc save <name> [--dry-run]` | Save current layout from running server |
37
- | `/bc load <name>` | `pf bc load <name> [--dry-run]` | Load a saved layout |
38
- | `/bc list` | `pf bc list` | List all saved layouts |
39
- | `/bc clear <name>` | `pf bc clear <name> [--dry-run]` | Delete a saved layout |
40
- | `/bc clear-all` | `pf bc clear-all [--dry-run]` | Delete all saved layouts |
36
+ | `/bc save <name>` | `pf.sh bc save <name> [--dry-run]` | Save current layout from running server |
37
+ | `/bc load <name>` | `pf.sh bc load <name> [--dry-run]` | Load a saved layout |
38
+ | `/bc list` | `pf.sh bc list` | List all saved layouts |
39
+ | `/bc clear <name>` | `pf.sh bc clear <name> [--dry-run]` | Delete a saved layout |
40
+ | `/bc clear-all` | `pf.sh bc clear-all [--dry-run]` | Delete all saved layouts |
41
41
 
42
42
  ### Notes
43
43