@pennyfarthing/core 10.0.3 → 10.1.0

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 (282) hide show
  1. package/README.md +9 -7
  2. package/package.json +7 -1
  3. package/packages/core/dist/cli/commands/cyclist.d.ts +5 -1
  4. package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -1
  5. package/packages/core/dist/cli/commands/cyclist.js +4 -4
  6. package/packages/core/dist/cli/commands/cyclist.js.map +1 -1
  7. package/packages/core/dist/cli/commands/cyclist.test.js +2 -2
  8. package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -1
  9. package/packages/core/dist/cli/commands/doctor-legacy.test.js +17 -16
  10. package/packages/core/dist/cli/commands/doctor-legacy.test.js.map +1 -1
  11. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
  12. package/packages/core/dist/cli/commands/doctor.js +251 -4
  13. package/packages/core/dist/cli/commands/doctor.js.map +1 -1
  14. package/packages/core/dist/cli/commands/init.d.ts +7 -0
  15. package/packages/core/dist/cli/commands/init.d.ts.map +1 -1
  16. package/packages/core/dist/cli/commands/init.js +43 -7
  17. package/packages/core/dist/cli/commands/init.js.map +1 -1
  18. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  19. package/packages/core/dist/cli/commands/update.js +26 -0
  20. package/packages/core/dist/cli/commands/update.js.map +1 -1
  21. package/packages/core/dist/cli/index.js +1 -1
  22. package/packages/core/dist/cli/index.js.map +1 -1
  23. package/packages/core/dist/cli/ocean-profiles.test.js +1 -1
  24. package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -1
  25. package/packages/core/dist/cli/utils/files.d.ts +10 -0
  26. package/packages/core/dist/cli/utils/files.d.ts.map +1 -1
  27. package/packages/core/dist/cli/utils/files.js +35 -0
  28. package/packages/core/dist/cli/utils/files.js.map +1 -1
  29. package/packages/core/dist/cli/utils/python.d.ts +22 -0
  30. package/packages/core/dist/cli/utils/python.d.ts.map +1 -0
  31. package/packages/core/dist/cli/utils/python.js +102 -0
  32. package/packages/core/dist/cli/utils/python.js.map +1 -0
  33. package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
  34. package/packages/core/dist/cli/utils/settings.js +10 -0
  35. package/packages/core/dist/cli/utils/settings.js.map +1 -1
  36. package/packages/core/dist/scripts/generate-report.d.ts.map +1 -1
  37. package/packages/core/dist/scripts/generate-report.js +11 -7
  38. package/packages/core/dist/scripts/generate-report.js.map +1 -1
  39. package/packages/core/dist/scripts/generate-spider-report.d.ts.map +1 -1
  40. package/packages/core/dist/scripts/generate-spider-report.js +12 -8
  41. package/packages/core/dist/scripts/generate-spider-report.js.map +1 -1
  42. package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -1
  43. package/packages/core/dist/scripts/generate-spider.js +6 -4
  44. package/packages/core/dist/scripts/generate-spider.js.map +1 -1
  45. package/packages/core/dist/scripts/generate-spider.test.js +2 -2
  46. package/packages/core/dist/scripts/generate-spider.test.js.map +1 -1
  47. package/pennyfarthing-dist/agents/README.md +1 -3
  48. package/pennyfarthing-dist/agents/architect.md +0 -6
  49. package/pennyfarthing-dist/agents/devops.md +0 -6
  50. package/pennyfarthing-dist/agents/orchestrator.md +0 -6
  51. package/pennyfarthing-dist/agents/pm.md +1 -7
  52. package/pennyfarthing-dist/agents/sm-finish.md +1 -1
  53. package/pennyfarthing-dist/agents/sm-setup.md +2 -2
  54. package/pennyfarthing-dist/agents/sm.md +4 -11
  55. package/pennyfarthing-dist/commands/architect.md +11 -3
  56. package/pennyfarthing-dist/commands/close-epic.md +24 -131
  57. package/pennyfarthing-dist/commands/create-theme.md +14 -24
  58. package/pennyfarthing-dist/commands/dev.md +11 -3
  59. package/pennyfarthing-dist/commands/devops.md +11 -3
  60. package/pennyfarthing-dist/commands/health-check.md +1 -3
  61. package/pennyfarthing-dist/commands/help.md +8 -12
  62. package/pennyfarthing-dist/commands/list-themes.md +14 -16
  63. package/pennyfarthing-dist/commands/orchestrator.md +11 -3
  64. package/pennyfarthing-dist/commands/parallel-work.md +1 -3
  65. package/pennyfarthing-dist/commands/pm.md +11 -3
  66. package/pennyfarthing-dist/commands/prime.md +6 -6
  67. package/pennyfarthing-dist/commands/repo-status.md +2 -2
  68. package/pennyfarthing-dist/commands/reviewer.md +11 -3
  69. package/pennyfarthing-dist/commands/run-ci.md +1 -1
  70. package/pennyfarthing-dist/commands/set-theme.md +14 -51
  71. package/pennyfarthing-dist/commands/setup.md +1 -1
  72. package/pennyfarthing-dist/commands/show-theme.md +14 -16
  73. package/pennyfarthing-dist/commands/sm.md +11 -3
  74. package/pennyfarthing-dist/commands/sprint.md +8 -8
  75. package/pennyfarthing-dist/commands/tea.md +11 -3
  76. package/pennyfarthing-dist/commands/tech-writer.md +11 -3
  77. package/pennyfarthing-dist/commands/theme-maker.md +14 -671
  78. package/pennyfarthing-dist/commands/theme.md +95 -0
  79. package/pennyfarthing-dist/commands/ux-designer.md +11 -3
  80. package/pennyfarthing-dist/commands/work.md +3 -5
  81. package/pennyfarthing-dist/guides/agent-coordination.md +11 -13
  82. package/pennyfarthing-dist/guides/agent-template-tactical.md +2 -3
  83. package/pennyfarthing-dist/guides/command-tag-taxonomy.md +212 -0
  84. package/pennyfarthing-dist/guides/hooks.md +5 -5
  85. package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +3 -3
  86. package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +9 -59
  87. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +4 -5
  88. package/pennyfarthing-dist/guides/prime.md +2 -2
  89. package/pennyfarthing-dist/guides/skill-schema.md +25 -26
  90. package/pennyfarthing-dist/guides/xml-tags.md +2 -2
  91. package/pennyfarthing-dist/scripts/README.md +2 -2
  92. package/pennyfarthing-dist/scripts/core/agent-session.sh +6 -2
  93. package/pennyfarthing-dist/scripts/core/prime.sh +8 -10
  94. package/pennyfarthing-dist/scripts/git/git-status-all.sh +1 -1
  95. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +8 -6
  96. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +3 -3
  97. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +14 -12
  98. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +4 -3
  99. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +11 -5
  100. package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +1 -1
  101. package/pennyfarthing-dist/scripts/misc/README.md +1 -1
  102. package/pennyfarthing-dist/scripts/misc/repo-utils.sh +3 -3
  103. package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +1 -2
  104. package/pennyfarthing-dist/scripts/sprint/README.md +32 -17
  105. package/pennyfarthing-dist/scripts/story/README.md +1 -1
  106. package/pennyfarthing-dist/scripts/test/test-setup.sh +1 -1
  107. package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +5 -5
  108. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +3 -79
  109. package/pennyfarthing-dist/scripts/theme/README.md +1 -1
  110. package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +0 -1
  111. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +62 -17
  112. package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +2 -2
  113. package/pennyfarthing-dist/skills/skill-registry.yaml +41 -28
  114. package/pennyfarthing-dist/skills/sprint/skill.md +386 -68
  115. package/pennyfarthing-dist/skills/story/skill.md +14 -206
  116. package/pennyfarthing-dist/skills/theme/skill.md +290 -75
  117. package/pennyfarthing-dist/skills/theme-creation/SKILL.md +23 -166
  118. package/pennyfarthing-dist/skills/workflow/skill.md +4 -4
  119. package/pennyfarthing-dist/templates/agent-scopes.yaml.template +0 -11
  120. package/pennyfarthing-dist/templates/auto-load-sm.sh.template +14 -0
  121. package/pennyfarthing-dist/templates/settings.local.json.template +9 -0
  122. package/pennyfarthing-dist/workflows/2party-tdd.yaml +399 -0
  123. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +42 -25
  124. package/pennyfarthing-dist/workflows/git-cleanup.yaml +1 -1
  125. package/pennyfarthing-dist/workflows/project-setup/steps/step-10-complete.md +1 -1
  126. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  127. package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
  128. package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  129. package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
  130. package/pennyfarthing_scripts/cli.py +15 -0
  131. package/pennyfarthing_scripts/codemarkers/__init__.py +19 -0
  132. package/pennyfarthing_scripts/codemarkers/__main__.py +6 -0
  133. package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
  134. package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
  135. package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
  136. package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
  137. package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
  138. package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
  139. package/pennyfarthing_scripts/codemarkers/analyze.py +326 -0
  140. package/pennyfarthing_scripts/codemarkers/cli.py +129 -0
  141. package/pennyfarthing_scripts/codemarkers/formatters.py +89 -0
  142. package/pennyfarthing_scripts/codemarkers/models.py +45 -0
  143. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  144. package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
  145. package/pennyfarthing_scripts/common/config.py +2 -1
  146. package/pennyfarthing_scripts/complexity/__init__.py +15 -0
  147. package/pennyfarthing_scripts/complexity/__main__.py +6 -0
  148. package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
  149. package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
  150. package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
  151. package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
  152. package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
  153. package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
  154. package/pennyfarthing_scripts/complexity/analyze.py +207 -0
  155. package/pennyfarthing_scripts/complexity/cli.py +78 -0
  156. package/pennyfarthing_scripts/complexity/formatters.py +64 -0
  157. package/pennyfarthing_scripts/complexity/models.py +32 -0
  158. package/pennyfarthing_scripts/deadcode/__init__.py +6 -0
  159. package/pennyfarthing_scripts/deadcode/__main__.py +6 -0
  160. package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
  161. package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
  162. package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
  163. package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
  164. package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
  165. package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
  166. package/pennyfarthing_scripts/deadcode/analyze.py +323 -0
  167. package/pennyfarthing_scripts/deadcode/cli.py +163 -0
  168. package/pennyfarthing_scripts/deadcode/formatters.py +106 -0
  169. package/pennyfarthing_scripts/deadcode/models.py +54 -0
  170. package/pennyfarthing_scripts/dependencies/__init__.py +20 -0
  171. package/pennyfarthing_scripts/dependencies/__main__.py +5 -0
  172. package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
  173. package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
  174. package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
  175. package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
  176. package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
  177. package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
  178. package/pennyfarthing_scripts/dependencies/analyze.py +155 -0
  179. package/pennyfarthing_scripts/dependencies/cli.py +72 -0
  180. package/pennyfarthing_scripts/dependencies/formatters.py +63 -0
  181. package/pennyfarthing_scripts/dependencies/models.py +39 -0
  182. package/pennyfarthing_scripts/healthscore/__init__.py +21 -0
  183. package/pennyfarthing_scripts/healthscore/__main__.py +6 -0
  184. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  185. package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  186. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  187. package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
  188. package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
  189. package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-314.pyc +0 -0
  190. package/pennyfarthing_scripts/healthscore/analyze.py +161 -0
  191. package/pennyfarthing_scripts/healthscore/cli.py +76 -0
  192. package/pennyfarthing_scripts/healthscore/formatters.py +46 -0
  193. package/pennyfarthing_scripts/healthscore/models.py +44 -0
  194. package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
  195. package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
  196. package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
  197. package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
  198. package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
  199. package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-314.pyc +0 -0
  200. package/pennyfarthing_scripts/hotspots/analyze.py +28 -1
  201. package/pennyfarthing_scripts/hotspots/cli.py +11 -9
  202. package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
  203. package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
  204. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
  205. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
  206. package/pennyfarthing_scripts/jira/__pycache__/create.cpython-314.pyc +0 -0
  207. package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-314.pyc +0 -0
  208. package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
  209. package/pennyfarthing_scripts/jira/bidirectional.py +42 -15
  210. package/pennyfarthing_scripts/jira/cli.py +78 -1
  211. package/pennyfarthing_scripts/jira/client.py +28 -0
  212. package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
  213. package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
  214. package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
  215. package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
  216. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  217. package/pennyfarthing_scripts/prime/workflow.py +5 -3
  218. package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-314.pyc +0 -0
  219. package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  220. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  221. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  222. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  223. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  224. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  225. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  226. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  227. package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-314.pyc +0 -0
  228. package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-314.pyc +0 -0
  229. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  230. package/pennyfarthing_scripts/sprint/archive.py +63 -6
  231. package/pennyfarthing_scripts/sprint/archive_epic.py +198 -85
  232. package/pennyfarthing_scripts/sprint/cli.py +1565 -65
  233. package/pennyfarthing_scripts/sprint/epic_add.py +173 -0
  234. package/pennyfarthing_scripts/sprint/loader.py +46 -2
  235. package/pennyfarthing_scripts/sprint/story_add.py +202 -27
  236. package/pennyfarthing_scripts/sprint/story_finish.py +211 -0
  237. package/pennyfarthing_scripts/sprint/validate_cmd.py +44 -5
  238. package/pennyfarthing_scripts/sprint/validator.py +13 -3
  239. package/pennyfarthing_scripts/sprint/work.py +43 -3
  240. package/pennyfarthing_scripts/sprint/yaml_io.py +124 -15
  241. package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
  242. package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
  243. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
  244. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
  245. package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
  246. package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
  247. package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
  248. package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
  249. package/pennyfarthing_scripts/tests/test_codemarkers.py +682 -0
  250. package/pennyfarthing_scripts/tests/test_healthscore.py +524 -0
  251. package/pennyfarthing_scripts/tests/test_sprint_package.py +166 -0
  252. package/pennyfarthing_scripts/tests/test_yaml_io.py +117 -0
  253. package/pennyfarthing_scripts/theme/__init__.py +5 -0
  254. package/pennyfarthing_scripts/theme/__main__.py +6 -0
  255. package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-314.pyc +0 -0
  256. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
  257. package/pennyfarthing_scripts/theme/cli.py +286 -0
  258. package/scripts/README.md +53 -0
  259. package/scripts/postinstall.cjs +34 -0
  260. package/pennyfarthing-dist/agents/workflow-status-check.md +0 -96
  261. package/pennyfarthing-dist/scripts/sprint/archive-story.sh +0 -133
  262. package/pennyfarthing-dist/scripts/sprint/available-stories.sh +0 -91
  263. package/pennyfarthing-dist/scripts/sprint/check-story.sh +0 -158
  264. package/pennyfarthing-dist/scripts/sprint/get-epic-field.sh +0 -52
  265. package/pennyfarthing-dist/scripts/sprint/get-story-field.sh +0 -63
  266. package/pennyfarthing-dist/scripts/sprint/list-future.sh +0 -145
  267. package/pennyfarthing-dist/scripts/sprint/new-sprint.sh +0 -110
  268. package/pennyfarthing-dist/scripts/sprint/promote-epic.sh +0 -148
  269. package/pennyfarthing-dist/scripts/sprint/sprint-common.sh +0 -415
  270. package/pennyfarthing-dist/scripts/sprint/sprint-info.sh +0 -33
  271. package/pennyfarthing-dist/scripts/sprint/sprint-metrics.sh +0 -230
  272. package/pennyfarthing-dist/scripts/sprint/sprint-status.sh +0 -134
  273. package/pennyfarthing-dist/scripts/sprint/validate-sprint-yaml.sh +0 -139
  274. package/pennyfarthing-dist/skills/sprint/scripts/archive-story.sh +0 -101
  275. package/pennyfarthing-dist/skills/sprint/scripts/available-stories.sh +0 -97
  276. package/pennyfarthing-dist/skills/sprint/scripts/check-story.sh +0 -164
  277. package/pennyfarthing-dist/skills/sprint/scripts/create-jira-epic.sh +0 -23
  278. package/pennyfarthing-dist/skills/sprint/scripts/new-sprint.sh +0 -116
  279. package/pennyfarthing-dist/skills/sprint/scripts/promote-epic.sh +0 -164
  280. package/pennyfarthing-dist/skills/sprint/scripts/sprint-info.sh +0 -39
  281. package/pennyfarthing-dist/skills/sprint/scripts/sprint-status.sh +0 -147
  282. package/pennyfarthing-dist/skills/sprint/scripts/sync-epic-jira.sh +0 -23
@@ -52,8 +52,8 @@ Prime selects a context tier based on session state to manage token overhead:
52
52
  ## Invocation
53
53
 
54
54
  ```bash
55
- # From agent commands (via CLI)
56
- python3 -m pennyfarthing_scripts.cli agent start "<agent>" --quiet
55
+ # From agent commands (via pf CLI)
56
+ pf agent start "<agent>" --quiet
57
57
 
58
58
  # TypeScript API (from Cyclist)
59
59
  getPrimeContext(agentName, projectDir)
@@ -146,7 +146,7 @@ args: "[arg1|arg2]" # Optional: argument summary
146
146
  **Example:**
147
147
  ```xml
148
148
  <run>
149
- .pennyfarthing/scripts/sprint/sprint-status.sh [filter]
149
+ pf sprint status [filter]
150
150
  </run>
151
151
  ```
152
152
 
@@ -195,7 +195,7 @@ args: "[arg1|arg2]" # Optional: argument summary
195
195
  **Example:**
196
196
  ```xml
197
197
  <example>
198
- .pennyfarthing/scripts/sprint/check-story.sh MSSCI-12038
198
+ pf sprint check MSSCI-12038
199
199
  # Returns: {"type": "story", "available": true, "title": "...", ...}
200
200
  </example>
201
201
  ```
@@ -272,68 +272,67 @@ Here's a well-structured skill file following the schema:
272
272
 
273
273
  ```markdown
274
274
  ---
275
- name: story
275
+ name: sprint
276
276
  description: |
277
- Story creation, sizing, and completion workflow. Use when creating new stories,
278
- estimating points, or finishing completed work.
279
- args: "[create|size|finish]"
277
+ Sprint status, backlog, story, and epic management. Use when checking sprint
278
+ status, managing stories, or working with epics.
279
+ args: "[status|backlog|work|story|epic|standalone]"
280
280
  ---
281
281
 
282
- # /story - Story Management
282
+ # /sprint - Sprint Management
283
283
 
284
284
  <critical>
285
- All story operations require SM agent activation.
286
- **Never** create stories outside of sprint context.
285
+ Never manually edit sprint YAML. Use the provided commands.
287
286
  </critical>
288
287
 
289
288
  ## Commands
290
289
 
291
- ### `/story create <title>`
290
+ ### `/sprint story add <epic-id> "<title>" <points>`
292
291
 
293
- Create a new story in the current epic.
292
+ Add a new story to an epic.
294
293
 
295
294
  <run>
296
- .pennyfarthing/scripts/story/create-story.sh "<title>"
295
+ pf sprint story add <epic-id> "<title>" <points>
297
296
  </run>
298
297
 
299
298
  <args>
300
299
  | Arg | Required | Description |
301
300
  |-----|----------|-------------|
301
+ | `epic-id` | Yes | Parent epic (e.g., `epic-76`) |
302
302
  | `title` | Yes | Story title (quoted if contains spaces) |
303
+ | `points` | Yes | Story points |
303
304
  </args>
304
305
 
305
306
  <example>
306
- .pennyfarthing/scripts/story/create-story.sh "Add user authentication"
307
- # Returns: {"id": "36-5", "title": "Add user authentication", "status": "backlog"}
307
+ pf sprint story add epic-76 "Add user authentication" 3
308
308
  </example>
309
309
 
310
310
  <output>
311
- JSON with new story ID, title, and initial status.
312
- Story is created in backlog status within the active epic.
311
+ Confirmation with new story ID and details.
313
312
  </output>
314
313
 
315
314
  <when>
316
- After creating, use `/story size <id>` to estimate points.
315
+ After creating, use `/sprint story size` for sizing guidelines.
317
316
  </when>
318
317
 
319
318
  ---
320
319
 
321
- ### `/story finish <story-id>`
320
+ ### `/sprint story finish <story-id>`
322
321
 
323
322
  Complete a story after PR merge.
324
323
 
325
324
  <run>
326
- .pennyfarthing/scripts/story/finish-story.sh <story-id>
325
+ pf sprint story finish <story-id>
327
326
  </run>
328
327
 
329
328
  <args>
330
329
  | Arg | Required | Description |
331
330
  |-----|----------|-------------|
332
- | `story-id` | Yes | Story to finish (e.g., `36-5`) |
331
+ | `story-id` | Yes | Story to finish (e.g., `MSSCI-12052`) |
333
332
  </args>
334
333
 
335
334
  <example>
336
- .pennyfarthing/scripts/story/finish-story.sh 36-5
335
+ pf sprint story finish MSSCI-12052
337
336
  # Archives story, updates Jira, cleans session files
338
337
  </example>
339
338
 
@@ -358,11 +357,11 @@ d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$
358
357
 
359
358
  ## Quick Reference
360
359
 
361
- | Command | Script |
362
- |---------|--------|
363
- | `/story create <title>` | `create-story.sh` |
364
- | `/story size <id>` | `size-story.sh` |
365
- | `/story finish <id>` | `finish-story.sh` |
360
+ | Command | Script/CLI |
361
+ |---------|------------|
362
+ | `/sprint story add ...` | `sprint story add` |
363
+ | `/sprint story size` | `sprint story size` |
364
+ | `/sprint story finish <id>` | `sprint story finish` |
366
365
 
367
366
  ## Related Skills
368
367
 
@@ -447,7 +447,7 @@ Tags used in skill files (`skills/{name}/SKILL.md`) for command documentation.
447
447
 
448
448
  ```markdown
449
449
  <run>
450
- .pennyfarthing/scripts/sprint/sprint-status.sh [filter]
450
+ pf sprint status [filter]
451
451
  </run>
452
452
  ```
453
453
 
@@ -473,7 +473,7 @@ Tags used in skill files (`skills/{name}/SKILL.md`) for command documentation.
473
473
 
474
474
  ```markdown
475
475
  <example>
476
- .pennyfarthing/scripts/sprint/check-story.sh MSSCI-12038
476
+ pf sprint check MSSCI-12038
477
477
  # Returns: {"type": "story", "available": true}
478
478
  </example>
479
479
  ```
@@ -8,7 +8,7 @@ Scripts are organized into categorical subdirectories. **Full paths are required
8
8
  scripts/
9
9
  ├── core/ # Essential scripts (agent-session.sh)
10
10
  ├── workflow/ # Workflow mechanics (finish-story.sh, check.sh)
11
- ├── sprint/ # Sprint YAML operations (sprint-status.sh)
11
+ ├── sprint/ # Sprint YAML operations (migrated to pf sprint CLI)
12
12
  ├── story/ # Story operations (create-story.sh)
13
13
  ├── jira/ # Jira integration (jira-claim-story.sh)
14
14
  ├── git/ # Git operations (release.sh, worktree-manager.sh)
@@ -27,7 +27,7 @@ Scripts are invoked directly with **full category paths**:
27
27
  ```bash
28
28
  # From project root
29
29
  .pennyfarthing/scripts/core/agent-session.sh start sm
30
- .pennyfarthing/scripts/sprint/sprint-status.sh
30
+ pf sprint status
31
31
  .pennyfarthing/scripts/jira/jira-claim-story.sh MSSCI-12345
32
32
  .pennyfarthing/scripts/workflow/finish-story.sh MSSCI-12345
33
33
  ```
@@ -91,7 +91,7 @@ check_theme_version() {
91
91
  echo "" >&2
92
92
  echo "Warning: Theme '${theme_name}' was created with Pennyfarthing ${theme_version}" >&2
93
93
  echo " Current version: ${current_version} - agent roles may have changed." >&2
94
- echo " Run '/theme-maker --update ${theme_name}' to review." >&2
94
+ echo " Run '/theme maker' to review and update." >&2
95
95
  echo "" >&2
96
96
  fi
97
97
 
@@ -232,7 +232,11 @@ case "$1" in
232
232
  PRIME_ARGS+=(--no-persona)
233
233
  fi
234
234
 
235
- python3 -m pennyfarthing_scripts.prime "${PRIME_ARGS[@]}"
235
+ if command -v pf &>/dev/null; then
236
+ pf prime "${PRIME_ARGS[@]}"
237
+ else
238
+ python3 -m pennyfarthing_scripts.prime "${PRIME_ARGS[@]}"
239
+ fi
236
240
  ;;
237
241
  stop)
238
242
  # Use provided session ID, fall back to SESSION_ID env var
@@ -2,29 +2,27 @@
2
2
  # prime.sh - Load essential project context at agent activation
3
3
  # Usage: prime.sh [--minimal] [--full] [--quiet] [--agent <name>]
4
4
  #
5
- # Thin wrapper around python -m pennyfarthing_scripts.prime
5
+ # Uses the `pf` CLI (installed via uv/pipx during pennyfarthing init).
6
+ # Falls back to python3 -m with PYTHONPATH if pf is not available.
6
7
 
7
- # Find the package root (where pennyfarthing_scripts lives)
8
- # Works for both npm installs (node_modules/@pennyfarthing/core) and local dev
9
- # Use pwd -P to resolve symlinks in the path (handles symlinked parent dirs)
8
+ # Prefer pf CLI if available
9
+ if command -v pf &>/dev/null; then
10
+ exec pf prime "$@"
11
+ fi
12
+
13
+ # Fallback: find pennyfarthing_scripts via PYTHONPATH
10
14
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
11
15
  PACKAGE_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd -P)"
12
16
 
13
- # Fallback: if pennyfarthing_scripts not found at expected location,
14
- # look in node_modules (handles edge cases like stale copies)
15
17
  if [[ ! -d "$PACKAGE_ROOT/pennyfarthing_scripts" ]]; then
16
- # Find project root by looking for .pennyfarthing marker
17
18
  PROJECT_ROOT="$PWD"
18
19
  while [[ ! -d "$PROJECT_ROOT/.pennyfarthing" ]] && [[ "$PROJECT_ROOT" != "/" ]]; do
19
20
  PROJECT_ROOT="$(dirname "$PROJECT_ROOT")"
20
21
  done
21
- # Try node_modules location
22
22
  if [[ -d "$PROJECT_ROOT/node_modules/@pennyfarthing/core/pennyfarthing_scripts" ]]; then
23
23
  PACKAGE_ROOT="$PROJECT_ROOT/node_modules/@pennyfarthing/core"
24
24
  fi
25
25
  fi
26
26
 
27
- # Set PYTHONPATH so Python can find pennyfarthing_scripts
28
27
  export PYTHONPATH="${PACKAGE_ROOT}:${PYTHONPATH:-}"
29
-
30
28
  exec python3 -m pennyfarthing_scripts.prime "$@"
@@ -3,7 +3,7 @@
3
3
  # Usage: ./scripts/git-status-all.sh [--brief]
4
4
  #
5
5
  # Shows: branch, status, unpushed commits for all repos
6
- # Reads repo configuration from .claude/project/repos.yaml
6
+ # Reads repo configuration from .pennyfarthing/repos.yaml
7
7
 
8
8
  set -e
9
9
 
@@ -1,10 +1,11 @@
1
1
  #!/bin/bash
2
- # install-git-hooks.sh - Install Pennyfarthing git hooks for dogfooding
2
+ # install-git-hooks.sh - Install Pennyfarthing git hooks for framework development
3
3
  #
4
4
  # Usage: ./pennyfarthing-dist/scripts/install-git-hooks.sh
5
5
  #
6
- # For dogfooding only. Clients use `pennyfarthing init` which copies hooks
7
- # from node_modules. This script creates symlinks for development.
6
+ # For the pennyfarthing framework repo and orchestrator repos that inline it.
7
+ # End-user projects use `pennyfarthing init` which copies hooks from node_modules.
8
+ # This script creates symlinks so hook changes in pennyfarthing-dist/ take effect immediately.
8
9
 
9
10
  set -euo pipefail
10
11
 
@@ -14,10 +15,11 @@ source "$SCRIPT_DIR/../lib/find-root.sh"
14
15
  HOOKS_SOURCE="$PROJECT_ROOT/pennyfarthing-dist/scripts/hooks"
15
16
  HOOKS_DEST="$PROJECT_ROOT/.git/hooks"
16
17
 
17
- # Check we're in the pennyfarthing repo (dogfooding)
18
+ # Check we're in a repo with pennyfarthing-dist (framework or orchestrator)
18
19
  if [[ ! -d "$PROJECT_ROOT/pennyfarthing-dist" ]]; then
19
- echo "Error: This script is for dogfooding only (pennyfarthing repo)"
20
- echo " Clients should use: pennyfarthing init"
20
+ echo "Error: This script requires pennyfarthing-dist/ at the project root"
21
+ echo " (framework repo or orchestrator with inlined pennyfarthing/)"
22
+ echo " End-user projects should use: pennyfarthing init"
21
23
  exit 1
22
24
  fi
23
25
 
@@ -3,7 +3,7 @@
3
3
  # Usage: worktree-manager.sh {create|remove|list|status|ports|cd} [args]
4
4
  #
5
5
  # Configuration (choose one):
6
- # 1. repos.yaml: Define repos in .claude/project/repos.yaml (recommended)
6
+ # 1. repos.yaml: Define repos in .pennyfarthing/repos.yaml (recommended)
7
7
  # 2. Legacy env vars: Set API_REPO and UI_REPO in .claude/project/hooks/setup-env.sh
8
8
 
9
9
  set -e
@@ -109,7 +109,7 @@ load_repos_config
109
109
  if [ "$(get_repo_count)" -eq 0 ]; then
110
110
  echo "❌ Error: No repositories configured"
111
111
  echo ""
112
- echo "Option 1: Create .claude/project/repos.yaml (recommended for multi-repo projects)"
112
+ echo "Option 1: Create .pennyfarthing/repos.yaml (recommended for multi-repo projects)"
113
113
  echo "Option 2: Set API_REPO and UI_REPO in .claude/project/hooks/setup-env.sh"
114
114
  exit 1
115
115
  fi
@@ -161,7 +161,7 @@ Repos Filter (third argument):
161
161
  repo1,repo2 - Comma-separated list of specific repo names
162
162
 
163
163
  Configuration:
164
- Option 1 (recommended): Create .claude/project/repos.yaml
164
+ Option 1 (recommended): Create .pennyfarthing/repos.yaml
165
165
  Option 2 (legacy): Set API_REPO and UI_REPO environment variables
166
166
 
167
167
  Session Files:
@@ -6,28 +6,30 @@
6
6
  # story branch is merged and automatically updating the sprint YAML status.
7
7
  #
8
8
  # Installation:
9
- # Installed to .git/hooks/post-merge by pennyfarthing init or doctor --fix
9
+ # End-user projects: pennyfarthing init (copies to .git/hooks/)
10
+ # Framework/orchestrator: install-git-hooks.sh (symlinks to pennyfarthing-dist/)
10
11
  #
11
12
  # Dependencies:
12
13
  # - yq (for YAML manipulation)
13
- # - sprint-common.sh (for shared sprint functions)
14
+ # (sprint-common.sh removed all functions defined locally)
14
15
 
15
16
  set -uo pipefail
16
17
 
17
- # Self-locate (resolve symlink first for .git/hooks/ symlinks)
18
+ # Find project root
19
+ # Try find-root.sh via symlink resolution first, then fall back to .git location
18
20
  REAL_SCRIPT="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BASH_SOURCE[0]:-$0}" 2>/dev/null || echo "${BASH_SOURCE[0]:-$0}")"
19
- source "$(dirname "$REAL_SCRIPT")/../lib/find-root.sh"
20
-
21
- # PROJECT_ROOT is now set by find-root.sh
21
+ FIND_ROOT="$(dirname "$REAL_SCRIPT")/../lib/find-root.sh"
22
+ if [[ -f "$FIND_ROOT" ]]; then
23
+ source "$FIND_ROOT"
24
+ else
25
+ # Running as a copy in .git/hooks/ — derive PROJECT_ROOT from git dir
26
+ PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")/../.." && pwd)"
27
+ export PROJECT_ROOT
28
+ fi
22
29
  SESSION_DIR="$PROJECT_ROOT/.session"
23
30
  SPRINT_FILE="$PROJECT_ROOT/sprint/current-sprint.yaml"
24
31
 
25
- # Source sprint-common.sh for shared functions
26
- SPRINT_COMMON="$PROJECT_ROOT/.pennyfarthing/scripts/sprint/sprint-common.sh"
27
- if [[ -f "$SPRINT_COMMON" ]]; then
28
- # shellcheck source=/dev/null
29
- source "$SPRINT_COMMON"
30
- fi
32
+ # Note: sprint-common.sh removed all needed functions are defined locally below
31
33
 
32
34
  # extract_story_id BRANCH_NAME
33
35
  # Extract story ID from branch name pattern feat/X-Y-*
@@ -8,8 +8,8 @@
8
8
  # 3. Validates sprint YAML files when sprint/*.yaml is modified
9
9
  #
10
10
  # Installation:
11
- # Installed to .git/hooks/pre-commit by pennyfarthing init or doctor --fix
12
- # Or symlink: ln -sf ../../pennyfarthing-dist/scripts/hooks/pre-commit.sh .git/hooks/pre-commit
11
+ # End-user projects: pennyfarthing init (copies to .git/hooks/)
12
+ # Framework/orchestrator: install-git-hooks.sh (symlinks to pennyfarthing-dist/)
13
13
 
14
14
  set -uo pipefail
15
15
 
@@ -114,7 +114,8 @@ fi
114
114
 
115
115
  SPRINT_YAML_FILES=$(git diff --cached --name-only -- 'sprint/*.yaml' 'sprint/archive/*.yaml' 2>/dev/null \
116
116
  | grep -v 'sprint-template\.yaml$' \
117
- | grep -v 'sprint/completed\.yaml$' || true)
117
+ | grep -v 'sprint/completed\.yaml$' \
118
+ | grep -v 'sprint/context/archived/' || true)
118
119
 
119
120
  if [[ -n "$SPRINT_YAML_FILES" ]]; then
120
121
  echo "Sprint YAML files staged for commit:"
@@ -4,15 +4,21 @@
4
4
  # Checks if sprint files were modified and reminds to sync to Jira.
5
5
  #
6
6
  # Installation:
7
- # Installed to .git/hooks/pre-push by pennyfarthing init or doctor --fix
8
- # Or symlink: ln -sf ../../pennyfarthing-dist/scripts/hooks/pre-push.sh .git/hooks/pre-push
7
+ # End-user projects: pennyfarthing init (copies to .git/hooks/)
8
+ # Framework/orchestrator: install-git-hooks.sh (symlinks to pennyfarthing-dist/)
9
9
 
10
10
  set -uo pipefail
11
11
 
12
- # Self-locate (resolve symlink first for .git/hooks/ symlinks)
12
+ # Find project root
13
+ # Try find-root.sh via symlink resolution first, then fall back to .git location
13
14
  REAL_SCRIPT="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BASH_SOURCE[0]:-$0}" 2>/dev/null || echo "${BASH_SOURCE[0]:-$0}")"
14
- if ! source "$(dirname "$REAL_SCRIPT")/../lib/find-root.sh" 2>/dev/null; then
15
- exit 0
15
+ FIND_ROOT="$(dirname "$REAL_SCRIPT")/../lib/find-root.sh"
16
+ if [[ -f "$FIND_ROOT" ]]; then
17
+ source "$FIND_ROOT"
18
+ else
19
+ # Running as a copy in .git/hooks/ — derive PROJECT_ROOT from git dir
20
+ PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")/../.." && pwd)"
21
+ export PROJECT_ROOT
16
22
  fi
17
23
 
18
24
  SPRINT_FILE="$PROJECT_ROOT/sprint/current-sprint.yaml"
@@ -15,7 +15,7 @@
15
15
  # Input: JSON via stdin with tool_name, tool_input
16
16
  # Output: JSON with additionalContext on validation failure
17
17
  #
18
- # See also: .pennyfarthing/scripts/validation/validate-sprint-yaml.sh
18
+ # See also: pf sprint validate
19
19
 
20
20
  set -euo pipefail
21
21
 
@@ -7,7 +7,7 @@ Uncategorized utilities and one-off scripts.
7
7
  | Script | Purpose |
8
8
  |--------|---------|
9
9
  | `deploy.sh` | Deployment script |
10
- | `doctor-dogfood.sh` | Health check for dogfooding setup |
10
+ | `doctor-dogfood.sh` | Health check for framework/orchestrator development setup |
11
11
  | `run-ci.sh` | Run CI locally |
12
12
  | `statusline.sh` | Status line configuration |
13
13
  | `uninstall.sh` | Uninstall Pennyfarthing from project |
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # Usage: source scripts/repo-utils.sh
6
6
  #
7
- # If .claude/project/repos.yaml exists, uses that configuration.
7
+ # If .pennyfarthing/repos.yaml exists, uses that configuration.
8
8
  # Otherwise, falls back to legacy $API_REPO/$UI_REPO environment variables.
9
9
  #
10
10
  # Core Functions:
@@ -28,7 +28,7 @@ set -euo pipefail
28
28
 
29
29
  # Determine PROJECT_ROOT if not set
30
30
  PROJECT_ROOT="${PROJECT_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"
31
- REPOS_CONFIG="${PROJECT_ROOT}/.claude/project/pennyfarthing-settings.yaml"
31
+ REPOS_CONFIG="${PROJECT_ROOT}/.pennyfarthing/repos.yaml"
32
32
 
33
33
  # Cache for parsed config (associative arrays)
34
34
  declare -A _REPO_PATHS 2>/dev/null || true
@@ -136,7 +136,7 @@ import json
136
136
  import sys
137
137
  import os
138
138
 
139
- config_path = os.environ.get('REPOS_CONFIG', '.claude/project/repos.yaml')
139
+ config_path = os.environ.get('REPOS_CONFIG', '.pennyfarthing/repos.yaml')
140
140
  try:
141
141
  with open(config_path) as f:
142
142
  config = yaml.safe_load(f)
@@ -31,9 +31,8 @@ NC='\033[0m' # No Color
31
31
  # Required fields in frontmatter
32
32
  REQUIRED_FIELDS=("name" "description" "tools" "model")
33
33
 
34
- # Expected subagent files (8 total - consolidated in Story 31-11/31-12)
34
+ # Expected subagent files (7 total - consolidated in Story 31-11/31-12)
35
35
  EXPECTED_SUBAGENTS=(
36
- "workflow-status-check.md"
37
36
  "sm-setup.md"
38
37
  "sm-finish.md"
39
38
  "sm-file-summary.md"
@@ -1,29 +1,44 @@
1
1
  # Sprint Scripts
2
2
 
3
- Scripts for sprint YAML operations and sprint management.
4
-
5
- ## Scripts
6
-
7
- | Script | Purpose |
8
- |--------|---------|
9
- | `sprint-status.sh` | Show current sprint status and metrics |
10
- | `sprint-info.sh` | Display sprint information |
11
- | `available-stories.sh` | List available stories in backlog |
12
- | `archive-story.sh` | Archive completed story to sprint archive |
13
- | `check-story.sh` | Check story details and readiness |
14
- | `new-sprint.sh` | Create a new sprint |
15
- | `promote-epic.sh` | Move epic from planning to current sprint |
16
- | `sprint-common.sh` | Shared sprint utilities (library) |
17
- | `sprint-metrics.sh` | Calculate sprint metrics |
3
+ Sprint management is handled by the Python CLI: `pf sprint [COMMAND]`.
4
+
5
+ ## Commands
6
+
7
+ | Command | Purpose |
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 |
18
25
 
19
26
  ## Usage
20
27
 
21
28
  ```bash
22
- .pennyfarthing/scripts/sprint/sprint-status.sh
23
- .pennyfarthing/scripts/sprint/available-stories.sh
29
+ pf sprint status
30
+ pf sprint backlog
31
+ pf sprint future epic-55
32
+ pf sprint epic promote epic-41
24
33
  ```
25
34
 
26
35
  ## Ownership
27
36
 
28
37
  - **Primary users:** SM agent, `/sprint` skill
29
38
  - **Maintained by:** Core Pennyfarthing team
39
+
40
+ ## Migration Note
41
+
42
+ All bash scripts previously in this directory have been migrated to Python CLI
43
+ commands in `pennyfarthing_scripts/sprint/cli.py`. See PR #716 and the follow-up
44
+ deprecation commit for details.
@@ -19,5 +19,5 @@ Scripts for story creation and management.
19
19
 
20
20
  ## Ownership
21
21
 
22
- - **Primary users:** SM agent, `/story` skill
22
+ - **Primary users:** SM agent, `/sprint story` commands
23
23
  - **Maintained by:** Core Pennyfarthing team
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # Usage: source scripts/test/test-setup.sh
6
6
  #
7
- # Configuration is read from .claude/project/repos.yaml
7
+ # Configuration is read from .pennyfarthing/repos.yaml
8
8
  # See repos.yaml for schema documentation
9
9
  #
10
10
  # Functions:
@@ -6,7 +6,7 @@
6
6
  # - AC1: Updating **Phase:** field to next phase
7
7
  # - AC2: Updating Phase History table with end timestamp and duration
8
8
  # - AC3: Adding Handoff History row with gate and status
9
- # - AC4: workflow-status-check correctly detects phase (integration)
9
+ # - AC4: prime correctly detects phase (integration)
10
10
  # - AC5: All three transitions documented (TEA→Dev, Dev→Reviewer, Reviewer→SM)
11
11
 
12
12
  set -euo pipefail
@@ -190,14 +190,14 @@ run_test test_ac3_status_in_history
190
190
  run_test test_ac3_explicit_edit_for_history
191
191
 
192
192
  # ==============================================================================
193
- # AC4: workflow-status-check correctly detects current phase after handoff
193
+ # AC4: prime correctly detects current phase after handoff
194
194
  # ==============================================================================
195
195
  echo ""
196
- echo "--- AC4: workflow-status-check compatibility ---"
196
+ echo "--- AC4: prime/workflow.py compatibility ---"
197
197
 
198
198
  test_ac4_phase_field_format() {
199
- # Phase field must use exact format that workflow-status-check expects
200
- # workflow-status-check greps for: **Phase:**
199
+ # Phase field must use exact format that prime/workflow.py expects
200
+ # parse_session_header greps for: **Phase:**
201
201
  if echo "$HANDOFF_CONTENT" | grep -q '\*\*Phase:\*\*'; then
202
202
  pass "AC4.1: Uses correct **Phase:** format"
203
203
  else