@pennyfarthing/core 11.0.0-alpha.0 → 11.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 (401) hide show
  1. package/README.md +84 -26
  2. package/package.json +14 -16
  3. package/packages/core/dist/cli/cyclist-migration.test.js +2 -1
  4. package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -1
  5. package/packages/core/dist/cli/ocean-profiles.test.js +5 -4
  6. package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -1
  7. package/packages/core/dist/cli/theme-maker.test.js +5 -4
  8. package/packages/core/dist/cli/theme-maker.test.js.map +1 -1
  9. package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.d.ts +20 -0
  10. package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.d.ts.map +1 -0
  11. package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.js +278 -0
  12. package/packages/core/dist/cli/utils/010-detect-remove-old-packages.test.js.map +1 -0
  13. package/packages/core/dist/cli/utils/constants.d.ts +7 -1
  14. package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
  15. package/packages/core/dist/cli/utils/constants.js +2 -0
  16. package/packages/core/dist/cli/utils/constants.js.map +1 -1
  17. package/packages/core/dist/cli/utils/constants.test.d.ts +10 -0
  18. package/packages/core/dist/cli/utils/constants.test.d.ts.map +1 -0
  19. package/packages/core/dist/cli/utils/constants.test.js +38 -0
  20. package/packages/core/dist/cli/utils/constants.test.js.map +1 -0
  21. package/packages/core/dist/consultation/consultation-protocol.d.ts +139 -0
  22. package/packages/core/dist/consultation/consultation-protocol.d.ts.map +1 -0
  23. package/packages/core/dist/consultation/consultation-protocol.js +178 -0
  24. package/packages/core/dist/consultation/consultation-protocol.js.map +1 -0
  25. package/packages/core/dist/consultation/consultation-protocol.test.d.ts +20 -0
  26. package/packages/core/dist/consultation/consultation-protocol.test.d.ts.map +1 -0
  27. package/packages/core/dist/consultation/consultation-protocol.test.js +474 -0
  28. package/packages/core/dist/consultation/consultation-protocol.test.js.map +1 -0
  29. package/packages/core/dist/public/js/react/react.js +30 -30
  30. package/packages/core/dist/scripts/generate-report.test.js +2 -2
  31. package/packages/core/dist/scripts/generate-spider-report.test.js +2 -2
  32. package/packages/core/dist/scripts/generate-spider.test.js +2 -1
  33. package/packages/core/dist/scripts/generate-spider.test.js.map +1 -1
  34. package/packages/core/dist/server/api/file-browser.d.ts.map +1 -1
  35. package/packages/core/dist/server/api/file-browser.js +19 -1
  36. package/packages/core/dist/server/api/file-browser.js.map +1 -1
  37. package/packages/core/dist/server/api/git-fetch-cooldown.test.d.ts +10 -0
  38. package/packages/core/dist/server/api/git-fetch-cooldown.test.d.ts.map +1 -0
  39. package/packages/core/dist/server/api/git-fetch-cooldown.test.js +30 -0
  40. package/packages/core/dist/server/api/git-fetch-cooldown.test.js.map +1 -0
  41. package/packages/core/dist/server/api/git.d.ts +8 -0
  42. package/packages/core/dist/server/api/git.d.ts.map +1 -1
  43. package/packages/core/dist/server/api/git.js +37 -10
  44. package/packages/core/dist/server/api/git.js.map +1 -1
  45. package/packages/core/dist/server/api/health-score.d.ts.map +1 -1
  46. package/packages/core/dist/server/api/health-score.js +25 -1
  47. package/packages/core/dist/server/api/health-score.js.map +1 -1
  48. package/packages/core/dist/server/api/index.d.ts +1 -1
  49. package/packages/core/dist/server/api/index.d.ts.map +1 -1
  50. package/packages/core/dist/server/api/index.js +1 -1
  51. package/packages/core/dist/server/api/index.js.map +1 -1
  52. package/packages/core/dist/server/api/settings.d.ts.map +1 -1
  53. package/packages/core/dist/server/api/settings.js +73 -2
  54. package/packages/core/dist/server/api/settings.js.map +1 -1
  55. package/packages/core/dist/server/api/theme-agents.d.ts.map +1 -1
  56. package/packages/core/dist/server/api/theme-agents.js +61 -0
  57. package/packages/core/dist/server/api/theme-agents.js.map +1 -1
  58. package/packages/core/dist/server/otlp-receiver.d.ts +35 -13
  59. package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
  60. package/packages/core/dist/server/otlp-receiver.js +76 -16
  61. package/packages/core/dist/server/otlp-receiver.js.map +1 -1
  62. package/packages/core/dist/server/paths.d.ts.map +1 -1
  63. package/packages/core/dist/server/paths.js +11 -1
  64. package/packages/core/dist/server/paths.js.map +1 -1
  65. package/packages/core/dist/server/server.d.ts +3 -1
  66. package/packages/core/dist/server/server.d.ts.map +1 -1
  67. package/packages/core/dist/server/server.js +23 -16
  68. package/packages/core/dist/server/server.js.map +1 -1
  69. package/packages/core/dist/server/server.test.js.map +1 -1
  70. package/packages/core/dist/workflow/gate-file-validation.d.ts +49 -0
  71. package/packages/core/dist/workflow/gate-file-validation.d.ts.map +1 -0
  72. package/packages/core/dist/workflow/gate-file-validation.js +157 -0
  73. package/packages/core/dist/workflow/gate-file-validation.js.map +1 -0
  74. package/packages/core/dist/workflow/gate-file-validation.test.d.ts +19 -0
  75. package/packages/core/dist/workflow/gate-file-validation.test.d.ts.map +1 -0
  76. package/packages/core/dist/workflow/gate-file-validation.test.js +536 -0
  77. package/packages/core/dist/workflow/gate-file-validation.test.js.map +1 -0
  78. package/packages/core/dist/workflow/gate-schema-validation.test.d.ts +14 -0
  79. package/packages/core/dist/workflow/gate-schema-validation.test.d.ts.map +1 -0
  80. package/packages/core/dist/workflow/gate-schema-validation.test.js +339 -0
  81. package/packages/core/dist/workflow/gate-schema-validation.test.js.map +1 -0
  82. package/packages/core/dist/workflow/handoff.js +2 -2
  83. package/packages/core/dist/workflow/handoff.js.map +1 -1
  84. package/packages/core/dist/workflow/handoff.test.js +16 -0
  85. package/packages/core/dist/workflow/handoff.test.js.map +1 -1
  86. package/packages/core/dist/workflow/variable-resolver.test.js +1 -1
  87. package/packages/core/dist/workflow/variable-resolver.test.js.map +1 -1
  88. package/packages/core/dist/workflow/workflow-migration.test.js +4 -3
  89. package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -1
  90. package/packages/core/dist/workflow/workflow-schema.d.ts +4 -2
  91. package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
  92. package/packages/core/dist/workflow/workflow-schema.js +43 -8
  93. package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
  94. package/pennyfarthing-dist/agents/README.md +6 -14
  95. package/pennyfarthing-dist/agents/architect.md +43 -30
  96. package/pennyfarthing-dist/agents/ba.md +30 -29
  97. package/pennyfarthing-dist/agents/dev.md +76 -41
  98. package/pennyfarthing-dist/agents/devops.md +57 -21
  99. package/pennyfarthing-dist/agents/orchestrator.md +3 -11
  100. package/pennyfarthing-dist/agents/pm.md +45 -31
  101. package/pennyfarthing-dist/agents/reviewer.md +20 -66
  102. package/pennyfarthing-dist/agents/sm-setup.md +2 -2
  103. package/pennyfarthing-dist/agents/sm.md +8 -30
  104. package/pennyfarthing-dist/agents/tea.md +25 -41
  105. package/pennyfarthing-dist/agents/tech-writer.md +33 -90
  106. package/pennyfarthing-dist/agents/ux-designer.md +39 -40
  107. package/pennyfarthing-dist/commands/benchmark-control.md +8 -64
  108. package/pennyfarthing-dist/commands/benchmark.md +8 -480
  109. package/pennyfarthing-dist/commands/job-fair.md +8 -97
  110. package/pennyfarthing-dist/commands/pf-benchmark-control.md +70 -0
  111. package/pennyfarthing-dist/commands/pf-benchmark.md +486 -0
  112. package/pennyfarthing-dist/commands/pf-chore.md +4 -4
  113. package/pennyfarthing-dist/commands/pf-ci.md +40 -0
  114. package/pennyfarthing-dist/commands/pf-close-epic.md +9 -27
  115. package/pennyfarthing-dist/commands/pf-continue-session.md +9 -213
  116. package/pennyfarthing-dist/commands/pf-create-branches-from-story.md +11 -353
  117. package/pennyfarthing-dist/commands/pf-docs.md +28 -0
  118. package/pennyfarthing-dist/commands/pf-epic.md +67 -0
  119. package/pennyfarthing-dist/commands/pf-git-cleanup.md +11 -52
  120. package/pennyfarthing-dist/commands/pf-git.md +75 -0
  121. package/pennyfarthing-dist/commands/pf-help.md +110 -128
  122. package/pennyfarthing-dist/commands/pf-job-fair.md +102 -0
  123. package/pennyfarthing-dist/commands/pf-new-work.md +9 -18
  124. package/pennyfarthing-dist/commands/pf-parallel-work.md +6 -66
  125. package/pennyfarthing-dist/commands/pf-release.md +11 -76
  126. package/pennyfarthing-dist/commands/pf-repo-status.md +11 -44
  127. package/pennyfarthing-dist/commands/pf-run-ci.md +8 -111
  128. package/pennyfarthing-dist/commands/pf-session.md +51 -0
  129. package/pennyfarthing-dist/commands/pf-solo.md +447 -0
  130. package/pennyfarthing-dist/commands/pf-sprint-planning.md +8 -104
  131. package/pennyfarthing-dist/commands/pf-standalone.md +1 -1
  132. package/pennyfarthing-dist/commands/pf-start-epic.md +9 -163
  133. package/pennyfarthing-dist/commands/pf-sync-epic-to-jira.md +8 -179
  134. package/pennyfarthing-dist/commands/pf-sync-work-with-sprint.md +8 -368
  135. package/pennyfarthing-dist/commands/pf-update-domain-docs.md +8 -78
  136. package/pennyfarthing-dist/commands/solo.md +8 -442
  137. package/pennyfarthing-dist/guides/agent-behavior.md +14 -14
  138. package/pennyfarthing-dist/guides/agent-coordination.md +7 -7
  139. package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +6 -6
  140. package/pennyfarthing-dist/guides/bikerack.md +128 -0
  141. package/pennyfarthing-dist/guides/brownfield-tools.md +133 -0
  142. package/pennyfarthing-dist/guides/command-tag-taxonomy.md +2 -2
  143. package/pennyfarthing-dist/guides/gate-schema.md +227 -0
  144. package/pennyfarthing-dist/guides/gates.md +120 -0
  145. package/pennyfarthing-dist/guides/handoff-cli.md +116 -0
  146. package/pennyfarthing-dist/guides/hooks.md +86 -4
  147. package/pennyfarthing-dist/guides/output-styles.md +65 -0
  148. package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +5 -5
  149. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +4 -4
  150. package/pennyfarthing-dist/guides/prompt-patterns.md +5 -5
  151. package/pennyfarthing-dist/guides/reflector.md +4 -4
  152. package/pennyfarthing-dist/guides/session-artifacts.md +1 -1
  153. package/pennyfarthing-dist/guides/skill-schema.md +1 -1
  154. package/pennyfarthing-dist/guides/tandem-protocol.md +13 -1
  155. package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
  156. package/pennyfarthing-dist/guides/xml-tags.md +5 -4
  157. package/pennyfarthing-dist/personas/themes/hogans-heroes.yaml +11 -22
  158. package/pennyfarthing-dist/personas/themes/stephen-king.yaml +13 -24
  159. package/pennyfarthing-dist/scripts/core/agent-session.sh +0 -0
  160. package/pennyfarthing-dist/scripts/core/check-context.sh +0 -0
  161. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +1 -1
  162. package/pennyfarthing-dist/scripts/core/prime.sh +0 -0
  163. package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +0 -0
  164. package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +0 -0
  165. package/pennyfarthing-dist/scripts/git/git-status-all.sh +0 -0
  166. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +0 -0
  167. package/pennyfarthing-dist/scripts/git/release.sh +0 -0
  168. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +0 -0
  169. package/pennyfarthing-dist/scripts/health/drift-detection.sh +0 -0
  170. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +0 -0
  171. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +0 -0
  172. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +0 -0
  173. package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +0 -0
  174. package/pennyfarthing-dist/scripts/hooks/dispatcher-template.sh +0 -0
  175. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +19 -14
  176. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +0 -0
  177. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -0
  178. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -0
  179. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -0
  180. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +0 -0
  181. package/pennyfarthing-dist/scripts/hooks/question_reflector_check.py +0 -0
  182. package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +0 -0
  183. package/pennyfarthing-dist/scripts/hooks/session-start.sh +0 -0
  184. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +0 -0
  185. package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +0 -0
  186. package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +0 -0
  187. package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +0 -0
  188. package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +0 -0
  189. package/pennyfarthing-dist/scripts/jira/jira-claim-story.sh +0 -0
  190. package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +0 -0
  191. package/pennyfarthing-dist/scripts/jira/jira-sync-story.sh +0 -0
  192. package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +0 -0
  193. package/pennyfarthing-dist/scripts/lib/background-tasks.sh +0 -0
  194. package/pennyfarthing-dist/scripts/lib/checkpoint.sh +0 -0
  195. package/pennyfarthing-dist/scripts/lib/common.sh +0 -0
  196. package/pennyfarthing-dist/scripts/lib/file-lock.sh +0 -0
  197. package/pennyfarthing-dist/scripts/lib/logging.sh +0 -0
  198. package/pennyfarthing-dist/scripts/lib/retry.sh +0 -0
  199. package/pennyfarthing-dist/scripts/maintenance/migrate-theme-schema.mjs +0 -0
  200. package/pennyfarthing-dist/scripts/maintenance/sidecar-health.sh +0 -0
  201. package/pennyfarthing-dist/scripts/misc/add-short-names.sh +0 -0
  202. package/pennyfarthing-dist/scripts/misc/add_short_names.py +0 -0
  203. package/pennyfarthing-dist/scripts/misc/backlog.sh +0 -0
  204. package/pennyfarthing-dist/scripts/misc/check-status.sh +0 -0
  205. package/pennyfarthing-dist/scripts/misc/find-related-work.sh +0 -0
  206. package/pennyfarthing-dist/scripts/misc/generate-skill-docs.sh +0 -0
  207. package/pennyfarthing-dist/scripts/misc/log-skill-usage.sh +0 -0
  208. package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +0 -0
  209. package/pennyfarthing-dist/scripts/misc/migrate_bmad_workflow.py +0 -0
  210. package/pennyfarthing-dist/scripts/misc/repo-scan.sh +0 -0
  211. package/pennyfarthing-dist/scripts/misc/repo-utils.sh +0 -0
  212. package/pennyfarthing-dist/scripts/misc/run-ci.sh +0 -0
  213. package/pennyfarthing-dist/scripts/misc/run-timestamp.sh +0 -0
  214. package/pennyfarthing-dist/scripts/misc/session-cleanup.sh +0 -0
  215. package/pennyfarthing-dist/scripts/misc/skill-usage-report.sh +0 -0
  216. package/pennyfarthing-dist/scripts/misc/statusline.sh +0 -0
  217. package/pennyfarthing-dist/scripts/misc/uninstall.sh +0 -0
  218. package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +0 -0
  219. package/pennyfarthing-dist/scripts/portraits/generate-portraits.py +191 -57
  220. package/pennyfarthing-dist/scripts/portraits/generate-portraits.sh +26 -10
  221. package/pennyfarthing-dist/scripts/story/create-story.sh +0 -0
  222. package/pennyfarthing-dist/scripts/story/size-story.sh +0 -0
  223. package/pennyfarthing-dist/scripts/story/story-template.sh +0 -0
  224. package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -0
  225. package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +0 -0
  226. package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +0 -0
  227. package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +0 -0
  228. package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +0 -0
  229. package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +0 -0
  230. package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +0 -0
  231. package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +0 -0
  232. package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +0 -0
  233. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +0 -0
  234. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +0 -0
  235. package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +0 -0
  236. package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -0
  237. package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +0 -0
  238. package/pennyfarthing-dist/scripts/theme/list-themes.sh +0 -0
  239. package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +0 -0
  240. package/pennyfarthing-dist/scripts/workflow/check.py +0 -0
  241. package/pennyfarthing-dist/scripts/workflow/check.sh +0 -0
  242. package/pennyfarthing-dist/scripts/workflow/complete-step.py +0 -0
  243. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +0 -0
  244. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +0 -0
  245. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.py +0 -0
  246. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +0 -0
  247. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +0 -0
  248. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +0 -0
  249. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +0 -0
  250. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +0 -0
  251. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +0 -0
  252. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +0 -0
  253. package/pennyfarthing-dist/skills/pf-changelog/SKILL.md +4 -4
  254. package/pennyfarthing-dist/skills/pf-sprint/skill.md +1 -1
  255. package/pennyfarthing-dist/skills/pf-story/scripts/create-story.sh +0 -0
  256. package/pennyfarthing-dist/skills/pf-story/scripts/size-story.sh +0 -0
  257. package/pennyfarthing-dist/skills/pf-story/scripts/story-template.sh +0 -0
  258. package/pennyfarthing-dist/skills/pf-systematic-debugging/SKILL.md +0 -1
  259. package/pennyfarthing-dist/skills/pf-workflow/scripts/list-workflows.sh +0 -0
  260. package/pennyfarthing-dist/skills/pf-workflow/scripts/resume-workflow.sh +0 -0
  261. package/pennyfarthing-dist/skills/pf-workflow/scripts/show-workflow.sh +0 -0
  262. package/pennyfarthing-dist/skills/pf-workflow/scripts/start-workflow.sh +0 -0
  263. package/pennyfarthing-dist/skills/pf-workflow/scripts/workflow-status.sh +0 -0
  264. package/pennyfarthing-dist/skills/skill-registry.schema.json +4 -0
  265. package/pennyfarthing-dist/skills/skill-registry.yaml +8 -21
  266. package/pennyfarthing-dist/workflows/2party-tdd.yaml +11 -0
  267. package/pennyfarthing-dist/workflows/agent-docs.yaml +2 -0
  268. package/pennyfarthing-dist/workflows/bdd-tandem.yaml +4 -0
  269. package/pennyfarthing-dist/workflows/bdd.yaml +4 -0
  270. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
  271. package/pennyfarthing-dist/workflows/tdd-tandem.yaml +3 -0
  272. package/pennyfarthing-dist/workflows/tdd.yaml +3 -0
  273. package/pennyfarthing-dist/workflows/trivial.yaml +2 -0
  274. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  275. package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
  276. package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
  277. package/pennyfarthing_scripts/bc/__pycache__/__init__.cpython-314.pyc +0 -0
  278. package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
  279. package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
  280. package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
  281. package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
  282. package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
  283. package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
  284. package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
  285. package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
  286. package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
  287. package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
  288. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  289. package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
  290. package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
  291. package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
  292. package/pennyfarthing_scripts/bikerack/changed_panel.py +105 -0
  293. package/pennyfarthing_scripts/bikerack/debug_panel.py +218 -0
  294. package/pennyfarthing_scripts/bikerack/diffs_panel.py +203 -27
  295. package/pennyfarthing_scripts/cli.py +114 -0
  296. package/pennyfarthing_scripts/epic/__init__.py +0 -0
  297. package/pennyfarthing_scripts/epic/cli.py +64 -0
  298. package/pennyfarthing_scripts/gate/__init__.py +1 -0
  299. package/pennyfarthing_scripts/gate/__pycache__/__init__.cpython-314.pyc +0 -0
  300. package/pennyfarthing_scripts/gate/__pycache__/cli.cpython-314.pyc +0 -0
  301. package/pennyfarthing_scripts/gate/__pycache__/validate.cpython-314.pyc +0 -0
  302. package/pennyfarthing_scripts/gate/cli.py +56 -0
  303. package/pennyfarthing_scripts/gate/validate.py +266 -0
  304. package/pennyfarthing_scripts/git_group/__init__.py +0 -0
  305. package/pennyfarthing_scripts/git_group/cli.py +100 -0
  306. package/pennyfarthing_scripts/handoff/__init__.py +1 -0
  307. package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-314.pyc +0 -0
  308. package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-314.pyc +0 -0
  309. package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
  310. package/pennyfarthing_scripts/handoff/__pycache__/gate_file.cpython-314.pyc +0 -0
  311. package/pennyfarthing_scripts/handoff/__pycache__/gate_runner.cpython-314.pyc +0 -0
  312. package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
  313. package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
  314. package/pennyfarthing_scripts/handoff/cli.py +120 -0
  315. package/pennyfarthing_scripts/handoff/complete_phase.py +155 -0
  316. package/pennyfarthing_scripts/handoff/gate_file.py +105 -0
  317. package/pennyfarthing_scripts/handoff/gate_runner.py +152 -0
  318. package/pennyfarthing_scripts/handoff/marker.py +109 -0
  319. package/pennyfarthing_scripts/handoff/resolve_gate.py +152 -0
  320. package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  321. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  322. package/pennyfarthing_scripts/hooks/cyclist-pretooluse-hook.sh +0 -0
  323. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
  324. package/pennyfarthing_scripts/launch/__pycache__/__init__.cpython-314.pyc +0 -0
  325. package/pennyfarthing_scripts/launch/__pycache__/cli.cpython-314.pyc +0 -0
  326. package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
  327. package/pennyfarthing_scripts/prime/__pycache__/version_sentinel.cpython-314.pyc +0 -0
  328. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  329. package/pennyfarthing_scripts/prime/workflow.py +39 -0
  330. package/pennyfarthing_scripts/session/__init__.py +0 -0
  331. package/pennyfarthing_scripts/session/cli.py +87 -0
  332. package/pennyfarthing_scripts/session_start_hook.py +4 -4
  333. package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  334. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  335. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  336. package/pennyfarthing_scripts/sprint/__pycache__/epic_update.cpython-314.pyc +0 -0
  337. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  338. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  339. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  340. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  341. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  342. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  343. package/pennyfarthing_scripts/sprint/archive_epic.py +8 -0
  344. package/pennyfarthing_scripts/tests/__pycache__/test_108_2_remove_handoff_fallback.cpython-314-pytest-9.0.2.pyc +0 -0
  345. package/pennyfarthing_scripts/tests/__pycache__/test_archive_epic.cpython-314-pytest-9.0.2.pyc +0 -0
  346. package/pennyfarthing_scripts/tests/__pycache__/test_bc.cpython-314-pytest-9.0.2.pyc +0 -0
  347. package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  348. package/pennyfarthing_scripts/tests/__pycache__/test_cli_normalization.cpython-314-pytest-9.0.2.pyc +0 -0
  349. package/pennyfarthing_scripts/tests/__pycache__/test_gate_file_resolution.cpython-314-pytest-9.0.2.pyc +0 -0
  350. package/pennyfarthing_scripts/tests/__pycache__/test_gate_runner.cpython-314-pytest-9.0.2.pyc +0 -0
  351. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  352. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_e2e.cpython-314-pytest-9.0.2.pyc +0 -0
  353. package/pennyfarthing_scripts/tests/__pycache__/test_resolve_gate_file_field.cpython-314-pytest-9.0.2.pyc +0 -0
  354. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_panel.cpython-314-pytest-9.0.2.pyc +0 -0
  355. package/pennyfarthing_scripts/tests/__pycache__/test_topology_loader.cpython-314-pytest-9.0.2.pyc +0 -0
  356. package/pennyfarthing_scripts/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
  357. package/pennyfarthing_scripts/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
  358. package/pennyfarthing_scripts/tests/__pycache__/test_version_sentinel.cpython-314-pytest-9.0.2.pyc +0 -0
  359. package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
  360. package/pennyfarthing_scripts/tests/test_108_1_gate_migration.py +540 -0
  361. package/pennyfarthing_scripts/tests/test_108_2_remove_handoff_fallback.py +339 -0
  362. package/pennyfarthing_scripts/tests/test_archive_epic.py +1 -2
  363. package/pennyfarthing_scripts/tests/test_confidence_sm_evaluation.py +253 -0
  364. package/pennyfarthing_scripts/tests/test_confidence_sm_gate.py +315 -0
  365. package/pennyfarthing_scripts/tests/test_gate_file_resolution.py +341 -0
  366. package/pennyfarthing_scripts/tests/test_gate_runner.py +620 -0
  367. package/pennyfarthing_scripts/tests/test_handoff_cli.py +929 -0
  368. package/pennyfarthing_scripts/tests/test_handoff_e2e.py +454 -0
  369. package/pennyfarthing_scripts/tests/test_resolve_gate_file_field.py +464 -0
  370. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
  371. package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
  372. package/pennyfarthing_scripts/validate/adapters/skill_command.py +200 -0
  373. package/pennyfarthing_scripts/validate/adapters/workflow.py +64 -0
  374. package/pennyfarthing_scripts/validate/cli.py +15 -4
  375. package/packages/core/dist/benchmark/package-exports.test.d.ts.map +0 -1
  376. package/packages/core/dist/benchmark/package-exports.test.js.map +0 -1
  377. package/packages/core/dist/scripts/benchmark-integration.d.ts +0 -182
  378. package/packages/core/dist/scripts/benchmark-integration.d.ts.map +0 -1
  379. package/packages/core/dist/scripts/benchmark-integration.js +0 -691
  380. package/packages/core/dist/scripts/benchmark-integration.js.map +0 -1
  381. package/packages/core/dist/scripts/benchmark-integration.test.d.ts +0 -13
  382. package/packages/core/dist/scripts/benchmark-integration.test.d.ts.map +0 -1
  383. package/packages/core/dist/scripts/benchmark-integration.test.js +0 -680
  384. package/packages/core/dist/scripts/benchmark-integration.test.js.map +0 -1
  385. package/packages/core/dist/scripts/debugging-scenarios.test.d.ts +0 -18
  386. package/packages/core/dist/scripts/debugging-scenarios.test.d.ts.map +0 -1
  387. package/packages/core/dist/scripts/debugging-scenarios.test.js +0 -317
  388. package/packages/core/dist/scripts/debugging-scenarios.test.js.map +0 -1
  389. package/packages/core/dist/scripts/job-fair-aggregator.d.ts +0 -150
  390. package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +0 -1
  391. package/packages/core/dist/scripts/job-fair-aggregator.js +0 -547
  392. package/packages/core/dist/scripts/job-fair-aggregator.js.map +0 -1
  393. package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts +0 -14
  394. package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts.map +0 -1
  395. package/packages/core/dist/scripts/job-fair-aggregator.test.js +0 -616
  396. package/packages/core/dist/scripts/job-fair-aggregator.test.js.map +0 -1
  397. package/pennyfarthing-dist/agents/handoff.md +0 -250
  398. package/pennyfarthing-dist/agents/sm-handoff.md +0 -152
  399. package/pennyfarthing-dist/scripts/core/handoff-marker.sh +0 -112
  400. package/pennyfarthing-dist/skills/pf-dev-patterns/SKILL.md +0 -461
  401. package/scripts/README.md +0 -41
@@ -1,461 +0,0 @@
1
- ---
2
- name: dev-patterns
3
- description: Common development patterns, fixes, and gotchas. Use when implementing features, debugging issues, or avoiding known pitfalls.
4
- allowed_tools: [Read, Glob, Grep, Task]
5
- ---
6
-
7
- <run>
8
- Reference this skill when implementing features, debugging issues, or avoiding known pitfalls in development. Use these patterns to guide:
9
- - Working directory management in bash commands
10
- - TypeScript type system decisions
11
- - Error handling in Go
12
- - Test structure and isolation
13
- - HTTP status code selection
14
- - Turn-efficient coding practices
15
- - Background task execution
16
-
17
- The patterns capture common gotchas and solutions across multiple languages and frameworks.
18
- </run>
19
-
20
- <output>
21
- Following these patterns produces:
22
- - Reliable bash commands that work regardless of current directory
23
- - TypeScript builds that pass verbatimModuleSyntax validation
24
- - Go code with proper error handling and validation
25
- - Well-isolated, maintainable test suites
26
- - Consistent HTTP API behavior
27
- - Faster task completion through turn-efficient techniques
28
- - Properly tracked background operations
29
- </output>
30
-
31
- # Dev Patterns Skill
32
-
33
- ## Overview
34
-
35
- This skill captures common development patterns, fixes, and gotchas that apply across projects using the pennyfarthing agent framework.
36
-
37
- ## Critical Patterns
38
-
39
- ### Bash Tool Working Directory
40
-
41
- **Problem:** The Bash tool maintains a persistent working directory. Relative `cd` commands fail when already in a different directory.
42
-
43
- **Symptoms:**
44
- - `cd API && just test` fails with "no such file or directory"
45
- - Commands fail because assuming wrong directory
46
-
47
- **Solution:** Always use absolute paths with `$CLAUDE_PROJECT_DIR`:
48
-
49
- ```bash
50
- # WRONG - relative cd fails if you're already somewhere else
51
- cd API && just test
52
-
53
- # CORRECT - absolute path always works
54
- cd $CLAUDE_PROJECT_DIR/API && just test
55
- ```
56
-
57
- **Best Practice:** Explicit `cd` with absolute path in every Bash call:
58
-
59
- ```bash
60
- # Single-repo: from anywhere - always works
61
- cd $CLAUDE_PROJECT_DIR && git push -u origin feat/branch
62
- cd $CLAUDE_PROJECT_DIR && just test
63
-
64
- # Multi-repo: use repo-utils.sh for dynamic lookup
65
- source $CLAUDE_PROJECT_DIR/scripts/repo-utils.sh
66
- cd $CLAUDE_PROJECT_DIR/$(get_repo_path "myrepo") && just test
67
- ```
68
-
69
- ### TypeScript Type Imports
70
-
71
- **Problem:** Build fails with `verbatimModuleSyntax` errors.
72
-
73
- **Solution:** Use `import type` for type-only imports:
74
-
75
- ```typescript
76
- // WRONG - causes build errors
77
- import { User, Ticket } from '@/types';
78
-
79
- // CORRECT
80
- import type { User, Ticket } from '@/types';
81
- ```
82
-
83
- ### Go Error Handling
84
-
85
- **Problem:** Silent failures when errors aren't checked.
86
-
87
- **Solution:** Always handle errors explicitly:
88
-
89
- ```go
90
- // WRONG - ignores error
91
- result, _ := doSomething()
92
-
93
- // CORRECT
94
- result, err := doSomething()
95
- if err != nil {
96
- return fmt.Errorf("doSomething failed: %w", err)
97
- }
98
- ```
99
-
100
- ### UUID Parsing
101
-
102
- **Problem:** Invalid UUIDs cause panics or unexpected behavior.
103
-
104
- **Solution:** Always validate UUID parsing:
105
-
106
- ```go
107
- // WRONG - panics on invalid UUID
108
- id := uuid.MustParse(rawID)
109
-
110
- // CORRECT
111
- id, err := uuid.Parse(rawID)
112
- if err != nil {
113
- return fmt.Errorf("invalid UUID: %w", err)
114
- }
115
- ```
116
-
117
- ## HTTP Status Codes
118
-
119
- Use appropriate status codes consistently:
120
-
121
- | Code | When to Use |
122
- |------|-------------|
123
- | `200 OK` | Successful GET, PUT, PATCH |
124
- | `201 Created` | Successful POST creating new resource |
125
- | `204 No Content` | Successful DELETE |
126
- | `400 Bad Request` | Invalid input (validation errors) |
127
- | `401 Unauthorized` | Missing or invalid authentication |
128
- | `403 Forbidden` | Authenticated but not authorized |
129
- | `404 Not Found` | Resource doesn't exist |
130
- | `409 Conflict` | Resource state conflict (duplicate) |
131
- | `500 Internal Server Error` | Server-side error (always log it!) |
132
-
133
- <details>
134
- <summary><strong>Test Patterns</strong></summary>
135
-
136
- ### Test Isolation
137
-
138
- Each test should:
139
- 1. Set up its own state
140
- 2. Clean up after itself
141
- 3. Not depend on other tests' state
142
-
143
- ```go
144
- func TestCreate(t *testing.T) {
145
- // Setup
146
- db := testutil.NewTestDB(t)
147
- defer db.Cleanup()
148
-
149
- // Test
150
- result, err := Create(db, input)
151
-
152
- // Assert
153
- require.NoError(t, err)
154
- assert.Equal(t, expected, result)
155
- }
156
- ```
157
-
158
- ### Table-Driven Tests
159
-
160
- ```go
161
- func TestValidate(t *testing.T) {
162
- tests := []struct {
163
- name string
164
- input string
165
- wantErr bool
166
- }{
167
- {"valid input", "good", false},
168
- {"empty input", "", true},
169
- {"too long", strings.Repeat("x", 1000), true},
170
- }
171
-
172
- for _, tt := range tests {
173
- t.Run(tt.name, func(t *testing.T) {
174
- err := Validate(tt.input)
175
- if tt.wantErr {
176
- assert.Error(t, err)
177
- } else {
178
- assert.NoError(t, err)
179
- }
180
- })
181
- }
182
- }
183
- ```
184
-
185
- </details>
186
-
187
- ## Common Gotchas
188
-
189
- 1. **Working directory** - Always use `$CLAUDE_PROJECT_DIR` for absolute paths
190
- 2. **Type imports** - Use `import type` for TypeScript types
191
- 3. **Error handling** - Never ignore errors in Go
192
- 4. **UUID parsing** - Always validate, never panic
193
- 5. **Test isolation** - Each test manages its own state
194
-
195
- ## Turn-Efficient Patterns
196
-
197
- Minimize API round-trips by batching operations and parallelizing where possible. Each tool call is a "turn" - fewer turns means faster completion.
198
-
199
- ### Batch Bash Commands
200
-
201
- Chain related commands with `&&` instead of separate calls:
202
-
203
- ```bash
204
- # INEFFICIENT - 3 turns
205
- git status
206
- git branch --show-current
207
- git log -1 --oneline
208
-
209
- # EFFICIENT - 1 turn
210
- git status && git branch --show-current && git log -1 --oneline
211
- ```
212
-
213
- For git workflows, batch the entire operation:
214
-
215
- ```bash
216
- # INEFFICIENT - 3 turns
217
- git add .
218
- git commit -m "feat: add feature"
219
- git push -u origin $(git branch --show-current)
220
-
221
- # EFFICIENT - 1 turn
222
- git add . && git commit -m "feat: add feature" && git push -u origin $(git branch --show-current)
223
- ```
224
-
225
- ### Parallel Tool Calls
226
-
227
- When operations are independent, invoke multiple tools in the same turn:
228
-
229
- ```
230
- # INEFFICIENT - 3 sequential turns
231
- Turn 1: Read file A
232
- Turn 2: Read file B
233
- Turn 3: Read file C
234
-
235
- # EFFICIENT - 1 parallel turn
236
- Turn 1: Read file A, Read file B, Read file C (parallel)
237
- ```
238
-
239
- **When to parallelize:**
240
- - Reading multiple independent files
241
- - Spawning subagents that don't depend on each other's results
242
- - Running Glob and Grep searches simultaneously
243
- - Fetching multiple web resources
244
-
245
- **When NOT to parallelize:**
246
- - Operations where later calls depend on earlier results
247
- - Writes that might conflict
248
- - Sequential logic (must read before edit)
249
-
250
- ### Smart File Operations
251
-
252
- Use Grep's internal file reading instead of Read + manual search:
253
-
254
- ```bash
255
- # INEFFICIENT - 2 turns
256
- Turn 1: Read entire file
257
- Turn 2: (mentally search for pattern)
258
-
259
- # EFFICIENT - 1 turn with context
260
- Grep pattern with -C 5 for context
261
- ```
262
-
263
- Use Glob with brace expansion for multiple patterns:
264
-
265
- ```bash
266
- # INEFFICIENT - 2 turns
267
- Glob: **/*.ts
268
- Glob: **/*.tsx
269
-
270
- # EFFICIENT - 1 turn
271
- Glob: **/*.{ts,tsx}
272
- ```
273
-
274
- <details>
275
- <summary><strong>Compound Subagents</strong></summary>
276
-
277
- Design subagents to do multiple related steps in one spawn:
278
-
279
- ```yaml
280
- # INEFFICIENT - 2 subagent spawns
281
- Spawn 1: sm-setup MODE=research
282
- Spawn 2: sm-file-summary
283
-
284
- # EFFICIENT - 1 compound subagent
285
- Spawn 1: (combined research + file-summary subagent)
286
- ```
287
-
288
- **Good candidates for combining:**
289
- - Preflight checks + handoff updates
290
- - Status gathering + session file updates
291
- - Test running + result parsing
292
-
293
- **Creating Compound Subagents:**
294
-
295
- When you notice a pattern of sequential subagent calls, consider creating a compound subagent:
296
-
297
- 1. **Identify the pattern:** Look for repeated sequences like "always call A then B"
298
- 2. **Check dependencies:** Can B start before A completes? If yes, parallelize instead.
299
- 3. **Create combined prompt:** Merge both subagents' responsibilities into one
300
-
301
- **Example: Compound Preflight + Handoff**
302
-
303
- Instead of:
304
- ```yaml
305
- # Turn 1: Preflight
306
- Task tool:
307
- subagent_type: "reviewer-preflight"
308
- prompt: |
309
- STORY_ID: X-Y
310
- ...
311
-
312
- # Turn 2: Wait for result, then handoff
313
- Task tool:
314
- subagent_type: "reviewer-handoff-approve"
315
- prompt: |
316
- STORY_ID: X-Y
317
- ...
318
- ```
319
-
320
- Create a compound definition that does both:
321
- ```yaml
322
- Task tool:
323
- subagent_type: "general-purpose"
324
- model: "haiku"
325
- prompt: |
326
- You are a combined preflight + handoff assistant.
327
-
328
- ## Phase 1: Pre-flight checks
329
- [Include preflight steps]
330
-
331
- ## Phase 2: If all checks pass, complete handoff
332
- [Include handoff steps]
333
-
334
- ## Output
335
- Report: preflight results + handoff status
336
- ```
337
-
338
- **When NOT to combine:**
339
- - When steps need human review between them (e.g., reviewer assessment before handoff)
340
- - When the first step might fail often (better to fail fast)
341
- - When prompts are already long (context limits)
342
-
343
- </details>
344
-
345
- ### Turn Budget Guidelines
346
-
347
- | Story Size | Target Turns |
348
- |------------|--------------|
349
- | 1 point (trivial) | 10-15 |
350
- | 2 points (small) | 15-25 |
351
- | 3 points (medium) | 25-35 |
352
- | 5 points (large) | 35-50 |
353
-
354
- **Techniques to reduce turns:**
355
- 1. Batch bash commands with `&&`
356
- 2. Read multiple files in parallel
357
- 3. Use Grep with context instead of Read + search
358
- 4. Combine related subagent work
359
- 5. Use brace expansion in Glob patterns
360
- 6. Spawn independent subagents in parallel
361
- 7. Run tests in background while continuing work
362
-
363
- <details>
364
- <summary><strong>Background Subagent Execution</strong></summary>
365
-
366
- Run slow operations in background to continue working:
367
-
368
- ```yaml
369
- # Spawn tests in background
370
- Task tool:
371
- subagent_type: "testing-runner"
372
- run_in_background: true
373
- prompt: |
374
- REPOS: all
375
- CONTEXT: Background test run
376
- RUN_ID: bg-001
377
- SKIP_CACHE_WRITE: true
378
- ```
379
-
380
- **Check status without blocking:**
381
- ```yaml
382
- TaskOutput tool:
383
- task_id: {task_id}
384
- block: false
385
- timeout: 1000
386
- ```
387
-
388
- **When to use background execution:**
389
- - Test runs while writing more code
390
- - Multiple independent file searches
391
- - Parallel exploration of code paths
392
- - Long-running git operations
393
-
394
- **When NOT to use:**
395
- - Operations where next steps depend on the result
396
- - Operations that modify shared state
397
- - Before commit (need to verify GREEN)
398
- - During handoff (need synchronous verification)
399
-
400
- </details>
401
-
402
- <details>
403
- <summary><strong>Background Task Tracking</strong></summary>
404
-
405
- Use the background task tracking utilities to manage session file entries:
406
-
407
- ```bash
408
- source $CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/background-tasks.sh
409
- SESSION_FILE="$CLAUDE_PROJECT_DIR/.session/${STORY_ID}-session.md"
410
-
411
- # After spawning background task, record it:
412
- bg_task_add "$SESSION_FILE" "$TASK_ID" "testing-runner" "Background test run"
413
-
414
- # After checking TaskOutput, update status:
415
- bg_task_update "$SESSION_FILE" "$TASK_ID" "completed" # or "error"
416
-
417
- # Clean up finished tasks:
418
- bg_task_cleanup "$SESSION_FILE"
419
- ```
420
-
421
- **Available functions:**
422
- | Function | Purpose |
423
- |----------|---------|
424
- | `bg_task_add` | Record new background task |
425
- | `bg_task_update` | Update task status (running/completed/error) |
426
- | `bg_task_cleanup` | Remove completed and errored tasks |
427
- | `bg_task_list` | Show all running tasks |
428
- | `bg_task_check` | Return 0 if any tasks running (for conditionals) |
429
- | `bg_task_summary` | Print counts by status |
430
-
431
- **Lifecycle:**
432
- 1. Spawn with `run_in_background: true`
433
- 2. Record: `bg_task_add "$SESSION_FILE" "$TASK_ID" "type" "description"`
434
- 3. Continue other work
435
- 4. Periodically check `TaskOutput` with `block: false`
436
- 5. Update: `bg_task_update "$SESSION_FILE" "$TASK_ID" "completed"`
437
- 6. Cleanup: `bg_task_cleanup "$SESSION_FILE"`
438
-
439
- </details>
440
-
441
- <details>
442
- <summary><strong>Example: Background Tests While Implementing</strong></summary>
443
-
444
- ```
445
- Turn 1: Spawn testing-runner in background, continue editing
446
- Turn 2: Make code changes
447
- Turn 3: Check TaskOutput (still running), continue editing
448
- Turn 4: Make more changes
449
- Turn 5: Check TaskOutput (complete, GREEN), proceed to commit
450
- ```
451
-
452
- This pattern saves turns by overlapping test execution with implementation work.
453
-
454
- </details>
455
-
456
- ## Project Customization
457
-
458
- Projects should create their own dev-patterns skill in `.claude/project/skills/dev-patterns/` with:
459
- - Project-specific patterns and conventions
460
- - Known pitfalls for the tech stack
461
- - File location conventions
package/scripts/README.md DELETED
@@ -1,41 +0,0 @@
1
- # Meta Scripts
2
-
3
- **These scripts are NOT distributed to users.** They are for Pennyfarthing framework development only.
4
-
5
- ## Contents
6
-
7
- | Script | Purpose |
8
- |--------|---------|
9
- | `deploy.sh` | Release Pennyfarthing (version bump, tag, push, GitHub release) |
10
- | `cyclist-debug.mjs` | Debug Cyclist connection |
11
- | `handoff-cli.{sh,js}` | Test handoff flow |
12
- | `verify-visual-mapping.js` | Verify theme visual mappings |
13
- | `migrate-assets-to-slug.sh` | One-time migration script |
14
- | `resize-portraits.sh` | Resize portrait images |
15
- | `resolve-portrait.mjs` | Portrait resolution logic |
16
- | `validate-refs.js` | Validate internal references |
17
-
18
- > Benchmark scripts have been moved to `packages/benchmark/`.
19
-
20
- ## Usage
21
-
22
- Run from pennyfarthing repo root:
23
-
24
- ```bash
25
- # Release a new version
26
- ./scripts/deploy.sh --dry-run patch
27
- ./scripts/deploy.sh patch
28
- ```
29
-
30
- ## Where Should My Script Go?
31
-
32
- **Put it here if:**
33
- - It's for framework development/CI only
34
- - Users should NOT have access to it
35
- - It uses GPU/heavy dependencies (keep in meta, not distributed)
36
-
37
- **Put it in `pennyfarthing-dist/scripts/` if:**
38
- - Users need it for their workflows
39
- - It's part of the sprint/story/jira tooling
40
-
41
- See `CLAUDE.md` for the full decision tree.