@pennyfarthing/core 10.0.5 → 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 (303) hide show
  1. package/README.md +9 -7
  2. package/package.json +15 -11
  3. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
  4. package/packages/core/dist/cli/commands/doctor.js +251 -4
  5. package/packages/core/dist/cli/commands/doctor.js.map +1 -1
  6. package/packages/core/dist/cli/commands/init.d.ts +7 -0
  7. package/packages/core/dist/cli/commands/init.d.ts.map +1 -1
  8. package/packages/core/dist/cli/commands/init.js +41 -8
  9. package/packages/core/dist/cli/commands/init.js.map +1 -1
  10. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  11. package/packages/core/dist/cli/commands/update.js +26 -0
  12. package/packages/core/dist/cli/commands/update.js.map +1 -1
  13. package/packages/core/dist/cli/index.js +1 -1
  14. package/packages/core/dist/cli/index.js.map +1 -1
  15. package/packages/core/dist/cli/utils/python.d.ts +22 -0
  16. package/packages/core/dist/cli/utils/python.d.ts.map +1 -0
  17. package/packages/core/dist/cli/utils/python.js +102 -0
  18. package/packages/core/dist/cli/utils/python.js.map +1 -0
  19. package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
  20. package/packages/core/dist/cli/utils/settings.js +10 -0
  21. package/packages/core/dist/cli/utils/settings.js.map +1 -1
  22. package/pennyfarthing-dist/agents/README.md +1 -3
  23. package/pennyfarthing-dist/agents/architect.md +0 -6
  24. package/pennyfarthing-dist/agents/devops.md +0 -6
  25. package/pennyfarthing-dist/agents/orchestrator.md +0 -6
  26. package/pennyfarthing-dist/agents/pm.md +0 -6
  27. package/pennyfarthing-dist/agents/sm.md +0 -6
  28. package/pennyfarthing-dist/commands/architect.md +11 -3
  29. package/pennyfarthing-dist/commands/close-epic.md +24 -131
  30. package/pennyfarthing-dist/commands/create-theme.md +14 -24
  31. package/pennyfarthing-dist/commands/dev.md +11 -3
  32. package/pennyfarthing-dist/commands/devops.md +11 -3
  33. package/pennyfarthing-dist/commands/health-check.md +1 -3
  34. package/pennyfarthing-dist/commands/help.md +8 -12
  35. package/pennyfarthing-dist/commands/list-themes.md +14 -16
  36. package/pennyfarthing-dist/commands/orchestrator.md +11 -3
  37. package/pennyfarthing-dist/commands/parallel-work.md +1 -3
  38. package/pennyfarthing-dist/commands/pm.md +11 -3
  39. package/pennyfarthing-dist/commands/prime.md +6 -6
  40. package/pennyfarthing-dist/commands/reviewer.md +11 -3
  41. package/pennyfarthing-dist/commands/run-ci.md +1 -1
  42. package/pennyfarthing-dist/commands/set-theme.md +14 -51
  43. package/pennyfarthing-dist/commands/setup.md +1 -1
  44. package/pennyfarthing-dist/commands/show-theme.md +14 -16
  45. package/pennyfarthing-dist/commands/sm.md +11 -3
  46. package/pennyfarthing-dist/commands/tea.md +11 -3
  47. package/pennyfarthing-dist/commands/tech-writer.md +11 -3
  48. package/pennyfarthing-dist/commands/theme-maker.md +14 -671
  49. package/pennyfarthing-dist/commands/theme.md +95 -0
  50. package/pennyfarthing-dist/commands/ux-designer.md +11 -3
  51. package/pennyfarthing-dist/commands/work.md +3 -5
  52. package/pennyfarthing-dist/guides/agent-coordination.md +11 -13
  53. package/pennyfarthing-dist/guides/agent-template-tactical.md +2 -3
  54. package/pennyfarthing-dist/guides/command-tag-taxonomy.md +212 -0
  55. package/pennyfarthing-dist/guides/hooks.md +5 -5
  56. package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +3 -3
  57. package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +9 -59
  58. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +4 -5
  59. package/pennyfarthing-dist/guides/prime.md +2 -2
  60. package/pennyfarthing-dist/guides/skill-schema.md +4 -4
  61. package/pennyfarthing-dist/scripts/core/agent-session.sh +6 -2
  62. package/pennyfarthing-dist/scripts/core/check-context.sh +0 -0
  63. package/pennyfarthing-dist/scripts/core/handoff-marker.sh +0 -0
  64. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +0 -0
  65. package/pennyfarthing-dist/scripts/core/prime.sh +8 -10
  66. package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +0 -0
  67. package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +0 -0
  68. package/pennyfarthing-dist/scripts/git/git-status-all.sh +0 -0
  69. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +8 -6
  70. package/pennyfarthing-dist/scripts/git/release.sh +0 -0
  71. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +0 -0
  72. package/pennyfarthing-dist/scripts/health/drift-detection.sh +0 -0
  73. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +0 -0
  74. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +0 -0
  75. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +0 -0
  76. package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +0 -0
  77. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -0
  78. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +12 -5
  79. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +4 -3
  80. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -0
  81. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +11 -5
  82. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +0 -0
  83. package/pennyfarthing-dist/scripts/hooks/question_reflector_check.py +0 -0
  84. package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +0 -0
  85. package/pennyfarthing-dist/scripts/hooks/session-start.sh +0 -0
  86. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +0 -0
  87. package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +0 -0
  88. package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +0 -0
  89. package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +0 -0
  90. package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +0 -0
  91. package/pennyfarthing-dist/scripts/jira/jira-claim-story.sh +0 -0
  92. package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +0 -0
  93. package/pennyfarthing-dist/scripts/jira/jira-sync-story.sh +0 -0
  94. package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +0 -0
  95. package/pennyfarthing-dist/scripts/lib/background-tasks.sh +0 -0
  96. package/pennyfarthing-dist/scripts/lib/checkpoint.sh +0 -0
  97. package/pennyfarthing-dist/scripts/lib/common.sh +0 -0
  98. package/pennyfarthing-dist/scripts/lib/file-lock.sh +0 -0
  99. package/pennyfarthing-dist/scripts/lib/logging.sh +0 -0
  100. package/pennyfarthing-dist/scripts/lib/retry.sh +0 -0
  101. package/pennyfarthing-dist/scripts/maintenance/migrate-theme-schema.mjs +0 -0
  102. package/pennyfarthing-dist/scripts/maintenance/sidecar-health.sh +0 -0
  103. package/pennyfarthing-dist/scripts/misc/README.md +1 -1
  104. package/pennyfarthing-dist/scripts/misc/add-short-names.sh +0 -0
  105. package/pennyfarthing-dist/scripts/misc/add_short_names.py +0 -0
  106. package/pennyfarthing-dist/scripts/misc/backlog.sh +0 -0
  107. package/pennyfarthing-dist/scripts/misc/check-status.sh +0 -0
  108. package/pennyfarthing-dist/scripts/misc/find-related-work.sh +0 -0
  109. package/pennyfarthing-dist/scripts/misc/generate-skill-docs.sh +0 -0
  110. package/pennyfarthing-dist/scripts/misc/log-skill-usage.sh +0 -0
  111. package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +0 -0
  112. package/pennyfarthing-dist/scripts/misc/migrate_bmad_workflow.py +0 -0
  113. package/pennyfarthing-dist/scripts/misc/repo-scan.sh +0 -0
  114. package/pennyfarthing-dist/scripts/misc/repo-utils.sh +0 -0
  115. package/pennyfarthing-dist/scripts/misc/run-ci.sh +0 -0
  116. package/pennyfarthing-dist/scripts/misc/run-timestamp.sh +0 -0
  117. package/pennyfarthing-dist/scripts/misc/session-cleanup.sh +0 -0
  118. package/pennyfarthing-dist/scripts/misc/skill-usage-report.sh +0 -0
  119. package/pennyfarthing-dist/scripts/misc/statusline.sh +0 -0
  120. package/pennyfarthing-dist/scripts/misc/uninstall.sh +0 -0
  121. package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +1 -2
  122. package/pennyfarthing-dist/scripts/portraits/generate-portraits.sh +0 -0
  123. package/pennyfarthing-dist/scripts/story/create-story.sh +0 -0
  124. package/pennyfarthing-dist/scripts/story/size-story.sh +0 -0
  125. package/pennyfarthing-dist/scripts/story/story-template.sh +0 -0
  126. package/pennyfarthing-dist/scripts/test/ensure-swebench-data.sh +0 -0
  127. package/pennyfarthing-dist/scripts/test/swebench-judge.py +0 -0
  128. package/pennyfarthing-dist/scripts/test/test-cache.sh +0 -0
  129. package/pennyfarthing-dist/scripts/test/test-setup.sh +0 -0
  130. package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -0
  131. package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +0 -0
  132. package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +0 -0
  133. package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +5 -5
  134. package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +0 -0
  135. package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +0 -0
  136. package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +0 -0
  137. package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +0 -0
  138. package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +0 -0
  139. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +3 -79
  140. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +0 -0
  141. package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +0 -0
  142. package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -0
  143. package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +0 -0
  144. package/pennyfarthing-dist/scripts/theme/README.md +1 -1
  145. package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.sh +0 -0
  146. package/pennyfarthing-dist/scripts/theme/compute_theme_tiers.py +0 -0
  147. package/pennyfarthing-dist/scripts/theme/list-themes.sh +0 -0
  148. package/pennyfarthing-dist/scripts/theme/update-theme-tiers.sh +0 -0
  149. package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +0 -1
  150. package/pennyfarthing-dist/scripts/workflow/check.py +0 -0
  151. package/pennyfarthing-dist/scripts/workflow/check.sh +0 -0
  152. package/pennyfarthing-dist/scripts/workflow/complete-step.py +0 -0
  153. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +62 -17
  154. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +0 -0
  155. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.py +0 -0
  156. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +0 -0
  157. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +0 -0
  158. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +0 -0
  159. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +0 -0
  160. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +0 -0
  161. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +0 -0
  162. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +0 -0
  163. package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +2 -2
  164. package/pennyfarthing-dist/skills/skill-registry.yaml +20 -16
  165. package/pennyfarthing-dist/skills/story/scripts/create-story.sh +0 -0
  166. package/pennyfarthing-dist/skills/story/scripts/size-story.sh +0 -0
  167. package/pennyfarthing-dist/skills/story/scripts/story-template.sh +0 -0
  168. package/pennyfarthing-dist/skills/theme/skill.md +290 -75
  169. package/pennyfarthing-dist/skills/theme-creation/SKILL.md +23 -166
  170. package/pennyfarthing-dist/skills/workflow/scripts/list-workflows.sh +0 -0
  171. package/pennyfarthing-dist/skills/workflow/scripts/resume-workflow.sh +0 -0
  172. package/pennyfarthing-dist/skills/workflow/scripts/show-workflow.sh +0 -0
  173. package/pennyfarthing-dist/skills/workflow/scripts/start-workflow.sh +0 -0
  174. package/pennyfarthing-dist/skills/workflow/scripts/workflow-status.sh +0 -0
  175. package/pennyfarthing-dist/skills/workflow/skill.md +4 -4
  176. package/pennyfarthing-dist/templates/agent-scopes.yaml.template +0 -11
  177. package/pennyfarthing-dist/templates/auto-load-sm.sh.template +14 -0
  178. package/pennyfarthing-dist/templates/settings.local.json.template +9 -0
  179. package/pennyfarthing-dist/workflows/2party-tdd.yaml +399 -0
  180. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +41 -24
  181. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  182. package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
  183. package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  184. package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
  185. package/pennyfarthing_scripts/cli.py +15 -0
  186. package/pennyfarthing_scripts/codemarkers/__init__.py +19 -0
  187. package/pennyfarthing_scripts/codemarkers/__main__.py +6 -0
  188. package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
  189. package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
  190. package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
  191. package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
  192. package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
  193. package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
  194. package/pennyfarthing_scripts/codemarkers/analyze.py +326 -0
  195. package/pennyfarthing_scripts/codemarkers/cli.py +129 -0
  196. package/pennyfarthing_scripts/codemarkers/formatters.py +89 -0
  197. package/pennyfarthing_scripts/codemarkers/models.py +45 -0
  198. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  199. package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
  200. package/pennyfarthing_scripts/complexity/__init__.py +15 -0
  201. package/pennyfarthing_scripts/complexity/__main__.py +6 -0
  202. package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
  203. package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
  204. package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
  205. package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
  206. package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
  207. package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
  208. package/pennyfarthing_scripts/complexity/analyze.py +207 -0
  209. package/pennyfarthing_scripts/complexity/cli.py +78 -0
  210. package/pennyfarthing_scripts/complexity/formatters.py +64 -0
  211. package/pennyfarthing_scripts/complexity/models.py +32 -0
  212. package/pennyfarthing_scripts/deadcode/__init__.py +6 -0
  213. package/pennyfarthing_scripts/deadcode/__main__.py +6 -0
  214. package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
  215. package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
  216. package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
  217. package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
  218. package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
  219. package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
  220. package/pennyfarthing_scripts/deadcode/analyze.py +323 -0
  221. package/pennyfarthing_scripts/deadcode/cli.py +163 -0
  222. package/pennyfarthing_scripts/deadcode/formatters.py +106 -0
  223. package/pennyfarthing_scripts/deadcode/models.py +54 -0
  224. package/pennyfarthing_scripts/dependencies/__init__.py +20 -0
  225. package/pennyfarthing_scripts/dependencies/__main__.py +5 -0
  226. package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
  227. package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
  228. package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
  229. package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
  230. package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
  231. package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
  232. package/pennyfarthing_scripts/dependencies/analyze.py +155 -0
  233. package/pennyfarthing_scripts/dependencies/cli.py +72 -0
  234. package/pennyfarthing_scripts/dependencies/formatters.py +63 -0
  235. package/pennyfarthing_scripts/dependencies/models.py +39 -0
  236. package/pennyfarthing_scripts/healthscore/__init__.py +21 -0
  237. package/pennyfarthing_scripts/healthscore/__main__.py +6 -0
  238. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  239. package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  240. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  241. package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
  242. package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
  243. package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-314.pyc +0 -0
  244. package/pennyfarthing_scripts/healthscore/analyze.py +161 -0
  245. package/pennyfarthing_scripts/healthscore/cli.py +76 -0
  246. package/pennyfarthing_scripts/healthscore/formatters.py +46 -0
  247. package/pennyfarthing_scripts/healthscore/models.py +44 -0
  248. package/pennyfarthing_scripts/hooks/cyclist-pretooluse-hook.sh +0 -0
  249. package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
  250. package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
  251. package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
  252. package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
  253. package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
  254. package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-314.pyc +0 -0
  255. package/pennyfarthing_scripts/hotspots/analyze.py +27 -0
  256. package/pennyfarthing_scripts/hotspots/cli.py +10 -8
  257. package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
  258. package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
  259. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
  260. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
  261. package/pennyfarthing_scripts/jira/__pycache__/create.cpython-314.pyc +0 -0
  262. package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-314.pyc +0 -0
  263. package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
  264. package/pennyfarthing_scripts/jira/bidirectional.py +42 -15
  265. package/pennyfarthing_scripts/jira/cli.py +4 -1
  266. package/pennyfarthing_scripts/jira/client.py +28 -0
  267. package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
  268. package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
  269. package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
  270. package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
  271. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  272. package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-314.pyc +0 -0
  273. package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  274. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  275. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  276. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  277. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  278. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  279. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  280. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  281. package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-314.pyc +0 -0
  282. package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-314.pyc +0 -0
  283. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  284. package/pennyfarthing_scripts/sprint/archive_epic.py +198 -94
  285. package/pennyfarthing_scripts/sprint/cli.py +29 -19
  286. package/pennyfarthing_scripts/sprint/story_add.py +202 -27
  287. package/pennyfarthing_scripts/sprint/story_finish.py +211 -0
  288. package/pennyfarthing_scripts/sprint/work.py +27 -3
  289. package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
  290. package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
  291. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
  292. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
  293. package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
  294. package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
  295. package/pennyfarthing_scripts/tests/test_codemarkers.py +682 -0
  296. package/pennyfarthing_scripts/tests/test_healthscore.py +524 -0
  297. package/pennyfarthing_scripts/theme/__init__.py +5 -0
  298. package/pennyfarthing_scripts/theme/__main__.py +6 -0
  299. package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-314.pyc +0 -0
  300. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
  301. package/pennyfarthing_scripts/theme/cli.py +286 -0
  302. package/scripts/README.md +53 -0
  303. package/pennyfarthing-dist/agents/workflow-status-check.md +0 -96
@@ -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)
@@ -292,7 +292,7 @@ Never manually edit sprint YAML. Use the provided commands.
292
292
  Add a new story to an epic.
293
293
 
294
294
  <run>
295
- python3 -m pennyfarthing_scripts.cli sprint story add <epic-id> "<title>" <points>
295
+ pf sprint story add <epic-id> "<title>" <points>
296
296
  </run>
297
297
 
298
298
  <args>
@@ -304,7 +304,7 @@ python3 -m pennyfarthing_scripts.cli sprint story add <epic-id> "<title>" <point
304
304
  </args>
305
305
 
306
306
  <example>
307
- python3 -m pennyfarthing_scripts.cli sprint story add epic-76 "Add user authentication" 3
307
+ pf sprint story add epic-76 "Add user authentication" 3
308
308
  </example>
309
309
 
310
310
  <output>
@@ -322,7 +322,7 @@ After creating, use `/sprint story size` for sizing guidelines.
322
322
  Complete a story after PR merge.
323
323
 
324
324
  <run>
325
- python3 -m pennyfarthing_scripts.cli sprint story finish <story-id>
325
+ pf sprint story finish <story-id>
326
326
  </run>
327
327
 
328
328
  <args>
@@ -332,7 +332,7 @@ python3 -m pennyfarthing_scripts.cli sprint story finish <story-id>
332
332
  </args>
333
333
 
334
334
  <example>
335
- python3 -m pennyfarthing_scripts.cli sprint story finish MSSCI-12052
335
+ pf sprint story finish MSSCI-12052
336
336
  # Archives story, updates Jira, cleans session files
337
337
  </example>
338
338
 
@@ -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
File without changes
File without changes
@@ -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 "$@"
File without changes
File without changes
@@ -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
 
File without changes
@@ -6,7 +6,8 @@
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)
@@ -14,11 +15,17 @@
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
 
@@ -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"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -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 |
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -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"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -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
@@ -1,6 +1,6 @@
1
1
  #!/bin/bash
2
2
  # test-drift-detection.sh - Tests for story 8-2: Startup Drift Detection
3
- # Verifies that workflow-status-check detects and reports drift between
3
+ # Verifies that prime/sprint scripts detect and report drift between
4
4
  # merged branches and sprint YAML status
5
5
  #
6
6
  # RED STATE: These tests will FAIL until Dev implements the feature
@@ -38,7 +38,7 @@ echo "=== Story 8-2: Startup Drift Detection ==="
38
38
  echo ""
39
39
 
40
40
  # ==============================================================================
41
- # AC1: workflow-status-check detects merged-but-not-closed stories
41
+ # AC1: prime detects merged-but-not-closed stories
42
42
  # ==============================================================================
43
43
 
44
44
  echo "--- AC1: Detects merged-but-not-closed stories ---"
@@ -293,28 +293,9 @@ test_drift_output_format() {
293
293
  fi
294
294
  }
295
295
 
296
- # Test: workflow-status-check.md references drift detection
297
- test_workflow_status_check_integration() {
298
- local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
299
-
300
- if [[ ! -f "$workflow_file" ]]; then
301
- fail "workflow-status-check includes drift detection" "file exists" "workflow-status-check.md not found"
302
- return
303
- fi
304
-
305
- if grep -qi "drift\|detect_drift" "$workflow_file" 2>/dev/null; then
306
- pass "workflow-status-check.md references drift detection"
307
- else
308
- fail "workflow-status-check includes drift detection" \
309
- "drift or detect_drift reference in workflow-status-check.md" \
310
- "no drift reference found"
311
- fi
312
- }
313
-
314
296
  # Test: Drift report is user-friendly (mentions "merged" and "status")
315
297
  test_drift_report_clarity() {
316
298
  local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/sprint/sprint-common.sh"
317
- local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
318
299
 
319
300
  local found=false
320
301
 
@@ -323,11 +304,6 @@ test_drift_report_clarity() {
323
304
  found=true
324
305
  fi
325
306
 
326
- # Or check workflow-status-check.md for report format
327
- if [[ -f "$workflow_file" ]] && grep -qi "merged.*status\|drift.*report\|drifted stories" "$workflow_file" 2>/dev/null; then
328
- found=true
329
- fi
330
-
331
307
  if [[ "$found" == "true" ]]; then
332
308
  pass "drift report uses clear terminology (merged, drift, status)"
333
309
  else
@@ -338,7 +314,6 @@ test_drift_report_clarity() {
338
314
  }
339
315
 
340
316
  test_drift_output_format
341
- test_workflow_status_check_integration
342
317
  test_drift_report_clarity
343
318
 
344
319
  echo ""
@@ -353,7 +328,6 @@ echo ""
353
328
  # Test: reconcile_drift function or auto-reconcile logic exists
354
329
  test_reconcile_function_exists() {
355
330
  local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/sprint/sprint-common.sh"
356
- local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
357
331
 
358
332
  local found=false
359
333
 
@@ -362,11 +336,6 @@ test_reconcile_function_exists() {
362
336
  found=true
363
337
  fi
364
338
 
365
- # Or check workflow-status-check.md for reconcile instructions
366
- if [[ -f "$workflow_file" ]] && grep -qi "reconcile\|auto.reconcile\|update.*done" "$workflow_file" 2>/dev/null; then
367
- found=true
368
- fi
369
-
370
339
  if [[ "$found" == "true" ]]; then
371
340
  pass "auto-reconcile functionality exists"
372
341
  else
@@ -402,7 +371,6 @@ test_reconcile_uses_update() {
402
371
  # Test: Auto-reconcile logs to reconciliation.log
403
372
  test_reconcile_logs_event() {
404
373
  local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/sprint/sprint-common.sh"
405
- local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
406
374
 
407
375
  local found=false
408
376
 
@@ -411,11 +379,6 @@ test_reconcile_logs_event() {
411
379
  found=true
412
380
  fi
413
381
 
414
- # Or check workflow-status-check.md for logging instructions
415
- if [[ -f "$workflow_file" ]] && grep -qi "log.*reconcil\|reconciliation.log" "$workflow_file" 2>/dev/null; then
416
- found=true
417
- fi
418
-
419
382
  if [[ "$found" == "true" ]]; then
420
383
  pass "auto-reconcile logs to reconciliation.log"
421
384
  else
@@ -425,25 +388,6 @@ test_reconcile_logs_event() {
425
388
  fi
426
389
  }
427
390
 
428
- # Test: workflow-status-check offers reconcile option to user
429
- test_offers_reconcile_option() {
430
- local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
431
-
432
- if [[ ! -f "$workflow_file" ]]; then
433
- fail "offers reconcile option" "file exists" "workflow-status-check.md not found"
434
- return
435
- fi
436
-
437
- # Check for user prompt or option offering
438
- if grep -qiE "auto.reconcile|offer.*reconcile|reconcile.*option|y/n|yes/no" "$workflow_file" 2>/dev/null; then
439
- pass "workflow-status-check offers reconcile option to user"
440
- else
441
- fail "offers reconcile option" \
442
- "user prompt for auto-reconcile in workflow-status-check.md" \
443
- "reconcile prompt not found"
444
- fi
445
- }
446
-
447
391
  # Test: reconcile_drift transitions Jira to Done
448
392
  test_reconcile_transitions_jira() {
449
393
  local sprint_common="$PROJECT_ROOT/pennyfarthing-dist/scripts/sprint/sprint-common.sh"
@@ -463,30 +407,10 @@ test_reconcile_transitions_jira() {
463
407
  fi
464
408
  }
465
409
 
466
- # Test: workflow-status-check mentions Jira in drift reconciliation
467
- test_workflow_mentions_jira_reconcile() {
468
- local workflow_file="$PROJECT_ROOT/pennyfarthing-dist/agents/workflow-status-check.md"
469
-
470
- if [[ ! -f "$workflow_file" ]]; then
471
- fail "workflow mentions Jira reconcile" "file exists" "workflow-status-check.md not found"
472
- return
473
- fi
474
-
475
- if grep -qiE 'jira.*done|transition.*jira|jira.*status' "$workflow_file" 2>/dev/null; then
476
- pass "workflow-status-check mentions Jira in reconciliation"
477
- else
478
- fail "workflow mentions Jira reconcile" \
479
- "Jira transition reference in workflow-status-check.md" \
480
- "Jira reconcile not found"
481
- fi
482
- }
483
-
484
410
  test_reconcile_function_exists
485
411
  test_reconcile_uses_update
486
412
  test_reconcile_transitions_jira
487
413
  test_reconcile_logs_event
488
- test_offers_reconcile_option
489
- test_workflow_mentions_jira_reconcile
490
414
 
491
415
  echo ""
492
416
 
@@ -580,7 +504,7 @@ if [[ $TESTS_FAILED -gt 0 ]]; then
580
504
  echo " 2. Output format: story_id:yaml_status:jira_status (AC2)"
581
505
  echo " - Clear, user-friendly terminology"
582
506
  echo " - Include both YAML and Jira status"
583
- echo " 3. Add Step 2.5 to workflow-status-check.md (AC1, AC2)"
507
+ echo " 3. Add drift detection to prime/workflow.py (AC1, AC2)"
584
508
  echo " - Call detect_drift after git scan"
585
509
  echo " - Report drifted stories before state determination"
586
510
  echo " 4. Add auto-reconcile option (AC3)"