@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
@@ -52,7 +52,7 @@ SM → TEA → Dev → Reviewer → SM (finish)
52
52
 
53
53
  Commands are organized by resource. Each group is accessible via both slash commands and CLI.
54
54
 
55
- ### Sprint — `/pf-sprint` · `pf sprint`
55
+ ### Sprint — `/pf-sprint` · `pf.sh sprint`
56
56
 
57
57
  | Command | Description |
58
58
  |---------|-------------|
@@ -65,7 +65,7 @@ Commands are organized by resource. Each group is accessible via both slash comm
65
65
  | `/pf-sprint story [show\|add\|update\|size\|finish]` | Story operations |
66
66
  | `/pf-sprint epic [show\|add\|promote\|archive]` | Epic operations |
67
67
 
68
- ### Git — `/pf-git` · `pf git`
68
+ ### Git — `/pf-git` · `pf.sh git`
69
69
 
70
70
  | Command | Description |
71
71
  |---------|-------------|
@@ -74,21 +74,21 @@ Commands are organized by resource. Each group is accessible via both slash comm
74
74
  | `/pf-git branches <id>` | Create feature branches from story |
75
75
  | `/pf-git release` | Interactive release workflow |
76
76
 
77
- ### Session — `/pf-session` · `pf session`
77
+ ### Session — `/pf-session` · `pf.sh session`
78
78
 
79
79
  | Command | Description |
80
80
  |---------|-------------|
81
81
  | `/pf-session new` | Start next available story |
82
82
  | `/pf-session continue` | Resume from checkpoint |
83
83
 
84
- ### Epic — `/pf-epic` · `pf epic`
84
+ ### Epic — `/pf-epic` · `pf.sh epic`
85
85
 
86
86
  | Command | Description |
87
87
  |---------|-------------|
88
88
  | `/pf-epic start <id>` | Start epic for development |
89
89
  | `/pf-epic close <id>` | Close completed epic |
90
90
 
91
- ### Jira — `/pf-jira` · `pf jira`
91
+ ### Jira — `/pf-jira` · `pf.sh jira`
92
92
 
93
93
  | Command | Description |
94
94
  |---------|-------------|
@@ -98,7 +98,7 @@ Commands are organized by resource. Each group is accessible via both slash comm
98
98
  | `/pf-jira sync-epic` | Sync epic to Jira |
99
99
  | `/pf-jira reconcile` | Report mismatches |
100
100
 
101
- ### Theme — `/pf-theme` · `pf theme`
101
+ ### Theme — `/pf-theme` · `pf.sh theme`
102
102
 
103
103
  | Command | Description |
104
104
  |---------|-------------|
@@ -108,7 +108,7 @@ Commands are organized by resource. Each group is accessible via both slash comm
108
108
  | `/pf-theme create <name>` | Create custom theme |
109
109
  | `/pf-theme maker` | Interactive theme wizard |
110
110
 
111
- ### Workflow — `/pf-workflow` · `pf workflow`
111
+ ### Workflow — `/pf-workflow` · `pf.sh workflow`
112
112
 
113
113
  | Command | Description |
114
114
  |---------|-------------|
@@ -221,11 +221,11 @@ Based on your current state, here's what you might need:
221
221
 
222
222
  For detailed help on any command group:
223
223
  ```bash
224
- pf help # Overview of all groups
225
- pf help sprint # Sprint commands
226
- pf help git # Git commands
227
- pf help session # Session commands
228
- pf help epic # Epic commands
224
+ pf.sh help # Overview of all groups
225
+ pf.sh help sprint # Sprint commands
226
+ pf.sh help git # Git commands
227
+ pf.sh help session # Session commands
228
+ pf.sh help epic # Epic commands
229
229
  ```
230
230
 
231
231
  ## Documentation
@@ -5,7 +5,7 @@ description: Orchestrator - Coordinator of all agents and meta operations
5
5
  <agent-activation>
6
6
  **FIRST:** Use Bash tool to run:
7
7
  ```bash
8
- pf agent start "orchestrator"
8
+ source .pennyfarthing/scripts/lib/env.sh && source "$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/run-pf.sh" && run_pf agent start "orchestrator"
9
9
  ```
10
10
  This loads your persona and agent context. Adopt the character shown in the output.
11
11
  </agent-activation>
@@ -5,7 +5,7 @@ description: Product Manager - Strategic planning and prioritization
5
5
  <agent-activation>
6
6
  **FIRST:** Use Bash tool to run:
7
7
  ```bash
8
- pf agent start "pm"
8
+ source .pennyfarthing/scripts/lib/env.sh && source "$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/run-pf.sh" && run_pf agent start "pm"
9
9
  ```
10
10
  This loads your persona and agent context. Adopt the character shown in the output.
11
11
  </agent-activation>
@@ -4,7 +4,7 @@ description: Load essential project context at agent activation
4
4
 
5
5
  <purpose>
6
6
  Quickly load essential context files to reduce agent cold-start overhead.
7
- Automatically invoked on agent activation via `pf agent start`.
7
+ Automatically invoked on agent activation via `pf.sh agent start`.
8
8
  </purpose>
9
9
 
10
10
  <when-to-use>
@@ -21,19 +21,19 @@ Use the `pf` CLI:
21
21
 
22
22
  ```bash
23
23
  # Load all essential context (default)
24
- pf agent start "sm"
24
+ pf.sh agent start "sm"
25
25
 
26
26
  # Minimal mode - fastest startup
27
- pf agent start "sm" --minimal
27
+ pf.sh agent start "sm" --minimal
28
28
 
29
29
  # Full mode - include domain docs
30
- pf agent start "sm" --full
30
+ pf.sh agent start "sm" --full
31
31
 
32
32
  # Skip persona loading
33
- pf agent start "sm" --no-persona
33
+ pf.sh agent start "sm" --no-persona
34
34
 
35
35
  # JSON output (for Cyclist integration)
36
- pf agent start "sm" --json
36
+ pf.sh agent start "sm" --json
37
37
  ```
38
38
 
39
39
  ## Options
@@ -111,7 +111,7 @@ With `--quiet`, section headers are suppressed.
111
111
  The `/prime` command is automatically invoked when agents activate:
112
112
 
113
113
  1. User invokes `/sm`, `/tea`, `/dev`, or `/reviewer`
114
- 2. `pf agent start <name>` runs
114
+ 2. `pf.sh agent start <name>` runs
115
115
  3. Context is loaded: workflow state, agent definition, persona, behavior guide, sprint context, session, sidecars
116
116
  4. Agent starts with full context AND their learned patterns loaded
117
117
 
@@ -129,7 +129,7 @@ If context becomes stale mid-session, run `/prime` manually:
129
129
  </integration>
130
130
 
131
131
  <reference>
132
- - **CLI:** `pf agent start <name>` or `python3 -m pennyfarthing_scripts.cli agent start <name>`
132
+ - **CLI:** `pf.sh agent start <name>` or `python3 -m pennyfarthing_scripts.cli agent start <name>`
133
133
  - **Loads:** Workflow state, agent definition, persona, behavior guide, sprint context, session, sidecars
134
134
  - **Sidecar location:** `.pennyfarthing/sidecars/{agent}/*.md`
135
135
  - **Behavior guide:** `.pennyfarthing/guides/agent-behavior.md` (all agents)
@@ -5,7 +5,7 @@ description: Code Reviewer - Critical code review and quality enforcement
5
5
  <agent-activation>
6
6
  **FIRST:** Use Bash tool to run:
7
7
  ```bash
8
- pf agent start "reviewer"
8
+ source .pennyfarthing/scripts/lib/env.sh && source "$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/run-pf.sh" && run_pf agent start "reviewer"
9
9
  ```
10
10
  This loads your persona and agent context. Adopt the character shown in the output.
11
11
  </agent-activation>
@@ -16,19 +16,19 @@ Manage work session lifecycle. Start new stories from the backlog or resume from
16
16
  Start the next available story from the sprint backlog.
17
17
 
18
18
  ```bash
19
- pf session new
19
+ pf.sh session new
20
20
  ```
21
21
 
22
- Equivalent to `pf sprint work next`. Auto-selects the highest priority story.
22
+ Equivalent to `pf.sh sprint work next`. Auto-selects the highest priority story.
23
23
 
24
24
  ### `/pf-session continue [--list] [--story-id ID]`
25
25
 
26
26
  Resume work from a saved checkpoint after context circuit breaker.
27
27
 
28
28
  ```bash
29
- pf session continue # Interactive checkpoint selection
30
- pf session continue --list # Show available checkpoints
31
- pf session continue --story-id MSSCI-12345 # Resume specific story
29
+ pf.sh session continue # Interactive checkpoint selection
30
+ pf.sh session continue --list # Show available checkpoints
31
+ pf.sh session continue --story-id MSSCI-12345 # Resume specific story
32
32
  ```
33
33
 
34
34
  ## Quick Reference
@@ -41,8 +41,8 @@ pf session continue --story-id MSSCI-12345 # Resume specific story
41
41
  ## CLI Equivalent
42
42
 
43
43
  ```bash
44
- pf session new
45
- pf session continue [--list] [--story-id ID]
44
+ pf.sh session new
45
+ pf.sh session continue [--list] [--story-id ID]
46
46
  ```
47
47
 
48
48
  ## Related
@@ -5,7 +5,7 @@ description: Scrum Master - Story coordination and sprint management
5
5
  <agent-activation>
6
6
  **FIRST:** Use Bash tool to run:
7
7
  ```bash
8
- pf agent start "sm"
8
+ source .pennyfarthing/scripts/lib/env.sh && source "$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/run-pf.sh" && run_pf agent start "sm"
9
9
  ```
10
10
  This loads your persona and agent context. Adopt the character shown in the output.
11
11
  </agent-activation>
@@ -20,7 +20,7 @@ Never manually edit `sprint/current-sprint.yaml`. Always use the provided script
20
20
  Show current sprint status with story counts and points.
21
21
 
22
22
  ```bash
23
- pf sprint status [filter]
23
+ pf.sh sprint status [filter]
24
24
  ```
25
25
 
26
26
  | Filter | Description |
@@ -35,7 +35,7 @@ pf sprint status [filter]
35
35
  Show available stories ready for work, grouped by epic.
36
36
 
37
37
  ```bash
38
- pf sprint backlog
38
+ pf.sh sprint backlog
39
39
  ```
40
40
 
41
41
  ### `/pf-sprint work [story-id|epic-id|next]`
@@ -59,7 +59,7 @@ if [[ "$OPEN_PRS" -gt 0 ]]; then
59
59
  fi
60
60
 
61
61
  # Check if story is available
62
- pf sprint check <story-id>
62
+ pf.sh sprint check <story-id>
63
63
 
64
64
  # Then load SM to begin work
65
65
  ```
@@ -78,7 +78,7 @@ When starting work, this command:
78
78
  Archive a completed story.
79
79
 
80
80
  ```bash
81
- pf sprint archive <story-id> [pr-number] [--apply]
81
+ pf.sh sprint archive <story-id> [pr-number] [--apply]
82
82
  ```
83
83
 
84
84
  | Option | Description |
@@ -90,7 +90,7 @@ pf sprint archive <story-id> [pr-number] [--apply]
90
90
  Initialize a new sprint.
91
91
 
92
92
  ```bash
93
- pf sprint new 2605 277 2026-02-03 2026-02-16 "Sprint goal"
93
+ pf.sh sprint new 2605 277 2026-02-03 2026-02-16 "Sprint goal"
94
94
  ```
95
95
 
96
96
  ### `/pf-sprint future [--epic EPIC_ID]`
@@ -98,7 +98,7 @@ pf sprint new 2605 277 2026-02-03 2026-02-16 "Sprint goal"
98
98
  Show future work available for promotion.
99
99
 
100
100
  ```bash
101
- pf sprint future [--epic epic-XX]
101
+ pf.sh sprint future [--epic epic-XX]
102
102
  ```
103
103
 
104
104
  ### `/pf-sprint promote <epic-id>`
@@ -106,7 +106,7 @@ pf sprint future [--epic epic-XX]
106
106
  Move an epic from future.yaml to current sprint.
107
107
 
108
108
  ```bash
109
- pf sprint epic promote epic-XX
109
+ pf.sh sprint epic promote epic-XX
110
110
  ```
111
111
 
112
112
  ## Quick Reference
@@ -5,7 +5,7 @@ description: Test Engineer/Architect - Test strategy and TDD
5
5
  <agent-activation>
6
6
  **FIRST:** Use Bash tool to run:
7
7
  ```bash
8
- pf agent start "tea"
8
+ source .pennyfarthing/scripts/lib/env.sh && source "$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/run-pf.sh" && run_pf agent start "tea"
9
9
  ```
10
10
  This loads your persona and agent context. Adopt the character shown in the output.
11
11
  </agent-activation>
@@ -5,7 +5,7 @@ description: Technical Writer - Documentation creation and maintenance
5
5
  <agent-activation>
6
6
  **FIRST:** Use Bash tool to run:
7
7
  ```bash
8
- pf agent start "tech-writer"
8
+ source .pennyfarthing/scripts/lib/env.sh && source "$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/run-pf.sh" && run_pf agent start "tech-writer"
9
9
  ```
10
10
  This loads your persona and agent context. Adopt the character shown in the output.
11
11
  </agent-activation>
@@ -16,10 +16,10 @@ Manage persona themes: list available themes, view details, switch themes, creat
16
16
  Show current theme or specific theme details.
17
17
 
18
18
  ```bash
19
- pf theme show [name]
19
+ pf.sh theme show [name]
20
20
 
21
21
  # Show extended details (OCEAN scores, quirks, catchphrases)
22
- pf theme show [name] --full
22
+ pf.sh theme show [name] --full
23
23
  ```
24
24
 
25
25
  ### `/theme list`
@@ -27,7 +27,7 @@ pf theme show [name] --full
27
27
  List all available themes with current theme highlighted.
28
28
 
29
29
  ```bash
30
- pf theme list
30
+ pf.sh theme list
31
31
  ```
32
32
 
33
33
  Output shows current theme marked with `*` and tier brackets: `[S]` elite, `[A]` excellent, `[B]` strong, `[C]` good, `[D]` below average, `[U]` unbenchmarked.
@@ -37,12 +37,12 @@ Output shows current theme marked with `*` and tier brackets: `[S]` elite, `[A]`
37
37
  Set the active persona theme.
38
38
 
39
39
  ```bash
40
- pf theme set <name>
40
+ pf.sh theme set <name>
41
41
  ```
42
42
 
43
43
  After setting, refresh the current agent's persona:
44
44
  ```bash
45
- pf agent start "sm"
45
+ pf.sh agent start "sm"
46
46
  ```
47
47
 
48
48
  ### `/theme create <name> [--base <theme>] [--user]`
@@ -51,13 +51,13 @@ Create a new custom theme by copying from a base.
51
51
 
52
52
  ```bash
53
53
  # Create from default base (minimalist)
54
- pf theme create my-theme
54
+ pf.sh theme create my-theme
55
55
 
56
56
  # Create from specific base
57
- pf theme create my-theme --base blade-runner
57
+ pf.sh theme create my-theme --base blade-runner
58
58
 
59
59
  # Create as user-level theme (available across all projects)
60
- pf theme create my-theme --user
60
+ pf.sh theme create my-theme --user
61
61
  ```
62
62
 
63
63
  ### `/theme maker`
@@ -90,6 +90,6 @@ Interactive wizard for AI-driven theme creation. Supports three modes:
90
90
 
91
91
  <reference>
92
92
  - **Skill:** `.claude/skills/theme/skill.md`
93
- - **CLI:** `pf theme [list|show|set|create]`
93
+ - **CLI:** `pf.sh theme [list|show|set|create]`
94
94
  - **Config:** `.pennyfarthing/config.local.yaml`
95
95
  </reference>
@@ -5,7 +5,7 @@ description: UX Designer - User experience design and UI patterns
5
5
  <agent-activation>
6
6
  **FIRST:** Use Bash tool to run:
7
7
  ```bash
8
- pf agent start "ux-designer"
8
+ source .pennyfarthing/scripts/lib/env.sh && source "$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/run-pf.sh" && run_pf agent start "ux-designer"
9
9
  ```
10
10
  This loads your persona and agent context. Adopt the character shown in the output.
11
11
  </agent-activation>
@@ -7,7 +7,7 @@ description: Resume work or start new - smart entry point that picks up where yo
7
7
  <agent-activation>
8
8
  **FIRST:** Use Bash tool to run:
9
9
  ```bash
10
- pf agent start "sm"
10
+ source .pennyfarthing/scripts/lib/env.sh && source "$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/run-pf.sh" && run_pf agent start "sm"
11
11
  ```
12
12
  This loads your persona and agent context. Adopt the character shown in the output.
13
13
  </agent-activation>
@@ -1,19 +1,18 @@
1
- <gate name="confidence-sm" model="haiku">
1
+ <gate name="confidence" model="haiku">
2
2
 
3
3
  <purpose>
4
- Check whether the user's instruction to the SM agent is ambiguous or unclear.
5
- The SM agent handles story management, sprint coordination, and workflow routing.
4
+ Check whether the user's instruction to the current agent is ambiguous or unclear.
6
5
  Vague commands like "continue", "next", "start", or "do it" without a clear target
7
- (story ID, agent name, or specific action) risk the SM taking the wrong action.
8
- This gate evaluates confidence that the instruction has a single unambiguous interpretation.
6
+ risk the agent taking the wrong action. This gate evaluates confidence that the
7
+ instruction has a single unambiguous interpretation.
9
8
  </purpose>
10
9
 
11
10
  <pass>
12
- The instruction is clear and unambiguous. The SM agent can proceed confidently.
11
+ The instruction is clear and unambiguous. The agent can proceed confidently.
13
12
 
14
13
  Evaluate the instruction against these criteria:
15
- 1. **Target identified:** A story ID, agent name, or specific action is stated or obvious from context
16
- 2. **Intent clear:** The desired outcome (start work, finish story, check status, hand off) is unambiguous
14
+ 1. **Target identified:** A specific entity (story ID, file, component, action) is stated or obvious from context
15
+ 2. **Intent clear:** The desired outcome is unambiguous
17
16
  3. **No competing interpretations:** Only one reasonable reading of the instruction exists
18
17
 
19
18
  If the instruction is confident and clear, return:
@@ -21,28 +20,28 @@ If the instruction is confident and clear, return:
21
20
  ```yaml
22
21
  GATE_RESULT:
23
22
  status: pass
24
- gate: confidence-sm
25
- message: "Instruction is clear: {summary of what SM will do}"
23
+ gate: confidence
24
+ message: "Instruction is clear: {summary of what agent will do}"
26
25
  checks:
27
26
  - name: target
28
27
  status: pass
29
28
  detail: "{what the instruction targets}"
30
29
  - name: intent
31
30
  status: pass
32
- detail: "{what action the SM will take}"
31
+ detail: "{what action the agent will take}"
33
32
  ```
34
33
  </pass>
35
34
 
36
35
  <fail>
37
- The instruction is ambiguous. The SM agent should not guess — ask for clarification instead.
36
+ The instruction is ambiguous. The agent should not guess — ask for clarification instead.
38
37
 
39
38
  Identify which aspect is unclear and offer specific options the user likely meant:
40
39
 
41
- 1. **Missing target:** "continue" / "next" / "start" without specifying a story or action
42
- - Did you mean: start a specific story? Continue the current workflow? Check sprint status?
40
+ 1. **Missing target:** "continue" / "next" / "start" without specifying what
41
+ - List the 2-3 most likely targets given current context
43
42
 
44
43
  2. **Ambiguous scope:** "do the thing" / "handle it" without enough context
45
- - Did you mean: finish the current story? Start new work? Run the backlog?
44
+ - List the 2-3 most likely actions given current workflow state
46
45
 
47
46
  3. **Multiple interpretations:** The instruction could reasonably mean two or more different actions
48
47
  - List each interpretation and ask which one the user intended
@@ -52,7 +51,7 @@ Return with clarifying options so the user can specify their intent:
52
51
  ```yaml
53
52
  GATE_RESULT:
54
53
  status: fail
55
- gate: confidence-sm
54
+ gate: confidence
56
55
  message: "Instruction is ambiguous: {what is unclear}"
57
56
  checks:
58
57
  - name: target
@@ -64,7 +63,7 @@ GATE_RESULT:
64
63
  recovery:
65
64
  - "Did you mean: {option A}?"
66
65
  - "Did you mean: {option B}?"
67
- - "Specify a story ID or action to proceed"
66
+ - "Specify a target or action to proceed"
68
67
  ```
69
68
  </fail>
70
69
 
@@ -0,0 +1,75 @@
1
+ <gate name="dev-exit" model="haiku">
2
+
3
+ <purpose>
4
+ Composite gate for Dev handoff. Extends tests-pass with a debug code scan.
5
+ Runs after the Dev agent's implementation phase before review.
6
+ </purpose>
7
+
8
+ <ref gate="gates/tests-pass" />
9
+
10
+ <check name="no-debug-code">
11
+ No console.log, debugger statements, or .only() in changed files.
12
+ Search changed files (`git diff --name-only develop...HEAD`) for:
13
+ - `console.log` (not in DEV guard)
14
+ - `debugger`
15
+ - `.only(`
16
+ None found = pass.
17
+ </check>
18
+
19
+ <pass>
20
+ Run all checks from `gates/tests-pass` (test-suite, working-tree, branch-status),
21
+ then run the no-debug-code check.
22
+
23
+ If ALL pass, return:
24
+
25
+ ```yaml
26
+ GATE_RESULT:
27
+ status: pass
28
+ gate: dev-exit
29
+ message: "All {N} tests passing. Tree clean. No debug code. 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
+ - name: no-debug-code
41
+ status: pass
42
+ detail: "No debug patterns found in changed files"
43
+ ```
44
+ </pass>
45
+
46
+ <fail>
47
+ If ANY check fails, run all remaining checks (don't short-circuit) and return:
48
+
49
+ ```yaml
50
+ GATE_RESULT:
51
+ status: fail
52
+ gate: dev-exit
53
+ message: "Gate failed: {summary of failures}"
54
+ checks:
55
+ - name: test-suite
56
+ status: pass | fail
57
+ detail: "{test results or failure list}"
58
+ - name: working-tree
59
+ status: pass | fail
60
+ detail: "{clean or list of uncommitted files}"
61
+ - name: branch-status
62
+ status: pass | fail
63
+ detail: "{branch match or mismatch details}"
64
+ - name: no-debug-code
65
+ status: pass | fail
66
+ detail: "{clean or list of debug code locations}"
67
+ recovery:
68
+ - "Fix failing tests in: {file1}, {file2}"
69
+ - "Commit or stash uncommitted changes"
70
+ - "Remove debug code: {file:line patterns}"
71
+ - "Switch to correct branch: git checkout {expected-branch}"
72
+ ```
73
+ </fail>
74
+
75
+ </gate>
@@ -0,0 +1,49 @@
1
+ <gate name="merge-ready" model="haiku">
2
+
3
+ <purpose>
4
+ Block new work if non-draft pull requests are open. Open non-draft PRs represent
5
+ incomplete review cycles that must be resolved before starting new stories.
6
+ Draft PRs are allowed — they represent in-progress work not yet ready for review.
7
+ Extracted from the sm.md merge-gate.
8
+ </purpose>
9
+
10
+ <pass>
11
+ Run:
12
+ ```bash
13
+ gh pr list --state open --search "draft:false" --json number,title,url
14
+ ```
15
+
16
+ If the result is empty (no non-draft open PRs), return:
17
+
18
+ ```yaml
19
+ GATE_RESULT:
20
+ status: pass
21
+ gate: merge-ready
22
+ message: "No open non-draft PRs. Clear to start new work."
23
+ checks:
24
+ - name: no-open-prs
25
+ status: pass
26
+ detail: "Zero non-draft PRs found"
27
+ ```
28
+ </pass>
29
+
30
+ <fail>
31
+ If any non-draft PRs exist, list them and block:
32
+
33
+ ```yaml
34
+ GATE_RESULT:
35
+ status: fail
36
+ gate: merge-ready
37
+ message: "Blocked: {N} non-draft PR(s) open"
38
+ checks:
39
+ - name: no-open-prs
40
+ status: fail
41
+ detail: "Open PRs: {list of PR numbers and titles}"
42
+ recovery:
43
+ - "Merge or close open PRs before starting new work"
44
+ - "Use /reviewer to complete pending reviews"
45
+ - "Convert to draft if work is not ready: gh pr ready --undo {number}"
46
+ ```
47
+ </fail>
48
+
49
+ </gate>
@@ -0,0 +1,95 @@
1
+ <gate name="release-ready" model="haiku">
2
+
3
+ <purpose>
4
+ Composite gate for pre-deploy verification. Extends tests-pass with build,
5
+ version, and changelog checks. Extracts the pre-deploy checklist from devops.md.
6
+ </purpose>
7
+
8
+ <ref gate="gates/tests-pass" />
9
+
10
+ <check name="build-succeeds">
11
+ Build completes without errors.
12
+ Run `cd pennyfarthing && pnpm build`. Exit code 0 = pass.
13
+ </check>
14
+
15
+ <check name="version-bumped">
16
+ Package version has been incremented.
17
+ Compare current `package.json` version against latest git tag
18
+ (`git describe --tags --abbrev=0`). Current must be strictly greater.
19
+ </check>
20
+
21
+ <check name="changelog-updated">
22
+ CHANGELOG.md has an entry for the new version.
23
+ Grep `CHANGELOG.md` for the current package.json version string.
24
+ </check>
25
+
26
+ <pass>
27
+ Run all checks from `gates/tests-pass` (test-suite, working-tree, branch-status),
28
+ then run build-succeeds, version-bumped, and changelog-updated.
29
+
30
+ If ALL pass, return:
31
+
32
+ ```yaml
33
+ GATE_RESULT:
34
+ status: pass
35
+ gate: release-ready
36
+ message: "Release ready: v{version}. Tests green, build clean, changelog updated."
37
+ checks:
38
+ - name: test-suite
39
+ status: pass
40
+ detail: "{passed}/{total} tests passing"
41
+ - name: working-tree
42
+ status: pass
43
+ detail: "No uncommitted changes"
44
+ - name: branch-status
45
+ status: pass
46
+ detail: "On branch {branch}"
47
+ - name: build-succeeds
48
+ status: pass
49
+ detail: "Build completed successfully"
50
+ - name: version-bumped
51
+ status: pass
52
+ detail: "v{version} > v{tag}"
53
+ - name: changelog-updated
54
+ status: pass
55
+ detail: "CHANGELOG.md has entry for v{version}"
56
+ ```
57
+ </pass>
58
+
59
+ <fail>
60
+ If ANY check fails, report all results:
61
+
62
+ ```yaml
63
+ GATE_RESULT:
64
+ status: fail
65
+ gate: release-ready
66
+ message: "Not release ready: {summary}"
67
+ checks:
68
+ - name: test-suite
69
+ status: pass | fail
70
+ detail: "{test results or failure list}"
71
+ - name: working-tree
72
+ status: pass | fail
73
+ detail: "{clean or list of uncommitted files}"
74
+ - name: branch-status
75
+ status: pass | fail
76
+ detail: "{branch info}"
77
+ - name: build-succeeds
78
+ status: pass | fail
79
+ detail: "{build status or error summary}"
80
+ - name: version-bumped
81
+ status: pass | fail
82
+ detail: "{version comparison or same-version warning}"
83
+ - name: changelog-updated
84
+ status: pass | fail
85
+ detail: "{changelog status}"
86
+ recovery:
87
+ - "Fix failing tests before release"
88
+ - "Commit or stash uncommitted changes"
89
+ - "Resolve build errors"
90
+ - "Run: npm version patch|minor|major"
91
+ - "Add changelog entry for v{version}"
92
+ ```
93
+ </fail>
94
+
95
+ </gate>