@pennyfarthing/core 7.9.2 → 7.9.5

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 (538) hide show
  1. package/package.json +2 -2
  2. package/pennyfarthing-dist/agents/README.md +348 -0
  3. package/pennyfarthing-dist/agents/architect.md +180 -0
  4. package/pennyfarthing-dist/agents/dev.md +169 -0
  5. package/pennyfarthing-dist/agents/devops.md +203 -0
  6. package/pennyfarthing-dist/agents/handoff.md +235 -0
  7. package/pennyfarthing-dist/agents/orchestrator.md +182 -0
  8. package/pennyfarthing-dist/agents/pm.md +152 -0
  9. package/pennyfarthing-dist/agents/reviewer-preflight.md +129 -0
  10. package/pennyfarthing-dist/agents/reviewer.md +180 -0
  11. package/pennyfarthing-dist/agents/sm-file-summary.md +79 -0
  12. package/pennyfarthing-dist/agents/sm-finish.md +82 -0
  13. package/pennyfarthing-dist/agents/sm-handoff.md +129 -0
  14. package/pennyfarthing-dist/agents/sm-setup.md +251 -0
  15. package/pennyfarthing-dist/agents/sm.md +284 -0
  16. package/pennyfarthing-dist/agents/tea.md +161 -0
  17. package/pennyfarthing-dist/agents/tech-writer.md +226 -0
  18. package/pennyfarthing-dist/agents/testing-runner.md +184 -0
  19. package/pennyfarthing-dist/agents/ux-designer.md +236 -0
  20. package/pennyfarthing-dist/agents/workflow-status-check.md +96 -0
  21. package/pennyfarthing-dist/commands/architect.md +7 -0
  22. package/pennyfarthing-dist/commands/benchmark-control.md +69 -0
  23. package/pennyfarthing-dist/commands/benchmark.md +485 -0
  24. package/pennyfarthing-dist/commands/brainstorming.md +91 -0
  25. package/pennyfarthing-dist/commands/check.md +156 -0
  26. package/pennyfarthing-dist/commands/chore.md +178 -0
  27. package/pennyfarthing-dist/commands/close-epic.md +139 -0
  28. package/pennyfarthing-dist/commands/continue-session.md +184 -0
  29. package/pennyfarthing-dist/commands/create-branches-from-story.md +358 -0
  30. package/pennyfarthing-dist/commands/create-theme.md +29 -0
  31. package/pennyfarthing-dist/commands/dev.md +7 -0
  32. package/pennyfarthing-dist/commands/devops.md +7 -0
  33. package/pennyfarthing-dist/commands/git-cleanup.md +51 -0
  34. package/pennyfarthing-dist/commands/health-check.md +141 -0
  35. package/pennyfarthing-dist/commands/help.md +264 -0
  36. package/pennyfarthing-dist/commands/job-fair.md +102 -0
  37. package/pennyfarthing-dist/commands/list-themes.md +21 -0
  38. package/pennyfarthing-dist/commands/orchestrator.md +7 -0
  39. package/pennyfarthing-dist/commands/parallel-work.md +71 -0
  40. package/pennyfarthing-dist/commands/party-mode.md +77 -0
  41. package/pennyfarthing-dist/commands/permissions.md +193 -0
  42. package/pennyfarthing-dist/commands/pm.md +7 -0
  43. package/pennyfarthing-dist/commands/prime.md +140 -0
  44. package/pennyfarthing-dist/commands/release.md +58 -0
  45. package/pennyfarthing-dist/commands/repo-status.md +49 -0
  46. package/pennyfarthing-dist/commands/retro.md +200 -0
  47. package/pennyfarthing-dist/commands/reviewer.md +7 -0
  48. package/pennyfarthing-dist/commands/run-ci.md +116 -0
  49. package/pennyfarthing-dist/commands/set-theme.md +56 -0
  50. package/pennyfarthing-dist/commands/show-theme.md +21 -0
  51. package/pennyfarthing-dist/commands/sm.md +7 -0
  52. package/pennyfarthing-dist/commands/solo.md +447 -0
  53. package/pennyfarthing-dist/commands/sprint-planning.md +109 -0
  54. package/pennyfarthing-dist/commands/sprint.md +133 -0
  55. package/pennyfarthing-dist/commands/standalone.md +194 -0
  56. package/pennyfarthing-dist/commands/start-epic.md +168 -0
  57. package/pennyfarthing-dist/commands/sync-epic-to-jira.md +184 -0
  58. package/pennyfarthing-dist/commands/sync-work-with-sprint.md +373 -0
  59. package/pennyfarthing-dist/commands/tea.md +7 -0
  60. package/pennyfarthing-dist/commands/tech-writer.md +7 -0
  61. package/pennyfarthing-dist/commands/theme-maker.md +676 -0
  62. package/pennyfarthing-dist/commands/update-domain-docs.md +83 -0
  63. package/pennyfarthing-dist/commands/ux-designer.md +7 -0
  64. package/pennyfarthing-dist/commands/work.md +23 -0
  65. package/pennyfarthing-dist/commands/workflow.md +21 -0
  66. package/pennyfarthing-dist/guides/agent-behavior.md +311 -0
  67. package/pennyfarthing-dist/guides/agent-coordination.md +480 -0
  68. package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +432 -0
  69. package/pennyfarthing-dist/guides/agent-template-strategic.md +148 -0
  70. package/pennyfarthing-dist/guides/agent-template-tactical.md +162 -0
  71. package/pennyfarthing-dist/guides/hooks.md +230 -0
  72. package/pennyfarthing-dist/guides/measurement-framework.md +210 -0
  73. package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +766 -0
  74. package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +574 -0
  75. package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +488 -0
  76. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +402 -0
  77. package/pennyfarthing-dist/guides/permission-protocol.md +188 -0
  78. package/pennyfarthing-dist/guides/persona-loading.md +46 -0
  79. package/pennyfarthing-dist/guides/prompt-patterns.md +338 -0
  80. package/pennyfarthing-dist/guides/scale-levels.md +114 -0
  81. package/pennyfarthing-dist/guides/session-artifacts.md +193 -0
  82. package/pennyfarthing-dist/guides/workflow-schema.md +257 -0
  83. package/pennyfarthing-dist/guides/worktree-mode.md +113 -0
  84. package/pennyfarthing-dist/guides/xml-tags.md +335 -0
  85. package/pennyfarthing-dist/output-styles/teaching.md +33 -0
  86. package/pennyfarthing-dist/output-styles/terse.md +20 -0
  87. package/pennyfarthing-dist/output-styles/verbose.md +28 -0
  88. package/pennyfarthing-dist/personas/BENCHMARK-METHODOLOGY.md +105 -0
  89. package/pennyfarthing-dist/personas/OCEAN-BENCHMARKING.md +210 -0
  90. package/pennyfarthing-dist/personas/TRAIL-OCEAN-MAPPING.md +168 -0
  91. package/pennyfarthing-dist/personas/ZEITGEIST-ANALYSIS.md +171 -0
  92. package/pennyfarthing-dist/personas/attributes.yaml +69 -0
  93. package/pennyfarthing-dist/personas/scripts/add-zeitgeist-calibrated.py +81 -0
  94. package/pennyfarthing-dist/personas/scripts/add-zeitgeist-scores.sh +56 -0
  95. package/pennyfarthing-dist/personas/themes/1984.yaml +304 -0
  96. package/pennyfarthing-dist/personas/themes/a-team.yaml +331 -0
  97. package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +294 -0
  98. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +324 -0
  99. package/pennyfarthing-dist/personas/themes/all-stars.yaml +326 -0
  100. package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +312 -0
  101. package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +298 -0
  102. package/pennyfarthing-dist/personas/themes/arcane.yaml +282 -0
  103. package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +327 -0
  104. package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +282 -0
  105. package/pennyfarthing-dist/personas/themes/babylon-5.yaml +282 -0
  106. package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +282 -0
  107. package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +282 -0
  108. package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +294 -0
  109. package/pennyfarthing-dist/personas/themes/black-sails.yaml +294 -0
  110. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +289 -0
  111. package/pennyfarthing-dist/personas/themes/bobiverse.yaml +282 -0
  112. package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +319 -0
  113. package/pennyfarthing-dist/personas/themes/catch-22.yaml +304 -0
  114. package/pennyfarthing-dist/personas/themes/classical-composers.yaml +302 -0
  115. package/pennyfarthing-dist/personas/themes/control.yaml +201 -0
  116. package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +312 -0
  117. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +315 -0
  118. package/pennyfarthing-dist/personas/themes/deadwood.yaml +294 -0
  119. package/pennyfarthing-dist/personas/themes/dickens.yaml +312 -0
  120. package/pennyfarthing-dist/personas/themes/discworld.yaml +334 -0
  121. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +284 -0
  122. package/pennyfarthing-dist/personas/themes/don-quixote.yaml +312 -0
  123. package/pennyfarthing-dist/personas/themes/dune.yaml +301 -0
  124. package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +312 -0
  125. package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +282 -0
  126. package/pennyfarthing-dist/personas/themes/fargo.yaml +322 -0
  127. package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +304 -0
  128. package/pennyfarthing-dist/personas/themes/firefly.yaml +320 -0
  129. package/pennyfarthing-dist/personas/themes/foundation.yaml +284 -0
  130. package/pennyfarthing-dist/personas/themes/futurama.yaml +313 -0
  131. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +284 -0
  132. package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +365 -0
  133. package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +300 -0
  134. package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +300 -0
  135. package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +326 -0
  136. package/pennyfarthing-dist/personas/themes/hannibal.yaml +294 -0
  137. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +316 -0
  138. package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +285 -0
  139. package/pennyfarthing-dist/personas/themes/historical-figures.yaml +282 -0
  140. package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +323 -0
  141. package/pennyfarthing-dist/personas/themes/house-md.yaml +313 -0
  142. package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +283 -0
  143. package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +294 -0
  144. package/pennyfarthing-dist/personas/themes/jane-austen.yaml +281 -0
  145. package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +312 -0
  146. package/pennyfarthing-dist/personas/themes/justified.yaml +294 -0
  147. package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +343 -0
  148. package/pennyfarthing-dist/personas/themes/les-miserables.yaml +293 -0
  149. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +326 -0
  150. package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +325 -0
  151. package/pennyfarthing-dist/personas/themes/mad-max.yaml +349 -0
  152. package/pennyfarthing-dist/personas/themes/mad-men.yaml +283 -0
  153. package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +294 -0
  154. package/pennyfarthing-dist/personas/themes/mash.yaml +329 -0
  155. package/pennyfarthing-dist/personas/themes/mass-effect.yaml +283 -0
  156. package/pennyfarthing-dist/personas/themes/military-commanders.yaml +298 -0
  157. package/pennyfarthing-dist/personas/themes/moby-dick.yaml +312 -0
  158. package/pennyfarthing-dist/personas/themes/monty-python.yaml +297 -0
  159. package/pennyfarthing-dist/personas/themes/neuromancer.yaml +294 -0
  160. package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +321 -0
  161. package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +364 -0
  162. package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +292 -0
  163. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +344 -0
  164. package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +312 -0
  165. package/pennyfarthing-dist/personas/themes/rome.yaml +294 -0
  166. package/pennyfarthing-dist/personas/themes/russian-masters.yaml +310 -0
  167. package/pennyfarthing-dist/personas/themes/sandman.yaml +282 -0
  168. package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +312 -0
  169. package/pennyfarthing-dist/personas/themes/shakespeare.yaml +295 -0
  170. package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +283 -0
  171. package/pennyfarthing-dist/personas/themes/snow-crash.yaml +290 -0
  172. package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +294 -0
  173. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +358 -0
  174. package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +327 -0
  175. package/pennyfarthing-dist/personas/themes/star-wars.yaml +297 -0
  176. package/pennyfarthing-dist/personas/themes/succession.yaml +294 -0
  177. package/pennyfarthing-dist/personas/themes/superfriends.yaml +332 -0
  178. package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +359 -0
  179. package/pennyfarthing-dist/personas/themes/the-americans.yaml +294 -0
  180. package/pennyfarthing-dist/personas/themes/the-crown.yaml +294 -0
  181. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +337 -0
  182. package/pennyfarthing-dist/personas/themes/the-good-place.yaml +315 -0
  183. package/pennyfarthing-dist/personas/themes/the-matrix.yaml +342 -0
  184. package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +294 -0
  185. package/pennyfarthing-dist/personas/themes/the-office.yaml +323 -0
  186. package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +300 -0
  187. package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +294 -0
  188. package/pennyfarthing-dist/personas/themes/the-wire.yaml +303 -0
  189. package/pennyfarthing-dist/personas/themes/the-witcher.yaml +294 -0
  190. package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +296 -0
  191. package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +294 -0
  192. package/pennyfarthing-dist/personas/themes/watchmen.yaml +285 -0
  193. package/pennyfarthing-dist/personas/themes/west-wing.yaml +285 -0
  194. package/pennyfarthing-dist/personas/themes/world-explorers.yaml +312 -0
  195. package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +299 -0
  196. package/pennyfarthing-dist/personas/themes/x-files.yaml +296 -0
  197. package/pennyfarthing-dist/personas/zeitgeist-scores.yaml +1172 -0
  198. package/pennyfarthing-dist/scripts/README.md +87 -0
  199. package/pennyfarthing-dist/scripts/core/README.md +26 -0
  200. package/pennyfarthing-dist/scripts/core/agent-session.sh +383 -0
  201. package/pennyfarthing-dist/scripts/core/check-context.sh +280 -0
  202. package/pennyfarthing-dist/scripts/core/handoff-marker.sh +101 -0
  203. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +95 -0
  204. package/pennyfarthing-dist/scripts/core/prime.sh +30 -0
  205. package/pennyfarthing-dist/scripts/core/run.sh +92 -0
  206. package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +21 -0
  207. package/pennyfarthing-dist/scripts/git/README.md +25 -0
  208. package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +267 -0
  209. package/pennyfarthing-dist/scripts/git/git-status-all.sh +152 -0
  210. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +91 -0
  211. package/pennyfarthing-dist/scripts/git/release.sh +215 -0
  212. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +494 -0
  213. package/pennyfarthing-dist/scripts/health/drift-detection.sh +162 -0
  214. package/pennyfarthing-dist/scripts/hooks/README.md +32 -0
  215. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +106 -0
  216. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +60 -0
  217. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +65 -0
  218. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +35 -0
  219. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +166 -0
  220. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +107 -0
  221. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +71 -0
  222. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +54 -0
  223. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +20 -0
  224. package/pennyfarthing-dist/scripts/hooks/question_reflector_check.py +499 -0
  225. package/pennyfarthing-dist/scripts/hooks/session-start.sh +97 -0
  226. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +65 -0
  227. package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +94 -0
  228. package/pennyfarthing-dist/scripts/jira/README.md +36 -0
  229. package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +101 -0
  230. package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +97 -0
  231. package/pennyfarthing-dist/scripts/jira/jira-claim-story.sh +22 -0
  232. package/pennyfarthing-dist/scripts/jira/jira-lib.sh +464 -0
  233. package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +266 -0
  234. package/pennyfarthing-dist/scripts/jira/jira-sync-story.sh +18 -0
  235. package/pennyfarthing-dist/scripts/jira/jira-sync.sh +16 -0
  236. package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +16 -0
  237. package/pennyfarthing-dist/scripts/jira/sync-epic-to-jira.sh +16 -0
  238. package/pennyfarthing-dist/scripts/lib/README.md +29 -0
  239. package/pennyfarthing-dist/scripts/lib/background-tasks.sh +177 -0
  240. package/pennyfarthing-dist/scripts/lib/checkpoint.sh +136 -0
  241. package/pennyfarthing-dist/scripts/lib/common.sh +212 -0
  242. package/pennyfarthing-dist/scripts/lib/file-lock.sh +269 -0
  243. package/pennyfarthing-dist/scripts/lib/find-root.sh +35 -0
  244. package/pennyfarthing-dist/scripts/lib/logging.sh +186 -0
  245. package/pennyfarthing-dist/scripts/lib/retry.sh +76 -0
  246. package/pennyfarthing-dist/scripts/maintenance/migrate-theme-schema.mjs +102 -0
  247. package/pennyfarthing-dist/scripts/maintenance/sidecar-health.sh +97 -0
  248. package/pennyfarthing-dist/scripts/misc/README.md +44 -0
  249. package/pennyfarthing-dist/scripts/misc/add-short-names.sh +13 -0
  250. package/pennyfarthing-dist/scripts/misc/add_short_names.py +226 -0
  251. package/pennyfarthing-dist/scripts/misc/backlog.sh +91 -0
  252. package/pennyfarthing-dist/scripts/misc/check-status.sh +247 -0
  253. package/pennyfarthing-dist/scripts/misc/find-related-work.sh +231 -0
  254. package/pennyfarthing-dist/scripts/misc/generate-skill-docs.sh +122 -0
  255. package/pennyfarthing-dist/scripts/misc/log-skill-usage.sh +74 -0
  256. package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +10 -0
  257. package/pennyfarthing-dist/scripts/misc/migrate_bmad_workflow.py +319 -0
  258. package/pennyfarthing-dist/scripts/misc/repo-scan.sh +141 -0
  259. package/pennyfarthing-dist/scripts/misc/repo-utils.sh +778 -0
  260. package/pennyfarthing-dist/scripts/misc/run-ci.sh +219 -0
  261. package/pennyfarthing-dist/scripts/misc/run-timestamp.sh +7 -0
  262. package/pennyfarthing-dist/scripts/misc/session-cleanup.sh +319 -0
  263. package/pennyfarthing-dist/scripts/misc/skill-usage-report.sh +193 -0
  264. package/pennyfarthing-dist/scripts/misc/statusline.sh +259 -0
  265. package/pennyfarthing-dist/scripts/misc/uninstall.sh +270 -0
  266. package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +160 -0
  267. package/pennyfarthing-dist/scripts/portraits/generate-portraits.py +400 -0
  268. package/pennyfarthing-dist/scripts/portraits/generate-portraits.sh +54 -0
  269. package/pennyfarthing-dist/scripts/sprint/README.md +29 -0
  270. package/pennyfarthing-dist/scripts/sprint/archive-story.sh +139 -0
  271. package/pennyfarthing-dist/scripts/sprint/available-stories.sh +97 -0
  272. package/pennyfarthing-dist/scripts/sprint/check-story.sh +164 -0
  273. package/pennyfarthing-dist/scripts/sprint/get-epic-field.sh +58 -0
  274. package/pennyfarthing-dist/scripts/sprint/get-story-field.sh +69 -0
  275. package/pennyfarthing-dist/scripts/sprint/import-epic-to-future.sh +10 -0
  276. package/pennyfarthing-dist/scripts/sprint/import_epic_to_future.py +270 -0
  277. package/pennyfarthing-dist/scripts/sprint/list-future.sh +151 -0
  278. package/pennyfarthing-dist/scripts/sprint/new-sprint.sh +116 -0
  279. package/pennyfarthing-dist/scripts/sprint/promote-epic.sh +154 -0
  280. package/pennyfarthing-dist/scripts/sprint/sprint-common.sh +421 -0
  281. package/pennyfarthing-dist/scripts/sprint/sprint-info.sh +39 -0
  282. package/pennyfarthing-dist/scripts/sprint/sprint-metrics.sh +241 -0
  283. package/pennyfarthing-dist/scripts/sprint/sprint-status.sh +134 -0
  284. package/pennyfarthing-dist/scripts/story/README.md +23 -0
  285. package/pennyfarthing-dist/scripts/story/create-story.sh +19 -0
  286. package/pennyfarthing-dist/scripts/story/size-story.sh +18 -0
  287. package/pennyfarthing-dist/scripts/story/story-template.sh +18 -0
  288. package/pennyfarthing-dist/scripts/test/README.md +23 -0
  289. package/pennyfarthing-dist/scripts/test/ensure-swebench-data.sh +59 -0
  290. package/pennyfarthing-dist/scripts/test/ground-truth-judge.py +220 -0
  291. package/pennyfarthing-dist/scripts/test/swebench-judge.py +374 -0
  292. package/pennyfarthing-dist/scripts/test/test-cache.sh +165 -0
  293. package/pennyfarthing-dist/scripts/test/test-setup.sh +337 -0
  294. package/pennyfarthing-dist/scripts/tests/check.test.sh +582 -0
  295. package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +515 -0
  296. package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +599 -0
  297. package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +332 -0
  298. package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +573 -0
  299. package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +859 -0
  300. package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +662 -0
  301. package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +589 -0
  302. package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +105 -0
  303. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +597 -0
  304. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +514 -0
  305. package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +517 -0
  306. package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +331 -0
  307. package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +647 -0
  308. package/pennyfarthing-dist/scripts/theme/README.md +22 -0
  309. package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.sh +13 -0
  310. package/pennyfarthing-dist/scripts/theme/compute_theme_tiers.py +402 -0
  311. package/pennyfarthing-dist/scripts/theme/list-themes.sh +73 -0
  312. package/pennyfarthing-dist/scripts/theme/update-theme-tiers.sh +97 -0
  313. package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +576 -0
  314. package/pennyfarthing-dist/scripts/workflow/README.md +28 -0
  315. package/pennyfarthing-dist/scripts/workflow/check.py +502 -0
  316. package/pennyfarthing-dist/scripts/workflow/check.sh +24 -0
  317. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +159 -0
  318. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +228 -0
  319. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.py +61 -0
  320. package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +13 -0
  321. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +130 -0
  322. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +40 -0
  323. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +163 -0
  324. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +138 -0
  325. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +256 -0
  326. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +167 -0
  327. package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +242 -0
  328. package/pennyfarthing-dist/skills/changelog/SKILL.md +367 -0
  329. package/pennyfarthing-dist/skills/code-review/SKILL.md +168 -0
  330. package/pennyfarthing-dist/skills/context-engineering/SKILL.md +274 -0
  331. package/pennyfarthing-dist/skills/cyclist/SKILL.md +88 -0
  332. package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +437 -0
  333. package/pennyfarthing-dist/skills/finalize-run/SKILL.md +258 -0
  334. package/pennyfarthing-dist/skills/jira/SKILL.md +484 -0
  335. package/pennyfarthing-dist/skills/judge/SKILL.md +636 -0
  336. package/pennyfarthing-dist/skills/just/SKILL.md +403 -0
  337. package/pennyfarthing-dist/skills/mermaid/SKILL.md +240 -0
  338. package/pennyfarthing-dist/skills/otel/skill.md +223 -0
  339. package/pennyfarthing-dist/skills/permissions/skill.md +172 -0
  340. package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +178 -0
  341. package/pennyfarthing-dist/skills/skill-registry.schema.json +107 -0
  342. package/pennyfarthing-dist/skills/skill-registry.yaml +393 -0
  343. package/pennyfarthing-dist/skills/sprint/scripts/archive-story.sh +101 -0
  344. package/pennyfarthing-dist/skills/sprint/scripts/available-stories.sh +97 -0
  345. package/pennyfarthing-dist/skills/sprint/scripts/check-story.sh +164 -0
  346. package/pennyfarthing-dist/skills/sprint/scripts/create-jira-epic.sh +101 -0
  347. package/pennyfarthing-dist/skills/sprint/scripts/new-sprint.sh +116 -0
  348. package/pennyfarthing-dist/skills/sprint/scripts/promote-epic.sh +164 -0
  349. package/pennyfarthing-dist/skills/sprint/scripts/sprint-info.sh +39 -0
  350. package/pennyfarthing-dist/skills/sprint/scripts/sprint-status.sh +147 -0
  351. package/pennyfarthing-dist/skills/sprint/scripts/sync-epic-jira.sh +86 -0
  352. package/pennyfarthing-dist/skills/sprint/skill.md +465 -0
  353. package/pennyfarthing-dist/skills/story/scripts/create-story.sh +159 -0
  354. package/pennyfarthing-dist/skills/story/scripts/size-story.sh +198 -0
  355. package/pennyfarthing-dist/skills/story/scripts/story-template.sh +162 -0
  356. package/pennyfarthing-dist/skills/story/skill.md +219 -0
  357. package/pennyfarthing-dist/skills/systematic-debugging/SKILL.md +390 -0
  358. package/pennyfarthing-dist/skills/testing/SKILL.md +99 -0
  359. package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +124 -0
  360. package/pennyfarthing-dist/skills/theme/skill.md +129 -0
  361. package/pennyfarthing-dist/skills/theme-creation/SKILL.md +174 -0
  362. package/pennyfarthing-dist/skills/workflow/scripts/list-workflows.sh +91 -0
  363. package/pennyfarthing-dist/skills/workflow/scripts/resume-workflow.sh +163 -0
  364. package/pennyfarthing-dist/skills/workflow/scripts/show-workflow.sh +138 -0
  365. package/pennyfarthing-dist/skills/workflow/scripts/start-workflow.sh +273 -0
  366. package/pennyfarthing-dist/skills/workflow/scripts/workflow-status.sh +167 -0
  367. package/pennyfarthing-dist/skills/workflow/skill.md +337 -0
  368. package/pennyfarthing-dist/skills/yq/SKILL.md +264 -0
  369. package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +187 -0
  370. package/pennyfarthing-dist/templates/LEADERBOARD.template.md +59 -0
  371. package/pennyfarthing-dist/templates/agent-scopes.yaml.template +276 -0
  372. package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +61 -0
  373. package/pennyfarthing-dist/templates/persona-config.yaml.template +22 -0
  374. package/pennyfarthing-dist/templates/preferences.yaml.template +15 -0
  375. package/pennyfarthing-dist/templates/settings.local.json.template +101 -0
  376. package/pennyfarthing-dist/templates/setup-env.sh.template +18 -0
  377. package/pennyfarthing-dist/templates/shared-context.md.template +70 -0
  378. package/pennyfarthing-dist/templates/sidecar/decisions.md.template +40 -0
  379. package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +37 -0
  380. package/pennyfarthing-dist/templates/sidecar/patterns.md.template +34 -0
  381. package/pennyfarthing-dist/workflows/agent-docs.yaml +70 -0
  382. package/pennyfarthing-dist/workflows/architecture/steps/step-01-initialize.md +101 -0
  383. package/pennyfarthing-dist/workflows/architecture/steps/step-01b-continue.md +93 -0
  384. package/pennyfarthing-dist/workflows/architecture/steps/step-02-context.md +115 -0
  385. package/pennyfarthing-dist/workflows/architecture/steps/step-03-patterns.md +133 -0
  386. package/pennyfarthing-dist/workflows/architecture/steps/step-04-components.md +138 -0
  387. package/pennyfarthing-dist/workflows/architecture/steps/step-05-interfaces.md +133 -0
  388. package/pennyfarthing-dist/workflows/architecture/steps/step-06-risks.md +142 -0
  389. package/pennyfarthing-dist/workflows/architecture/steps/step-07-document.md +160 -0
  390. package/pennyfarthing-dist/workflows/architecture/templates/architecture-decision.md +102 -0
  391. package/pennyfarthing-dist/workflows/architecture.yaml +65 -0
  392. package/pennyfarthing-dist/workflows/bdd.yaml +60 -0
  393. package/pennyfarthing-dist/workflows/brainstorming/brain-methods.csv +62 -0
  394. package/pennyfarthing-dist/workflows/brainstorming/checklist.md +44 -0
  395. package/pennyfarthing-dist/workflows/brainstorming/instructions.md +736 -0
  396. package/pennyfarthing-dist/workflows/brainstorming/workflow.yaml +49 -0
  397. package/pennyfarthing-dist/workflows/code-review/checklist.md +23 -0
  398. package/pennyfarthing-dist/workflows/code-review/instructions.md +234 -0
  399. package/pennyfarthing-dist/workflows/code-review/workflow.yaml +51 -0
  400. package/pennyfarthing-dist/workflows/dev-story/checklist.md +80 -0
  401. package/pennyfarthing-dist/workflows/dev-story/instructions.xml +410 -0
  402. package/pennyfarthing-dist/workflows/dev-story/workflow.yaml +50 -0
  403. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-01-validate-prerequisites.md +256 -0
  404. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-02-design-epics.md +233 -0
  405. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-03-create-stories.md +272 -0
  406. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-04-final-validation.md +153 -0
  407. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +122 -0
  408. package/pennyfarthing-dist/workflows/epics-and-stories/templates/epics-template.md +57 -0
  409. package/pennyfarthing-dist/workflows/epics-and-stories/workflow.yaml +28 -0
  410. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +101 -0
  411. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-02-categorize.md +116 -0
  412. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-03-execute.md +224 -0
  413. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +88 -0
  414. package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +79 -0
  415. package/pennyfarthing-dist/workflows/git-cleanup.yaml +59 -0
  416. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-01-document-discovery.md +190 -0
  417. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-02-prd-analysis.md +178 -0
  418. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
  419. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-04-ux-alignment.md +139 -0
  420. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
  421. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-06-final-assessment.md +133 -0
  422. package/pennyfarthing-dist/workflows/implementation-readiness/templates/readiness-report-template.md +4 -0
  423. package/pennyfarthing-dist/workflows/implementation-readiness/workflow.yaml +40 -0
  424. package/pennyfarthing-dist/workflows/prd/data/domain-complexity.csv +13 -0
  425. package/pennyfarthing-dist/workflows/prd/data/prd-purpose.md +197 -0
  426. package/pennyfarthing-dist/workflows/prd/data/project-types.csv +11 -0
  427. package/pennyfarthing-dist/workflows/prd/steps-c/step-01-init.md +191 -0
  428. package/pennyfarthing-dist/workflows/prd/steps-c/step-01b-continue.md +153 -0
  429. package/pennyfarthing-dist/workflows/prd/steps-c/step-02-discovery.md +224 -0
  430. package/pennyfarthing-dist/workflows/prd/steps-c/step-03-success.md +226 -0
  431. package/pennyfarthing-dist/workflows/prd/steps-c/step-04-journeys.md +213 -0
  432. package/pennyfarthing-dist/workflows/prd/steps-c/step-05-domain.md +207 -0
  433. package/pennyfarthing-dist/workflows/prd/steps-c/step-06-innovation.md +226 -0
  434. package/pennyfarthing-dist/workflows/prd/steps-c/step-07-project-type.md +237 -0
  435. package/pennyfarthing-dist/workflows/prd/steps-c/step-08-scoping.md +228 -0
  436. package/pennyfarthing-dist/workflows/prd/steps-c/step-09-functional.md +231 -0
  437. package/pennyfarthing-dist/workflows/prd/steps-c/step-10-nonfunctional.md +242 -0
  438. package/pennyfarthing-dist/workflows/prd/steps-c/step-11-polish.md +217 -0
  439. package/pennyfarthing-dist/workflows/prd/steps-c/step-12-complete.md +180 -0
  440. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01-discovery.md +247 -0
  441. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  442. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-02-review.md +249 -0
  443. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-03-edit.md +253 -0
  444. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-04-complete.md +168 -0
  445. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-01-discovery.md +218 -0
  446. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02-format-detection.md +191 -0
  447. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02b-parity-check.md +209 -0
  448. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-03-density-validation.md +174 -0
  449. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  450. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-05-measurability-validation.md +228 -0
  451. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-06-traceability-validation.md +217 -0
  452. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  453. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  454. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-09-project-type-validation.md +263 -0
  455. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-10-smart-validation.md +209 -0
  456. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  457. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-12-completeness-validation.md +242 -0
  458. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-13-report-complete.md +232 -0
  459. package/pennyfarthing-dist/workflows/prd/templates/prd-template.md +10 -0
  460. package/pennyfarthing-dist/workflows/prd/workflow.yaml +42 -0
  461. package/pennyfarthing-dist/workflows/product-brief/steps/step-01-init.md +177 -0
  462. package/pennyfarthing-dist/workflows/product-brief/steps/step-01b-continue.md +161 -0
  463. package/pennyfarthing-dist/workflows/product-brief/steps/step-02-vision.md +199 -0
  464. package/pennyfarthing-dist/workflows/product-brief/steps/step-03-users.md +202 -0
  465. package/pennyfarthing-dist/workflows/product-brief/steps/step-04-metrics.md +205 -0
  466. package/pennyfarthing-dist/workflows/product-brief/steps/step-05-scope.md +219 -0
  467. package/pennyfarthing-dist/workflows/product-brief/steps/step-06-complete.md +194 -0
  468. package/pennyfarthing-dist/workflows/product-brief/templates/product-brief.template.md +10 -0
  469. package/pennyfarthing-dist/workflows/product-brief/workflow.yaml +31 -0
  470. package/pennyfarthing-dist/workflows/project-context/project-context-template.md +21 -0
  471. package/pennyfarthing-dist/workflows/project-context/steps/step-01-discover.md +184 -0
  472. package/pennyfarthing-dist/workflows/project-context/steps/step-02-generate.md +318 -0
  473. package/pennyfarthing-dist/workflows/project-context/steps/step-03-complete.md +278 -0
  474. package/pennyfarthing-dist/workflows/project-context/workflow.yaml +27 -0
  475. package/pennyfarthing-dist/workflows/quick-dev/steps/step-01-mode-detection.md +156 -0
  476. package/pennyfarthing-dist/workflows/quick-dev/steps/step-02-context-gathering.md +120 -0
  477. package/pennyfarthing-dist/workflows/quick-dev/steps/step-03-execute.md +113 -0
  478. package/pennyfarthing-dist/workflows/quick-dev/steps/step-04-self-check.md +113 -0
  479. package/pennyfarthing-dist/workflows/quick-dev/steps/step-05-adversarial-review.md +106 -0
  480. package/pennyfarthing-dist/workflows/quick-dev/steps/step-06-resolve-findings.md +140 -0
  481. package/pennyfarthing-dist/workflows/quick-dev/workflow.yaml +27 -0
  482. package/pennyfarthing-dist/workflows/quick-spec/steps/step-01-understand.md +189 -0
  483. package/pennyfarthing-dist/workflows/quick-spec/steps/step-02-investigate.md +144 -0
  484. package/pennyfarthing-dist/workflows/quick-spec/steps/step-03-generate.md +128 -0
  485. package/pennyfarthing-dist/workflows/quick-spec/steps/step-04-review.md +191 -0
  486. package/pennyfarthing-dist/workflows/quick-spec/tech-spec-template.md +74 -0
  487. package/pennyfarthing-dist/workflows/quick-spec/workflow.yaml +27 -0
  488. package/pennyfarthing-dist/workflows/research/steps-domain/step-01-init.md +137 -0
  489. package/pennyfarthing-dist/workflows/research/steps-domain/step-02-domain-analysis.md +229 -0
  490. package/pennyfarthing-dist/workflows/research/steps-domain/step-03-competitive-landscape.md +238 -0
  491. package/pennyfarthing-dist/workflows/research/steps-domain/step-04-regulatory-focus.md +206 -0
  492. package/pennyfarthing-dist/workflows/research/steps-domain/step-05-technical-trends.md +234 -0
  493. package/pennyfarthing-dist/workflows/research/steps-domain/step-06-research-synthesis.md +443 -0
  494. package/pennyfarthing-dist/workflows/research/steps-market/step-01-init.md +182 -0
  495. package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-behavior.md +237 -0
  496. package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-insights.md +200 -0
  497. package/pennyfarthing-dist/workflows/research/steps-market/step-03-customer-pain-points.md +249 -0
  498. package/pennyfarthing-dist/workflows/research/steps-market/step-04-customer-decisions.md +259 -0
  499. package/pennyfarthing-dist/workflows/research/steps-market/step-05-competitive-analysis.md +177 -0
  500. package/pennyfarthing-dist/workflows/research/steps-market/step-06-research-completion.md +475 -0
  501. package/pennyfarthing-dist/workflows/research/steps-technical/step-01-init.md +137 -0
  502. package/pennyfarthing-dist/workflows/research/steps-technical/step-02-technical-overview.md +239 -0
  503. package/pennyfarthing-dist/workflows/research/steps-technical/step-03-integration-patterns.md +248 -0
  504. package/pennyfarthing-dist/workflows/research/steps-technical/step-04-architectural-patterns.md +202 -0
  505. package/pennyfarthing-dist/workflows/research/steps-technical/step-05-implementation-research.md +239 -0
  506. package/pennyfarthing-dist/workflows/research/steps-technical/step-06-research-synthesis.md +486 -0
  507. package/pennyfarthing-dist/workflows/research/templates/research.template.md +29 -0
  508. package/pennyfarthing-dist/workflows/research/workflow.yaml +45 -0
  509. package/pennyfarthing-dist/workflows/retrospective/checklist.md +31 -0
  510. package/pennyfarthing-dist/workflows/retrospective/instructions.md +1443 -0
  511. package/pennyfarthing-dist/workflows/retrospective/workflow.yaml +50 -0
  512. package/pennyfarthing-dist/workflows/sprint-planning/checklist.md +33 -0
  513. package/pennyfarthing-dist/workflows/sprint-planning/sprint-status-template.yaml +55 -0
  514. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-01-parse-epic-files.md +54 -0
  515. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-02-build-sprint-status.md +44 -0
  516. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-03-status-detection.md +64 -0
  517. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-04-generate-status-file.md +73 -0
  518. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-05-validate-and-report.md +56 -0
  519. package/pennyfarthing-dist/workflows/sprint-planning/workflow.yaml +34 -0
  520. package/pennyfarthing-dist/workflows/tdd.yaml +50 -0
  521. package/pennyfarthing-dist/workflows/trivial.yaml +40 -0
  522. package/pennyfarthing-dist/workflows/ux-design/steps/step-01-init.md +135 -0
  523. package/pennyfarthing-dist/workflows/ux-design/steps/step-01b-continue.md +127 -0
  524. package/pennyfarthing-dist/workflows/ux-design/steps/step-02-discovery.md +190 -0
  525. package/pennyfarthing-dist/workflows/ux-design/steps/step-03-core-experience.md +216 -0
  526. package/pennyfarthing-dist/workflows/ux-design/steps/step-04-emotional-response.md +219 -0
  527. package/pennyfarthing-dist/workflows/ux-design/steps/step-05-inspiration.md +234 -0
  528. package/pennyfarthing-dist/workflows/ux-design/steps/step-06-design-system.md +252 -0
  529. package/pennyfarthing-dist/workflows/ux-design/steps/step-07-defining-experience.md +254 -0
  530. package/pennyfarthing-dist/workflows/ux-design/steps/step-08-visual-foundation.md +224 -0
  531. package/pennyfarthing-dist/workflows/ux-design/steps/step-09-design-directions.md +224 -0
  532. package/pennyfarthing-dist/workflows/ux-design/steps/step-10-user-journeys.md +241 -0
  533. package/pennyfarthing-dist/workflows/ux-design/steps/step-11-component-strategy.md +248 -0
  534. package/pennyfarthing-dist/workflows/ux-design/steps/step-12-ux-patterns.md +237 -0
  535. package/pennyfarthing-dist/workflows/ux-design/steps/step-13-responsive-accessibility.md +264 -0
  536. package/pennyfarthing-dist/workflows/ux-design/steps/step-14-complete.md +228 -0
  537. package/pennyfarthing-dist/workflows/ux-design/ux-design-template.md +13 -0
  538. package/pennyfarthing-dist/workflows/ux-design/workflow.yaml +41 -0
@@ -0,0 +1,116 @@
1
+ ---
2
+ description: Detect and run CI locally
3
+ ---
4
+
5
+ <purpose>
6
+ Run CI locally by detecting the project's CI system and executing the appropriate commands. Thin wrapper that delegates to project configuration.
7
+ </purpose>
8
+
9
+ <when-to-use>
10
+ - Before pushing to verify CI will pass
11
+ - To reproduce CI failures locally
12
+ - To run the full CI pipeline without pushing
13
+ - When you want to know what CI system the project uses
14
+ </when-to-use>
15
+
16
+ <execution>
17
+
18
+ ## Running CI Locally
19
+
20
+ Use the run-ci.sh script:
21
+
22
+ ```bash
23
+ # Run CI locally (auto-detects CI system)
24
+ $CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/run-ci.sh
25
+
26
+ # Show what CI system is detected without running
27
+ $CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/run-ci.sh --detect-only
28
+
29
+ # Show what command would run without executing
30
+ $CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/run-ci.sh --dry-run
31
+
32
+ # Show help
33
+ $CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/run-ci.sh --help
34
+ ```
35
+
36
+ ## Options
37
+
38
+ | Option | Description |
39
+ |--------|-------------|
40
+ | `--help`, `-h` | Show help message |
41
+ | `--detect-only` | Show detected CI system without running |
42
+ | `--dry-run` | Show what would run without executing |
43
+
44
+ </execution>
45
+
46
+ <detection-order>
47
+
48
+ ## CI System Detection
49
+
50
+ The script detects CI systems in this order:
51
+
52
+ | Priority | System | Detection | Command |
53
+ |----------|--------|-----------|---------|
54
+ | 1 | Justfile | `just --list` shows `ci` recipe | `just ci` |
55
+ | 2 | GitHub Actions | `.github/workflows/*.yml` exists | `act` |
56
+ | 3 | GitLab CI | `.gitlab-ci.yml` exists | `gitlab-runner exec` |
57
+ | 4 | npm fallback | `package.json` exists | `npm run build && npm test && npm run lint` |
58
+
59
+ ### Package Manager Detection
60
+
61
+ For npm fallback, the script detects package manager:
62
+ - `pnpm-lock.yaml` or `pnpm-workspace.yaml` → `pnpm`
63
+ - `yarn.lock` → `yarn`
64
+ - Otherwise → `npm`
65
+
66
+ </detection-order>
67
+
68
+ <output-format>
69
+
70
+ ## Output Examples
71
+
72
+ ### --detect-only
73
+ ```
74
+ Detected CI system: github-actions
75
+ Would run: act
76
+ ```
77
+
78
+ ### --dry-run
79
+ ```
80
+ Detected: github-actions
81
+ Would run: act
82
+ ```
83
+
84
+ ### Running CI
85
+ ```
86
+ Running CI: github-actions
87
+ Command: act
88
+
89
+ [act output follows...]
90
+ ```
91
+
92
+ Exit codes:
93
+ - `0` - CI ran successfully
94
+ - `1` - CI failed or no CI system detected
95
+
96
+ </output-format>
97
+
98
+ <requirements>
99
+
100
+ ## Tool Requirements
101
+
102
+ | CI System | Required Tool | Installation |
103
+ |-----------|--------------|--------------|
104
+ | GitHub Actions | `act` | `brew install act` |
105
+ | GitLab CI | `gitlab-runner` | See GitLab docs |
106
+ | Justfile | `just` | `brew install just` |
107
+ | npm fallback | `npm`/`pnpm`/`yarn` | Comes with Node.js |
108
+
109
+ If a required tool is not installed, the script will show a warning.
110
+
111
+ </requirements>
112
+
113
+ <reference>
114
+ - **Script:** `.pennyfarthing/scripts/run-ci.sh`
115
+ - **Story:** 21-4 (Command & Skill Expansion)
116
+ </reference>
@@ -0,0 +1,56 @@
1
+ ---
2
+ description: Set the active persona theme
3
+ ---
4
+
5
+ # Set Theme
6
+
7
+ Change the active persona theme for all agents.
8
+
9
+ ## Arguments
10
+
11
+ - `<name>` - Theme name to activate (required)
12
+
13
+ ## Instructions
14
+
15
+ 1. If no theme name provided, list available themes:
16
+ ```bash
17
+ ls pennyfarthing-dist/personas/themes/*.yaml | xargs -I{} basename {} .yaml | sort
18
+ ```
19
+ Then ask the user which theme they want to use.
20
+
21
+ 2. Validate theme exists:
22
+ ```bash
23
+ ls pennyfarthing-dist/personas/themes/<name>.yaml
24
+ ```
25
+ If not found, show error and list available themes.
26
+
27
+ 3. Read the current config file to prepare for editing:
28
+ ```bash
29
+ cat .pennyfarthing/config.local.yaml 2>/dev/null || echo "FILE_NOT_FOUND"
30
+ ```
31
+
32
+ 4. Set the theme in `.pennyfarthing/config.local.yaml`:
33
+
34
+ **If the file exists and has a `theme:` line:**
35
+ - Use the Edit tool to replace `theme: <old>` with `theme: <new>`
36
+
37
+ **If the file doesn't exist or lacks the theme line:**
38
+ - Use the Write tool to create/overwrite the file:
39
+ ```yaml
40
+ # Pennyfarthing Local Configuration
41
+ # This file is gitignored - your personal preferences
42
+
43
+ theme: <name>
44
+ ```
45
+
46
+ 5. Verify the change was written:
47
+ ```bash
48
+ cat .pennyfarthing/config.local.yaml
49
+ ```
50
+ Confirm the theme line shows the new value.
51
+
52
+ 6. Refresh the current agent's persona to apply the new theme:
53
+ ```bash
54
+ d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$d")"; done; "$d/.pennyfarthing/scripts/core/run.sh" core/agent-session.sh refresh
55
+ ```
56
+ This outputs the updated persona. **Adopt the new character immediately** - do not continue using the old persona.
@@ -0,0 +1,21 @@
1
+ ---
2
+ description: Show details of a theme including all agent personas
3
+ ---
4
+
5
+ # Show Theme
6
+
7
+ Display full details of a theme including all agent character mappings.
8
+
9
+ ## Arguments
10
+
11
+ - `[name]` - Theme name to show (optional, defaults to current theme)
12
+
13
+ ## Instructions
14
+
15
+ Run the pennyfarthing CLI to show theme details:
16
+
17
+ ```bash
18
+ pennyfarthing theme show [name]
19
+ ```
20
+
21
+ Present the theme information clearly, showing each agent's character, style, and quote.
@@ -0,0 +1,7 @@
1
+ ---
2
+ description: Scrum Master - Story coordination and sprint management
3
+ ---
4
+
5
+ ```bash
6
+ d="$PWD"; while [[ ! -d "$d/.claude" ]] && [[ "$d" != "/" ]]; do d="$(dirname "$d")"; done; "$d/.pennyfarthing/scripts/core/run.sh" core/phase-check-start.sh "sm"
7
+ ```
@@ -0,0 +1,447 @@
1
+ ---
2
+ description: Run a single agent on a scenario with absolute rubric scoring
3
+ argument-hint: <theme:agent> --scenario <name> [--as <role>] [--runs N] [--no-judge]
4
+ ---
5
+
6
+ # Solo Benchmark
7
+
8
+ <purpose>
9
+ Run a single agent on a scenario. This is the CANONICAL agent execution path.
10
+
11
+ **Modes:**
12
+ - **Full (default):** Agent runs → `/judge` evaluates → `/finalize-run` saves
13
+ - **No-judge (`--no-judge`):** Agent runs only, returns raw response (for /duel, /relay)
14
+ </purpose>
15
+
16
+ <architecture>
17
+ ```
18
+ /solo theme:agent --scenario X
19
+
20
+ ├──► Execute agent via CLI
21
+ │ └──► Response + tokens
22
+
23
+ ├──► /judge --mode solo (if not --no-judge)
24
+ │ └──► Score + verdict
25
+
26
+ └──► /finalize-run --type solo
27
+ └──► Validate + save
28
+ ```
29
+ </architecture>
30
+
31
+ <usage>
32
+ ```
33
+ /solo <contestant> --scenario <name>
34
+ /solo <contestant> --scenario <name> --runs 4
35
+ /solo <contestant> --scenario <name> --no-judge
36
+ /solo <contestant> --as <role> --scenario <name>
37
+ ```
38
+
39
+ **Arguments:**
40
+ - `contestant` - `theme:agent` format (e.g., `discworld:reviewer`) OR `theme:character` with `--as`
41
+ - `--scenario` - Scenario from `scenarios/` directory
42
+ - `--as <role>` - Override role (use character's persona for different role's task)
43
+ - `--runs N` - Number of runs (default: 1, max: 20)
44
+ - `--no-judge` - Skip judging, return raw response
45
+
46
+ **Cross-Role Testing with `--as`:**
47
+
48
+ The `--as` flag enables running any persona as any role, useful for research:
49
+
50
+ ```
51
+ /solo shakespeare:prospero --as dev --scenario django-10554
52
+ ```
53
+
54
+ This uses Prospero's persona traits (wise orchestrator, magic metaphors) but gives him a dev task.
55
+ The scenario's role determines what the agent is asked to do; the character determines how they do it.
56
+ </usage>
57
+
58
+ <on-invoke>
59
+ The user invoked this command with: $ARGUMENTS
60
+
61
+ ## Step 1: Parse Arguments
62
+
63
+ Extract:
64
+ - `contestant`: `theme:agent` spec (or `theme:character` if using `--as`)
65
+ - `scenario_name`: After `--scenario`
66
+ - `role_override`: After `--as` (optional - for cross-role testing)
67
+ - `runs`: Number (default: 1)
68
+ - `no_judge`: Boolean
69
+
70
+ Validate spec contains `:`, scenario is required, runs is 1-20.
71
+
72
+ **If `--as` is provided:**
73
+ - The second part of the spec is a CHARACTER name, not a role
74
+ - `role_override` becomes the effective role for scenario matching
75
+ - Character persona is extracted by name lookup across all agents in theme
76
+
77
+ ## Step 2: Load Scenario
78
+
79
+ ```yaml
80
+ Glob tool:
81
+ pattern: "scenarios/**/{scenario_name}.yaml"
82
+ ```
83
+
84
+ Extract: `prompt`, `scenario_title`, `code_content` (if present)
85
+
86
+ ## Step 3: Load Persona
87
+
88
+ Read: `pennyfarthing-dist/personas/themes/{theme}.yaml`
89
+
90
+ **Standard mode (no `--as`):**
91
+ - Look up `agents.{agent}` section
92
+ - Extract: `character`, `style`, `expertise`, `catchphrases`, `emoji`
93
+ - `effective_role` = agent name from spec
94
+
95
+ **Cross-role mode (with `--as`):**
96
+ - The spec contains `theme:character_name` (e.g., `shakespeare:prospero`)
97
+ - Search ALL agent sections for one where `character` field matches (case-insensitive, partial match OK)
98
+ - Extract persona traits from that agent's config
99
+ - `effective_role` = the `--as` value (NOT the role the character normally fills)
100
+
101
+ ```python
102
+ # Pseudocode for cross-role lookup
103
+ if role_override:
104
+ character_query = spec.split(':')[1].lower() # e.g., "prospero"
105
+ for agent_name, agent_config in theme['agents'].items():
106
+ char_name = agent_config.get('character', '').lower()
107
+ if character_query in char_name or char_name.startswith(character_query):
108
+ persona = agent_config
109
+ source_role = agent_name # where character normally lives
110
+ break
111
+ effective_role = role_override # what we're asking them to do
112
+ else:
113
+ agent_name = spec.split(':')[1] # e.g., "dev"
114
+ persona = theme['agents'][agent_name]
115
+ effective_role = agent_name
116
+ source_role = agent_name
117
+ ```
118
+
119
+ This enables running Prospero (normally SM) as a dev, or Gus Fring (normally orchestrator) as a reviewer.
120
+
121
+ ## Step 3b: Build Agent Prompt
122
+
123
+ Use the Write tool to create the prompt file with this template:
124
+
125
+ ```
126
+ You are {character}.
127
+
128
+ **Style:** {style}
129
+ **Expertise:** {expertise}
130
+ **Catchphrases:** {catchphrases}
131
+
132
+ ---
133
+
134
+ ## Challenge
135
+
136
+ {scenario_prompt}
137
+
138
+ {code_content if present}
139
+
140
+ ---
141
+
142
+ Respond fully in character. Under 500 words.
143
+
144
+ **IMPORTANT:** Provide your complete response directly. Do not attempt to use tools, read files, or make function calls.
145
+ ```
146
+
147
+ **Cross-role note:** When using `--as`, the scenario prompt comes from the `effective_role` (e.g., dev tasks),
148
+ but the character/style/expertise come from the character's original role config. This tests whether
149
+ personality traits affect task performance independent of role-specific training.
150
+
151
+ The final instruction is critical - without it, the model may output tool-call syntax even with `--tools ""`, resulting in incomplete responses.
152
+
153
+ ## Step 4: Execute Agent via CLI
154
+
155
+ **RECOMMENDED: Use the shell script for reliable execution:**
156
+
157
+ ```bash
158
+ ./scripts/solo-runner.sh {theme}:{agent} {scenario} {output_dir}
159
+ ```
160
+
161
+ The shell script handles all escaping, temp files, and JSON parsing correctly.
162
+ Use inline commands only for simple cases or when the script isn't available.
163
+
164
+ ---
165
+
166
+ **CRITICAL: The `--tools ""` flag is MANDATORY.**
167
+
168
+ Without `--tools ""`, agents may use tools internally (Read, Write, Bash, etc.), causing:
169
+ 1. Multi-turn conversations (num_turns > 1)
170
+ 2. The `.result` field only captures the FINAL message (often just a summary)
171
+ 3. Full response content is LOST - judges only see truncated output
172
+ 4. Scores are INVALID because judges evaluate incomplete data
173
+
174
+ **Evidence:** Miles Vorkosigan benchmark (2026-01-01) scored 76.69 with tools enabled vs Leo McGarry's 91.03 with `--tools ""`. Miles' runs had num_turns: 5-7 and judges only saw summaries, not full story breakdowns.
175
+
176
+ **CRITICAL: Use PIPE syntax, NOT heredocs.**
177
+
178
+ **NEVER USE HEREDOCS** - Heredoc syntax (`<<'EOF'`, `<<EOF`, `<<'PROMPT'`, etc.) FAILS in subagents.
179
+ The permission system treats heredocs differently and they get auto-denied.
180
+
181
+ **ALWAYS USE PIPE SYNTAX** - This works in both main sessions and subagents:
182
+ - `echo "$PROMPT" | claude -p ...` - WORKS
183
+ - `cat file.txt | claude -p ...` - WORKS
184
+ - `printf '%s' "$PROMPT" | claude -p ...` - WORKS
185
+ - `claude -p ... <<'EOF'` - **FAILS IN SUBAGENTS - DO NOT USE**
186
+
187
+ **CRITICAL: Use FILE REDIRECTION, NOT variable capture.**
188
+
189
+ **NEVER CAPTURE OUTPUT IN VARIABLES** - Command substitution with `$(...)` causes zsh parse errors
190
+ when the JSON output contains parentheses or special characters:
191
+ - `OUTPUT=$(cat file.txt | claude -p ...)` - **FAILS with `parse error near ')'`**
192
+
193
+ **ALWAYS REDIRECT TO FILES** - This avoids shell parsing issues:
194
+ - `cat file.txt | claude -p ... > output.json` - WORKS
195
+ - Then read: `jq -r '.result' output.json` - WORKS
196
+
197
+ ```bash
198
+ # Step 1: Capture timestamp to file (avoid variable capture issues)
199
+ date -u +%Y-%m-%dT%H:%M:%SZ > /tmp/timestamp_$$.txt
200
+
201
+ # Step 2: Write prompt to file using Write tool (avoids escaping issues)
202
+ # Use the Write tool to create: /tmp/prompt_$$.txt
203
+
204
+ # Step 3: Execute with file redirection (NOT variable capture)
205
+ cat /tmp/prompt_$$.txt | claude -p --output-format json --tools "" > /tmp/output_$$.json
206
+
207
+ # Step 4: Extract results from files
208
+ TIMESTAMP=$(cat /tmp/timestamp_$$.txt)
209
+ RESPONSE=$(jq -r '.result' /tmp/output_$$.json)
210
+ INPUT_TOKENS=$(jq -r '.usage.input_tokens // 0' /tmp/output_$$.json)
211
+ OUTPUT_TOKENS=$(jq -r '.usage.output_tokens // 0' /tmp/output_$$.json)
212
+
213
+ # Step 5: Cleanup
214
+ rm -f /tmp/timestamp_$$.txt /tmp/prompt_$$.txt /tmp/output_$$.json
215
+ ```
216
+
217
+ **Why file redirection works:** The shell never tries to parse the JSON output.
218
+ It goes directly to a file, then jq reads it safely.
219
+
220
+ ## Step 5: Check Mode
221
+
222
+ **If `--no-judge`:** Return raw response and metadata, STOP.
223
+
224
+ ```markdown
225
+ ## Solo Agent Response
226
+
227
+ **Contestant:** {spec} ({character})
228
+ **Scenario:** {scenario_name}
229
+
230
+ ---
231
+
232
+ {response}
233
+
234
+ ---
235
+
236
+ ```json
237
+ {
238
+ "spec": "{spec}",
239
+ "character": "{character}",
240
+ "cli_timestamp": "{TIMESTAMP}",
241
+ "response_length": {length},
242
+ "input_tokens": {INPUT_TOKENS},
243
+ "output_tokens": {OUTPUT_TOKENS}
244
+ }
245
+ ```
246
+ ```
247
+
248
+ **If full mode:** Continue to Step 6.
249
+
250
+ ## Step 6: Invoke Judge Skill
251
+
252
+ **Detect SWE-bench scenarios for deterministic evaluation:**
253
+
254
+ Check if the scenario is from SWE-bench by looking at its path or category:
255
+ ```python
256
+ is_swebench = (
257
+ 'swe-bench' in scenario_path.lower() or
258
+ scenario.get('category') == 'swe-bench' or
259
+ scenario.get('source') == 'swe-bench'
260
+ )
261
+ ```
262
+
263
+ **If SWE-bench scenario:**
264
+
265
+ Use deterministic Python-based evaluation instead of LLM-as-judge:
266
+
267
+ ```bash
268
+ # Save response to temp file for Python judge
269
+ echo '{"result": "{RESPONSE}"}' > /tmp/solo_response_$$.json
270
+
271
+ # Run SWE-bench judge (deterministic scoring against ground truth)
272
+ python3 .pennyfarthing/scripts/test/swebench-judge.py {scenario_name} /tmp/solo_response_$$.json
273
+ ```
274
+
275
+ The Python script returns:
276
+ - `total`: Score out of 100
277
+ - `scores`: Breakdown by category (root_cause, fix_quality, completeness, persona)
278
+ - `details`: Specific findings and matches
279
+
280
+ **If standard scenario (non-SWE-bench):**
281
+
282
+ Use LLM-as-judge:
283
+ ```
284
+ /judge --mode solo --data {
285
+ "spec": "{spec}",
286
+ "character": "{character}",
287
+ "challenge": "{prompt}",
288
+ "response": "{RESPONSE}"
289
+ }
290
+ ```
291
+
292
+ Capture: `score`, `judge_timestamp`, `judge_response`, `judge_tokens`
293
+
294
+ ## Step 7: Invoke Finalize-Run Skill
295
+
296
+ ```
297
+ /finalize-run --type solo --data {
298
+ "timestamp": "{ISO8601}",
299
+ "scenario": {"name": "{scenario_name}", "title": "{title}"},
300
+ "agents": [{
301
+ "spec": "{spec}",
302
+ "cli_timestamp": "{TIMESTAMP}",
303
+ "response_text": "{RESPONSE}",
304
+ "input_tokens": {INPUT_TOKENS},
305
+ "output_tokens": {OUTPUT_TOKENS}
306
+ }],
307
+ "judge": {
308
+ "cli_timestamp": "{judge_timestamp}",
309
+ "response_text": "{judge_response}",
310
+ "input_tokens": {judge_input},
311
+ "output_tokens": {judge_output}
312
+ },
313
+ "scores": {"{spec}": {score}},
314
+ "output_path": "internal/results/solo/{timestamp}-{theme}-{agent}.json"
315
+ }
316
+ ```
317
+
318
+ ## Step 8: Display Results
319
+
320
+ ```markdown
321
+ ## Solo Evaluation
322
+
323
+ {judge verdict}
324
+
325
+ ---
326
+
327
+ ## Efficiency
328
+
329
+ | Metric | Value |
330
+ |--------|-------|
331
+ | Agent Tokens | {agent_total} |
332
+ | Judge Tokens | {judge_total} |
333
+ | Score | {score}/100 |
334
+ | Tokens/Point | {tpp} |
335
+
336
+ ---
337
+
338
+ ✓ Saved to {output_path}
339
+ ```
340
+
341
+ ## Step 9: Multi-Run Mode (if runs > 1)
342
+
343
+ 1. Create output directory (see Step 10 for path logic)
344
+ 2. Repeat Steps 4-7 for each run
345
+ 3. Save each to `runs/run_{i}.json` and `runs/judge_{i}.json`
346
+ 4. Calculate statistics and save summary.yaml (Step 10)
347
+
348
+ ## Step 10: Save Summary (ALWAYS - even for n=1)
349
+
350
+ **Output path logic:**
351
+
352
+ ```
353
+ if theme == "control":
354
+ base_path = "internal/results/baselines/{scenario}/{effective_role}/"
355
+ elif role_override: # cross-role mode
356
+ # Include character name and effective role for clarity
357
+ base_path = "internal/results/benchmarks/{scenario}/{theme}-{character}-as-{effective_role}/"
358
+ else:
359
+ base_path = "internal/results/benchmarks/{scenario}/{theme}-{effective_role}/"
360
+ ```
361
+
362
+ **Cross-role example:** `/solo shakespeare:prospero --as dev --scenario django-10554`
363
+ → saves to `internal/results/benchmarks/django-10554/shakespeare-prospero-as-dev/`
364
+
365
+ **For ALL runs (including n=1):**
366
+
367
+ 1. Create directory structure:
368
+ ```bash
369
+ mkdir -p "{base_path}/runs"
370
+ ```
371
+
372
+ 2. Save run files:
373
+ - `runs/run_{i}.json` - Agent response + tokens
374
+ - `runs/judge_{i}.json` - Judge evaluation
375
+
376
+ 3. Calculate statistics:
377
+ ```python
378
+ scores = [run.score for run in runs]
379
+ mean = sum(scores) / len(scores)
380
+ std_dev = sqrt(sum((s - mean)^2 for s in scores) / len(scores))
381
+ ```
382
+
383
+ 4. **ALWAYS save summary.yaml:**
384
+ ```yaml
385
+ # {theme}:{character} on {scenario} (as {effective_role})
386
+ # Generated: {ISO8601 timestamp}
387
+
388
+ agent:
389
+ theme: {theme}
390
+ character: {character_name}
391
+ effective_role: {effective_role} # role being performed
392
+ source_role: {source_role} # role where character normally lives
393
+ spec: {theme}:{character} # original spec
394
+ cross_role: {true if role_override else false}
395
+
396
+ scenario:
397
+ name: {scenario_name}
398
+ category: {category}
399
+ difficulty: {difficulty}
400
+
401
+ statistics:
402
+ n: {run_count}
403
+ mean: {mean:.2f}
404
+ std_dev: {std_dev:.2f}
405
+ min: {min_score}
406
+ max: {max_score}
407
+ scores: [{score1}, {score2}, ...]
408
+
409
+ efficiency:
410
+ avg_input_tokens: {avg_in}
411
+ avg_output_tokens: {avg_out}
412
+ tokens_per_point: {tpp:.2f}
413
+
414
+ metadata:
415
+ created_at: {ISO8601 timestamp}
416
+ pennyfarthing_version: {version from package.json} # REQUIRED
417
+ model: sonnet
418
+
419
+ # Include baseline comparison if baseline exists and theme != control
420
+ baseline_comparison:
421
+ control_mean: {baseline_mean}
422
+ control_stddev: {baseline_std}
423
+ delta: {mean - baseline_mean:+.2f}
424
+
425
+ runs:
426
+ - run_1.json
427
+ - run_2.json
428
+ # ...
429
+ ```
430
+
431
+ 5. Display:
432
+ ```
433
+ ✓ Saved {n} run(s) to {base_path}
434
+ ✓ Summary: {base_path}/summary.yaml
435
+ ```
436
+
437
+ </on-invoke>
438
+
439
+ <reference>
440
+ - **Judge Skill:** `.claude/project/skills/judge/SKILL.md`
441
+ - **Finalize-Run Skill:** `.claude/project/skills/finalize-run/SKILL.md`
442
+ - **Themes:** `pennyfarthing-dist/personas/themes/*.yaml`
443
+ - **Scenarios:** `scenarios/**/*.yaml`
444
+ - **Baselines:** `internal/results/baselines/{scenario}/{role}/` (control theme)
445
+ - **Benchmarks:** `internal/results/benchmarks/{scenario}/{theme}-{role}/` (all other themes)
446
+ - **Results README:** `internal/results/README.md`
447
+ </reference>