@pennyfarthing/core 7.9.3 → 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 +1 -1
  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,766 @@
1
+ # Approval Gates Pattern
2
+
3
+ **Pattern Type:** Human-in-the-Loop Verification
4
+ **Agents Involved:** Any agent requiring external validation
5
+ **Coordination Mechanism:** Assessment-first protocol with verdict-based routing
6
+
7
+ ## Problem Statement
8
+
9
+ Autonomous agent workflows need controlled decision points to ensure quality and maintain human oversight:
10
+
11
+ 1. **Quality Escapes:** Without explicit gates, flawed work may proceed unchecked through the workflow
12
+ 2. **Lost Accountability:** Decisions made without human awareness create auditability gaps
13
+ 3. **Uncontrolled Progression:** Workflows advance even when conditions for success aren't met
14
+ 4. **Context Loss:** State changes happen silently, making recovery and debugging difficult
15
+
16
+ Without approval gates, workflows may:
17
+ - Ship broken code that tests don't catch
18
+ - Make irreversible changes without confirmation
19
+ - Skip critical verification steps under time pressure
20
+ - Lose human oversight of important decisions
21
+
22
+ ## Solution
23
+
24
+ Implement **explicit verification points** where workflow progression requires passing a gate condition. Gates can be automated (tests must pass), require human review (Reviewer approval), or request user decisions (via Reflector-aware prompts).
25
+
26
+ ```
27
+ Workflow Stage
28
+
29
+
30
+ ┌─────────────────┐
31
+ │ APPROVAL GATE │
32
+ │ (verification) │
33
+ └────────┬────────┘
34
+
35
+ ┌────┴────┐
36
+ │ │
37
+ PASS FAIL
38
+ │ │
39
+ ▼ ▼
40
+ Continue Block/Route
41
+ Workflow Back
42
+ ```
43
+
44
+ The key insight: **Make workflow progression conditional on explicit verification** rather than allowing autonomous advancement.
45
+
46
+ ### Four Gate Types
47
+
48
+ 1. **Automated Gates** - Mechanical checks that must pass (tests, lint, pre-flight)
49
+ 2. **Human Review Gates** - Expert judgment required before proceeding
50
+ 3. **User Decision Gates** - Interactive choices via Reflector (CYCLIST marker + AskUserQuestion)
51
+ 4. **Plan Approval Gates** - Confirmation of proposed approach via EnterPlanMode
52
+
53
+ ## State Diagram
54
+
55
+ ```mermaid
56
+ stateDiagram-v2
57
+ [*] --> WORK_IN_PROGRESS: Agent working
58
+
59
+ WORK_IN_PROGRESS --> GATE_CHECK: Work complete
60
+
61
+ state GATE_CHECK {
62
+ [*] --> AUTOMATED: Pre-flight checks
63
+ AUTOMATED --> REVIEW: Checks pass
64
+ AUTOMATED --> BLOCKED: Checks fail
65
+ REVIEW --> DECISION: Reviewer verdict
66
+ }
67
+
68
+ DECISION --> APPROVED: Pass
69
+ DECISION --> REJECTED: Fail
70
+
71
+ APPROVED --> NEXT_STAGE: Continue workflow
72
+ REJECTED --> WORK_IN_PROGRESS: Fix and retry
73
+ BLOCKED --> WORK_IN_PROGRESS: Address failures
74
+
75
+ NEXT_STAGE --> [*]: Workflow proceeds
76
+
77
+ note right of AUTOMATED: Tests, lint, pre-flight
78
+ note right of REVIEW: Human judgment
79
+ note right of DECISION: APPROVE or REJECT
80
+ ```
81
+
82
+ ### ASCII Alternative
83
+
84
+ ```
85
+ ┌─────────────────────────────────────────────────────────────────────────┐
86
+ │ APPROVAL GATES PATTERN │
87
+ └─────────────────────────────────────────────────────────────────────────┘
88
+
89
+ ┌───────────────────┐
90
+ │ WORK_IN_PROGRESS │
91
+ │ (agent works) │
92
+ └─────────┬─────────┘
93
+
94
+ │ Work complete, assessment written
95
+
96
+
97
+ ┌───────────────────┐
98
+ │ AUTOMATED GATE │◄─── Tests, lint, pre-flight checks
99
+ │ (mechanical) │
100
+ └─────────┬─────────┘
101
+
102
+ ┌────┴────┐
103
+ │ │
104
+ PASS FAIL
105
+ │ │
106
+ ▼ └──────────────────────────────┐
107
+ ┌───────────────────┐ │
108
+ │ HUMAN REVIEW │◄─── Reviewer analyzes │
109
+ │ (judgment) │ code/docs │
110
+ └─────────┬─────────┘ │
111
+ │ │
112
+ ┌────┴────┐ │
113
+ │ │ │
114
+ APPROVE REJECT │
115
+ │ │ │
116
+ ▼ └──────────────────────────────┤
117
+ ┌───────────────────┐ │
118
+ │ NEXT STAGE │ │
119
+ │ (continues) │ │
120
+ └───────────────────┘ │
121
+
122
+ ┌─────────────────────────────────────────────┘
123
+
124
+
125
+ ┌───────────────────┐
126
+ │ WORK_IN_PROGRESS │◄─── Fix issues, retry gate
127
+ │ (fix & retry) │
128
+ └───────────────────┘
129
+ ```
130
+
131
+ ### The Rejection Loop
132
+
133
+ ```
134
+ ┌─────────────────────────────────────────────────────────────────────────┐
135
+ │ REJECTION LOOP │
136
+ └─────────────────────────────────────────────────────────────────────────┘
137
+
138
+ Attempt 1 Attempt 2
139
+ ┌─────────────────────┐ ┌─────────────────────┐
140
+ │ │ │ │
141
+ │ Dev implements │ │ Dev fixes issues │
142
+ │ ↓ │ │ ↓ │
143
+ │ Tests GREEN │ │ Tests GREEN │
144
+ │ ↓ │ │ ↓ │
145
+ │ Reviewer reviews │ │ Reviewer reviews │
146
+ │ ↓ │ │ ↓ │
147
+ │ REJECTED (3 issues)│─────►│ APPROVED │
148
+ │ │ │ ↓ │
149
+ └─────────────────────┘ │ Continue to SM │
150
+ │ │
151
+ └─────────────────────┘
152
+
153
+ The loop continues until:
154
+ - All Critical/Major issues resolved
155
+ - Reviewer approves
156
+ - Maximum retry limit (organizational choice)
157
+ ```
158
+
159
+ ## Implementation
160
+
161
+ ### Gate Type 1: Automated Gates
162
+
163
+ Mechanical checks that must pass before human review begins.
164
+
165
+ **Example: Reviewer Pre-flight**
166
+
167
+ ```yaml
168
+ # Reviewer spawns pre-flight check before analysis
169
+ Task:
170
+ subagent_type: "reviewer-preflight"
171
+ description: "Gather pre-flight data"
172
+ prompt: |
173
+ STORY_ID: 5-2
174
+ REPOS: api,frontend
175
+ BRANCH: feature/5-2-implement-feature
176
+ PR_NUMBER: 42
177
+
178
+ # Pre-flight returns:
179
+ # - Test results (must be GREEN)
180
+ # - Lint results (must be clean or documented exceptions)
181
+ # - Code smell analysis
182
+ # - Diff statistics
183
+ ```
184
+
185
+ **Gate Condition:** Pre-flight checks pass. If tests fail or critical lint issues exist, gate blocks progression.
186
+
187
+ **Example: TEA RED Verification**
188
+
189
+ ```yaml
190
+ # TEA handoff verifies tests are RED (failing)
191
+ # From tea-handoff.md L42-76
192
+
193
+ 1. Spawn testing-runner subagent
194
+ 2. Verify tests FAIL as expected
195
+ 3. If all GREEN → BLOCKED (tests don't exercise new code)
196
+ 4. If RED → PASS (ready for Dev)
197
+ ```
198
+
199
+ ### Gate Type 2: Human Review Gates
200
+
201
+ Require expert judgment from a designated reviewer agent.
202
+
203
+ **Example: Reviewer Approval/Rejection**
204
+
205
+ The Reviewer agent implements an adversarial review gate:
206
+
207
+ ```markdown
208
+ ## Reviewer Assessment
209
+
210
+ **PR:** #42
211
+ **Verdict:** APPROVED | REJECTED
212
+
213
+ **Code Review Evidence:**
214
+ - **Data flow traced:** userId from handler.go:47 → repo.go:89 (parameterized, safe)
215
+ - **Pattern observed:** Proper mutex usage in mock_client.go:45-60
216
+ - **Error handling:** API failures caught at service.go:112
217
+
218
+ **Issues Found:** (if REJECTED)
219
+ | Severity | Issue | Location | Fix Required |
220
+ |----------|-------|----------|--------------|
221
+ | Critical | SQL injection | query.go:23 | Use parameterized query |
222
+ | Major | Missing null check | handler.go:55 | Add validation |
223
+
224
+ **Handoff:** To SM for finish (APPROVED) | Back to Dev (REJECTED)
225
+ ```
226
+
227
+ **Gate Condition:** Reviewer verdict is APPROVED. If REJECTED, workflow returns to Dev with documented issues.
228
+
229
+ ### Gate Type 3: User Decision Gates
230
+
231
+ Interactive prompts that pause workflow for user input. **Requires Reflector pattern:**
232
+
233
+ 1. Output CYCLIST marker first (enables Cyclist UI integration)
234
+ 2. Then use AskUserQuestion tool
235
+
236
+ **Example: Reflector-Aware Story Selection**
237
+
238
+ ```markdown
239
+ <!-- CYCLIST:CHOICES:story -->
240
+ ```
241
+
242
+ ```yaml
243
+ # SM presents story options to user (after outputting marker)
244
+ AskUserQuestion:
245
+ questions:
246
+ - question: "Which story shall we work on?"
247
+ header: "Story"
248
+ multiSelect: false
249
+ options:
250
+ - label: "5-2: Implement feature X (3 pts)"
251
+ description: "Add new capability to API"
252
+ - label: "5-3: Fix bug Y (2 pts)"
253
+ description: "Address reported issue"
254
+ - label: "5-4: Refactor Z (5 pts)"
255
+ description: "Technical debt reduction"
256
+ ```
257
+
258
+ **Gate Condition:** User selects an option. Workflow pauses until response received.
259
+
260
+ **Example: Confirmation Before Destructive Action**
261
+
262
+ ```markdown
263
+ <!-- CYCLIST:QUESTION:yesno -->
264
+ ```
265
+
266
+ ```yaml
267
+ # Before Jira claim or branch deletion (after outputting marker)
268
+ AskUserQuestion:
269
+ questions:
270
+ - question: "Confirm claiming MSSCI-11374 and creating branch?"
271
+ header: "Confirm"
272
+ multiSelect: false
273
+ options:
274
+ - label: "Yes, proceed"
275
+ description: "Claim ticket and create feature branch"
276
+ - label: "No, cancel"
277
+ description: "Abort setup and return to story selection"
278
+ ```
279
+
280
+ **Reflector Markers:**
281
+ - `<!-- CYCLIST:CHOICES:{category} -->` - Multiple choice selection
282
+ - `<!-- CYCLIST:QUESTION:yesno -->` - Yes/No confirmation
283
+ - `<!-- CYCLIST:QUESTION:open -->` - Free-text input
284
+
285
+ ### Gate Type 4: Plan Approval Gates
286
+
287
+ Present proposed approach for user confirmation before execution.
288
+
289
+ **Example: EnterPlanMode for Complex Work**
290
+
291
+ ```yaml
292
+ # Agent enters plan mode for non-trivial implementation
293
+ EnterPlanMode:
294
+ # Triggers transition to planning state
295
+ # Agent then:
296
+ # 1. Explores codebase
297
+ # 2. Designs approach
298
+ # 3. Writes plan to designated file
299
+ # 4. Calls ExitPlanMode for user approval
300
+
301
+ # In plan mode, agent writes:
302
+ ## Implementation Plan
303
+
304
+ ### Approach
305
+ 1. Create new service layer component
306
+ 2. Add repository methods for data access
307
+ 3. Wire up HTTP handlers
308
+ 4. Add comprehensive tests
309
+
310
+ ### Files to Modify
311
+ - internal/service/feature.go (new)
312
+ - internal/repository/feature.go (new)
313
+ - internal/handler/feature.go (new)
314
+ - internal/handler/routes.go (modify)
315
+
316
+ ### Risks
317
+ - May require database migration
318
+ - Performance impact on existing queries
319
+ ```
320
+
321
+ **Gate Condition:** User approves plan via ExitPlanMode acceptance. If rejected, agent revises approach.
322
+
323
+ ### The Assessment-First Protocol
324
+
325
+ **Critical Pattern:** All agents must write their assessment BEFORE spawning the handoff subagent.
326
+
327
+ ```
328
+ ┌─────────────────────────────────────────────────────────────────────────┐
329
+ │ ASSESSMENT-FIRST PROTOCOL │
330
+ └─────────────────────────────────────────────────────────────────────────┘
331
+
332
+ CORRECT SEQUENCE:
333
+
334
+ ┌─────────────────┐
335
+ │ Agent works │
336
+ └────────┬────────┘
337
+
338
+
339
+ ┌─────────────────┐
340
+ │ Write Assessment│◄─── Agent writes to session file FIRST
341
+ │ to session file │
342
+ └────────┬────────┘
343
+
344
+
345
+ ┌─────────────────┐
346
+ │ Spawn handoff │◄─── Then spawns subagent
347
+ │ subagent │
348
+ └────────┬────────┘
349
+
350
+
351
+ ┌─────────────────┐
352
+ │ Subagent verifies│◄─── Subagent checks assessment exists
353
+ │ assessment exists│ (grep "## {Agent} Assessment")
354
+ └────────┬────────┘
355
+
356
+
357
+ ┌─────────────────┐
358
+ │ Subagent routes │◄─── Routes based on verdict
359
+ │ based on verdict│
360
+ └─────────────────┘
361
+
362
+
363
+ WRONG (Anti-pattern):
364
+
365
+ Agent → Spawn subagent → Subagent writes assessment
366
+
367
+ This fails because:
368
+ - Subagent may miss critical context
369
+ - No verification step
370
+ - Assessment quality suffers
371
+ ```
372
+
373
+ **Verification Code** (from handoff subagents):
374
+
375
+ ```bash
376
+ # Step 0: Verify assessment exists
377
+ grep -q "## Reviewer Assessment" .session/{STORY_ID}-session.md
378
+
379
+ # If NOT found: STOP and escalate
380
+ # If found: Continue with routing
381
+ ```
382
+
383
+ ### Verdict Verification
384
+
385
+ Handoff subagents verify they were called with the correct verdict:
386
+
387
+ ```yaml
388
+ # reviewer-handoff-approve.md L35-36
389
+ Step 2: Verify verdict is "APPROVED"
390
+ - Read assessment section
391
+ - Confirm verdict field says "APPROVED"
392
+ - If "REJECTED": STOP - wrong subagent called, escalate
393
+
394
+ # reviewer-handoff-reject.md L39
395
+ Step 2: Verify verdict is "REJECTED"
396
+ - Read assessment section
397
+ - Confirm verdict field says "REJECTED"
398
+ - If "APPROVED": STOP - wrong subagent called, escalate
399
+ ```
400
+
401
+ ### Context-Aware Routing
402
+
403
+ After gate passage, check context usage before invoking next agent:
404
+
405
+ ```bash
406
+ # Check context usage
407
+ $CLAUDE_PROJECT_DIR/scripts/core/check-context.sh --human
408
+
409
+ # Routing decision:
410
+ # If < 60%: Invoke next agent directly in this session
411
+ # If > 60%: Tell user to start fresh session with next agent
412
+ ```
413
+
414
+ This prevents context overflow in long sessions by creating natural break points.
415
+
416
+ ## When to Use
417
+
418
+ ### Ideal Scenarios
419
+
420
+ | Scenario | Gate Type | Why |
421
+ |----------|-----------|-----|
422
+ | Before merging code | Human Review | Expert judgment on quality |
423
+ | Before destructive operations | User Decision | Confirmation prevents accidents |
424
+ | Complex multi-file changes | Plan Approval | Validate approach before execution |
425
+ | Before production deployment | Automated + Human | Multiple verification layers |
426
+ | Story point estimation | User Decision | Human judgment on complexity |
427
+
428
+ ### Decision Heuristic
429
+
430
+ ```
431
+ Does the action...
432
+ ├── Affect production data or systems?
433
+ │ └── YES → Automated + Human Review gates
434
+ ├── Involve irreversible changes?
435
+ │ └── YES → User Decision gate (confirmation)
436
+ ├── Require choosing between approaches?
437
+ │ └── YES → Plan Approval or User Decision gate
438
+ ├── Need expert judgment on quality?
439
+ │ └── YES → Human Review gate
440
+ └── Have mechanical pass/fail criteria?
441
+ └── YES → Automated gate (tests, lint)
442
+ ```
443
+
444
+ ### Gate Placement in TDD Flow
445
+
446
+ ```
447
+ ┌─────────────────────────────────────────────────────────────────────────┐
448
+ │ GATES IN TDD FLOW │
449
+ └─────────────────────────────────────────────────────────────────────────┘
450
+
451
+ SM (setup)
452
+
453
+ ├── [User Decision Gate] Story selection
454
+ ├── [User Decision Gate] Confirm Jira claim
455
+
456
+
457
+ TEA (RED)
458
+
459
+ ├── [Automated Gate] Tests must be RED (failing)
460
+
461
+
462
+ Dev (GREEN)
463
+
464
+ ├── [Automated Gate] Tests must be GREEN (passing)
465
+ ├── [Automated Gate] Lint must pass
466
+
467
+
468
+ Reviewer
469
+
470
+ ├── [Automated Gate] Pre-flight checks
471
+ ├── [Human Review Gate] Code review verdict
472
+ │ │
473
+ │ ┌────┴────┐
474
+ │ APPROVE REJECT
475
+ │ │ │
476
+ │ ▼ └──► Back to Dev (loop)
477
+
478
+
479
+ SM (finish)
480
+
481
+ ├── [User Decision Gate] Confirm archive
482
+
483
+
484
+ DONE
485
+ ```
486
+
487
+ ## Error Recovery
488
+
489
+ ### Retry Pattern
490
+
491
+ All handoff subagents follow this pattern:
492
+
493
+ ```
494
+ 1. Log the failure
495
+ - What step failed
496
+ - Error message
497
+ - Current state
498
+
499
+ 2. Diagnose
500
+ - What specifically went wrong?
501
+ - Is this retryable?
502
+
503
+ 3. Adjust (max 2 retries)
504
+ - Try alternative approach
505
+ - Use fallback path
506
+
507
+ 4. Escalate
508
+ - Report structured error
509
+ - Let calling agent decide
510
+ ```
511
+
512
+ ### Escalation Format
513
+
514
+ When gates cannot be passed:
515
+
516
+ ```markdown
517
+ GATE BLOCKED
518
+
519
+ Gate: [which gate]
520
+ Step failed: [step number and name]
521
+ Error: [error message]
522
+ Diagnosis: [what went wrong]
523
+
524
+ Current state:
525
+ - Session: .session/{STORY_ID}-session.md
526
+ - Phase: [current phase]
527
+ - Last successful step: [step]
528
+
529
+ Recommended action: [what calling agent should do]
530
+ ```
531
+
532
+ ### Common Failures
533
+
534
+ | Failure | Gate | Recovery |
535
+ |---------|------|----------|
536
+ | Assessment missing | Any handoff | Agent must write assessment first |
537
+ | Wrong verdict | Reviewer handoff | Call correct subagent (approve vs reject) |
538
+ | Tests all GREEN | TEA handoff | TEA must verify tests exercise new code |
539
+ | No issues documented | Rejection handoff | Reviewer must document specific issues |
540
+ | Context overflow | Any routing | Start fresh session |
541
+ | Jira unavailable | SM setup | Proceed without Jira, document for later |
542
+
543
+ ### Partial Gate Passage
544
+
545
+ When some checks pass but others fail:
546
+
547
+ ```markdown
548
+ ## Gate Results
549
+
550
+ ### Passed (2/3)
551
+ - Tests: GREEN (all passing)
552
+ - Lint: CLEAN (no issues)
553
+
554
+ ### Failed (1/3)
555
+ - Pre-flight security scan: BLOCKED
556
+ - Issue: Hardcoded credentials detected
557
+ - Location: config/secrets.go:23
558
+ - Action: Remove and use environment variables
559
+
560
+ ### Decision
561
+ Gate BLOCKED. Address security issue before proceeding.
562
+ ```
563
+
564
+ ## Anti-Patterns
565
+
566
+ ### Skipping the Assessment Step
567
+
568
+ **Wrong:**
569
+ ```
570
+ Agent completes work
571
+
572
+ Spawns handoff subagent immediately
573
+
574
+ Subagent has no assessment to verify
575
+
576
+ Gate is effectively bypassed
577
+ ```
578
+
579
+ **Correct:**
580
+ ```
581
+ Agent completes work
582
+
583
+ Writes assessment to session file
584
+
585
+ Spawns handoff subagent
586
+
587
+ Subagent verifies assessment exists
588
+
589
+ Gate functions properly
590
+ ```
591
+
592
+ ### Rubber-Stamp Approvals
593
+
594
+ **Wrong:**
595
+ ```markdown
596
+ ## Reviewer Assessment
597
+
598
+ **Verdict:** APPROVED
599
+
600
+ Tests pass, looks fine.
601
+ ```
602
+
603
+ No evidence of actual review. Gate provides false confidence.
604
+
605
+ **Correct:**
606
+ ```markdown
607
+ ## Reviewer Assessment
608
+
609
+ **Verdict:** APPROVED
610
+
611
+ **Evidence:**
612
+ - Traced userId from handler.go:47 through to repo.go:89 (parameterized query, safe)
613
+ - Verified error handling at service.go:112 catches API failures
614
+ - Checked null guards at handler.go:55-60
615
+
616
+ **Security:** Auth check at handler.go:47 verifies admin role.
617
+ **Performance:** Single query at repo.go:89, no N+1 issues.
618
+ ```
619
+
620
+ ### Silent Rejections
621
+
622
+ **Wrong:**
623
+ ```markdown
624
+ ## Reviewer Assessment
625
+
626
+ **Verdict:** REJECTED
627
+
628
+ Code needs work.
629
+ ```
630
+
631
+ No actionable information for Dev to fix issues.
632
+
633
+ **Correct:**
634
+ ```markdown
635
+ ## Reviewer Assessment
636
+
637
+ **Verdict:** REJECTED
638
+
639
+ **Issues Found:**
640
+
641
+ | Severity | Issue | Location | Fix Required |
642
+ |----------|-------|----------|--------------|
643
+ | Critical | SQL injection vulnerability | query.go:23 | Use parameterized query |
644
+ | Major | Missing error handling | service.go:45 | Add try-catch block |
645
+ | Minor | Inconsistent naming | model.go:12 | Rename to camelCase |
646
+
647
+ **What Passed:**
648
+ - Test coverage adequate
649
+ - Performance acceptable
650
+ ```
651
+
652
+ ### Bypassing Gates Under Pressure
653
+
654
+ **Wrong:**
655
+ ```
656
+ "We need to ship today, skip the review"
657
+
658
+ Gate bypassed
659
+
660
+ Bug ships to production
661
+
662
+ 3am incident response
663
+ ```
664
+
665
+ **Correct:**
666
+ ```
667
+ "We need to ship today"
668
+
669
+ Expedited review (still goes through gate)
670
+
671
+ Reviewer prioritizes critical checks
672
+
673
+ Gate passes or blocks appropriately
674
+
675
+ Quality maintained
676
+ ```
677
+
678
+ ### No Rejection Loop Limit
679
+
680
+ **Wrong:**
681
+ ```
682
+ Rejection #1 → Dev fixes → Rejection #2 → Dev fixes →
683
+ Rejection #3 → Dev fixes → Rejection #4 → Dev fixes →
684
+ (infinite loop, no escalation)
685
+ ```
686
+
687
+ **Correct:**
688
+ ```
689
+ Rejection #1 → Dev fixes → Rejection #2 → Dev fixes →
690
+ Rejection #3 → ESCALATE to Architect/SM for design review
691
+ ```
692
+
693
+ Set organizational policy for maximum rejection loops (typically 2-3).
694
+
695
+ ## Comparison with Related Patterns
696
+
697
+ | Pattern | Use When | Key Difference |
698
+ |---------|----------|----------------|
699
+ | **TDD Flow** | Sequential workflow | Approval gates ARE the transitions |
700
+ | **Helper Delegation** | Mechanical work | Subagents execute gate checks |
701
+ | **Fan-out/Fan-in** | Parallel work | Gates sync parallel results |
702
+ | **Approval Gates** | Decision points | Explicit pass/fail verification |
703
+
704
+ ### Pattern Integration
705
+
706
+ Approval gates integrate with other patterns:
707
+
708
+ ```
709
+ TDD Flow uses approval gates at each transition:
710
+ SM ──[gate]──► TEA ──[gate]──► Dev ──[gate]──► Reviewer ──[gate]──► SM
711
+
712
+ Helper delegation executes gate checks:
713
+ Reviewer (Opus) ──► reviewer-preflight (Haiku) ──► returns gate status
714
+
715
+ Fan-out aggregation triggers approval gate:
716
+ [Parallel checks] ──► Aggregate ──[gate]──► Continue if all pass
717
+ ```
718
+
719
+ ## Implementation Checklist
720
+
721
+ When implementing approval gates:
722
+
723
+ - [ ] Identify decision points requiring verification
724
+ - [ ] Choose appropriate gate type (automated, human, user, plan)
725
+ - [ ] Implement assessment-first protocol
726
+ - [ ] Add verdict verification in handoff subagents
727
+ - [ ] Define pass/fail criteria clearly
728
+ - [ ] Document rejection reasons (for human gates)
729
+ - [ ] Implement retry pattern with escalation
730
+ - [ ] Set maximum rejection loop limit
731
+ - [ ] Add context-aware routing after gates
732
+ - [ ] Test gate blocking behavior
733
+
734
+ ## Related Patterns
735
+
736
+ - **TDD Flow Pattern** (`tdd-flow-pattern.md`): Sequential workflow that uses gates at each transition
737
+ - **Helper Delegation Pattern** (`helper-delegation-pattern.md`): Subagents that execute gate checks
738
+ - **Fan-out/Fan-in Pattern** (`fan-out-fan-in-pattern.md`): Parallel execution that aggregates through gates
739
+
740
+ ## References
741
+
742
+ ### Agent Definitions (Gate Implementers)
743
+ - Reviewer: `agents/reviewer.md` - Primary approval gate (L9-25 adversarial mindset, L188-228 assessment templates)
744
+ - SM: `agents/sm.md` - Status gates and scale routing (L82-93, L359-365)
745
+ - Dev: `agents/dev.md` - Self-review checklist (L137-144)
746
+ - TEA: `agents/tea.md` - Chore bypass criteria (L96-104)
747
+
748
+ ### Handoff Subagents (Gate Executors)
749
+ - Approval routing: `agents/reviewer-handoff-approve.md` (L26-39)
750
+ - Rejection routing: `agents/reviewer-handoff-reject.md` (L30-43)
751
+ - RED verification: `agents/tea-handoff.md` (L42-76)
752
+ - GREEN verification: `agents/dev-handoff.md`
753
+
754
+ ### Claude Code Tools
755
+ - `AskUserQuestion`: Interactive user decision gates (requires CYCLIST marker via Reflector)
756
+ - `EnterPlanMode` / `ExitPlanMode`: Plan approval gates
757
+ - `Task` with `subagent_type`: Delegated gate execution
758
+
759
+ ### Reflector Hook
760
+ - `question_reflector_check.py`: Enforces CYCLIST marker before AskUserQuestion
761
+ - Markers: `<!-- CYCLIST:CHOICES:... -->`, `<!-- CYCLIST:QUESTION:yesno|open -->`
762
+
763
+ ---
764
+
765
+ *Last verified: 2026-01-06*
766
+ *Pennyfarthing v4.0.0*