@pennyfarthing/core 7.0.2 → 7.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/LICENSE +14 -0
  2. package/README.md +2 -2
  3. package/package.json +11 -10
  4. package/packages/core/dist/cli/commands/cyclist.d.ts +2 -2
  5. package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -1
  6. package/packages/core/dist/cli/commands/cyclist.js +8 -9
  7. package/packages/core/dist/cli/commands/cyclist.js.map +1 -1
  8. package/packages/core/dist/cli/commands/cyclist.test.js +6 -4
  9. package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -1
  10. package/packages/core/dist/cli/commands/init.js +4 -3
  11. package/packages/core/dist/cli/commands/init.js.map +1 -1
  12. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  13. package/packages/core/dist/cli/commands/update.js +15 -139
  14. package/packages/core/dist/cli/commands/update.js.map +1 -1
  15. package/packages/core/dist/cli/cyclist-migration.test.js +4 -3
  16. package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -1
  17. package/packages/core/dist/cli/utils/constants.d.ts +7 -1
  18. package/packages/core/dist/cli/utils/constants.d.ts.map +1 -1
  19. package/packages/core/dist/cli/utils/constants.js +4 -2
  20. package/packages/core/dist/cli/utils/constants.js.map +1 -1
  21. package/packages/core/dist/cli/utils/node-modules.d.ts.map +1 -1
  22. package/packages/core/dist/cli/utils/node-modules.js +2 -1
  23. package/packages/core/dist/cli/utils/node-modules.js.map +1 -1
  24. package/packages/core/dist/cli/utils/themes.d.ts +1 -4
  25. package/packages/core/dist/cli/utils/themes.d.ts.map +1 -1
  26. package/packages/core/dist/cli/utils/themes.js +2 -22
  27. package/packages/core/dist/cli/utils/themes.js.map +1 -1
  28. package/packages/core/dist/cli/utils/themes.test.d.ts +3 -3
  29. package/packages/core/dist/cli/utils/themes.test.js +16 -13
  30. package/packages/core/dist/cli/utils/themes.test.js.map +1 -1
  31. package/packages/core/dist/cli/workspace.test.js +11 -9
  32. package/packages/core/dist/cli/workspace.test.js.map +1 -1
  33. package/packages/core/dist/index.d.ts +1 -0
  34. package/packages/core/dist/index.d.ts.map +1 -1
  35. package/packages/core/dist/index.js +10 -0
  36. package/packages/core/dist/index.js.map +1 -1
  37. package/packages/core/dist/jira/jira-epic-creation.d.ts +109 -0
  38. package/packages/core/dist/jira/jira-epic-creation.d.ts.map +1 -0
  39. package/packages/core/dist/jira/jira-epic-creation.js +253 -0
  40. package/packages/core/dist/jira/jira-epic-creation.js.map +1 -0
  41. package/packages/core/dist/jira/jira-epic-creation.test.d.ts +16 -0
  42. package/packages/core/dist/jira/jira-epic-creation.test.d.ts.map +1 -0
  43. package/packages/core/dist/jira/jira-epic-creation.test.js +387 -0
  44. package/packages/core/dist/jira/jira-epic-creation.test.js.map +1 -0
  45. package/packages/core/dist/jira/jira-sprint-sync.d.ts +247 -0
  46. package/packages/core/dist/jira/jira-sprint-sync.d.ts.map +1 -0
  47. package/packages/core/dist/jira/jira-sprint-sync.js +670 -0
  48. package/packages/core/dist/jira/jira-sprint-sync.js.map +1 -0
  49. package/packages/core/dist/jira/jira-sprint-sync.test.d.ts +16 -0
  50. package/packages/core/dist/jira/jira-sprint-sync.test.d.ts.map +1 -0
  51. package/packages/core/dist/jira/jira-sprint-sync.test.js +845 -0
  52. package/packages/core/dist/jira/jira-sprint-sync.test.js.map +1 -0
  53. package/packages/core/dist/scripts/generate-spider.d.ts +11 -1
  54. package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -1
  55. package/packages/core/dist/scripts/generate-spider.js +24 -1
  56. package/packages/core/dist/scripts/generate-spider.js.map +1 -1
  57. package/packages/core/dist/scripts/generate-spider.test.js +6 -4
  58. package/packages/core/dist/scripts/generate-spider.test.js.map +1 -1
  59. package/packages/core/dist/workflow/gate-handler.d.ts +94 -0
  60. package/packages/core/dist/workflow/gate-handler.d.ts.map +1 -0
  61. package/packages/core/dist/workflow/gate-handler.js +189 -0
  62. package/packages/core/dist/workflow/gate-handler.js.map +1 -0
  63. package/packages/core/dist/workflow/gate-handler.test.d.ts +14 -0
  64. package/packages/core/dist/workflow/gate-handler.test.d.ts.map +1 -0
  65. package/packages/core/dist/workflow/gate-handler.test.js +543 -0
  66. package/packages/core/dist/workflow/gate-handler.test.js.map +1 -0
  67. package/packages/core/dist/workflow/generic-handoff.d.ts +46 -0
  68. package/packages/core/dist/workflow/generic-handoff.d.ts.map +1 -1
  69. package/packages/core/dist/workflow/generic-handoff.js +53 -0
  70. package/packages/core/dist/workflow/generic-handoff.js.map +1 -1
  71. package/packages/core/dist/workflow/generic-handoff.test.js +2 -2
  72. package/packages/core/dist/workflow/generic-handoff.test.js.map +1 -1
  73. package/packages/core/dist/workflow/handoff.d.ts +281 -0
  74. package/packages/core/dist/workflow/handoff.d.ts.map +1 -0
  75. package/packages/core/dist/workflow/handoff.js +411 -0
  76. package/packages/core/dist/workflow/handoff.js.map +1 -0
  77. package/packages/core/dist/workflow/handoff.test.d.ts +21 -0
  78. package/packages/core/dist/workflow/handoff.test.d.ts.map +1 -0
  79. package/packages/core/dist/workflow/handoff.test.js +499 -0
  80. package/packages/core/dist/workflow/handoff.test.js.map +1 -0
  81. package/packages/core/dist/workflow/index.d.ts +16 -0
  82. package/packages/core/dist/workflow/index.d.ts.map +1 -0
  83. package/packages/core/dist/workflow/index.js +24 -0
  84. package/packages/core/dist/workflow/index.js.map +1 -0
  85. package/packages/core/dist/workflow/session-state.d.ts +92 -0
  86. package/packages/core/dist/workflow/session-state.d.ts.map +1 -0
  87. package/packages/core/dist/workflow/session-state.js +198 -0
  88. package/packages/core/dist/workflow/session-state.js.map +1 -0
  89. package/packages/core/dist/workflow/session-state.test.d.ts +8 -0
  90. package/packages/core/dist/workflow/session-state.test.d.ts.map +1 -0
  91. package/packages/core/dist/workflow/session-state.test.js +551 -0
  92. package/packages/core/dist/workflow/session-state.test.js.map +1 -0
  93. package/packages/core/dist/workflow/sm-subagents.test.d.ts +2 -2
  94. package/packages/core/dist/workflow/sm-subagents.test.js +6 -6
  95. package/packages/core/dist/workflow/sm-subagents.test.js.map +1 -1
  96. package/packages/core/dist/workflow/step-parser.d.ts +45 -0
  97. package/packages/core/dist/workflow/step-parser.d.ts.map +1 -0
  98. package/packages/core/dist/workflow/step-parser.js +147 -0
  99. package/packages/core/dist/workflow/step-parser.js.map +1 -0
  100. package/packages/core/dist/workflow/step-parser.test.d.ts +14 -0
  101. package/packages/core/dist/workflow/step-parser.test.d.ts.map +1 -0
  102. package/packages/core/dist/workflow/step-parser.test.js +470 -0
  103. package/packages/core/dist/workflow/step-parser.test.js.map +1 -0
  104. package/packages/core/dist/workflow/trimodal.d.ts +86 -0
  105. package/packages/core/dist/workflow/trimodal.d.ts.map +1 -0
  106. package/packages/core/dist/workflow/trimodal.js +118 -0
  107. package/packages/core/dist/workflow/trimodal.js.map +1 -0
  108. package/packages/core/dist/workflow/trimodal.test.d.ts +11 -0
  109. package/packages/core/dist/workflow/trimodal.test.d.ts.map +1 -0
  110. package/packages/core/dist/workflow/trimodal.test.js +395 -0
  111. package/packages/core/dist/workflow/trimodal.test.js.map +1 -0
  112. package/packages/core/dist/workflow/variable-resolver.d.ts +67 -0
  113. package/packages/core/dist/workflow/variable-resolver.d.ts.map +1 -0
  114. package/packages/core/dist/workflow/variable-resolver.js +156 -0
  115. package/packages/core/dist/workflow/variable-resolver.js.map +1 -0
  116. package/packages/core/dist/workflow/variable-resolver.test.d.ts +14 -0
  117. package/packages/core/dist/workflow/variable-resolver.test.d.ts.map +1 -0
  118. package/packages/core/dist/workflow/variable-resolver.test.js +400 -0
  119. package/packages/core/dist/workflow/variable-resolver.test.js.map +1 -0
  120. package/packages/core/dist/workflow/workflow-executor.d.ts +163 -0
  121. package/packages/core/dist/workflow/workflow-executor.d.ts.map +1 -0
  122. package/packages/core/dist/workflow/workflow-executor.js +197 -0
  123. package/packages/core/dist/workflow/workflow-executor.js.map +1 -0
  124. package/packages/core/dist/workflow/workflow-executor.test.d.ts +8 -0
  125. package/packages/core/dist/workflow/workflow-executor.test.d.ts.map +1 -0
  126. package/packages/core/dist/workflow/workflow-executor.test.js +444 -0
  127. package/packages/core/dist/workflow/workflow-executor.test.js.map +1 -0
  128. package/packages/core/dist/workflow/workflow-loader.test.js +5 -5
  129. package/packages/core/dist/workflow/workflow-loader.test.js.map +1 -1
  130. package/packages/core/dist/workflow/workflow-migration.test.js +8 -9
  131. package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -1
  132. package/packages/core/dist/workflow/workflow-permissions.d.ts +55 -0
  133. package/packages/core/dist/workflow/workflow-permissions.d.ts.map +1 -0
  134. package/packages/core/dist/workflow/workflow-permissions.js +64 -0
  135. package/packages/core/dist/workflow/workflow-permissions.js.map +1 -0
  136. package/packages/core/dist/workflow/workflow-permissions.test.d.ts +15 -0
  137. package/packages/core/dist/workflow/workflow-permissions.test.d.ts.map +1 -0
  138. package/packages/core/dist/workflow/workflow-permissions.test.js +301 -0
  139. package/packages/core/dist/workflow/workflow-permissions.test.js.map +1 -0
  140. package/packages/core/dist/workflow/workflow-schema.d.ts +61 -2
  141. package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -1
  142. package/packages/core/dist/workflow/workflow-schema.js +293 -69
  143. package/packages/core/dist/workflow/workflow-schema.js.map +1 -1
  144. package/packages/core/dist/workflow/workflow-schema.test.js +6 -6
  145. package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -1
  146. package/packages/core/dist/workflow/workflow-stepped-schema.test.d.ts +18 -0
  147. package/packages/core/dist/workflow/workflow-stepped-schema.test.d.ts.map +1 -0
  148. package/packages/core/dist/workflow/workflow-stepped-schema.test.js +608 -0
  149. package/packages/core/dist/workflow/workflow-stepped-schema.test.js.map +1 -0
  150. package/pennyfarthing-dist/agents/README.md +63 -134
  151. package/pennyfarthing-dist/agents/architect.md +18 -10
  152. package/pennyfarthing-dist/agents/dev.md +47 -32
  153. package/pennyfarthing-dist/agents/devops.md +18 -9
  154. package/pennyfarthing-dist/agents/handoff.md +289 -0
  155. package/pennyfarthing-dist/agents/orchestrator.md +44 -22
  156. package/pennyfarthing-dist/agents/pm.md +13 -8
  157. package/pennyfarthing-dist/agents/reviewer-preflight.md +42 -128
  158. package/pennyfarthing-dist/agents/reviewer.md +104 -57
  159. package/pennyfarthing-dist/agents/sm-file-summary.md +24 -75
  160. package/pennyfarthing-dist/agents/sm-finish.md +61 -0
  161. package/pennyfarthing-dist/agents/sm-handoff.md +102 -54
  162. package/pennyfarthing-dist/agents/sm-setup.md +174 -0
  163. package/pennyfarthing-dist/agents/sm.md +223 -100
  164. package/pennyfarthing-dist/agents/tea.md +42 -34
  165. package/pennyfarthing-dist/agents/tech-writer.md +74 -6
  166. package/pennyfarthing-dist/agents/testing-runner.md +78 -360
  167. package/pennyfarthing-dist/agents/ux-designer.md +80 -7
  168. package/pennyfarthing-dist/agents/workflow-status-check.md +35 -299
  169. package/pennyfarthing-dist/commands/architect.md +2 -2
  170. package/pennyfarthing-dist/commands/close-epic.md +5 -2
  171. package/pennyfarthing-dist/commands/create-branches-from-story.md +7 -23
  172. package/pennyfarthing-dist/commands/dev.md +2 -2
  173. package/pennyfarthing-dist/commands/devops.md +3 -3
  174. package/pennyfarthing-dist/commands/git-cleanup.md +5 -5
  175. package/pennyfarthing-dist/commands/health-check.md +1 -1
  176. package/pennyfarthing-dist/commands/list-themes.md +7 -3
  177. package/pennyfarthing-dist/commands/orchestrator.md +2 -2
  178. package/pennyfarthing-dist/commands/parallel-work.md +4 -4
  179. package/pennyfarthing-dist/commands/pm.md +2 -2
  180. package/pennyfarthing-dist/commands/prime.md +7 -7
  181. package/pennyfarthing-dist/commands/release.md +1 -1
  182. package/pennyfarthing-dist/commands/repo-status.md +2 -2
  183. package/pennyfarthing-dist/commands/retro.md +2 -2
  184. package/pennyfarthing-dist/commands/reviewer.md +2 -2
  185. package/pennyfarthing-dist/commands/set-theme.md +5 -1
  186. package/pennyfarthing-dist/commands/sm.md +2 -2
  187. package/pennyfarthing-dist/commands/start-epic.md +26 -14
  188. package/pennyfarthing-dist/commands/sync-epic-to-jira.md +8 -8
  189. package/pennyfarthing-dist/commands/sync-work-with-sprint.md +1 -4
  190. package/pennyfarthing-dist/commands/tea.md +2 -2
  191. package/pennyfarthing-dist/commands/tech-writer.md +2 -2
  192. package/pennyfarthing-dist/commands/ux-designer.md +3 -3
  193. package/pennyfarthing-dist/commands/work.md +15 -4
  194. package/pennyfarthing-dist/commands/workflow.md +21 -0
  195. package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +15 -15
  196. package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +1 -1
  197. package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +4 -4
  198. package/pennyfarthing-dist/guides/agent-behavior.md +238 -0
  199. package/pennyfarthing-dist/guides/agent-template-strategic.md +2 -2
  200. package/pennyfarthing-dist/guides/agent-template-tactical.md +4 -4
  201. package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +1 -1
  202. package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +17 -17
  203. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +8 -8
  204. package/pennyfarthing-dist/guides/workflow-schema.md +62 -0
  205. package/pennyfarthing-dist/guides/worktree-mode.md +5 -5
  206. package/pennyfarthing-dist/personas/themes/1984.yaml +1 -1
  207. package/pennyfarthing-dist/personas/themes/a-team.yaml +1 -1
  208. package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +1 -1
  209. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +1 -1
  210. package/pennyfarthing-dist/personas/themes/all-stars.yaml +1 -1
  211. package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +1 -1
  212. package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +1 -1
  213. package/pennyfarthing-dist/personas/themes/arcane.yaml +1 -1
  214. package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +1 -1
  215. package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +1 -1
  216. package/pennyfarthing-dist/personas/themes/babylon-5.yaml +1 -1
  217. package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +1 -1
  218. package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +1 -1
  219. package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +2 -2
  220. package/pennyfarthing-dist/personas/themes/black-sails.yaml +1 -1
  221. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +1 -1
  222. package/pennyfarthing-dist/personas/themes/bobiverse.yaml +1 -1
  223. package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +1 -1
  224. package/pennyfarthing-dist/personas/themes/catch-22.yaml +1 -1
  225. package/pennyfarthing-dist/personas/themes/classical-composers.yaml +1 -1
  226. package/pennyfarthing-dist/personas/themes/control.yaml +1 -1
  227. package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +1 -1
  228. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +1 -1
  229. package/pennyfarthing-dist/personas/themes/deadwood.yaml +2 -2
  230. package/pennyfarthing-dist/personas/themes/discworld.yaml +2 -2
  231. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +1 -1
  232. package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +1 -1
  233. package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +1 -1
  234. package/pennyfarthing-dist/personas/themes/firefly.yaml +1 -1
  235. package/pennyfarthing-dist/personas/themes/foundation.yaml +1 -1
  236. package/pennyfarthing-dist/personas/themes/futurama.yaml +1 -1
  237. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +2 -2
  238. package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +1 -1
  239. package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +1 -1
  240. package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +1 -1
  241. package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +1 -1
  242. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +2 -2
  243. package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +1 -1
  244. package/pennyfarthing-dist/personas/themes/historical-figures.yaml +1 -1
  245. package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +1 -1
  246. package/pennyfarthing-dist/personas/themes/house-md.yaml +1 -1
  247. package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +1 -1
  248. package/pennyfarthing-dist/personas/themes/jane-austen.yaml +1 -1
  249. package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +1 -1
  250. package/pennyfarthing-dist/personas/themes/justified.yaml +1 -1
  251. package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +1 -1
  252. package/pennyfarthing-dist/personas/themes/les-miserables.yaml +1 -1
  253. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +1 -1
  254. package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +1 -1
  255. package/pennyfarthing-dist/personas/themes/mad-men.yaml +1 -1
  256. package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +1 -1
  257. package/pennyfarthing-dist/personas/themes/mash.yaml +69 -66
  258. package/pennyfarthing-dist/personas/themes/mass-effect.yaml +1 -1
  259. package/pennyfarthing-dist/personas/themes/military-commanders.yaml +1 -1
  260. package/pennyfarthing-dist/personas/themes/moby-dick.yaml +1 -1
  261. package/pennyfarthing-dist/personas/themes/monty-python.yaml +1 -1
  262. package/pennyfarthing-dist/personas/themes/neuromancer.yaml +1 -1
  263. package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +1 -1
  264. package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +1 -1
  265. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +1 -1
  266. package/pennyfarthing-dist/personas/themes/rome.yaml +1 -1
  267. package/pennyfarthing-dist/personas/themes/russian-masters.yaml +1 -1
  268. package/pennyfarthing-dist/personas/themes/sandman.yaml +1 -1
  269. package/pennyfarthing-dist/personas/themes/shakespeare.yaml +1 -1
  270. package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +1 -1
  271. package/pennyfarthing-dist/personas/themes/snow-crash.yaml +1 -1
  272. package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +1 -1
  273. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +1 -1
  274. package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +1 -1
  275. package/pennyfarthing-dist/personas/themes/star-wars.yaml +1 -1
  276. package/pennyfarthing-dist/personas/themes/superfriends.yaml +1 -1
  277. package/pennyfarthing-dist/personas/themes/the-americans.yaml +1 -1
  278. package/pennyfarthing-dist/personas/themes/the-crown.yaml +1 -1
  279. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +1 -1
  280. package/pennyfarthing-dist/personas/themes/the-good-place.yaml +1 -1
  281. package/pennyfarthing-dist/personas/themes/the-office.yaml +1 -1
  282. package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +1 -1
  283. package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +1 -1
  284. package/pennyfarthing-dist/personas/themes/the-wire.yaml +1 -1
  285. package/pennyfarthing-dist/personas/themes/the-witcher.yaml +1 -1
  286. package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +1 -1
  287. package/pennyfarthing-dist/personas/themes/west-wing.yaml +1 -1
  288. package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +1 -1
  289. package/pennyfarthing-dist/scripts/README.md +68 -0
  290. package/pennyfarthing-dist/scripts/core/README.md +26 -0
  291. package/pennyfarthing-dist/scripts/{agent-session.sh → core/agent-session.sh} +34 -23
  292. package/pennyfarthing-dist/scripts/{check-context.sh → core/check-context.sh} +93 -37
  293. package/pennyfarthing-dist/scripts/core/handoff-marker.sh +90 -0
  294. package/pennyfarthing-dist/scripts/core/prime.sh +136 -0
  295. package/pennyfarthing-dist/scripts/core/run.sh +75 -0
  296. package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +21 -0
  297. package/pennyfarthing-dist/scripts/git/README.md +25 -0
  298. package/pennyfarthing-dist/scripts/{utils → git}/create-feature-branches.sh +11 -15
  299. package/pennyfarthing-dist/scripts/{utils → git}/git-status-all.sh +1 -1
  300. package/pennyfarthing-dist/scripts/{install-git-hooks.sh → git/install-git-hooks.sh} +0 -0
  301. package/pennyfarthing-dist/scripts/{release.sh → git/release.sh} +0 -0
  302. package/pennyfarthing-dist/scripts/{worktree-manager.sh → git/worktree-manager.sh} +0 -4
  303. package/pennyfarthing-dist/scripts/hooks/README.md +32 -0
  304. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +3 -4
  305. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +1 -2
  306. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +0 -0
  307. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +1 -1
  308. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +0 -0
  309. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +0 -0
  310. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +0 -0
  311. package/pennyfarthing-dist/scripts/hooks/session-start.sh +2 -3
  312. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +2 -3
  313. package/pennyfarthing-dist/scripts/jira/README.md +33 -0
  314. package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +101 -0
  315. package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +97 -0
  316. package/pennyfarthing-dist/scripts/jira/jira-bidirectional-sync.mjs +327 -0
  317. package/pennyfarthing-dist/scripts/jira/jira-bidirectional-sync.test.mjs +503 -0
  318. package/pennyfarthing-dist/scripts/{utils → jira}/jira-claim-story.sh +8 -6
  319. package/pennyfarthing-dist/scripts/{utils/jira → jira}/jira-lib.mjs +10 -10
  320. package/pennyfarthing-dist/scripts/{utils → jira}/jira-lib.sh +18 -17
  321. package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +266 -0
  322. package/pennyfarthing-dist/scripts/{utils/jira → jira}/jira-sync-story.mjs +14 -14
  323. package/pennyfarthing-dist/scripts/{utils → jira}/jira-sync-story.sh +0 -0
  324. package/pennyfarthing-dist/scripts/{utils/jira → jira}/jira-sync.mjs +4 -4
  325. package/pennyfarthing-dist/scripts/{utils → jira}/jira-sync.sh +0 -0
  326. package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +104 -0
  327. package/pennyfarthing-dist/scripts/{utils → jira}/sync-epic-to-jira.sh +1 -1
  328. package/pennyfarthing-dist/scripts/lib/README.md +29 -0
  329. package/pennyfarthing-dist/scripts/{utils → lib}/background-tasks.sh +1 -1
  330. package/pennyfarthing-dist/scripts/{utils → lib}/checkpoint.sh +0 -0
  331. package/pennyfarthing-dist/scripts/{utils → lib}/common.sh +1 -1
  332. package/pennyfarthing-dist/scripts/{utils → lib}/file-lock.sh +0 -0
  333. package/pennyfarthing-dist/scripts/{utils → lib}/find-root.sh +7 -5
  334. package/pennyfarthing-dist/scripts/{utils → lib}/logging.sh +0 -0
  335. package/pennyfarthing-dist/scripts/{utils → lib}/retry.sh +0 -0
  336. package/pennyfarthing-dist/scripts/misc/README.md +44 -0
  337. package/pennyfarthing-dist/scripts/{add-short-names.mjs → misc/add-short-names.mjs} +0 -0
  338. package/pennyfarthing-dist/scripts/misc/backlog.sh +91 -0
  339. package/pennyfarthing-dist/scripts/{utils → misc}/check-status.sh +4 -8
  340. package/pennyfarthing-dist/scripts/{deploy.sh → misc/deploy.sh} +0 -0
  341. package/pennyfarthing-dist/scripts/{doctor-dogfood.sh → misc/doctor-dogfood.sh} +2 -5
  342. package/pennyfarthing-dist/scripts/{utils → misc}/find-related-work.sh +0 -0
  343. package/pennyfarthing-dist/scripts/{utils → misc}/generate-skill-docs.sh +0 -0
  344. package/pennyfarthing-dist/scripts/{utils → misc}/log-skill-usage.sh +0 -0
  345. package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.mjs +474 -0
  346. package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +9 -0
  347. package/pennyfarthing-dist/scripts/{utils → misc}/repo-scan.sh +0 -0
  348. package/pennyfarthing-dist/scripts/{repo-utils.sh → misc/repo-utils.sh} +2 -2
  349. package/pennyfarthing-dist/scripts/{run-ci.sh → misc/run-ci.sh} +0 -0
  350. package/pennyfarthing-dist/scripts/{utils → misc}/run-timestamp.sh +0 -0
  351. package/pennyfarthing-dist/scripts/{utils → misc}/session-cleanup.sh +0 -0
  352. package/pennyfarthing-dist/scripts/{utils → misc}/skill-usage-report.sh +0 -0
  353. package/pennyfarthing-dist/scripts/{statusline.sh → misc/statusline.sh} +2 -7
  354. package/pennyfarthing-dist/scripts/{uninstall.sh → misc/uninstall.sh} +4 -5
  355. package/pennyfarthing-dist/scripts/{utils → misc}/validate-subagent-frontmatter.sh +3 -3
  356. package/pennyfarthing-dist/scripts/sprint/README.md +29 -0
  357. package/pennyfarthing-dist/scripts/sprint/archive-story.sh +135 -0
  358. package/pennyfarthing-dist/scripts/sprint/available-stories.sh +97 -0
  359. package/pennyfarthing-dist/scripts/sprint/check-story.sh +164 -0
  360. package/pennyfarthing-dist/scripts/sprint/get-epic-field.sh +58 -0
  361. package/pennyfarthing-dist/scripts/sprint/get-story-field.sh +69 -0
  362. package/pennyfarthing-dist/scripts/sprint/list-future.sh +151 -0
  363. package/pennyfarthing-dist/scripts/sprint/new-sprint.sh +116 -0
  364. package/pennyfarthing-dist/scripts/sprint/promote-epic.sh +164 -0
  365. package/pennyfarthing-dist/scripts/{utils → sprint}/sprint-common.sh +135 -0
  366. package/pennyfarthing-dist/scripts/sprint/sprint-info.sh +39 -0
  367. package/pennyfarthing-dist/scripts/{utils → sprint}/sprint-metrics.sh +0 -0
  368. package/pennyfarthing-dist/scripts/sprint/sprint-status.sh +134 -0
  369. package/pennyfarthing-dist/scripts/story/README.md +23 -0
  370. package/pennyfarthing-dist/scripts/story/create-story.sh +159 -0
  371. package/pennyfarthing-dist/scripts/story/size-story.sh +198 -0
  372. package/pennyfarthing-dist/scripts/story/story-template.sh +162 -0
  373. package/pennyfarthing-dist/scripts/test/README.md +23 -0
  374. package/pennyfarthing-dist/scripts/{utils → test}/swebench-judge.py +0 -0
  375. package/pennyfarthing-dist/scripts/test/test-cache.sh +165 -0
  376. package/pennyfarthing-dist/scripts/{utils → test}/test-setup.sh +5 -5
  377. package/pennyfarthing-dist/scripts/tests/check.test.sh +0 -0
  378. package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +515 -0
  379. package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +599 -0
  380. package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +332 -0
  381. package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +573 -0
  382. package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +859 -0
  383. package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +662 -0
  384. package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +589 -0
  385. package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +7 -9
  386. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +18 -18
  387. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +10 -10
  388. package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +1 -1
  389. package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +0 -0
  390. package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +647 -0
  391. package/pennyfarthing-dist/scripts/theme/README.md +22 -0
  392. package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.sh +203 -0
  393. package/pennyfarthing-dist/scripts/theme/list-themes.sh +73 -0
  394. package/pennyfarthing-dist/scripts/theme/update-theme-tiers.sh +97 -0
  395. package/pennyfarthing-dist/scripts/workflow/README.md +28 -0
  396. package/pennyfarthing-dist/scripts/{check.sh → workflow/check.sh} +0 -0
  397. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +159 -0
  398. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +228 -0
  399. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +91 -0
  400. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +163 -0
  401. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +138 -0
  402. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +256 -0
  403. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +167 -0
  404. package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +6 -0
  405. package/pennyfarthing-dist/skills/changelog/SKILL.md +2 -2
  406. package/pennyfarthing-dist/skills/code-review/SKILL.md +3 -3
  407. package/pennyfarthing-dist/skills/context-engineering/SKILL.md +6 -0
  408. package/pennyfarthing-dist/skills/cyclist/SKILL.md +56 -139
  409. package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +21 -5
  410. package/pennyfarthing-dist/skills/finalize-run/SKILL.md +1 -1
  411. package/pennyfarthing-dist/skills/jira/SKILL.md +381 -178
  412. package/pennyfarthing-dist/skills/judge/SKILL.md +76 -21
  413. package/pennyfarthing-dist/skills/just/SKILL.md +345 -102
  414. package/pennyfarthing-dist/skills/otel/skill.md +1 -0
  415. package/pennyfarthing-dist/skills/permissions/skill.md +1 -1
  416. package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +5 -0
  417. package/pennyfarthing-dist/skills/skill-registry.schema.json +5 -0
  418. package/pennyfarthing-dist/skills/skill-registry.yaml +22 -0
  419. package/pennyfarthing-dist/skills/sprint/scripts/archive-story.sh +101 -0
  420. package/pennyfarthing-dist/skills/sprint/scripts/available-stories.sh +97 -0
  421. package/pennyfarthing-dist/skills/sprint/scripts/check-story.sh +164 -0
  422. package/pennyfarthing-dist/skills/sprint/scripts/create-jira-epic.sh +101 -0
  423. package/pennyfarthing-dist/skills/sprint/scripts/new-sprint.sh +116 -0
  424. package/pennyfarthing-dist/skills/sprint/scripts/promote-epic.sh +164 -0
  425. package/pennyfarthing-dist/skills/sprint/scripts/sprint-info.sh +39 -0
  426. package/pennyfarthing-dist/skills/sprint/scripts/sprint-status.sh +147 -0
  427. package/pennyfarthing-dist/skills/sprint/scripts/sync-epic-jira.sh +104 -0
  428. package/pennyfarthing-dist/skills/sprint/skill.md +465 -0
  429. package/pennyfarthing-dist/skills/story/scripts/create-story.sh +159 -0
  430. package/pennyfarthing-dist/skills/story/scripts/size-story.sh +198 -0
  431. package/pennyfarthing-dist/skills/story/scripts/story-template.sh +162 -0
  432. package/pennyfarthing-dist/skills/story/skill.md +219 -0
  433. package/pennyfarthing-dist/skills/systematic-debugging/SKILL.md +390 -0
  434. package/pennyfarthing-dist/skills/theme/skill.md +1 -1
  435. package/pennyfarthing-dist/skills/workflow/scripts/list-workflows.sh +91 -0
  436. package/pennyfarthing-dist/skills/workflow/scripts/resume-workflow.sh +163 -0
  437. package/pennyfarthing-dist/skills/workflow/scripts/show-workflow.sh +138 -0
  438. package/pennyfarthing-dist/skills/workflow/scripts/start-workflow.sh +273 -0
  439. package/pennyfarthing-dist/skills/workflow/scripts/workflow-status.sh +167 -0
  440. package/pennyfarthing-dist/skills/workflow/skill.md +337 -0
  441. package/pennyfarthing-dist/templates/settings.local.json.template +1 -1
  442. package/pennyfarthing-dist/workflows/agent-docs.yaml +1 -1
  443. package/pennyfarthing-dist/workflows/architecture/steps/step-01-initialize.md +101 -0
  444. package/pennyfarthing-dist/workflows/architecture/steps/step-01b-continue.md +93 -0
  445. package/pennyfarthing-dist/workflows/architecture/steps/step-02-context.md +115 -0
  446. package/pennyfarthing-dist/workflows/architecture/steps/step-03-patterns.md +133 -0
  447. package/pennyfarthing-dist/workflows/architecture/steps/step-04-components.md +138 -0
  448. package/pennyfarthing-dist/workflows/architecture/steps/step-05-interfaces.md +133 -0
  449. package/pennyfarthing-dist/workflows/architecture/steps/step-06-risks.md +142 -0
  450. package/pennyfarthing-dist/workflows/architecture/steps/step-07-document.md +160 -0
  451. package/pennyfarthing-dist/workflows/architecture/templates/architecture-decision.md +102 -0
  452. package/pennyfarthing-dist/workflows/architecture.yaml +65 -0
  453. package/pennyfarthing-dist/workflows/bdd.yaml +3 -1
  454. package/pennyfarthing-dist/workflows/brainstorming/brain-methods.csv +62 -0
  455. package/pennyfarthing-dist/workflows/brainstorming/checklist.md +44 -0
  456. package/pennyfarthing-dist/workflows/brainstorming/instructions.md +736 -0
  457. package/pennyfarthing-dist/workflows/brainstorming/workflow.yaml +49 -0
  458. package/pennyfarthing-dist/workflows/code-review/checklist.md +23 -0
  459. package/pennyfarthing-dist/workflows/code-review/instructions.md +234 -0
  460. package/pennyfarthing-dist/workflows/code-review/workflow.yaml +51 -0
  461. package/pennyfarthing-dist/workflows/dev-story/checklist.md +80 -0
  462. package/pennyfarthing-dist/workflows/dev-story/instructions.xml +410 -0
  463. package/pennyfarthing-dist/workflows/dev-story/workflow.yaml +50 -0
  464. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-01-validate-prerequisites.md +256 -0
  465. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-02-design-epics.md +233 -0
  466. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-03-create-stories.md +272 -0
  467. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-04-final-validation.md +145 -0
  468. package/pennyfarthing-dist/workflows/epics-and-stories/templates/epics-template.md +57 -0
  469. package/pennyfarthing-dist/workflows/epics-and-stories/workflow.yaml +27 -0
  470. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-01-document-discovery.md +190 -0
  471. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-02-prd-analysis.md +178 -0
  472. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
  473. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-04-ux-alignment.md +139 -0
  474. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
  475. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-06-final-assessment.md +133 -0
  476. package/pennyfarthing-dist/workflows/implementation-readiness/templates/readiness-report-template.md +4 -0
  477. package/pennyfarthing-dist/workflows/implementation-readiness/workflow.yaml +40 -0
  478. package/pennyfarthing-dist/workflows/prd/data/domain-complexity.csv +13 -0
  479. package/pennyfarthing-dist/workflows/prd/data/prd-purpose.md +197 -0
  480. package/pennyfarthing-dist/workflows/prd/data/project-types.csv +11 -0
  481. package/pennyfarthing-dist/workflows/prd/steps-c/step-01-init.md +191 -0
  482. package/pennyfarthing-dist/workflows/prd/steps-c/step-01b-continue.md +153 -0
  483. package/pennyfarthing-dist/workflows/prd/steps-c/step-02-discovery.md +224 -0
  484. package/pennyfarthing-dist/workflows/prd/steps-c/step-03-success.md +226 -0
  485. package/pennyfarthing-dist/workflows/prd/steps-c/step-04-journeys.md +213 -0
  486. package/pennyfarthing-dist/workflows/prd/steps-c/step-05-domain.md +207 -0
  487. package/pennyfarthing-dist/workflows/prd/steps-c/step-06-innovation.md +226 -0
  488. package/pennyfarthing-dist/workflows/prd/steps-c/step-07-project-type.md +237 -0
  489. package/pennyfarthing-dist/workflows/prd/steps-c/step-08-scoping.md +228 -0
  490. package/pennyfarthing-dist/workflows/prd/steps-c/step-09-functional.md +231 -0
  491. package/pennyfarthing-dist/workflows/prd/steps-c/step-10-nonfunctional.md +242 -0
  492. package/pennyfarthing-dist/workflows/prd/steps-c/step-11-polish.md +217 -0
  493. package/pennyfarthing-dist/workflows/prd/steps-c/step-12-complete.md +180 -0
  494. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01-discovery.md +247 -0
  495. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  496. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-02-review.md +249 -0
  497. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-03-edit.md +253 -0
  498. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-04-complete.md +168 -0
  499. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-01-discovery.md +218 -0
  500. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02-format-detection.md +191 -0
  501. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02b-parity-check.md +209 -0
  502. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-03-density-validation.md +174 -0
  503. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  504. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-05-measurability-validation.md +228 -0
  505. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-06-traceability-validation.md +217 -0
  506. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  507. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  508. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-09-project-type-validation.md +263 -0
  509. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-10-smart-validation.md +209 -0
  510. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  511. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-12-completeness-validation.md +242 -0
  512. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-13-report-complete.md +232 -0
  513. package/pennyfarthing-dist/workflows/prd/templates/prd-template.md +10 -0
  514. package/pennyfarthing-dist/workflows/prd/workflow.yaml +42 -0
  515. package/pennyfarthing-dist/workflows/product-brief/steps/step-01-init.md +177 -0
  516. package/pennyfarthing-dist/workflows/product-brief/steps/step-01b-continue.md +161 -0
  517. package/pennyfarthing-dist/workflows/product-brief/steps/step-02-vision.md +199 -0
  518. package/pennyfarthing-dist/workflows/product-brief/steps/step-03-users.md +202 -0
  519. package/pennyfarthing-dist/workflows/product-brief/steps/step-04-metrics.md +205 -0
  520. package/pennyfarthing-dist/workflows/product-brief/steps/step-05-scope.md +219 -0
  521. package/pennyfarthing-dist/workflows/product-brief/steps/step-06-complete.md +194 -0
  522. package/pennyfarthing-dist/workflows/product-brief/templates/product-brief.template.md +10 -0
  523. package/pennyfarthing-dist/workflows/product-brief/workflow.yaml +31 -0
  524. package/pennyfarthing-dist/workflows/project-context/project-context-template.md +21 -0
  525. package/pennyfarthing-dist/workflows/project-context/steps/step-01-discover.md +184 -0
  526. package/pennyfarthing-dist/workflows/project-context/steps/step-02-generate.md +318 -0
  527. package/pennyfarthing-dist/workflows/project-context/steps/step-03-complete.md +278 -0
  528. package/pennyfarthing-dist/workflows/project-context/workflow.yaml +27 -0
  529. package/pennyfarthing-dist/workflows/quick-dev/steps/step-01-mode-detection.md +156 -0
  530. package/pennyfarthing-dist/workflows/quick-dev/steps/step-02-context-gathering.md +120 -0
  531. package/pennyfarthing-dist/workflows/quick-dev/steps/step-03-execute.md +113 -0
  532. package/pennyfarthing-dist/workflows/quick-dev/steps/step-04-self-check.md +113 -0
  533. package/pennyfarthing-dist/workflows/quick-dev/steps/step-05-adversarial-review.md +106 -0
  534. package/pennyfarthing-dist/workflows/quick-dev/steps/step-06-resolve-findings.md +140 -0
  535. package/pennyfarthing-dist/workflows/quick-dev/workflow.yaml +27 -0
  536. package/pennyfarthing-dist/workflows/quick-spec/steps/step-01-understand.md +189 -0
  537. package/pennyfarthing-dist/workflows/quick-spec/steps/step-02-investigate.md +144 -0
  538. package/pennyfarthing-dist/workflows/quick-spec/steps/step-03-generate.md +128 -0
  539. package/pennyfarthing-dist/workflows/quick-spec/steps/step-04-review.md +191 -0
  540. package/pennyfarthing-dist/workflows/quick-spec/tech-spec-template.md +74 -0
  541. package/pennyfarthing-dist/workflows/quick-spec/workflow.yaml +27 -0
  542. package/pennyfarthing-dist/workflows/research/steps-domain/step-01-init.md +137 -0
  543. package/pennyfarthing-dist/workflows/research/steps-domain/step-02-domain-analysis.md +229 -0
  544. package/pennyfarthing-dist/workflows/research/steps-domain/step-03-competitive-landscape.md +238 -0
  545. package/pennyfarthing-dist/workflows/research/steps-domain/step-04-regulatory-focus.md +206 -0
  546. package/pennyfarthing-dist/workflows/research/steps-domain/step-05-technical-trends.md +234 -0
  547. package/pennyfarthing-dist/workflows/research/steps-domain/step-06-research-synthesis.md +443 -0
  548. package/pennyfarthing-dist/workflows/research/steps-market/step-01-init.md +182 -0
  549. package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-behavior.md +237 -0
  550. package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-insights.md +200 -0
  551. package/pennyfarthing-dist/workflows/research/steps-market/step-03-customer-pain-points.md +249 -0
  552. package/pennyfarthing-dist/workflows/research/steps-market/step-04-customer-decisions.md +259 -0
  553. package/pennyfarthing-dist/workflows/research/steps-market/step-05-competitive-analysis.md +177 -0
  554. package/pennyfarthing-dist/workflows/research/steps-market/step-06-research-completion.md +475 -0
  555. package/pennyfarthing-dist/workflows/research/steps-technical/step-01-init.md +137 -0
  556. package/pennyfarthing-dist/workflows/research/steps-technical/step-02-technical-overview.md +239 -0
  557. package/pennyfarthing-dist/workflows/research/steps-technical/step-03-integration-patterns.md +248 -0
  558. package/pennyfarthing-dist/workflows/research/steps-technical/step-04-architectural-patterns.md +202 -0
  559. package/pennyfarthing-dist/workflows/research/steps-technical/step-05-implementation-research.md +239 -0
  560. package/pennyfarthing-dist/workflows/research/steps-technical/step-06-research-synthesis.md +486 -0
  561. package/pennyfarthing-dist/workflows/research/templates/research.template.md +29 -0
  562. package/pennyfarthing-dist/workflows/research/workflow.yaml +45 -0
  563. package/pennyfarthing-dist/workflows/retrospective/checklist.md +31 -0
  564. package/pennyfarthing-dist/workflows/retrospective/instructions.md +1443 -0
  565. package/pennyfarthing-dist/workflows/retrospective/workflow.yaml +50 -0
  566. package/pennyfarthing-dist/workflows/sprint-planning/checklist.md +33 -0
  567. package/pennyfarthing-dist/workflows/sprint-planning/sprint-status-template.yaml +55 -0
  568. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-01-parse-epic-files.md +54 -0
  569. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-02-build-sprint-status.md +44 -0
  570. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-03-status-detection.md +64 -0
  571. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-04-generate-status-file.md +73 -0
  572. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-05-validate-and-report.md +56 -0
  573. package/pennyfarthing-dist/workflows/sprint-planning/workflow.yaml +34 -0
  574. package/pennyfarthing-dist/workflows/trivial.yaml +1 -1
  575. package/pennyfarthing-dist/workflows/ux-design/steps/step-01-init.md +135 -0
  576. package/pennyfarthing-dist/workflows/ux-design/steps/step-01b-continue.md +127 -0
  577. package/pennyfarthing-dist/workflows/ux-design/steps/step-02-discovery.md +190 -0
  578. package/pennyfarthing-dist/workflows/ux-design/steps/step-03-core-experience.md +216 -0
  579. package/pennyfarthing-dist/workflows/ux-design/steps/step-04-emotional-response.md +219 -0
  580. package/pennyfarthing-dist/workflows/ux-design/steps/step-05-inspiration.md +234 -0
  581. package/pennyfarthing-dist/workflows/ux-design/steps/step-06-design-system.md +252 -0
  582. package/pennyfarthing-dist/workflows/ux-design/steps/step-07-defining-experience.md +254 -0
  583. package/pennyfarthing-dist/workflows/ux-design/steps/step-08-visual-foundation.md +224 -0
  584. package/pennyfarthing-dist/workflows/ux-design/steps/step-09-design-directions.md +224 -0
  585. package/pennyfarthing-dist/workflows/ux-design/steps/step-10-user-journeys.md +241 -0
  586. package/pennyfarthing-dist/workflows/ux-design/steps/step-11-component-strategy.md +248 -0
  587. package/pennyfarthing-dist/workflows/ux-design/steps/step-12-ux-patterns.md +237 -0
  588. package/pennyfarthing-dist/workflows/ux-design/steps/step-13-responsive-accessibility.md +264 -0
  589. package/pennyfarthing-dist/workflows/ux-design/steps/step-14-complete.md +228 -0
  590. package/pennyfarthing-dist/workflows/ux-design/ux-design-template.md +13 -0
  591. package/pennyfarthing-dist/workflows/ux-design/workflow.yaml +41 -0
  592. package/packages/core/dist/scripts/generate-all-faces.d.ts +0 -10
  593. package/packages/core/dist/scripts/generate-all-faces.d.ts.map +0 -1
  594. package/packages/core/dist/scripts/generate-all-faces.js +0 -256
  595. package/packages/core/dist/scripts/generate-all-faces.js.map +0 -1
  596. package/packages/core/dist/scripts/generate-all-faces.test.d.ts +0 -17
  597. package/packages/core/dist/scripts/generate-all-faces.test.d.ts.map +0 -1
  598. package/packages/core/dist/scripts/generate-all-faces.test.js +0 -372
  599. package/packages/core/dist/scripts/generate-all-faces.test.js.map +0 -1
  600. package/packages/core/dist/scripts/generate-ascii-face.d.ts +0 -52
  601. package/packages/core/dist/scripts/generate-ascii-face.d.ts.map +0 -1
  602. package/packages/core/dist/scripts/generate-ascii-face.js +0 -155
  603. package/packages/core/dist/scripts/generate-ascii-face.js.map +0 -1
  604. package/packages/core/dist/scripts/generate-face.d.ts +0 -52
  605. package/packages/core/dist/scripts/generate-face.d.ts.map +0 -1
  606. package/packages/core/dist/scripts/generate-face.js +0 -199
  607. package/packages/core/dist/scripts/generate-face.js.map +0 -1
  608. package/packages/core/dist/scripts/generate-face.test.d.ts +0 -13
  609. package/packages/core/dist/scripts/generate-face.test.d.ts.map +0 -1
  610. package/packages/core/dist/scripts/generate-face.test.js +0 -301
  611. package/packages/core/dist/scripts/generate-face.test.js.map +0 -1
  612. package/pennyfarthing-dist/agents/generic-handoff.md +0 -454
  613. package/pennyfarthing-dist/agents/generic-sm-finish.md +0 -261
  614. package/pennyfarthing-dist/agents/generic-sm-setup.md +0 -214
  615. package/pennyfarthing-dist/commands/new-work.md +0 -127
  616. package/pennyfarthing-dist/guides/AGENT-SCOPES.md +0 -201
  617. package/pennyfarthing-dist/guides/persona-system.md +0 -294
  618. package/pennyfarthing-dist/guides/shared-agent-behavior.md +0 -388
  619. package/pennyfarthing-dist/guides/shared-context.md +0 -147
  620. package/pennyfarthing-dist/guides/strategic-agent-behavior.md +0 -348
  621. package/pennyfarthing-dist/guides/tactical-agent-behavior.md +0 -1041
  622. package/pennyfarthing-dist/scripts/prime.sh +0 -161
  623. package/pennyfarthing-dist/scripts/run.sh +0 -65
  624. package/pennyfarthing-dist/skills/sprint-context/SKILL.md +0 -120
  625. package/pennyfarthing-dist/skills/story-management/SKILL.md +0 -208
  626. package/pennyfarthing-dist/skills/workflow/SKILL.md +0 -160
  627. /package/pennyfarthing-dist/commands/{brainstorm.md → brainstorming.md} +0 -0
  628. /package/pennyfarthing-dist/scripts/{utils → test}/ground-truth-judge.py +0 -0
@@ -39,7 +39,7 @@ DEFAULT_WARNING_THRESHOLD=60
39
39
  DEFAULT_CRITICAL_THRESHOLD=85
40
40
  DEFAULT_MAX_TOKENS=200000
41
41
 
42
- # Load thresholds from .pennyfarthing/config.local.yaml (preferred) or settings.local.json (fallback)
42
+ # Load thresholds and permission_mode from .pennyfarthing/config.local.yaml (preferred) or settings.local.json (fallback)
43
43
  PENNYFARTHING_CONFIG="${CLAUDE_PROJECT_DIR:-$PROJECT_DIR}/.pennyfarthing/config.local.yaml"
44
44
  SETTINGS_FILE="${CLAUDE_PROJECT_DIR:-$PROJECT_DIR}/.claude/settings.local.json"
45
45
  CONFIG=$(python3 -c "
@@ -50,18 +50,23 @@ imminent_threshold = $DEFAULT_IMMINENT_THRESHOLD
50
50
  warning_threshold = $DEFAULT_WARNING_THRESHOLD
51
51
  critical_threshold = $DEFAULT_CRITICAL_THRESHOLD
52
52
  max_tokens = $DEFAULT_MAX_TOKENS
53
+ permission_mode = 'manual' # Default to manual
53
54
 
54
55
  # First try .pennyfarthing/config.local.yaml (preferred location)
55
56
  try:
56
57
  import yaml
57
58
  with open('$PENNYFARTHING_CONFIG', 'r') as f:
58
59
  config = yaml.safe_load(f)
59
- if config and 'context_budget' in config:
60
- cb = config['context_budget']
61
- imminent_threshold = cb.get('imminent_threshold', imminent_threshold)
62
- warning_threshold = cb.get('warning_threshold', warning_threshold)
63
- critical_threshold = cb.get('critical_threshold', critical_threshold)
64
- max_tokens = cb.get('max_tokens', max_tokens)
60
+ if config:
61
+ if 'context_budget' in config:
62
+ cb = config['context_budget']
63
+ imminent_threshold = cb.get('imminent_threshold', imminent_threshold)
64
+ warning_threshold = cb.get('warning_threshold', warning_threshold)
65
+ critical_threshold = cb.get('critical_threshold', critical_threshold)
66
+ max_tokens = cb.get('max_tokens', max_tokens)
67
+ # Read permission_mode from workflow section
68
+ if 'workflow' in config and 'permission_mode' in config['workflow']:
69
+ permission_mode = config['workflow']['permission_mode']
65
70
  except:
66
71
  # Fallback to settings.local.json (legacy location)
67
72
  try:
@@ -73,6 +78,8 @@ except:
73
78
  warning_threshold = cb.get('warning_threshold', warning_threshold)
74
79
  critical_threshold = cb.get('critical_threshold', critical_threshold)
75
80
  max_tokens = cb.get('max_tokens', max_tokens)
81
+ if 'workflow' in settings and 'permission_mode' in settings['workflow']:
82
+ permission_mode = settings['workflow']['permission_mode']
76
83
  except:
77
84
  pass
78
85
 
@@ -80,6 +87,7 @@ print(f'IMMINENT_THRESHOLD={imminent_threshold}')
80
87
  print(f'WARNING_THRESHOLD={warning_threshold}')
81
88
  print(f'CRITICAL_THRESHOLD={critical_threshold}')
82
89
  print(f'MAX_TOKENS={max_tokens}')
90
+ print(f'PERMISSION_MODE={permission_mode}')
83
91
  " 2>/dev/null)
84
92
 
85
93
  # Apply config or use defaults
@@ -116,19 +124,26 @@ else
116
124
  fi
117
125
  fi
118
126
 
119
- # Parse last message for usage data
127
+ # Parse transcript for baseline (first turn) and current (last turn) usage data
128
+ # Baseline = system prompt overhead, cached per session
129
+ # Usable = current - baseline (what the user's conversation has consumed)
120
130
  RESULT=$(python3 -c "
121
131
  import sys
122
132
  import json
123
133
 
124
134
  warning_threshold = $WARNING_THRESHOLD
125
135
  max_tokens = $MAX_TOKENS
136
+ permission_mode = '$PERMISSION_MODE'
137
+ tirepump_threshold = 60 # Threshold for TirePump auto-handoff
126
138
 
127
139
  with open('$TRANSCRIPT', 'r') as f:
128
140
  lines = f.readlines()
129
141
 
130
- # Find last line with usage data
131
- for line in reversed(lines):
142
+ # Find first and last lines with usage data
143
+ first_total = None
144
+ last_total = None
145
+
146
+ for line in lines:
132
147
  try:
133
148
  data = json.loads(line.strip())
134
149
  if 'message' in data and 'usage' in data['message']:
@@ -136,50 +151,91 @@ for line in reversed(lines):
136
151
  input_t = usage.get('input_tokens', 0)
137
152
  cache_read = usage.get('cache_read_input_tokens', 0)
138
153
  cache_create = usage.get('cache_creation_input_tokens', 0)
139
-
140
154
  total = cache_read + cache_create + input_t
141
- pct = (total / max_tokens) * 100
142
-
143
- print(f'CONTEXT_TOKENS={total}')
144
- print(f'CONTEXT_PERCENT={pct:.0f}')
145
- # Use configurable warning threshold
146
- if pct > warning_threshold:
147
- print('CONTEXT_STATUS=HIGH')
148
- print('HANDOFF_MODE=auto')
149
- else:
150
- print('CONTEXT_STATUS=OK')
151
- print('HANDOFF_MODE=ask')
152
- break
155
+
156
+ if first_total is None:
157
+ first_total = total
158
+ last_total = total
153
159
  except:
154
160
  continue
161
+
162
+ if last_total is not None:
163
+ # Baseline is first turn's total (system prompt + tools + CLAUDE.md etc)
164
+ baseline = first_total if first_total is not None else 0
165
+
166
+ # Usable tokens = what user's conversation has consumed
167
+ usable_tokens = last_total - baseline
168
+
169
+ # Available capacity = max minus baseline overhead
170
+ available_capacity = max_tokens - baseline
171
+
172
+ # Usable percent = conversation usage as % of available capacity
173
+ usable_pct = (usable_tokens / available_capacity * 100) if available_capacity > 0 else 0
174
+
175
+ # Total percent (for backwards compatibility)
176
+ total_pct = (last_total / max_tokens) * 100
177
+
178
+ # Output all values
179
+ print(f'CONTEXT_TOKENS={last_total}')
180
+ print(f'CONTEXT_PERCENT={total_pct:.0f}')
181
+ print(f'CONTEXT_BASELINE={baseline}')
182
+ print(f'CONTEXT_USABLE_TOKENS={usable_tokens}')
183
+ print(f'CONTEXT_USABLE_PERCENT={usable_pct:.0f}')
184
+ print(f'CONTEXT_AVAILABLE={available_capacity}')
185
+ print(f'PERMISSION_MODE={permission_mode}')
186
+
187
+ # Use usable percent for status decisions (more accurate for user)
188
+ if usable_pct > warning_threshold:
189
+ print('CONTEXT_STATUS=HIGH')
190
+ print('HANDOFF_MODE=auto')
191
+ else:
192
+ print('CONTEXT_STATUS=OK')
193
+ print('HANDOFF_MODE=ask')
194
+
195
+ # TirePump: Use CONTEXT_CLEAR (clear + load next agent) when:
196
+ # 1. permission_mode is 'turbo' (auto-handoff enabled)
197
+ # 2. context > 60% (tirepump_threshold)
198
+ # This enables continuous autonomous runs without manual intervention
199
+ use_tirepump = permission_mode == 'turbo' and usable_pct > tirepump_threshold
200
+ print(f'USE_TIREPUMP={str(use_tirepump).lower()}')
201
+
202
+ # Cyclist detection: Check if CYCLIST env var is set to '1'
203
+ # Markers should only be emitted when running inside Cyclist
204
+ import os
205
+ is_cyclist = os.environ.get('CYCLIST', '') == '1'
206
+ print(f'IS_CYCLIST={str(is_cyclist).lower()}')
155
207
  " 2>/dev/null)
156
208
 
157
209
  if [ "$HUMAN_MODE" = "true" ]; then
158
210
  eval "$RESULT"
159
- if [ "$CONTEXT_STATUS" = "HIGH" ]; then
160
- echo "⚠️ Context: ${CONTEXT_PERCENT}% (${CONTEXT_TOKENS} tokens) - AUTO-HANDOFF"
211
+ if [ "$USE_TIREPUMP" = "true" ]; then
212
+ echo "🔄 Context: ${CONTEXT_USABLE_PERCENT}% used (${CONTEXT_USABLE_TOKENS} of ${CONTEXT_AVAILABLE} available) - TIREPUMP (clear + next agent)"
213
+ elif [ "$CONTEXT_STATUS" = "HIGH" ]; then
214
+ echo "⚠️ Context: ${CONTEXT_USABLE_PERCENT}% used (${CONTEXT_USABLE_TOKENS} of ${CONTEXT_AVAILABLE} available) - AUTO-HANDOFF"
161
215
  else
162
- echo "✅ Context: ${CONTEXT_PERCENT}% (${CONTEXT_TOKENS} tokens) - OK to continue"
216
+ echo "✅ Context: ${CONTEXT_USABLE_PERCENT}% used (${CONTEXT_USABLE_TOKENS} of ${CONTEXT_AVAILABLE} available)"
163
217
  fi
164
-
165
- # Output warning messages at configurable thresholds
166
- if [ -n "$CONTEXT_PERCENT" ]; then
167
- if [ "$CONTEXT_PERCENT" -ge "$CRITICAL_THRESHOLD" ] 2>/dev/null; then
168
- echo "CONTEXT_WARNING: Critical (${CONTEXT_PERCENT}%) - checkpoint and handoff recommended"
169
- elif [ "$CONTEXT_PERCENT" -ge "$WARNING_THRESHOLD" ] 2>/dev/null; then
170
- echo "CONTEXT_WARNING: High (${CONTEXT_PERCENT}%) - consider handoff soon"
218
+ echo " Overhead: ${CONTEXT_BASELINE} tokens (system prompt + tools)"
219
+ echo " Mode: ${PERMISSION_MODE}"
220
+
221
+ # Output warning messages at configurable thresholds (use usable percent)
222
+ if [ -n "$CONTEXT_USABLE_PERCENT" ]; then
223
+ if [ "$CONTEXT_USABLE_PERCENT" -ge "$CRITICAL_THRESHOLD" ] 2>/dev/null; then
224
+ echo "CONTEXT_WARNING: Critical (${CONTEXT_USABLE_PERCENT}%) - checkpoint and handoff recommended"
225
+ elif [ "$CONTEXT_USABLE_PERCENT" -ge "$WARNING_THRESHOLD" ] 2>/dev/null; then
226
+ echo "CONTEXT_WARNING: High (${CONTEXT_USABLE_PERCENT}%) - consider handoff soon"
171
227
  fi
172
228
  fi
173
229
  else
174
230
  echo "$RESULT"
175
231
 
176
- # Also output warnings in non-human mode for scripting
232
+ # Also output warnings in non-human mode for scripting (use usable percent)
177
233
  eval "$RESULT" 2>/dev/null || true
178
- if [ -n "$CONTEXT_PERCENT" ]; then
179
- if [ "$CONTEXT_PERCENT" -ge "$CRITICAL_THRESHOLD" ] 2>/dev/null; then
234
+ if [ -n "$CONTEXT_USABLE_PERCENT" ]; then
235
+ if [ "$CONTEXT_USABLE_PERCENT" -ge "$CRITICAL_THRESHOLD" ] 2>/dev/null; then
180
236
  echo "CONTEXT_WARNING=Critical"
181
237
  echo "CONTEXT_RECOMMENDATION=checkpoint and handoff recommended"
182
- elif [ "$CONTEXT_PERCENT" -ge "$WARNING_THRESHOLD" ] 2>/dev/null; then
238
+ elif [ "$CONTEXT_USABLE_PERCENT" -ge "$WARNING_THRESHOLD" ] 2>/dev/null; then
183
239
  echo "CONTEXT_WARNING=High"
184
240
  echo "CONTEXT_RECOMMENDATION=consider handoff soon"
185
241
  fi
@@ -0,0 +1,90 @@
1
+ #!/bin/bash
2
+ # Generate complete AGENT_COMMAND block with pre-rendered marker
3
+ # Usage: handoff-marker.sh <next-agent> [--error <message>]
4
+ #
5
+ # Outputs a complete AGENT_COMMAND block that subagents can emit verbatim.
6
+ # Handles IS_CYCLIST and USE_TIREPUMP detection automatically.
7
+ #
8
+ # Single source of truth for marker format - both agents and quick-actions.js
9
+ # should reference this script's output format.
10
+
11
+ set -euo pipefail
12
+
13
+ NEXT_AGENT=""
14
+ IS_ERROR=false
15
+ ERROR_MSG=""
16
+
17
+ # Parse args
18
+ while [[ $# -gt 0 ]]; do
19
+ case "$1" in
20
+ --error)
21
+ IS_ERROR=true
22
+ ERROR_MSG="${2:-Error occurred}"
23
+ shift 2
24
+ ;;
25
+ *)
26
+ if [[ -z "$NEXT_AGENT" ]]; then
27
+ NEXT_AGENT="$1"
28
+ fi
29
+ shift
30
+ ;;
31
+ esac
32
+ done
33
+
34
+ if [[ -z "$NEXT_AGENT" && "$IS_ERROR" != "true" ]]; then
35
+ echo "Usage: handoff-marker.sh <next-agent> [--error <message>]" >&2
36
+ echo "" >&2
37
+ echo "Examples:" >&2
38
+ echo " handoff-marker.sh dev # Normal handoff to dev" >&2
39
+ echo " handoff-marker.sh tea # Normal handoff to tea" >&2
40
+ echo " handoff-marker.sh --error 'Tests failing' # Error case" >&2
41
+ exit 1
42
+ fi
43
+
44
+ # Get environment from check-context.sh
45
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
46
+ eval "$("$SCRIPT_DIR/check-context.sh" 2>/dev/null)" || true
47
+
48
+ # Default values if check-context.sh failed
49
+ IS_CYCLIST="${IS_CYCLIST:-false}"
50
+ USE_TIREPUMP="${USE_TIREPUMP:-false}"
51
+
52
+ # Generate marker based on environment
53
+ if [[ "$IS_ERROR" == "true" ]]; then
54
+ # Error case - no marker
55
+ cat <<EOF
56
+ ---
57
+ AGENT_COMMAND:
58
+ marker: ""
59
+ fallback: "$ERROR_MSG"
60
+ error: true
61
+ ---
62
+ EOF
63
+ elif [[ "$IS_CYCLIST" != "true" ]]; then
64
+ # Not in Cyclist - no marker
65
+ cat <<EOF
66
+ ---
67
+ AGENT_COMMAND:
68
+ marker: ""
69
+ fallback: "Run \`/${NEXT_AGENT}\` to continue"
70
+ ---
71
+ EOF
72
+ elif [[ "$USE_TIREPUMP" == "true" ]]; then
73
+ # Cyclist + TirePump - context clear marker
74
+ cat <<EOF
75
+ ---
76
+ AGENT_COMMAND:
77
+ marker: "<!-- CYCLIST:CONTEXT_CLEAR:/${NEXT_AGENT} -->"
78
+ fallback: "Run \`/${NEXT_AGENT}\` to continue"
79
+ ---
80
+ EOF
81
+ else
82
+ # Cyclist, no TirePump - handoff marker
83
+ cat <<EOF
84
+ ---
85
+ AGENT_COMMAND:
86
+ marker: "<!-- CYCLIST:HANDOFF:/${NEXT_AGENT} -->"
87
+ fallback: "Run \`/${NEXT_AGENT}\` to continue"
88
+ ---
89
+ EOF
90
+ fi
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env zsh
2
+ # prime.sh - Load essential project context at agent activation
3
+ # Usage: prime.sh [--minimal] [--full] [--quiet] [--agent <name>]
4
+ #
5
+ # Loads context in priority order (CLAUDE.md skipped - already in system prompt):
6
+ # 1. Sprint summary (current-sprint.yaml key fields)
7
+ # 2. Active session (.session/*-session.md)
8
+ # 3. Agent sidecar (if --agent provided)
9
+ # 4. Agent behavior guide (combined protocols for all agents)
10
+ # 5. Domain docs (--full only)
11
+
12
+ set -euo pipefail
13
+
14
+ # Load shared functions
15
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
16
+ source "$SCRIPT_DIR/../sprint/sprint-common.sh"
17
+
18
+ # Defaults
19
+ QUIET=false
20
+ MINIMAL=false
21
+ FULL=false
22
+ AGENT_NAME=""
23
+
24
+ # Parse arguments
25
+ while [[ $# -gt 0 ]]; do
26
+ case $1 in
27
+ --quiet) QUIET=true; shift ;;
28
+ --minimal) MINIMAL=true; shift ;;
29
+ --full) FULL=true; shift ;;
30
+ --agent) AGENT_NAME="$2"; shift 2 ;;
31
+ -h|--help)
32
+ echo "Usage: prime.sh [--minimal] [--full] [--quiet] [--agent <name>]"
33
+ echo " --minimal Skip all context (fastest)"
34
+ echo " --full Include domain docs from .claude/project/"
35
+ echo " --quiet Suppress section headers"
36
+ echo " --agent <name> Load agent's sidecar patterns"
37
+ exit 0
38
+ ;;
39
+ *) shift ;;
40
+ esac
41
+ done
42
+
43
+ # Helper to print headers (respects --quiet)
44
+ print_header() {
45
+ if [[ "$QUIET" != "true" ]]; then
46
+ echo ""
47
+ echo "# $1"
48
+ fi
49
+ }
50
+
51
+ # CLAUDE.md is already loaded by Claude Code system prompt - skip it
52
+
53
+ # Stop here for minimal mode
54
+ if [[ "$MINIMAL" == "true" ]]; then
55
+ exit 0
56
+ fi
57
+
58
+ # 1. Sprint summary (uses shared functions from sprint-common.sh)
59
+ if [[ -f "$(get_sprint_file)" ]]; then
60
+ print_header "Sprint Context"
61
+
62
+ # Use shared functions for consistent output
63
+ summary=$(get_sprint_summary)
64
+ if [[ -n "$summary" ]]; then
65
+ echo "$summary"
66
+ fi
67
+
68
+ progress=$(get_sprint_progress)
69
+ if [[ -n "$progress" ]]; then
70
+ echo "$progress"
71
+ fi
72
+ fi
73
+
74
+ # 2. Active session (if exists) - extract header metadata + current assessment
75
+ SESSION_FILE=""
76
+ if [[ -d "$PROJECT_ROOT/.session" ]]; then
77
+ # Find a session file (typically only one active at a time)
78
+ SESSION_FILE=$(find "$PROJECT_ROOT/.session" -maxdepth 1 -name "*-session.md" -type f 2>/dev/null | head -1)
79
+ fi
80
+
81
+ if [[ -n "$SESSION_FILE" && -f "$SESSION_FILE" ]]; then
82
+ print_header "Active Session: $(basename "$SESSION_FILE")"
83
+
84
+ # Extract header (everything before first ## heading)
85
+ # This includes: title, metadata fields (Phase, Workflow, Repos, Branch, etc.)
86
+ awk '/^## / {exit} {print}' "$SESSION_FILE"
87
+
88
+ # Find the most recent assessment section (workflow-agnostic)
89
+ # Assessment sections are named: "## {Agent} Assessment" (TEA, Dev, Reviewer, SM, etc.)
90
+ # Show the LAST one in the file as it represents current state
91
+ last_assessment=$(grep -n '^## .*Assessment' "$SESSION_FILE" | tail -1 | cut -d: -f1)
92
+
93
+ if [[ -n "$last_assessment" ]]; then
94
+ echo ""
95
+ echo "---"
96
+ # Extract from that line to next ## or EOF
97
+ awk -v start="$last_assessment" '
98
+ NR >= start {
99
+ if (NR > start && /^## /) exit
100
+ print
101
+ }
102
+ ' "$SESSION_FILE"
103
+ fi
104
+ fi
105
+
106
+ # 3. Agent sidecar (if --agent provided)
107
+ if [[ -n "$AGENT_NAME" ]]; then
108
+ SIDECAR_DIR="$PROJECT_ROOT/.pennyfarthing/sidecars/${AGENT_NAME}"
109
+ if [[ -d "$SIDECAR_DIR" ]]; then
110
+ for pattern_file in "$SIDECAR_DIR"/*.md; do
111
+ if [[ -f "$pattern_file" ]]; then
112
+ print_header "Agent Sidecar: $(basename "$pattern_file")"
113
+ cat "$pattern_file"
114
+ fi
115
+ done
116
+ fi
117
+ fi
118
+
119
+ # 4. Agent behavior guide (combined protocols for all agents)
120
+ if [[ -n "$AGENT_NAME" ]]; then
121
+ BEHAVIOR_GUIDE="$PROJECT_ROOT/.pennyfarthing/guides/agent-behavior.md"
122
+ if [[ -f "$BEHAVIOR_GUIDE" ]]; then
123
+ print_header "Agent Behavior Guide"
124
+ cat "$BEHAVIOR_GUIDE"
125
+ fi
126
+ fi
127
+
128
+ # 5. Domain docs (--full only)
129
+ if [[ "$FULL" == "true" ]]; then
130
+ for doc in "$PROJECT_ROOT/.claude/project"/CLAUDE-*.md; do
131
+ if [[ -f "$doc" ]]; then
132
+ print_header "$(basename "$doc")"
133
+ cat "$doc"
134
+ fi
135
+ done
136
+ fi
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env zsh
2
+ # Bootstrap script - finds PROJECT_ROOT and runs the requested script
3
+ # Usage: ./scripts/run.sh <category/script-name> [args...]
4
+ #
5
+ # Scripts are organized in categorical subdirectories:
6
+ # core/ - Essential scripts (agent-session.sh, check-context.sh)
7
+ # workflow/ - Workflow mechanics (finish-story.sh, check.sh)
8
+ # sprint/ - Sprint operations (sprint-status.sh, archive-story.sh)
9
+ # story/ - Story operations (create-story.sh, size-story.sh)
10
+ # jira/ - Jira integration (jira-claim-story.sh, jira-reconcile.sh)
11
+ # git/ - Git operations (create-feature-branches.sh, release.sh)
12
+ # theme/ - Theme operations (list-themes.sh)
13
+ # test/ - Test infrastructure (test-setup.sh)
14
+ # lib/ - Shared libraries (common.sh, logging.sh)
15
+ # misc/ - Uncategorized utilities
16
+ # hooks/ - Git and Claude hooks
17
+ #
18
+ # Full paths are REQUIRED to avoid ambiguity:
19
+ # ./scripts/run.sh core/agent-session.sh start sm
20
+ # ./scripts/run.sh jira/jira-claim-story.sh MSSCI-12345
21
+ #
22
+ # This solves the absolute path problem by:
23
+ # 1. Finding PROJECT_ROOT by looking for the .claude/ directory
24
+ # 2. Exporting PROJECT_ROOT for the script to use
25
+ # 3. Running the script with full absolute paths
26
+
27
+ set -euo pipefail
28
+
29
+ # Find PROJECT_ROOT by looking for .claude/ marker
30
+ find_project_root() {
31
+ local dir="$PWD"
32
+ while [[ ! -d "$dir/.claude" ]] && [[ "$dir" != "/" ]]; do
33
+ dir="$(dirname "$dir")"
34
+ done
35
+ if [[ -d "$dir/.claude" ]]; then
36
+ echo "$dir"
37
+ else
38
+ echo "Error: Could not find project root (no .claude/ directory found)" >&2
39
+ exit 1
40
+ fi
41
+ }
42
+
43
+ PROJECT_ROOT="$(find_project_root)"
44
+ export PROJECT_ROOT
45
+
46
+ # Get the script to run
47
+ if [[ $# -lt 1 ]]; then
48
+ echo "Usage: ./scripts/run.sh <category/script-name> [args...]" >&2
49
+ echo "Example: ./scripts/run.sh core/agent-session.sh start sm" >&2
50
+ echo "Example: ./scripts/run.sh jira/jira-claim-story.sh MSSCI-12345" >&2
51
+ exit 1
52
+ fi
53
+
54
+ SCRIPT_NAME="$1"
55
+ shift
56
+
57
+ # Single source of truth: .pennyfarthing/scripts
58
+ SCRIPTS_DIR="$PROJECT_ROOT/.pennyfarthing/scripts"
59
+ if [[ ! -d "$SCRIPTS_DIR" ]]; then
60
+ echo "Error: Scripts directory not found: $SCRIPTS_DIR" >&2
61
+ exit 1
62
+ fi
63
+
64
+ # Full path required - script must include category
65
+ SCRIPT_PATH="$SCRIPTS_DIR/$SCRIPT_NAME"
66
+
67
+ if [[ -f "$SCRIPT_PATH" ]]; then
68
+ exec "$SCRIPT_PATH" "$@"
69
+ else
70
+ echo "Error: Script not found: $SCRIPT_NAME" >&2
71
+ echo "Full path required. Available categories:" >&2
72
+ echo " core/, workflow/, sprint/, story/, jira/, git/, theme/, test/, lib/, misc/, hooks/, cyclist/" >&2
73
+ echo "Example: run.sh core/agent-session.sh start sm" >&2
74
+ exit 1
75
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+ # Check if running inside Cyclist visual terminal
3
+ # Usage: .pennyfarthing/scripts/core/run.sh cyclist/is-cyclist.sh
4
+ #
5
+ # Exit codes:
6
+ # 0 - Running in Cyclist
7
+ # 1 - Not running in Cyclist
8
+ #
9
+ # Output (JSON):
10
+ # {"cyclist": true/false}
11
+
12
+ set -euo pipefail
13
+
14
+ # Check the CYCLIST environment variable (set by ClaudeService.ensureProcess)
15
+ if [[ "${CYCLIST:-}" == "1" ]]; then
16
+ echo '{"cyclist": true}'
17
+ exit 0
18
+ else
19
+ echo '{"cyclist": false}'
20
+ exit 1
21
+ fi
@@ -0,0 +1,25 @@
1
+ # Git Scripts
2
+
3
+ Scripts for Git operations, branching, and release management.
4
+
5
+ ## Scripts
6
+
7
+ | Script | Purpose |
8
+ |--------|---------|
9
+ | `create-feature-branches.sh` | Create feature branches in repos |
10
+ | `git-status-all.sh` | Show git status across all repos |
11
+ | `worktree-manager.sh` | Manage git worktrees for parallel work |
12
+ | `install-git-hooks.sh` | Install git hooks in project |
13
+ | `release.sh` | Release workflow (merge develop to main) |
14
+
15
+ ## Usage
16
+
17
+ ```bash
18
+ .pennyfarthing/scripts/core/run.sh git/create-feature-branches.sh feat/my-feature
19
+ .pennyfarthing/scripts/core/run.sh git/release.sh
20
+ ```
21
+
22
+ ## Ownership
23
+
24
+ - **Primary users:** SM agent, DevOps agent
25
+ - **Maintained by:** Core Pennyfarthing team
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env zsh
2
- # Create or checkout feature branches in conductor repos
2
+ # Create or checkout feature branches in Pennyfarthing repos
3
3
  # Idempotent, worktree-aware, branches from develop
4
4
 
5
5
  set -e
@@ -11,10 +11,6 @@ elif [ -f ../.env ]; then
11
11
  set -a; source ../.env; set +a
12
12
  fi
13
13
 
14
- # Find project root
15
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
16
- source "$SCRIPT_DIR/find-root.sh"
17
-
18
14
  show_help() {
19
15
  cat << EOF
20
16
  Create Feature Branches - Idempotent branch creation/checkout
@@ -27,18 +23,18 @@ Arguments:
27
23
  Options: api, ui, all
28
24
 
29
25
  Repo Options:
30
- api - conductor-api only
31
- ui - conductor-ui only
26
+ api - Pennyfarthing-api only
27
+ ui - Pennyfarthing-ui only
32
28
  all - both repos (default)
33
29
 
34
30
  Examples:
35
31
  # All repos (default)
36
32
  ./create-feature-branches.sh feat/cross-repo-feature
37
33
 
38
- # Conductor UI only
34
+ # Pennyfarthing UI only
39
35
  ./create-feature-branches.sh feat/11-2-ui-component ui
40
36
 
41
- # Conductor API only
37
+ # Pennyfarthing API only
42
38
  ./create-feature-branches.sh fix/validation-bug api
43
39
 
44
40
  Behavior:
@@ -64,8 +60,8 @@ if [[ ! "$REPOS" =~ ^(api|ui|all)$ ]]; then
64
60
  echo " Got: $REPOS"
65
61
  echo ""
66
62
  echo "Options:"
67
- echo " api - conductor-api only"
68
- echo " ui - conductor-ui only"
63
+ echo " api - Pennyfarthing-api only"
64
+ echo " ui - Pennyfarthing-ui only"
69
65
  echo " all - both repos (default)"
70
66
  exit 1
71
67
  fi
@@ -149,14 +145,14 @@ echo " Repos: $REPOS"
149
145
  # Process repos based on selection
150
146
  case "$REPOS" in
151
147
  api)
152
- create_or_checkout_branch "$REPO_BASE/conductor-api" "conductor-api"
148
+ create_or_checkout_branch "$REPO_BASE/Pennyfarthing-api" "Pennyfarthing-api"
153
149
  ;;
154
150
  ui)
155
- create_or_checkout_branch "$REPO_BASE/conductor-ui" "conductor-ui"
151
+ create_or_checkout_branch "$REPO_BASE/Pennyfarthing-ui" "Pennyfarthing-ui"
156
152
  ;;
157
153
  all)
158
- create_or_checkout_branch "$REPO_BASE/conductor-api" "conductor-api"
159
- create_or_checkout_branch "$REPO_BASE/conductor-ui" "conductor-ui"
154
+ create_or_checkout_branch "$REPO_BASE/Pennyfarthing-api" "Pennyfarthing-api"
155
+ create_or_checkout_branch "$REPO_BASE/Pennyfarthing-ui" "Pennyfarthing-ui"
160
156
  ;;
161
157
  esac
162
158
 
@@ -17,7 +17,7 @@ fi
17
17
  PROJECT_ROOT="${PROJECT_ROOT:-$(cd "$SCRIPT_DIR/../.." && pwd)}"
18
18
 
19
19
  # Source repo utilities for dynamic repo configuration
20
- source "$SCRIPT_DIR/../repo-utils.sh"
20
+ source "$SCRIPT_DIR/../misc/repo-utils.sh"
21
21
 
22
22
  # Colors
23
23
  GREEN='\033[0;32m'
@@ -8,10 +8,6 @@
8
8
 
9
9
  set -e
10
10
 
11
- # Find project root
12
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
13
- source "$SCRIPT_DIR/utils/find-root.sh"
14
-
15
11
  # Load environment
16
12
  if [ -f "$PROJECT_ROOT/.env" ]; then
17
13
  set -a; source "$PROJECT_ROOT/.env"; set +a