@pennyfarthing/core 7.5.0 → 7.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (901) hide show
  1. package/LICENSE +14 -0
  2. package/README.md +301 -0
  3. package/package.json +31 -36
  4. package/packages/core/dist/bmad/context-reader.d.ts +71 -0
  5. package/packages/core/dist/bmad/context-reader.d.ts.map +1 -0
  6. package/packages/core/dist/bmad/context-reader.js +369 -0
  7. package/packages/core/dist/bmad/context-reader.js.map +1 -0
  8. package/packages/core/dist/bmad/context-reader.test.d.ts +71 -0
  9. package/packages/core/dist/bmad/context-reader.test.d.ts.map +1 -0
  10. package/packages/core/dist/bmad/context-reader.test.js +878 -0
  11. package/packages/core/dist/bmad/context-reader.test.js.map +1 -0
  12. package/packages/core/dist/bmad/epics-parser.d.ts +61 -0
  13. package/packages/core/dist/bmad/epics-parser.d.ts.map +1 -0
  14. package/packages/core/dist/bmad/epics-parser.js +331 -0
  15. package/packages/core/dist/bmad/epics-parser.js.map +1 -0
  16. package/packages/core/dist/bmad/epics-parser.test.d.ts +7 -0
  17. package/packages/core/dist/bmad/epics-parser.test.d.ts.map +1 -0
  18. package/packages/core/dist/bmad/epics-parser.test.js +449 -0
  19. package/packages/core/dist/bmad/epics-parser.test.js.map +1 -0
  20. package/packages/core/dist/bmad/index.d.ts +11 -0
  21. package/packages/core/dist/bmad/index.d.ts.map +1 -0
  22. package/packages/core/dist/bmad/index.js +24 -0
  23. package/packages/core/dist/bmad/index.js.map +1 -0
  24. package/packages/core/dist/bmad/status-sync.d.ts +173 -0
  25. package/packages/core/dist/bmad/status-sync.d.ts.map +1 -0
  26. package/packages/core/dist/bmad/status-sync.js +463 -0
  27. package/packages/core/dist/bmad/status-sync.js.map +1 -0
  28. package/packages/core/dist/bmad/status-sync.test.d.ts +7 -0
  29. package/packages/core/dist/bmad/status-sync.test.d.ts.map +1 -0
  30. package/packages/core/dist/bmad/status-sync.test.js +702 -0
  31. package/packages/core/dist/bmad/status-sync.test.js.map +1 -0
  32. package/packages/core/dist/bmad/story-exporter.d.ts +55 -0
  33. package/packages/core/dist/bmad/story-exporter.d.ts.map +1 -0
  34. package/packages/core/dist/bmad/story-exporter.js +170 -0
  35. package/packages/core/dist/bmad/story-exporter.js.map +1 -0
  36. package/packages/core/dist/bmad/story-exporter.test.d.ts +51 -0
  37. package/packages/core/dist/bmad/story-exporter.test.d.ts.map +1 -0
  38. package/packages/core/dist/bmad/story-exporter.test.js +603 -0
  39. package/packages/core/dist/bmad/story-exporter.test.js.map +1 -0
  40. package/packages/core/dist/bmad/story-parser.d.ts +44 -0
  41. package/packages/core/dist/bmad/story-parser.d.ts.map +1 -0
  42. package/packages/core/dist/bmad/story-parser.js +307 -0
  43. package/packages/core/dist/bmad/story-parser.js.map +1 -0
  44. package/packages/core/dist/bmad/story-parser.test.d.ts +44 -0
  45. package/packages/core/dist/bmad/story-parser.test.d.ts.map +1 -0
  46. package/packages/core/dist/bmad/story-parser.test.js +693 -0
  47. package/packages/core/dist/bmad/story-parser.test.js.map +1 -0
  48. package/packages/core/dist/cli/commands/command.d.ts +28 -0
  49. package/packages/core/dist/cli/commands/command.d.ts.map +1 -0
  50. package/packages/core/dist/cli/commands/command.js +399 -0
  51. package/packages/core/dist/cli/commands/command.js.map +1 -0
  52. package/packages/core/dist/cli/commands/cyclist.d.ts +46 -0
  53. package/packages/core/dist/cli/commands/cyclist.d.ts.map +1 -0
  54. package/packages/core/dist/cli/commands/cyclist.js +196 -0
  55. package/packages/core/dist/cli/commands/cyclist.js.map +1 -0
  56. package/packages/core/dist/cli/commands/cyclist.test.d.ts +13 -0
  57. package/packages/core/dist/cli/commands/cyclist.test.d.ts.map +1 -0
  58. package/packages/core/dist/cli/commands/cyclist.test.js +245 -0
  59. package/packages/core/dist/cli/commands/cyclist.test.js.map +1 -0
  60. package/packages/core/dist/cli/commands/doctor-legacy.test.d.ts +13 -0
  61. package/packages/core/dist/cli/commands/doctor-legacy.test.d.ts.map +1 -0
  62. package/packages/core/dist/cli/commands/doctor-legacy.test.js +207 -0
  63. package/packages/core/dist/cli/commands/doctor-legacy.test.js.map +1 -0
  64. package/packages/core/dist/cli/commands/doctor.d.ts +25 -0
  65. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -0
  66. package/packages/core/dist/cli/commands/doctor.js +780 -0
  67. package/packages/core/dist/cli/commands/doctor.js.map +1 -0
  68. package/packages/core/dist/cli/commands/init.d.ts +8 -0
  69. package/packages/core/dist/cli/commands/init.d.ts.map +1 -0
  70. package/packages/core/dist/cli/commands/init.js +515 -0
  71. package/packages/core/dist/cli/commands/init.js.map +1 -0
  72. package/packages/core/dist/cli/commands/skill.d.ts +28 -0
  73. package/packages/core/dist/cli/commands/skill.d.ts.map +1 -0
  74. package/packages/core/dist/cli/commands/skill.js +416 -0
  75. package/packages/core/dist/cli/commands/skill.js.map +1 -0
  76. package/packages/core/dist/cli/commands/theme.d.ts +21 -0
  77. package/packages/core/dist/cli/commands/theme.d.ts.map +1 -0
  78. package/packages/core/dist/cli/commands/theme.js +201 -0
  79. package/packages/core/dist/cli/commands/theme.js.map +1 -0
  80. package/packages/core/dist/cli/commands/uninstall.d.ts +8 -0
  81. package/packages/core/dist/cli/commands/uninstall.d.ts.map +1 -0
  82. package/packages/core/dist/cli/commands/uninstall.js +237 -0
  83. package/packages/core/dist/cli/commands/uninstall.js.map +1 -0
  84. package/packages/core/dist/cli/commands/update.d.ts +9 -0
  85. package/packages/core/dist/cli/commands/update.d.ts.map +1 -0
  86. package/packages/core/dist/cli/commands/update.js +390 -0
  87. package/packages/core/dist/cli/commands/update.js.map +1 -0
  88. package/packages/core/dist/cli/commands/version.d.ts +2 -0
  89. package/packages/core/dist/cli/commands/version.d.ts.map +1 -0
  90. package/packages/core/dist/cli/commands/version.js +28 -0
  91. package/packages/core/dist/cli/commands/version.js.map +1 -0
  92. package/packages/core/dist/cli/customization.test.d.ts +12 -0
  93. package/packages/core/dist/cli/customization.test.d.ts.map +1 -0
  94. package/packages/core/dist/cli/customization.test.js +84 -0
  95. package/packages/core/dist/cli/customization.test.js.map +1 -0
  96. package/packages/core/dist/cli/cyclist-migration.test.d.ts +16 -0
  97. package/packages/core/dist/cli/cyclist-migration.test.d.ts.map +1 -0
  98. package/packages/core/dist/cli/cyclist-migration.test.js +225 -0
  99. package/packages/core/dist/cli/cyclist-migration.test.js.map +1 -0
  100. package/packages/core/dist/cli/index.d.ts +3 -0
  101. package/packages/core/dist/cli/index.d.ts.map +1 -0
  102. package/packages/core/dist/cli/index.js +174 -0
  103. package/packages/core/dist/cli/index.js.map +1 -0
  104. package/packages/core/dist/cli/ocean-profiles.test.d.ts +13 -0
  105. package/packages/core/dist/cli/ocean-profiles.test.d.ts.map +1 -0
  106. package/packages/core/dist/cli/ocean-profiles.test.js +134 -0
  107. package/packages/core/dist/cli/ocean-profiles.test.js.map +1 -0
  108. package/packages/core/dist/cli/theme-maker.test.d.ts +11 -0
  109. package/packages/core/dist/cli/theme-maker.test.d.ts.map +1 -0
  110. package/packages/core/dist/cli/theme-maker.test.js +356 -0
  111. package/packages/core/dist/cli/theme-maker.test.js.map +1 -0
  112. package/packages/core/dist/cli/utils/constants.d.ts +66 -0
  113. package/packages/core/dist/cli/utils/constants.d.ts.map +1 -0
  114. package/packages/core/dist/cli/utils/constants.js +54 -0
  115. package/packages/core/dist/cli/utils/constants.js.map +1 -0
  116. package/{dist → packages/core/dist}/cli/utils/files.d.ts +1 -0
  117. package/packages/core/dist/cli/utils/files.d.ts.map +1 -0
  118. package/packages/core/dist/cli/utils/files.js +162 -0
  119. package/packages/core/dist/cli/utils/files.js.map +1 -0
  120. package/packages/core/dist/cli/utils/logger.d.ts +26 -0
  121. package/packages/core/dist/cli/utils/logger.d.ts.map +1 -0
  122. package/packages/core/dist/cli/utils/logger.js +88 -0
  123. package/packages/core/dist/cli/utils/logger.js.map +1 -0
  124. package/{dist → packages/core/dist}/cli/utils/manifest.d.ts +1 -0
  125. package/packages/core/dist/cli/utils/manifest.d.ts.map +1 -0
  126. package/packages/core/dist/cli/utils/manifest.js +90 -0
  127. package/packages/core/dist/cli/utils/manifest.js.map +1 -0
  128. package/packages/core/dist/cli/utils/node-modules.d.ts +6 -0
  129. package/packages/core/dist/cli/utils/node-modules.d.ts.map +1 -0
  130. package/packages/core/dist/cli/utils/node-modules.js +32 -0
  131. package/packages/core/dist/cli/utils/node-modules.js.map +1 -0
  132. package/packages/core/dist/cli/utils/prompts.d.ts +34 -0
  133. package/packages/core/dist/cli/utils/prompts.d.ts.map +1 -0
  134. package/packages/core/dist/cli/utils/prompts.js +93 -0
  135. package/packages/core/dist/cli/utils/prompts.js.map +1 -0
  136. package/packages/core/dist/cli/utils/symlinks.d.ts +44 -0
  137. package/packages/core/dist/cli/utils/symlinks.d.ts.map +1 -0
  138. package/packages/core/dist/cli/utils/symlinks.js +327 -0
  139. package/packages/core/dist/cli/utils/symlinks.js.map +1 -0
  140. package/packages/core/dist/cli/utils/themes.d.ts +101 -0
  141. package/packages/core/dist/cli/utils/themes.d.ts.map +1 -0
  142. package/packages/core/dist/cli/utils/themes.js +382 -0
  143. package/packages/core/dist/cli/utils/themes.js.map +1 -0
  144. package/packages/core/dist/cli/utils/themes.test.d.ts +12 -0
  145. package/packages/core/dist/cli/utils/themes.test.d.ts.map +1 -0
  146. package/packages/core/dist/cli/utils/themes.test.js +147 -0
  147. package/packages/core/dist/cli/utils/themes.test.js.map +1 -0
  148. package/{dist → packages/core/dist}/cli/utils/version.d.ts +1 -0
  149. package/packages/core/dist/cli/utils/version.d.ts.map +1 -0
  150. package/packages/core/dist/cli/utils/version.js +64 -0
  151. package/packages/core/dist/cli/utils/version.js.map +1 -0
  152. package/packages/core/dist/cli/workspace.test.d.ts +8 -0
  153. package/packages/core/dist/cli/workspace.test.d.ts.map +1 -0
  154. package/packages/core/dist/cli/workspace.test.js +156 -0
  155. package/packages/core/dist/cli/workspace.test.js.map +1 -0
  156. package/{dist → packages/core/dist}/index.d.ts +1 -0
  157. package/packages/core/dist/index.d.ts.map +1 -0
  158. package/packages/core/dist/index.js +20 -0
  159. package/packages/core/dist/index.js.map +1 -0
  160. package/packages/core/dist/jira/jira-epic-creation.d.ts +109 -0
  161. package/packages/core/dist/jira/jira-epic-creation.d.ts.map +1 -0
  162. package/packages/core/dist/jira/jira-epic-creation.js +253 -0
  163. package/packages/core/dist/jira/jira-epic-creation.js.map +1 -0
  164. package/packages/core/dist/jira/jira-epic-creation.test.d.ts +16 -0
  165. package/packages/core/dist/jira/jira-epic-creation.test.d.ts.map +1 -0
  166. package/packages/core/dist/jira/jira-epic-creation.test.js +387 -0
  167. package/packages/core/dist/jira/jira-epic-creation.test.js.map +1 -0
  168. package/packages/core/dist/jira/jira-sprint-sync.d.ts +247 -0
  169. package/packages/core/dist/jira/jira-sprint-sync.d.ts.map +1 -0
  170. package/packages/core/dist/jira/jira-sprint-sync.js +670 -0
  171. package/packages/core/dist/jira/jira-sprint-sync.js.map +1 -0
  172. package/packages/core/dist/jira/jira-sprint-sync.test.d.ts +16 -0
  173. package/packages/core/dist/jira/jira-sprint-sync.test.d.ts.map +1 -0
  174. package/packages/core/dist/jira/jira-sprint-sync.test.js +845 -0
  175. package/packages/core/dist/jira/jira-sprint-sync.test.js.map +1 -0
  176. package/{dist → packages/core/dist}/permissions/index.d.ts +1 -0
  177. package/packages/core/dist/permissions/index.d.ts.map +1 -0
  178. package/packages/core/dist/permissions/index.js +13 -0
  179. package/packages/core/dist/permissions/index.js.map +1 -0
  180. package/{dist → packages/core/dist}/permissions/permission-schema.d.ts +1 -0
  181. package/packages/core/dist/permissions/permission-schema.d.ts.map +1 -0
  182. package/{dist → packages/core/dist}/permissions/permission-schema.js +9 -13
  183. package/packages/core/dist/permissions/permission-schema.js.map +1 -0
  184. package/packages/core/dist/permissions/permission-schema.test.d.ts +40 -0
  185. package/packages/core/dist/permissions/permission-schema.test.d.ts.map +1 -0
  186. package/packages/core/dist/permissions/permission-schema.test.js +367 -0
  187. package/packages/core/dist/permissions/permission-schema.test.js.map +1 -0
  188. package/packages/core/dist/scripts/add-ocean-profiles.d.ts +9 -0
  189. package/packages/core/dist/scripts/add-ocean-profiles.d.ts.map +1 -0
  190. package/packages/core/dist/scripts/add-ocean-profiles.js +695 -0
  191. package/packages/core/dist/scripts/add-ocean-profiles.js.map +1 -0
  192. package/packages/core/dist/scripts/benchmark-integration.d.ts +182 -0
  193. package/packages/core/dist/scripts/benchmark-integration.d.ts.map +1 -0
  194. package/packages/core/dist/scripts/benchmark-integration.js +691 -0
  195. package/packages/core/dist/scripts/benchmark-integration.js.map +1 -0
  196. package/packages/core/dist/scripts/benchmark-integration.test.d.ts +13 -0
  197. package/packages/core/dist/scripts/benchmark-integration.test.d.ts.map +1 -0
  198. package/packages/core/dist/scripts/benchmark-integration.test.js +680 -0
  199. package/packages/core/dist/scripts/benchmark-integration.test.js.map +1 -0
  200. package/packages/core/dist/scripts/debugging-scenarios.test.d.ts +18 -0
  201. package/packages/core/dist/scripts/debugging-scenarios.test.d.ts.map +1 -0
  202. package/packages/core/dist/scripts/debugging-scenarios.test.js +317 -0
  203. package/packages/core/dist/scripts/debugging-scenarios.test.js.map +1 -0
  204. package/packages/core/dist/scripts/generate-all-spiders.d.ts +10 -0
  205. package/packages/core/dist/scripts/generate-all-spiders.d.ts.map +1 -0
  206. package/packages/core/dist/scripts/generate-all-spiders.js +306 -0
  207. package/packages/core/dist/scripts/generate-all-spiders.js.map +1 -0
  208. package/packages/core/dist/scripts/generate-report.d.ts +65 -0
  209. package/packages/core/dist/scripts/generate-report.d.ts.map +1 -0
  210. package/packages/core/dist/scripts/generate-report.js +378 -0
  211. package/packages/core/dist/scripts/generate-report.js.map +1 -0
  212. package/packages/core/dist/scripts/generate-report.test.d.ts +13 -0
  213. package/packages/core/dist/scripts/generate-report.test.d.ts.map +1 -0
  214. package/packages/core/dist/scripts/generate-report.test.js +363 -0
  215. package/packages/core/dist/scripts/generate-report.test.js.map +1 -0
  216. package/packages/core/dist/scripts/generate-spider-report.d.ts +65 -0
  217. package/packages/core/dist/scripts/generate-spider-report.d.ts.map +1 -0
  218. package/packages/core/dist/scripts/generate-spider-report.js +366 -0
  219. package/packages/core/dist/scripts/generate-spider-report.js.map +1 -0
  220. package/packages/core/dist/scripts/generate-spider-report.test.d.ts +13 -0
  221. package/packages/core/dist/scripts/generate-spider-report.test.d.ts.map +1 -0
  222. package/packages/core/dist/scripts/generate-spider-report.test.js +367 -0
  223. package/packages/core/dist/scripts/generate-spider-report.test.js.map +1 -0
  224. package/packages/core/dist/scripts/generate-spider.d.ts +47 -0
  225. package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -0
  226. package/packages/core/dist/scripts/generate-spider.js +338 -0
  227. package/packages/core/dist/scripts/generate-spider.js.map +1 -0
  228. package/packages/core/dist/scripts/generate-spider.test.d.ts +14 -0
  229. package/packages/core/dist/scripts/generate-spider.test.d.ts.map +1 -0
  230. package/packages/core/dist/scripts/generate-spider.test.js +271 -0
  231. package/packages/core/dist/scripts/generate-spider.test.js.map +1 -0
  232. package/{dist → packages/core/dist}/scripts/job-fair-aggregator.d.ts +1 -0
  233. package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +1 -0
  234. package/packages/core/dist/scripts/job-fair-aggregator.js +547 -0
  235. package/packages/core/dist/scripts/job-fair-aggregator.js.map +1 -0
  236. package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts +14 -0
  237. package/packages/core/dist/scripts/job-fair-aggregator.test.d.ts.map +1 -0
  238. package/packages/core/dist/scripts/job-fair-aggregator.test.js +616 -0
  239. package/packages/core/dist/scripts/job-fair-aggregator.test.js.map +1 -0
  240. package/packages/core/dist/scripts/run-ci.test.d.ts +20 -0
  241. package/packages/core/dist/scripts/run-ci.test.d.ts.map +1 -0
  242. package/packages/core/dist/scripts/run-ci.test.js +127 -0
  243. package/packages/core/dist/scripts/run-ci.test.js.map +1 -0
  244. package/packages/core/dist/scripts/theme-detail.test.d.ts +10 -0
  245. package/packages/core/dist/scripts/theme-detail.test.d.ts.map +1 -0
  246. package/packages/core/dist/scripts/theme-detail.test.js +199 -0
  247. package/packages/core/dist/scripts/theme-detail.test.js.map +1 -0
  248. package/packages/core/dist/scripts/validate-ocean-profiles.d.ts +9 -0
  249. package/packages/core/dist/scripts/validate-ocean-profiles.d.ts.map +1 -0
  250. package/packages/core/dist/scripts/validate-ocean-profiles.js +130 -0
  251. package/packages/core/dist/scripts/validate-ocean-profiles.js.map +1 -0
  252. package/packages/core/dist/workflow/gate-handler.d.ts +94 -0
  253. package/packages/core/dist/workflow/gate-handler.d.ts.map +1 -0
  254. package/packages/core/dist/workflow/gate-handler.js +189 -0
  255. package/packages/core/dist/workflow/gate-handler.js.map +1 -0
  256. package/packages/core/dist/workflow/gate-handler.test.d.ts +14 -0
  257. package/packages/core/dist/workflow/gate-handler.test.d.ts.map +1 -0
  258. package/packages/core/dist/workflow/gate-handler.test.js +543 -0
  259. package/packages/core/dist/workflow/gate-handler.test.js.map +1 -0
  260. package/packages/core/dist/workflow/generic-sm-finish.d.ts +89 -0
  261. package/packages/core/dist/workflow/generic-sm-finish.d.ts.map +1 -0
  262. package/packages/core/dist/workflow/generic-sm-finish.js +157 -0
  263. package/packages/core/dist/workflow/generic-sm-finish.js.map +1 -0
  264. package/packages/core/dist/workflow/generic-sm-setup.d.ts +138 -0
  265. package/packages/core/dist/workflow/generic-sm-setup.d.ts.map +1 -0
  266. package/packages/core/dist/workflow/generic-sm-setup.js +382 -0
  267. package/packages/core/dist/workflow/generic-sm-setup.js.map +1 -0
  268. package/packages/core/dist/workflow/handoff.d.ts +281 -0
  269. package/packages/core/dist/workflow/handoff.d.ts.map +1 -0
  270. package/packages/core/dist/workflow/handoff.js +411 -0
  271. package/packages/core/dist/workflow/handoff.js.map +1 -0
  272. package/packages/core/dist/workflow/handoff.test.d.ts +21 -0
  273. package/packages/core/dist/workflow/handoff.test.d.ts.map +1 -0
  274. package/packages/core/dist/workflow/handoff.test.js +499 -0
  275. package/packages/core/dist/workflow/handoff.test.js.map +1 -0
  276. package/{dist → packages/core/dist}/workflow/index.d.ts +1 -0
  277. package/packages/core/dist/workflow/index.d.ts.map +1 -0
  278. package/packages/core/dist/workflow/index.js +24 -0
  279. package/packages/core/dist/workflow/index.js.map +1 -0
  280. package/packages/core/dist/workflow/session-state.d.ts +92 -0
  281. package/packages/core/dist/workflow/session-state.d.ts.map +1 -0
  282. package/packages/core/dist/workflow/session-state.js +198 -0
  283. package/packages/core/dist/workflow/session-state.js.map +1 -0
  284. package/packages/core/dist/workflow/session-state.test.d.ts +8 -0
  285. package/packages/core/dist/workflow/session-state.test.d.ts.map +1 -0
  286. package/packages/core/dist/workflow/session-state.test.js +551 -0
  287. package/packages/core/dist/workflow/session-state.test.js.map +1 -0
  288. package/packages/core/dist/workflow/sm-subagents.test.d.ts +23 -0
  289. package/packages/core/dist/workflow/sm-subagents.test.d.ts.map +1 -0
  290. package/packages/core/dist/workflow/sm-subagents.test.js +727 -0
  291. package/packages/core/dist/workflow/sm-subagents.test.js.map +1 -0
  292. package/packages/core/dist/workflow/step-parser.d.ts +45 -0
  293. package/packages/core/dist/workflow/step-parser.d.ts.map +1 -0
  294. package/packages/core/dist/workflow/step-parser.js +147 -0
  295. package/packages/core/dist/workflow/step-parser.js.map +1 -0
  296. package/packages/core/dist/workflow/step-parser.test.d.ts +14 -0
  297. package/packages/core/dist/workflow/step-parser.test.d.ts.map +1 -0
  298. package/packages/core/dist/workflow/step-parser.test.js +470 -0
  299. package/packages/core/dist/workflow/step-parser.test.js.map +1 -0
  300. package/packages/core/dist/workflow/story-workflow-routing.test.d.ts +17 -0
  301. package/packages/core/dist/workflow/story-workflow-routing.test.d.ts.map +1 -0
  302. package/packages/core/dist/workflow/story-workflow-routing.test.js +559 -0
  303. package/packages/core/dist/workflow/story-workflow-routing.test.js.map +1 -0
  304. package/packages/core/dist/workflow/test-cache.d.ts +131 -0
  305. package/packages/core/dist/workflow/test-cache.d.ts.map +1 -0
  306. package/packages/core/dist/workflow/test-cache.js +226 -0
  307. package/packages/core/dist/workflow/test-cache.js.map +1 -0
  308. package/packages/core/dist/workflow/test-cache.test.d.ts +17 -0
  309. package/packages/core/dist/workflow/test-cache.test.d.ts.map +1 -0
  310. package/packages/core/dist/workflow/test-cache.test.js +438 -0
  311. package/packages/core/dist/workflow/test-cache.test.js.map +1 -0
  312. package/packages/core/dist/workflow/trimodal.d.ts +86 -0
  313. package/packages/core/dist/workflow/trimodal.d.ts.map +1 -0
  314. package/packages/core/dist/workflow/trimodal.js +118 -0
  315. package/packages/core/dist/workflow/trimodal.js.map +1 -0
  316. package/packages/core/dist/workflow/trimodal.test.d.ts +11 -0
  317. package/packages/core/dist/workflow/trimodal.test.d.ts.map +1 -0
  318. package/packages/core/dist/workflow/trimodal.test.js +395 -0
  319. package/packages/core/dist/workflow/trimodal.test.js.map +1 -0
  320. package/packages/core/dist/workflow/variable-resolver.d.ts +67 -0
  321. package/packages/core/dist/workflow/variable-resolver.d.ts.map +1 -0
  322. package/packages/core/dist/workflow/variable-resolver.js +156 -0
  323. package/packages/core/dist/workflow/variable-resolver.js.map +1 -0
  324. package/packages/core/dist/workflow/variable-resolver.test.d.ts +14 -0
  325. package/packages/core/dist/workflow/variable-resolver.test.d.ts.map +1 -0
  326. package/packages/core/dist/workflow/variable-resolver.test.js +400 -0
  327. package/packages/core/dist/workflow/variable-resolver.test.js.map +1 -0
  328. package/packages/core/dist/workflow/workflow-executor.d.ts +163 -0
  329. package/packages/core/dist/workflow/workflow-executor.d.ts.map +1 -0
  330. package/packages/core/dist/workflow/workflow-executor.js +197 -0
  331. package/packages/core/dist/workflow/workflow-executor.js.map +1 -0
  332. package/packages/core/dist/workflow/workflow-executor.test.d.ts +8 -0
  333. package/packages/core/dist/workflow/workflow-executor.test.d.ts.map +1 -0
  334. package/packages/core/dist/workflow/workflow-executor.test.js +444 -0
  335. package/packages/core/dist/workflow/workflow-executor.test.js.map +1 -0
  336. package/{dist → packages/core/dist}/workflow/workflow-loader.d.ts +1 -0
  337. package/packages/core/dist/workflow/workflow-loader.d.ts.map +1 -0
  338. package/{dist → packages/core/dist}/workflow/workflow-loader.js +34 -40
  339. package/packages/core/dist/workflow/workflow-loader.js.map +1 -0
  340. package/packages/core/dist/workflow/workflow-loader.test.d.ts +15 -0
  341. package/packages/core/dist/workflow/workflow-loader.test.d.ts.map +1 -0
  342. package/packages/core/dist/workflow/workflow-loader.test.js +354 -0
  343. package/packages/core/dist/workflow/workflow-loader.test.js.map +1 -0
  344. package/packages/core/dist/workflow/workflow-migration.test.d.ts +17 -0
  345. package/packages/core/dist/workflow/workflow-migration.test.d.ts.map +1 -0
  346. package/packages/core/dist/workflow/workflow-migration.test.js +371 -0
  347. package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -0
  348. package/{dist → packages/core/dist}/workflow/workflow-permissions.d.ts +1 -0
  349. package/packages/core/dist/workflow/workflow-permissions.d.ts.map +1 -0
  350. package/{dist → packages/core/dist}/workflow/workflow-permissions.js +8 -14
  351. package/packages/core/dist/workflow/workflow-permissions.js.map +1 -0
  352. package/packages/core/dist/workflow/workflow-permissions.test.d.ts +15 -0
  353. package/packages/core/dist/workflow/workflow-permissions.test.d.ts.map +1 -0
  354. package/packages/core/dist/workflow/workflow-permissions.test.js +301 -0
  355. package/packages/core/dist/workflow/workflow-permissions.test.js.map +1 -0
  356. package/{dist → packages/core/dist}/workflow/workflow-router.d.ts +1 -0
  357. package/packages/core/dist/workflow/workflow-router.d.ts.map +1 -0
  358. package/{dist → packages/core/dist}/workflow/workflow-router.js +51 -70
  359. package/packages/core/dist/workflow/workflow-router.js.map +1 -0
  360. package/packages/core/dist/workflow/workflow-router.test.d.ts +20 -0
  361. package/packages/core/dist/workflow/workflow-router.test.d.ts.map +1 -0
  362. package/packages/core/dist/workflow/workflow-router.test.js +607 -0
  363. package/packages/core/dist/workflow/workflow-router.test.js.map +1 -0
  364. package/{dist → packages/core/dist}/workflow/workflow-schema.d.ts +1 -0
  365. package/packages/core/dist/workflow/workflow-schema.d.ts.map +1 -0
  366. package/{dist → packages/core/dist}/workflow/workflow-schema.js +59 -62
  367. package/packages/core/dist/workflow/workflow-schema.js.map +1 -0
  368. package/packages/core/dist/workflow/workflow-schema.test.d.ts +45 -0
  369. package/packages/core/dist/workflow/workflow-schema.test.d.ts.map +1 -0
  370. package/packages/core/dist/workflow/workflow-schema.test.js +512 -0
  371. package/packages/core/dist/workflow/workflow-schema.test.js.map +1 -0
  372. package/packages/core/dist/workflow/workflow-stepped-schema.test.d.ts +18 -0
  373. package/packages/core/dist/workflow/workflow-stepped-schema.test.d.ts.map +1 -0
  374. package/packages/core/dist/workflow/workflow-stepped-schema.test.js +608 -0
  375. package/packages/core/dist/workflow/workflow-stepped-schema.test.js.map +1 -0
  376. package/pennyfarthing-dist/agents/README.md +340 -0
  377. package/pennyfarthing-dist/agents/architect.md +193 -0
  378. package/pennyfarthing-dist/agents/dev.md +259 -0
  379. package/pennyfarthing-dist/agents/devops.md +206 -0
  380. package/pennyfarthing-dist/agents/handoff.md +212 -0
  381. package/pennyfarthing-dist/agents/orchestrator.md +355 -0
  382. package/pennyfarthing-dist/agents/pm.md +169 -0
  383. package/pennyfarthing-dist/agents/reviewer-preflight.md +96 -0
  384. package/pennyfarthing-dist/agents/reviewer.md +377 -0
  385. package/pennyfarthing-dist/agents/sm-file-summary.md +58 -0
  386. package/pennyfarthing-dist/agents/sm-finish.md +61 -0
  387. package/pennyfarthing-dist/agents/sm-handoff.md +122 -0
  388. package/pennyfarthing-dist/agents/sm-setup.md +174 -0
  389. package/pennyfarthing-dist/agents/sm.md +649 -0
  390. package/pennyfarthing-dist/agents/tea.md +230 -0
  391. package/pennyfarthing-dist/agents/tech-writer.md +216 -0
  392. package/pennyfarthing-dist/agents/testing-runner.md +141 -0
  393. package/pennyfarthing-dist/agents/ux-designer.md +231 -0
  394. package/pennyfarthing-dist/agents/workflow-status-check.md +68 -0
  395. package/pennyfarthing-dist/commands/architect.md +7 -0
  396. package/pennyfarthing-dist/commands/benchmark-control.md +69 -0
  397. package/pennyfarthing-dist/commands/benchmark.md +467 -0
  398. package/pennyfarthing-dist/commands/brainstorming.md +91 -0
  399. package/pennyfarthing-dist/commands/check.md +156 -0
  400. package/pennyfarthing-dist/commands/chore.md +178 -0
  401. package/pennyfarthing-dist/commands/close-epic.md +139 -0
  402. package/pennyfarthing-dist/commands/continue-session.md +184 -0
  403. package/pennyfarthing-dist/commands/create-branches-from-story.md +358 -0
  404. package/pennyfarthing-dist/commands/create-theme.md +29 -0
  405. package/pennyfarthing-dist/commands/dev.md +7 -0
  406. package/pennyfarthing-dist/commands/devops.md +7 -0
  407. package/pennyfarthing-dist/commands/git-cleanup.md +340 -0
  408. package/pennyfarthing-dist/commands/health-check.md +141 -0
  409. package/pennyfarthing-dist/commands/help.md +264 -0
  410. package/pennyfarthing-dist/commands/job-fair.md +102 -0
  411. package/pennyfarthing-dist/commands/list-themes.md +21 -0
  412. package/pennyfarthing-dist/commands/orchestrator.md +7 -0
  413. package/pennyfarthing-dist/commands/parallel-work.md +71 -0
  414. package/pennyfarthing-dist/commands/party-mode.md +67 -0
  415. package/pennyfarthing-dist/commands/permissions.md +193 -0
  416. package/pennyfarthing-dist/commands/pm.md +7 -0
  417. package/pennyfarthing-dist/commands/prime.md +140 -0
  418. package/pennyfarthing-dist/commands/release.md +58 -0
  419. package/pennyfarthing-dist/commands/repo-status.md +49 -0
  420. package/pennyfarthing-dist/commands/retro.md +200 -0
  421. package/pennyfarthing-dist/commands/reviewer.md +7 -0
  422. package/pennyfarthing-dist/commands/run-ci.md +116 -0
  423. package/pennyfarthing-dist/commands/set-theme.md +56 -0
  424. package/pennyfarthing-dist/commands/show-theme.md +21 -0
  425. package/pennyfarthing-dist/commands/sm.md +7 -0
  426. package/pennyfarthing-dist/commands/solo.md +411 -0
  427. package/pennyfarthing-dist/commands/sprint-planning.md +109 -0
  428. package/pennyfarthing-dist/commands/sprint.md +133 -0
  429. package/pennyfarthing-dist/commands/standalone.md +194 -0
  430. package/pennyfarthing-dist/commands/start-epic.md +168 -0
  431. package/pennyfarthing-dist/commands/sync-epic-to-jira.md +184 -0
  432. package/pennyfarthing-dist/commands/sync-work-with-sprint.md +373 -0
  433. package/pennyfarthing-dist/commands/tea.md +7 -0
  434. package/pennyfarthing-dist/commands/tech-writer.md +7 -0
  435. package/pennyfarthing-dist/commands/theme-maker.md +676 -0
  436. package/pennyfarthing-dist/commands/update-domain-docs.md +83 -0
  437. package/pennyfarthing-dist/commands/ux-designer.md +7 -0
  438. package/pennyfarthing-dist/commands/work.md +122 -0
  439. package/pennyfarthing-dist/commands/workflow.md +21 -0
  440. package/pennyfarthing-dist/guides/AGENT-COORDINATION.md +480 -0
  441. package/pennyfarthing-dist/guides/HOOKS.md +230 -0
  442. package/pennyfarthing-dist/guides/PROMPT-PATTERNS.md +338 -0
  443. package/pennyfarthing-dist/guides/SESSION-ARTIFACTS.md +193 -0
  444. package/pennyfarthing-dist/guides/XML-TAGS.md +156 -0
  445. package/pennyfarthing-dist/guides/agent-behavior.md +286 -0
  446. package/pennyfarthing-dist/guides/agent-template-strategic.md +148 -0
  447. package/pennyfarthing-dist/guides/agent-template-tactical.md +162 -0
  448. package/pennyfarthing-dist/guides/measurement-framework.md +210 -0
  449. package/pennyfarthing-dist/guides/patterns/approval-gates-pattern.md +746 -0
  450. package/pennyfarthing-dist/guides/patterns/fan-out-fan-in-pattern.md +574 -0
  451. package/pennyfarthing-dist/guides/patterns/helper-delegation-pattern.md +488 -0
  452. package/pennyfarthing-dist/guides/patterns/tdd-flow-pattern.md +402 -0
  453. package/pennyfarthing-dist/guides/permission-protocol.md +188 -0
  454. package/pennyfarthing-dist/guides/persona-loading.md +46 -0
  455. package/pennyfarthing-dist/guides/workflow-schema.md +257 -0
  456. package/pennyfarthing-dist/guides/worktree-mode.md +113 -0
  457. package/pennyfarthing-dist/output-styles/teaching.md +33 -0
  458. package/pennyfarthing-dist/output-styles/terse.md +20 -0
  459. package/pennyfarthing-dist/output-styles/verbose.md +28 -0
  460. package/pennyfarthing-dist/personas/themes/1984.yaml +312 -0
  461. package/pennyfarthing-dist/personas/themes/a-team.yaml +337 -0
  462. package/pennyfarthing-dist/personas/themes/agatha-christie.yaml +300 -0
  463. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +330 -0
  464. package/pennyfarthing-dist/personas/themes/all-stars.yaml +332 -0
  465. package/pennyfarthing-dist/personas/themes/ancient-philosophers.yaml +320 -0
  466. package/pennyfarthing-dist/personas/themes/ancient-strategists.yaml +306 -0
  467. package/pennyfarthing-dist/personas/themes/arcane.yaml +288 -0
  468. package/pennyfarthing-dist/personas/themes/arthurian-mythos.yaml +331 -0
  469. package/pennyfarthing-dist/personas/themes/avatar-the-last-airbender.yaml +288 -0
  470. package/pennyfarthing-dist/personas/themes/babylon-5.yaml +288 -0
  471. package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +288 -0
  472. package/pennyfarthing-dist/personas/themes/better-call-saul.yaml +288 -0
  473. package/pennyfarthing-dist/personas/themes/big-lebowski.yaml +300 -0
  474. package/pennyfarthing-dist/personas/themes/black-sails.yaml +300 -0
  475. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +295 -0
  476. package/pennyfarthing-dist/personas/themes/bobiverse.yaml +288 -0
  477. package/pennyfarthing-dist/personas/themes/breaking-bad.yaml +327 -0
  478. package/pennyfarthing-dist/personas/themes/catch-22.yaml +316 -0
  479. package/pennyfarthing-dist/personas/themes/classical-composers.yaml +310 -0
  480. package/pennyfarthing-dist/personas/themes/control.yaml +197 -0
  481. package/pennyfarthing-dist/personas/themes/count-of-monte-cristo.yaml +320 -0
  482. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +323 -0
  483. package/pennyfarthing-dist/personas/themes/deadwood.yaml +300 -0
  484. package/pennyfarthing-dist/personas/themes/dickens.yaml +320 -0
  485. package/pennyfarthing-dist/personas/themes/discworld.yaml +332 -0
  486. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +290 -0
  487. package/pennyfarthing-dist/personas/themes/don-quixote.yaml +320 -0
  488. package/pennyfarthing-dist/personas/themes/dune.yaml +307 -0
  489. package/pennyfarthing-dist/personas/themes/enlightenment-thinkers.yaml +320 -0
  490. package/pennyfarthing-dist/personas/themes/expeditionary-force.yaml +288 -0
  491. package/pennyfarthing-dist/personas/themes/fargo.yaml +330 -0
  492. package/pennyfarthing-dist/personas/themes/film-auteurs.yaml +312 -0
  493. package/pennyfarthing-dist/personas/themes/firefly.yaml +328 -0
  494. package/pennyfarthing-dist/personas/themes/foundation.yaml +290 -0
  495. package/pennyfarthing-dist/personas/themes/futurama.yaml +321 -0
  496. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +290 -0
  497. package/pennyfarthing-dist/personas/themes/gilligans-island.yaml +373 -0
  498. package/pennyfarthing-dist/personas/themes/gothic-literature.yaml +308 -0
  499. package/pennyfarthing-dist/personas/themes/great-gatsby.yaml +308 -0
  500. package/pennyfarthing-dist/personas/themes/greek-mythology.yaml +330 -0
  501. package/pennyfarthing-dist/personas/themes/hannibal.yaml +300 -0
  502. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +324 -0
  503. package/pennyfarthing-dist/personas/themes/his-dark-materials.yaml +291 -0
  504. package/pennyfarthing-dist/personas/themes/historical-figures.yaml +288 -0
  505. package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +331 -0
  506. package/pennyfarthing-dist/personas/themes/house-md.yaml +321 -0
  507. package/pennyfarthing-dist/personas/themes/imperial-radch.yaml +289 -0
  508. package/pennyfarthing-dist/personas/themes/inspector-morse.yaml +300 -0
  509. package/pennyfarthing-dist/personas/themes/jane-austen.yaml +287 -0
  510. package/pennyfarthing-dist/personas/themes/jazz-legends.yaml +320 -0
  511. package/pennyfarthing-dist/personas/themes/justified.yaml +300 -0
  512. package/pennyfarthing-dist/personas/themes/legion-of-doom.yaml +349 -0
  513. package/pennyfarthing-dist/personas/themes/les-miserables.yaml +299 -0
  514. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +334 -0
  515. package/pennyfarthing-dist/personas/themes/lovecraft-mythos.yaml +334 -0
  516. package/pennyfarthing-dist/personas/themes/mad-max.yaml +355 -0
  517. package/pennyfarthing-dist/personas/themes/mad-men.yaml +289 -0
  518. package/pennyfarthing-dist/personas/themes/marvel-mcu.yaml +300 -0
  519. package/pennyfarthing-dist/personas/themes/mash.yaml +337 -0
  520. package/pennyfarthing-dist/personas/themes/mass-effect.yaml +289 -0
  521. package/pennyfarthing-dist/personas/themes/military-commanders.yaml +306 -0
  522. package/pennyfarthing-dist/personas/themes/moby-dick.yaml +320 -0
  523. package/pennyfarthing-dist/personas/themes/monty-python.yaml +303 -0
  524. package/pennyfarthing-dist/personas/themes/neuromancer.yaml +300 -0
  525. package/pennyfarthing-dist/personas/themes/norse-mythology.yaml +329 -0
  526. package/pennyfarthing-dist/personas/themes/parks-and-rec.yaml +372 -0
  527. package/pennyfarthing-dist/personas/themes/peaky-blinders.yaml +298 -0
  528. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +350 -0
  529. package/pennyfarthing-dist/personas/themes/renaissance-masters.yaml +320 -0
  530. package/pennyfarthing-dist/personas/themes/rome.yaml +300 -0
  531. package/pennyfarthing-dist/personas/themes/russian-masters.yaml +318 -0
  532. package/pennyfarthing-dist/personas/themes/sandman.yaml +288 -0
  533. package/pennyfarthing-dist/personas/themes/scientific-revolutionaries.yaml +320 -0
  534. package/pennyfarthing-dist/personas/themes/shakespeare.yaml +301 -0
  535. package/pennyfarthing-dist/personas/themes/sherlock-holmes.yaml +289 -0
  536. package/pennyfarthing-dist/personas/themes/snow-crash.yaml +288 -0
  537. package/pennyfarthing-dist/personas/themes/software-pioneers.yaml +300 -0
  538. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +366 -0
  539. package/pennyfarthing-dist/personas/themes/star-trek-tos.yaml +334 -0
  540. package/pennyfarthing-dist/personas/themes/star-wars.yaml +303 -0
  541. package/pennyfarthing-dist/personas/themes/succession.yaml +300 -0
  542. package/pennyfarthing-dist/personas/themes/superfriends.yaml +338 -0
  543. package/pennyfarthing-dist/personas/themes/ted-lasso.yaml +366 -0
  544. package/pennyfarthing-dist/personas/themes/the-americans.yaml +300 -0
  545. package/pennyfarthing-dist/personas/themes/the-crown.yaml +300 -0
  546. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +343 -0
  547. package/pennyfarthing-dist/personas/themes/the-good-place.yaml +322 -0
  548. package/pennyfarthing-dist/personas/themes/the-matrix.yaml +353 -0
  549. package/pennyfarthing-dist/personas/themes/the-odyssey.yaml +300 -0
  550. package/pennyfarthing-dist/personas/themes/the-office.yaml +330 -0
  551. package/pennyfarthing-dist/personas/themes/the-simpsons.yaml +308 -0
  552. package/pennyfarthing-dist/personas/themes/the-sopranos.yaml +300 -0
  553. package/pennyfarthing-dist/personas/themes/the-wire.yaml +311 -0
  554. package/pennyfarthing-dist/personas/themes/the-witcher.yaml +300 -0
  555. package/pennyfarthing-dist/personas/themes/twin-peaks.yaml +302 -0
  556. package/pennyfarthing-dist/personas/themes/vorkosigan-saga.yaml +300 -0
  557. package/pennyfarthing-dist/personas/themes/watchmen.yaml +291 -0
  558. package/pennyfarthing-dist/personas/themes/west-wing.yaml +291 -0
  559. package/pennyfarthing-dist/personas/themes/world-explorers.yaml +320 -0
  560. package/pennyfarthing-dist/personas/themes/wwii-leaders.yaml +307 -0
  561. package/pennyfarthing-dist/personas/themes/x-files.yaml +302 -0
  562. package/pennyfarthing-dist/scripts/README.md +68 -0
  563. package/pennyfarthing-dist/scripts/core/README.md +26 -0
  564. package/pennyfarthing-dist/scripts/core/agent-session.sh +378 -0
  565. package/pennyfarthing-dist/scripts/core/check-context.sh +272 -0
  566. package/pennyfarthing-dist/scripts/core/handoff-marker.sh +90 -0
  567. package/pennyfarthing-dist/scripts/core/phase-check-start.sh +95 -0
  568. package/pennyfarthing-dist/scripts/core/prime.sh +136 -0
  569. package/pennyfarthing-dist/scripts/core/run.sh +75 -0
  570. package/pennyfarthing-dist/scripts/cyclist/is-cyclist.sh +21 -0
  571. package/pennyfarthing-dist/scripts/git/README.md +25 -0
  572. package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +226 -0
  573. package/pennyfarthing-dist/scripts/git/git-status-all.sh +127 -0
  574. package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +91 -0
  575. package/pennyfarthing-dist/scripts/git/release.sh +199 -0
  576. package/pennyfarthing-dist/scripts/git/worktree-manager.sh +494 -0
  577. package/pennyfarthing-dist/scripts/health/drift-detection.sh +162 -0
  578. package/pennyfarthing-dist/scripts/hooks/README.md +32 -0
  579. package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +87 -0
  580. package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +60 -0
  581. package/pennyfarthing-dist/scripts/hooks/context-warning.sh +65 -0
  582. package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +35 -0
  583. package/pennyfarthing-dist/scripts/hooks/post-merge.sh +166 -0
  584. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +50 -0
  585. package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +71 -0
  586. package/pennyfarthing-dist/scripts/hooks/pre-push.sh +54 -0
  587. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.mjs +380 -0
  588. package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +20 -0
  589. package/pennyfarthing-dist/scripts/hooks/session-start.sh +97 -0
  590. package/pennyfarthing-dist/scripts/hooks/session-stop.sh +58 -0
  591. package/pennyfarthing-dist/scripts/hooks/tests/question-reflector.test.mjs +545 -0
  592. package/pennyfarthing-dist/scripts/jira/README.md +33 -0
  593. package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +101 -0
  594. package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +97 -0
  595. package/pennyfarthing-dist/scripts/jira/jira-bidirectional-sync.mjs +327 -0
  596. package/pennyfarthing-dist/scripts/jira/jira-bidirectional-sync.test.mjs +503 -0
  597. package/pennyfarthing-dist/scripts/jira/jira-claim-story.sh +164 -0
  598. package/pennyfarthing-dist/scripts/jira/jira-lib.mjs +443 -0
  599. package/pennyfarthing-dist/scripts/jira/jira-lib.sh +464 -0
  600. package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +266 -0
  601. package/pennyfarthing-dist/scripts/jira/jira-sync-story.mjs +208 -0
  602. package/pennyfarthing-dist/scripts/jira/jira-sync-story.sh +8 -0
  603. package/pennyfarthing-dist/scripts/jira/jira-sync.mjs +198 -0
  604. package/pennyfarthing-dist/scripts/jira/jira-sync.sh +8 -0
  605. package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +104 -0
  606. package/pennyfarthing-dist/scripts/jira/sync-epic-to-jira.sh +16 -0
  607. package/pennyfarthing-dist/scripts/lib/README.md +29 -0
  608. package/pennyfarthing-dist/scripts/lib/background-tasks.sh +177 -0
  609. package/pennyfarthing-dist/scripts/lib/checkpoint.sh +136 -0
  610. package/pennyfarthing-dist/scripts/lib/common.sh +157 -0
  611. package/pennyfarthing-dist/scripts/lib/file-lock.sh +269 -0
  612. package/pennyfarthing-dist/scripts/lib/find-root.sh +35 -0
  613. package/pennyfarthing-dist/scripts/lib/logging.sh +186 -0
  614. package/pennyfarthing-dist/scripts/lib/retry.sh +76 -0
  615. package/pennyfarthing-dist/scripts/misc/README.md +44 -0
  616. package/pennyfarthing-dist/scripts/misc/add-short-names.mjs +264 -0
  617. package/pennyfarthing-dist/scripts/misc/backlog.sh +91 -0
  618. package/pennyfarthing-dist/scripts/misc/check-status.sh +247 -0
  619. package/pennyfarthing-dist/scripts/misc/deploy.sh +296 -0
  620. package/pennyfarthing-dist/scripts/misc/doctor-dogfood.sh +392 -0
  621. package/pennyfarthing-dist/scripts/misc/find-related-work.sh +231 -0
  622. package/pennyfarthing-dist/scripts/misc/generate-skill-docs.sh +110 -0
  623. package/pennyfarthing-dist/scripts/misc/log-skill-usage.sh +74 -0
  624. package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.mjs +474 -0
  625. package/pennyfarthing-dist/scripts/misc/migrate-bmad-workflow.sh +9 -0
  626. package/pennyfarthing-dist/scripts/misc/repo-scan.sh +141 -0
  627. package/pennyfarthing-dist/scripts/misc/repo-utils.sh +778 -0
  628. package/pennyfarthing-dist/scripts/misc/run-ci.sh +219 -0
  629. package/pennyfarthing-dist/scripts/misc/run-timestamp.sh +7 -0
  630. package/pennyfarthing-dist/scripts/misc/session-cleanup.sh +319 -0
  631. package/pennyfarthing-dist/scripts/misc/skill-usage-report.sh +193 -0
  632. package/pennyfarthing-dist/scripts/misc/statusline.sh +252 -0
  633. package/pennyfarthing-dist/scripts/misc/uninstall.sh +270 -0
  634. package/pennyfarthing-dist/scripts/misc/validate-subagent-frontmatter.sh +160 -0
  635. package/pennyfarthing-dist/scripts/sprint/README.md +29 -0
  636. package/pennyfarthing-dist/scripts/sprint/archive-story.sh +135 -0
  637. package/pennyfarthing-dist/scripts/sprint/available-stories.sh +97 -0
  638. package/pennyfarthing-dist/scripts/sprint/check-story.sh +164 -0
  639. package/pennyfarthing-dist/scripts/sprint/get-epic-field.sh +58 -0
  640. package/pennyfarthing-dist/scripts/sprint/get-story-field.sh +69 -0
  641. package/pennyfarthing-dist/scripts/sprint/import-epic-to-future.mjs +377 -0
  642. package/pennyfarthing-dist/scripts/sprint/import-epic-to-future.sh +9 -0
  643. package/pennyfarthing-dist/scripts/sprint/list-future.sh +151 -0
  644. package/pennyfarthing-dist/scripts/sprint/new-sprint.sh +116 -0
  645. package/pennyfarthing-dist/scripts/sprint/promote-epic.sh +164 -0
  646. package/pennyfarthing-dist/scripts/sprint/sprint-common.sh +421 -0
  647. package/pennyfarthing-dist/scripts/sprint/sprint-info.sh +39 -0
  648. package/pennyfarthing-dist/scripts/sprint/sprint-metrics.sh +241 -0
  649. package/pennyfarthing-dist/scripts/sprint/sprint-status.sh +134 -0
  650. package/pennyfarthing-dist/scripts/story/README.md +23 -0
  651. package/pennyfarthing-dist/scripts/story/create-story.sh +159 -0
  652. package/pennyfarthing-dist/scripts/story/size-story.sh +198 -0
  653. package/pennyfarthing-dist/scripts/story/story-template.sh +162 -0
  654. package/pennyfarthing-dist/scripts/test/README.md +23 -0
  655. package/pennyfarthing-dist/scripts/test/ground-truth-judge.py +289 -0
  656. package/pennyfarthing-dist/scripts/test/swebench-judge.py +400 -0
  657. package/pennyfarthing-dist/scripts/test/test-cache.sh +165 -0
  658. package/pennyfarthing-dist/scripts/test/test-setup.sh +337 -0
  659. package/pennyfarthing-dist/scripts/tests/check.test.sh +582 -0
  660. package/pennyfarthing-dist/scripts/tests/dev-story-workflow-import.test.sh +515 -0
  661. package/pennyfarthing-dist/scripts/tests/epics-and-stories-workflow-import.test.sh +599 -0
  662. package/pennyfarthing-dist/scripts/tests/handoff-phase-update.test.sh +332 -0
  663. package/pennyfarthing-dist/scripts/tests/implementation-readiness-workflow-import.test.sh +573 -0
  664. package/pennyfarthing-dist/scripts/tests/migrate-bmad-workflow.test.sh +859 -0
  665. package/pennyfarthing-dist/scripts/tests/prd-workflow-import.test.sh +662 -0
  666. package/pennyfarthing-dist/scripts/tests/project-context-workflow-import.test.sh +589 -0
  667. package/pennyfarthing-dist/scripts/tests/test-character-voice.sh +105 -0
  668. package/pennyfarthing-dist/scripts/tests/test-drift-detection.sh +597 -0
  669. package/pennyfarthing-dist/scripts/tests/test-post-merge-hook.sh +514 -0
  670. package/pennyfarthing-dist/scripts/tests/test-session-checkpoint.sh +517 -0
  671. package/pennyfarthing-dist/scripts/tests/test-solo-command.sh +331 -0
  672. package/pennyfarthing-dist/scripts/tests/ux-design-workflow-import.test.sh +647 -0
  673. package/pennyfarthing-dist/scripts/theme/README.md +22 -0
  674. package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.js +492 -0
  675. package/pennyfarthing-dist/scripts/theme/compute-theme-tiers.sh +11 -0
  676. package/pennyfarthing-dist/scripts/theme/list-themes.sh +73 -0
  677. package/pennyfarthing-dist/scripts/theme/update-theme-tiers.sh +97 -0
  678. package/pennyfarthing-dist/scripts/workflow/README.md +28 -0
  679. package/pennyfarthing-dist/scripts/workflow/check.sh +497 -0
  680. package/pennyfarthing-dist/scripts/workflow/finish-story.sh +159 -0
  681. package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +228 -0
  682. package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +124 -0
  683. package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +40 -0
  684. package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +163 -0
  685. package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +138 -0
  686. package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +256 -0
  687. package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +167 -0
  688. package/pennyfarthing-dist/skills/agentic-patterns/SKILL.md +242 -0
  689. package/pennyfarthing-dist/skills/changelog/SKILL.md +367 -0
  690. package/pennyfarthing-dist/skills/code-review/SKILL.md +168 -0
  691. package/pennyfarthing-dist/skills/context-engineering/SKILL.md +274 -0
  692. package/pennyfarthing-dist/skills/cyclist/SKILL.md +88 -0
  693. package/pennyfarthing-dist/skills/dev-patterns/SKILL.md +437 -0
  694. package/pennyfarthing-dist/skills/finalize-run/SKILL.md +258 -0
  695. package/pennyfarthing-dist/skills/jira/SKILL.md +484 -0
  696. package/pennyfarthing-dist/skills/judge/SKILL.md +579 -0
  697. package/pennyfarthing-dist/skills/just/SKILL.md +403 -0
  698. package/pennyfarthing-dist/skills/mermaid/SKILL.md +240 -0
  699. package/pennyfarthing-dist/skills/otel/skill.md +223 -0
  700. package/pennyfarthing-dist/skills/permissions/skill.md +172 -0
  701. package/pennyfarthing-dist/skills/persona-benchmark/SKILL.md +178 -0
  702. package/pennyfarthing-dist/skills/skill-registry.schema.json +107 -0
  703. package/pennyfarthing-dist/skills/skill-registry.yaml +357 -0
  704. package/pennyfarthing-dist/skills/sprint/scripts/archive-story.sh +101 -0
  705. package/pennyfarthing-dist/skills/sprint/scripts/available-stories.sh +97 -0
  706. package/pennyfarthing-dist/skills/sprint/scripts/check-story.sh +164 -0
  707. package/pennyfarthing-dist/skills/sprint/scripts/create-jira-epic.sh +101 -0
  708. package/pennyfarthing-dist/skills/sprint/scripts/new-sprint.sh +116 -0
  709. package/pennyfarthing-dist/skills/sprint/scripts/promote-epic.sh +164 -0
  710. package/pennyfarthing-dist/skills/sprint/scripts/sprint-info.sh +39 -0
  711. package/pennyfarthing-dist/skills/sprint/scripts/sprint-status.sh +147 -0
  712. package/pennyfarthing-dist/skills/sprint/scripts/sync-epic-jira.sh +104 -0
  713. package/pennyfarthing-dist/skills/sprint/skill.md +465 -0
  714. package/pennyfarthing-dist/skills/story/scripts/create-story.sh +159 -0
  715. package/pennyfarthing-dist/skills/story/scripts/size-story.sh +198 -0
  716. package/pennyfarthing-dist/skills/story/scripts/story-template.sh +162 -0
  717. package/pennyfarthing-dist/skills/story/skill.md +219 -0
  718. package/pennyfarthing-dist/skills/systematic-debugging/SKILL.md +390 -0
  719. package/pennyfarthing-dist/skills/testing/SKILL.md +99 -0
  720. package/pennyfarthing-dist/skills/testing/references/troubleshooting.md +124 -0
  721. package/pennyfarthing-dist/skills/theme/skill.md +129 -0
  722. package/pennyfarthing-dist/skills/theme-creation/SKILL.md +174 -0
  723. package/pennyfarthing-dist/skills/workflow/scripts/list-workflows.sh +91 -0
  724. package/pennyfarthing-dist/skills/workflow/scripts/resume-workflow.sh +163 -0
  725. package/pennyfarthing-dist/skills/workflow/scripts/show-workflow.sh +138 -0
  726. package/pennyfarthing-dist/skills/workflow/scripts/start-workflow.sh +273 -0
  727. package/pennyfarthing-dist/skills/workflow/scripts/workflow-status.sh +167 -0
  728. package/pennyfarthing-dist/skills/workflow/skill.md +337 -0
  729. package/pennyfarthing-dist/skills/yq/SKILL.md +264 -0
  730. package/pennyfarthing-dist/templates/LEADERBOARD.schema.yaml +187 -0
  731. package/pennyfarthing-dist/templates/LEADERBOARD.template.md +59 -0
  732. package/pennyfarthing-dist/templates/agent-scopes.yaml.template +276 -0
  733. package/pennyfarthing-dist/templates/pennyfarthing-settings.yaml.template +61 -0
  734. package/pennyfarthing-dist/templates/persona-config.yaml.template +22 -0
  735. package/pennyfarthing-dist/templates/preferences.yaml.template +15 -0
  736. package/pennyfarthing-dist/templates/settings.local.json.template +90 -0
  737. package/pennyfarthing-dist/templates/setup-env.sh.template +18 -0
  738. package/pennyfarthing-dist/templates/shared-context.md.template +70 -0
  739. package/pennyfarthing-dist/templates/sidecar/decisions.md.template +40 -0
  740. package/pennyfarthing-dist/templates/sidecar/gotchas.md.template +37 -0
  741. package/pennyfarthing-dist/templates/sidecar/patterns.md.template +34 -0
  742. package/pennyfarthing-dist/workflows/agent-docs.yaml +70 -0
  743. package/pennyfarthing-dist/workflows/architecture/steps/step-01-initialize.md +101 -0
  744. package/pennyfarthing-dist/workflows/architecture/steps/step-01b-continue.md +93 -0
  745. package/pennyfarthing-dist/workflows/architecture/steps/step-02-context.md +115 -0
  746. package/pennyfarthing-dist/workflows/architecture/steps/step-03-patterns.md +133 -0
  747. package/pennyfarthing-dist/workflows/architecture/steps/step-04-components.md +138 -0
  748. package/pennyfarthing-dist/workflows/architecture/steps/step-05-interfaces.md +133 -0
  749. package/pennyfarthing-dist/workflows/architecture/steps/step-06-risks.md +142 -0
  750. package/pennyfarthing-dist/workflows/architecture/steps/step-07-document.md +160 -0
  751. package/pennyfarthing-dist/workflows/architecture/templates/architecture-decision.md +102 -0
  752. package/pennyfarthing-dist/workflows/architecture.yaml +65 -0
  753. package/pennyfarthing-dist/workflows/bdd.yaml +60 -0
  754. package/pennyfarthing-dist/workflows/brainstorming/brain-methods.csv +62 -0
  755. package/pennyfarthing-dist/workflows/brainstorming/checklist.md +44 -0
  756. package/pennyfarthing-dist/workflows/brainstorming/instructions.md +736 -0
  757. package/pennyfarthing-dist/workflows/brainstorming/workflow.yaml +49 -0
  758. package/pennyfarthing-dist/workflows/code-review/checklist.md +23 -0
  759. package/pennyfarthing-dist/workflows/code-review/instructions.md +234 -0
  760. package/pennyfarthing-dist/workflows/code-review/workflow.yaml +51 -0
  761. package/pennyfarthing-dist/workflows/dev-story/checklist.md +80 -0
  762. package/pennyfarthing-dist/workflows/dev-story/instructions.xml +410 -0
  763. package/pennyfarthing-dist/workflows/dev-story/workflow.yaml +50 -0
  764. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-01-validate-prerequisites.md +256 -0
  765. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-02-design-epics.md +233 -0
  766. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-03-create-stories.md +272 -0
  767. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-04-final-validation.md +153 -0
  768. package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +122 -0
  769. package/pennyfarthing-dist/workflows/epics-and-stories/templates/epics-template.md +57 -0
  770. package/pennyfarthing-dist/workflows/epics-and-stories/workflow.yaml +28 -0
  771. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-01-document-discovery.md +190 -0
  772. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-02-prd-analysis.md +178 -0
  773. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
  774. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-04-ux-alignment.md +139 -0
  775. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
  776. package/pennyfarthing-dist/workflows/implementation-readiness/steps/step-06-final-assessment.md +133 -0
  777. package/pennyfarthing-dist/workflows/implementation-readiness/templates/readiness-report-template.md +4 -0
  778. package/pennyfarthing-dist/workflows/implementation-readiness/workflow.yaml +40 -0
  779. package/pennyfarthing-dist/workflows/prd/data/domain-complexity.csv +13 -0
  780. package/pennyfarthing-dist/workflows/prd/data/prd-purpose.md +197 -0
  781. package/pennyfarthing-dist/workflows/prd/data/project-types.csv +11 -0
  782. package/pennyfarthing-dist/workflows/prd/steps-c/step-01-init.md +191 -0
  783. package/pennyfarthing-dist/workflows/prd/steps-c/step-01b-continue.md +153 -0
  784. package/pennyfarthing-dist/workflows/prd/steps-c/step-02-discovery.md +224 -0
  785. package/pennyfarthing-dist/workflows/prd/steps-c/step-03-success.md +226 -0
  786. package/pennyfarthing-dist/workflows/prd/steps-c/step-04-journeys.md +213 -0
  787. package/pennyfarthing-dist/workflows/prd/steps-c/step-05-domain.md +207 -0
  788. package/pennyfarthing-dist/workflows/prd/steps-c/step-06-innovation.md +226 -0
  789. package/pennyfarthing-dist/workflows/prd/steps-c/step-07-project-type.md +237 -0
  790. package/pennyfarthing-dist/workflows/prd/steps-c/step-08-scoping.md +228 -0
  791. package/pennyfarthing-dist/workflows/prd/steps-c/step-09-functional.md +231 -0
  792. package/pennyfarthing-dist/workflows/prd/steps-c/step-10-nonfunctional.md +242 -0
  793. package/pennyfarthing-dist/workflows/prd/steps-c/step-11-polish.md +217 -0
  794. package/pennyfarthing-dist/workflows/prd/steps-c/step-12-complete.md +180 -0
  795. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01-discovery.md +247 -0
  796. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  797. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-02-review.md +249 -0
  798. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-03-edit.md +253 -0
  799. package/pennyfarthing-dist/workflows/prd/steps-e/step-e-04-complete.md +168 -0
  800. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-01-discovery.md +218 -0
  801. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02-format-detection.md +191 -0
  802. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-02b-parity-check.md +209 -0
  803. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-03-density-validation.md +174 -0
  804. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  805. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-05-measurability-validation.md +228 -0
  806. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-06-traceability-validation.md +217 -0
  807. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  808. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  809. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-09-project-type-validation.md +263 -0
  810. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-10-smart-validation.md +209 -0
  811. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  812. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-12-completeness-validation.md +242 -0
  813. package/pennyfarthing-dist/workflows/prd/steps-v/step-v-13-report-complete.md +232 -0
  814. package/pennyfarthing-dist/workflows/prd/templates/prd-template.md +10 -0
  815. package/pennyfarthing-dist/workflows/prd/workflow.yaml +42 -0
  816. package/pennyfarthing-dist/workflows/product-brief/steps/step-01-init.md +177 -0
  817. package/pennyfarthing-dist/workflows/product-brief/steps/step-01b-continue.md +161 -0
  818. package/pennyfarthing-dist/workflows/product-brief/steps/step-02-vision.md +199 -0
  819. package/pennyfarthing-dist/workflows/product-brief/steps/step-03-users.md +202 -0
  820. package/pennyfarthing-dist/workflows/product-brief/steps/step-04-metrics.md +205 -0
  821. package/pennyfarthing-dist/workflows/product-brief/steps/step-05-scope.md +219 -0
  822. package/pennyfarthing-dist/workflows/product-brief/steps/step-06-complete.md +194 -0
  823. package/pennyfarthing-dist/workflows/product-brief/templates/product-brief.template.md +10 -0
  824. package/pennyfarthing-dist/workflows/product-brief/workflow.yaml +31 -0
  825. package/pennyfarthing-dist/workflows/project-context/project-context-template.md +21 -0
  826. package/pennyfarthing-dist/workflows/project-context/steps/step-01-discover.md +184 -0
  827. package/pennyfarthing-dist/workflows/project-context/steps/step-02-generate.md +318 -0
  828. package/pennyfarthing-dist/workflows/project-context/steps/step-03-complete.md +278 -0
  829. package/pennyfarthing-dist/workflows/project-context/workflow.yaml +27 -0
  830. package/pennyfarthing-dist/workflows/quick-dev/steps/step-01-mode-detection.md +156 -0
  831. package/pennyfarthing-dist/workflows/quick-dev/steps/step-02-context-gathering.md +120 -0
  832. package/pennyfarthing-dist/workflows/quick-dev/steps/step-03-execute.md +113 -0
  833. package/pennyfarthing-dist/workflows/quick-dev/steps/step-04-self-check.md +113 -0
  834. package/pennyfarthing-dist/workflows/quick-dev/steps/step-05-adversarial-review.md +106 -0
  835. package/pennyfarthing-dist/workflows/quick-dev/steps/step-06-resolve-findings.md +140 -0
  836. package/pennyfarthing-dist/workflows/quick-dev/workflow.yaml +27 -0
  837. package/pennyfarthing-dist/workflows/quick-spec/steps/step-01-understand.md +189 -0
  838. package/pennyfarthing-dist/workflows/quick-spec/steps/step-02-investigate.md +144 -0
  839. package/pennyfarthing-dist/workflows/quick-spec/steps/step-03-generate.md +128 -0
  840. package/pennyfarthing-dist/workflows/quick-spec/steps/step-04-review.md +191 -0
  841. package/pennyfarthing-dist/workflows/quick-spec/tech-spec-template.md +74 -0
  842. package/pennyfarthing-dist/workflows/quick-spec/workflow.yaml +27 -0
  843. package/pennyfarthing-dist/workflows/research/steps-domain/step-01-init.md +137 -0
  844. package/pennyfarthing-dist/workflows/research/steps-domain/step-02-domain-analysis.md +229 -0
  845. package/pennyfarthing-dist/workflows/research/steps-domain/step-03-competitive-landscape.md +238 -0
  846. package/pennyfarthing-dist/workflows/research/steps-domain/step-04-regulatory-focus.md +206 -0
  847. package/pennyfarthing-dist/workflows/research/steps-domain/step-05-technical-trends.md +234 -0
  848. package/pennyfarthing-dist/workflows/research/steps-domain/step-06-research-synthesis.md +443 -0
  849. package/pennyfarthing-dist/workflows/research/steps-market/step-01-init.md +182 -0
  850. package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-behavior.md +237 -0
  851. package/pennyfarthing-dist/workflows/research/steps-market/step-02-customer-insights.md +200 -0
  852. package/pennyfarthing-dist/workflows/research/steps-market/step-03-customer-pain-points.md +249 -0
  853. package/pennyfarthing-dist/workflows/research/steps-market/step-04-customer-decisions.md +259 -0
  854. package/pennyfarthing-dist/workflows/research/steps-market/step-05-competitive-analysis.md +177 -0
  855. package/pennyfarthing-dist/workflows/research/steps-market/step-06-research-completion.md +475 -0
  856. package/pennyfarthing-dist/workflows/research/steps-technical/step-01-init.md +137 -0
  857. package/pennyfarthing-dist/workflows/research/steps-technical/step-02-technical-overview.md +239 -0
  858. package/pennyfarthing-dist/workflows/research/steps-technical/step-03-integration-patterns.md +248 -0
  859. package/pennyfarthing-dist/workflows/research/steps-technical/step-04-architectural-patterns.md +202 -0
  860. package/pennyfarthing-dist/workflows/research/steps-technical/step-05-implementation-research.md +239 -0
  861. package/pennyfarthing-dist/workflows/research/steps-technical/step-06-research-synthesis.md +486 -0
  862. package/pennyfarthing-dist/workflows/research/templates/research.template.md +29 -0
  863. package/pennyfarthing-dist/workflows/research/workflow.yaml +45 -0
  864. package/pennyfarthing-dist/workflows/retrospective/checklist.md +31 -0
  865. package/pennyfarthing-dist/workflows/retrospective/instructions.md +1443 -0
  866. package/pennyfarthing-dist/workflows/retrospective/workflow.yaml +50 -0
  867. package/pennyfarthing-dist/workflows/sprint-planning/checklist.md +33 -0
  868. package/pennyfarthing-dist/workflows/sprint-planning/sprint-status-template.yaml +55 -0
  869. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-01-parse-epic-files.md +54 -0
  870. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-02-build-sprint-status.md +44 -0
  871. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-03-status-detection.md +64 -0
  872. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-04-generate-status-file.md +73 -0
  873. package/pennyfarthing-dist/workflows/sprint-planning/steps/step-05-validate-and-report.md +56 -0
  874. package/pennyfarthing-dist/workflows/sprint-planning/workflow.yaml +34 -0
  875. package/pennyfarthing-dist/workflows/tdd.yaml +50 -0
  876. package/pennyfarthing-dist/workflows/trivial.yaml +40 -0
  877. package/pennyfarthing-dist/workflows/ux-design/steps/step-01-init.md +135 -0
  878. package/pennyfarthing-dist/workflows/ux-design/steps/step-01b-continue.md +127 -0
  879. package/pennyfarthing-dist/workflows/ux-design/steps/step-02-discovery.md +190 -0
  880. package/pennyfarthing-dist/workflows/ux-design/steps/step-03-core-experience.md +216 -0
  881. package/pennyfarthing-dist/workflows/ux-design/steps/step-04-emotional-response.md +219 -0
  882. package/pennyfarthing-dist/workflows/ux-design/steps/step-05-inspiration.md +234 -0
  883. package/pennyfarthing-dist/workflows/ux-design/steps/step-06-design-system.md +252 -0
  884. package/pennyfarthing-dist/workflows/ux-design/steps/step-07-defining-experience.md +254 -0
  885. package/pennyfarthing-dist/workflows/ux-design/steps/step-08-visual-foundation.md +224 -0
  886. package/pennyfarthing-dist/workflows/ux-design/steps/step-09-design-directions.md +224 -0
  887. package/pennyfarthing-dist/workflows/ux-design/steps/step-10-user-journeys.md +241 -0
  888. package/pennyfarthing-dist/workflows/ux-design/steps/step-11-component-strategy.md +248 -0
  889. package/pennyfarthing-dist/workflows/ux-design/steps/step-12-ux-patterns.md +237 -0
  890. package/pennyfarthing-dist/workflows/ux-design/steps/step-13-responsive-accessibility.md +264 -0
  891. package/pennyfarthing-dist/workflows/ux-design/steps/step-14-complete.md +228 -0
  892. package/pennyfarthing-dist/workflows/ux-design/ux-design-template.md +13 -0
  893. package/pennyfarthing-dist/workflows/ux-design/workflow.yaml +41 -0
  894. package/dist/cli/utils/files.js +0 -179
  895. package/dist/cli/utils/manifest.js +0 -93
  896. package/dist/cli/utils/version.js +0 -70
  897. package/dist/index.js +0 -48
  898. package/dist/permissions/index.js +0 -16
  899. package/dist/scripts/job-fair-aggregator.js +0 -690
  900. package/dist/workflow/index.js +0 -31
  901. /package/{bin → packages/core/bin}/pennyfarthing.js +0 -0
@@ -0,0 +1,367 @@
1
+ ---
2
+ name: changelog
3
+ description: Maintain changelogs following Keep a Changelog format. Use when creating release notes, parsing conventional commits for changelog entries, auto-generating changelog sections from git history, or preparing CHANGELOG.md for releases.
4
+ ---
5
+
6
+ # Changelog Management Skill
7
+
8
+ ## When to Use This Skill
9
+
10
+ - Creating release notes
11
+ - Parsing conventional commits for changelog entries
12
+ - Auto-generating changelog sections from git history
13
+ - Managing semantic versioning changes
14
+ - Preparing CHANGELOG.md for releases
15
+ - Documenting breaking changes, features, and fixes
16
+
17
+ ## Overview
18
+
19
+ This skill guides changelog management using the [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) format combined with [Conventional Commits](https://www.conventionalcommits.org/). This approach ensures consistency, enables automation, and provides clear communication about changes.
20
+
21
+ **Project Reference:** Pennyfarthing uses Keep a Changelog format in `/CHANGELOG.md` with semantic versioning.
22
+
23
+ ## Keep a Changelog Format Reference
24
+
25
+ The standard structure is:
26
+
27
+ ```markdown
28
+ # Changelog
29
+
30
+ All notable changes to [Project] are documented in this file.
31
+
32
+ The format is based on [Keep a Changelog](https://keepachangelog.com/),
33
+ and this project adheres to [Semantic Versioning](https://semver.org/).
34
+
35
+ ## [Unreleased]
36
+
37
+ *No unreleased changes*
38
+
39
+ ---
40
+
41
+ ## [1.0.0] - 2024-01-15
42
+
43
+ ### Added
44
+ - New user-facing features
45
+
46
+ ### Changed
47
+ - Changes in existing functionality
48
+
49
+ ### Deprecated
50
+ - Features marked for removal
51
+
52
+ ### Removed
53
+ - Removed features
54
+
55
+ ### Fixed
56
+ - Bug fixes
57
+
58
+ ### Security
59
+ - Security vulnerability fixes
60
+
61
+ ---
62
+
63
+ ## [0.9.0] - 2024-01-10
64
+ ...
65
+ ```
66
+
67
+ ### Guidelines
68
+
69
+ 1. **One version per section** - Each release gets its own `## [version] - date` heading
70
+ 2. **Semantic versioning** - Follow MAJOR.MINOR.PATCH (e.g., 1.5.3)
71
+ 3. **ISO 8601 dates** - Format as YYYY-MM-DD
72
+ 4. **Categorized entries** - Group changes by type (Added, Changed, Fixed, etc.)
73
+ 5. **Unreleased section** - Always maintain an `[Unreleased]` section at the top for staging changes
74
+ 6. **End-user focus** - Write for developers using your project, not your own team
75
+
76
+ ### Section Hierarchy
77
+
78
+ - **Added** - New features
79
+ - **Changed** - Changes to existing functionality
80
+ - **Deprecated** - Features soon to be removed (provide migration path)
81
+ - **Removed** - Removed features (finalize deprecations)
82
+ - **Fixed** - Bug fixes
83
+ - **Security** - Vulnerability fixes with patches
84
+
85
+ ## Conventional Commits Parsing
86
+
87
+ [Conventional Commits](https://www.conventionalcommits.org/) structure commits to enable automatic changelog generation:
88
+
89
+ ```
90
+ <type>[optional scope]: <description>
91
+
92
+ [optional body]
93
+
94
+ [optional footer(s)]
95
+ ```
96
+
97
+ ### Types and Changelog Mapping
98
+
99
+ | Commit Type | Changelog Section | Example |
100
+ |-------------|-------------------|---------|
101
+ | `feat:` | Added | `feat: add user authentication` |
102
+ | `fix:` | Fixed | `fix: handle null pointer in parser` |
103
+ | `perf:` | Changed | `perf: optimize database queries` |
104
+ | `docs:` | (skip) | `docs: update README` |
105
+ | `style:` | (skip) | `style: format code` |
106
+ | `refactor:` | (skip) | `refactor: simplify module` |
107
+ | `test:` | (skip) | `test: add unit tests` |
108
+ | `chore:` | (skip) | `chore: update dependencies` |
109
+ | `ci:` | (skip) | `ci: update GitHub Actions` |
110
+
111
+ ### Breaking Changes
112
+
113
+ Mark breaking changes with `!` or `BREAKING CHANGE:` footer:
114
+
115
+ ```bash
116
+ # Using ! suffix
117
+ feat!: redesign authentication API
118
+
119
+ # Using footer
120
+ feat: change password hashing algorithm
121
+
122
+ BREAKING CHANGE: passwords now require bcrypt hashing
123
+ ```
124
+
125
+ These go into the **Changed** or **Removed** section, not Added.
126
+
127
+ ## Auto-Generation from Git Commits
128
+
129
+ ### Step 1: Get Commits Since Last Tag
130
+
131
+ ```bash
132
+ # Find the last tag
133
+ LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
134
+
135
+ # Get commits since that tag
136
+ if [ -z "$LAST_TAG" ]; then
137
+ git log --format="%H %s" | head -50
138
+ else
139
+ git log "${LAST_TAG}..HEAD" --format="%H %s"
140
+ fi
141
+ ```
142
+
143
+ ### Step 2: Parse Conventional Commits
144
+
145
+ ```bash
146
+ # Extract type and description from commits
147
+ git log "${LAST_TAG}..HEAD" --format="%s" | while read line; do
148
+ TYPE=$(echo "$line" | cut -d: -f1)
149
+ DESC=$(echo "$line" | cut -d: -f2- | sed 's/^ //')
150
+ echo "$TYPE: $DESC"
151
+ done
152
+ ```
153
+
154
+ ### Step 3: Group by Category
155
+
156
+ ```bash
157
+ # Group features
158
+ git log "${LAST_TAG}..HEAD" --format="%s" | grep "^feat" | sed 's/^feat: /- /'
159
+
160
+ # Group fixes
161
+ git log "${LAST_TAG}..HEAD" --format="%s" | grep "^fix" | sed 's/^fix: /- /'
162
+
163
+ # Group breaking changes
164
+ git log "${LAST_TAG}..HEAD" --format="%B" | grep -A1 "BREAKING CHANGE:" | tail -n +2
165
+ ```
166
+
167
+ ## Complete Auto-Generation Script
168
+
169
+ ```bash
170
+ #!/bin/bash
171
+ set -euo pipefail
172
+
173
+ LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
174
+ RANGE="${LAST_TAG:+${LAST_TAG}..HEAD}"
175
+
176
+ echo "## [Unreleased]"
177
+ echo ""
178
+
179
+ # Added (feat commits)
180
+ FEATURES=$(git log ${RANGE:---all} --format="%s" | grep "^feat:" || echo "")
181
+ if [ -n "$FEATURES" ]; then
182
+ echo "### Added"
183
+ echo "$FEATURES" | sed 's/^feat: /- /'
184
+ echo ""
185
+ fi
186
+
187
+ # Fixed (fix commits)
188
+ FIXES=$(git log ${RANGE:---all} --format="%s" | grep "^fix:" || echo "")
189
+ if [ -n "$FIXES" ]; then
190
+ echo "### Fixed"
191
+ echo "$FIXES" | sed 's/^fix: /- /'
192
+ echo ""
193
+ fi
194
+
195
+ # Breaking changes
196
+ BREAKING=$(git log ${RANGE:---all} --format="%B" | grep -A1 "BREAKING CHANGE:" | grep "^-" || echo "")
197
+ if [ -n "$BREAKING" ]; then
198
+ echo "### Changed"
199
+ echo "**Breaking Changes:**"
200
+ echo "$BREAKING"
201
+ echo ""
202
+ fi
203
+ ```
204
+
205
+ ## Version Bump Patterns
206
+
207
+ ### Semantic Versioning
208
+
209
+ ```
210
+ MAJOR.MINOR.PATCH
211
+
212
+ - MAJOR: Incompatible API changes (breaking changes)
213
+ - MINOR: Backward-compatible functionality additions
214
+ - PATCH: Backward-compatible bug fixes
215
+ ```
216
+
217
+ ### Decision Tree
218
+
219
+ ```
220
+ Breaking change detected?
221
+ ├─ Yes → MAJOR.0.0 (or X+1.0.0 from X.0.0)
222
+ └─ No
223
+ └─ feat: commits present?
224
+ ├─ Yes → X.Y+1.0 (minor version bump)
225
+ └─ No → X.Y.Z+1 (patch version bump)
226
+ ```
227
+
228
+ ### Examples
229
+
230
+ ```bash
231
+ # Current version: 1.5.0
232
+
233
+ # Patch release (bug fixes only)
234
+ 1.5.1 # fix: memory leak in parser
235
+
236
+ # Minor release (new features, backward-compatible)
237
+ 1.6.0 # feat: add config validation, feat: support ENV vars
238
+
239
+ # Major release (breaking changes)
240
+ 2.0.0 # feat!: redesign CLI API, BREAKING CHANGE: remove old flags
241
+ ```
242
+
243
+ ## Release Workflow Example
244
+
245
+ ### 1. During Development
246
+
247
+ Maintain `[Unreleased]` section in CHANGELOG.md:
248
+
249
+ ```markdown
250
+ ## [Unreleased]
251
+
252
+ ### Added
253
+ - New dark mode theme
254
+ - User preference persistence
255
+
256
+ ### Fixed
257
+ - Memory leak in event handler
258
+ - Incorrect timezone calculations
259
+ ```
260
+
261
+ ### 2. Prepare Release
262
+
263
+ ```bash
264
+ # Determine new version (inspect commits)
265
+ LAST_VERSION="1.5.0"
266
+ COMMITS=$(git log v${LAST_VERSION}..HEAD --format="%s")
267
+ echo "$COMMITS" | grep -q "^feat:" && NEW_VERSION="1.6.0" || NEW_VERSION="1.5.1"
268
+
269
+ echo "Releasing version $NEW_VERSION"
270
+ ```
271
+
272
+ ### 3. Create Release Section
273
+
274
+ ```bash
275
+ # Generate section from commits
276
+ NEW_DATE=$(date +%Y-%m-%d)
277
+
278
+ # Update CHANGELOG.md
279
+ sed -i '' "s/## \[Unreleased\]/## [Unreleased]\n\n*No unreleased changes*\n\n---\n\n## [$NEW_VERSION] - $NEW_DATE/" CHANGELOG.md
280
+ ```
281
+
282
+ ### 4. Commit and Tag
283
+
284
+ ```bash
285
+ git add CHANGELOG.md VERSION
286
+ git commit -m "chore: bump to version $NEW_VERSION"
287
+ git tag -a "v$NEW_VERSION" -m "Release $NEW_VERSION"
288
+ git push origin main --tags
289
+ ```
290
+
291
+ ## Integration with /release Command
292
+
293
+ The `/release` command in Pennyfarthing can use this skill for:
294
+
295
+ 1. **Auto-detecting new commits** - Run conventional commit analysis since last tag
296
+ 2. **Generating changelog sections** - Create properly formatted entries
297
+ 3. **Version bumping** - Semantic versioning based on commit types
298
+ 4. **Tagging** - Create annotated tags for releases
299
+
300
+ Reference in `/release` command:
301
+
302
+ ```markdown
303
+ See the [Changelog Skill](/changelog) for patterns on:
304
+ - Maintaining CHANGELOG.md
305
+ - Parsing conventional commits
306
+ - Auto-generating release notes
307
+ - Version bump decisions
308
+ ```
309
+
310
+ ## Best Practices
311
+
312
+ 1. **Commit message quality** - Enforce conventional commits in CI/CD
313
+ 2. **Review before release** - Manual changelog review catches automation gaps
314
+ 3. **One changelog file** - Single CHANGELOG.md in project root
315
+ 4. **Link to releases** - Provide direct links to tags/release pages
316
+ 5. **Backfill old changes** - If starting Keep a Changelog mid-project, document recent versions
317
+ 6. **Human-friendly descriptions** - Conventional commits are machine-parseable; enhance for humans
318
+ 7. **Changelog in PR reviews** - Ensure PR descriptions clarify what should be in changelog
319
+
320
+ ## Tools and Automation
321
+
322
+ ### Conventional Commits Linting
323
+
324
+ ```bash
325
+ # Install commitlint
326
+ npm install --save-dev @commitlint/config-conventional @commitlint/cli
327
+
328
+ # Configure .commitlintrc.js
329
+ echo "module.exports = {extends: ['@commitlint/config-conventional']}" > .commitlintrc.js
330
+
331
+ # Test a message
332
+ echo "feat: add new feature" | commitlint
333
+ ```
334
+
335
+ ### Automatic Changelog Generation
336
+
337
+ Tools that auto-generate from commits:
338
+
339
+ - **conventional-changelog** - Node.js package
340
+ - **changie** - Go-based with template support
341
+ - **git-cliff** - Rust-based with flexible templates
342
+
343
+ Example with conventional-changelog:
344
+
345
+ ```bash
346
+ npm install --save-dev conventional-changelog-cli
347
+ npx conventional-changelog -p angular -i CHANGELOG.md -s
348
+ ```
349
+
350
+ ### CI/CD Integration
351
+
352
+ ```yaml
353
+ # GitHub Actions example
354
+ - name: Generate Changelog
355
+ run: |
356
+ npx conventional-changelog -p angular -i CHANGELOG.md -s
357
+ git add CHANGELOG.md
358
+ git commit -m "docs: update CHANGELOG" || echo "No changes"
359
+ ```
360
+
361
+ ## Reference Documentation
362
+
363
+ - **Keep a Changelog:** https://keepachangelog.com/
364
+ - **Conventional Commits:** https://www.conventionalcommits.org/
365
+ - **Semantic Versioning:** https://semver.org/
366
+ - **conventional-changelog:** https://github.com/conventional-changelog/conventional-changelog
367
+ - **Pennyfarthing Release:** `/release` command
@@ -0,0 +1,168 @@
1
+ ---
2
+ name: code-review
3
+ description: Code review checklists and patterns for Pennyfarthing. Use when reviewing PRs, self-reviewing code, or checking for common issues before commit.
4
+ ---
5
+
6
+ # Code Review Skill
7
+
8
+ ## Overview
9
+
10
+ This skill provides code review patterns and checklists for the Pennyfarthing project. Use this when reviewing PRs or self-reviewing before commit.
11
+
12
+ ## Review Checklists
13
+
14
+ ### API Handler Review
15
+
16
+ - [ ] **Authorization check present** - Uses `utils.GetClientIDsForQuery()` for admin bypass
17
+ - [ ] **Input validation** - Request body and params validated
18
+ - [ ] **Error handling** - Appropriate status codes, no internal leaks
19
+ - [ ] **Response format** - Consistent with other endpoints
20
+ - [ ] **Tests** - Cover happy path + edge cases + error cases
21
+
22
+ ### UI Component Review
23
+
24
+ - [ ] **Props typed correctly** - Interface defined, no `any`
25
+ - [ ] **Loading states** - Shows spinner/skeleton while fetching
26
+ - [ ] **Error states** - Graceful error display with retry option
27
+ - [ ] **Empty states** - Meaningful message when no data
28
+ - [ ] **Accessibility** - Proper ARIA labels, keyboard navigation
29
+ - [ ] **No hardcoded strings** - Ready for i18n
30
+
31
+ ### Database Changes
32
+
33
+ - [ ] **Migration reversible** - Can roll back cleanly
34
+ - [ ] **Indexes present** - For common query patterns
35
+ - [ ] **FK constraints** - Appropriate relationships defined
36
+ - [ ] **NULL semantics** - Comments explain NULL meaning
37
+ - [ ] **Default values** - Sensible defaults for new columns
38
+
39
+ ### TypeScript/React
40
+
41
+ - [ ] **Type imports use `import type`** - Required for build
42
+ - [ ] **No unused imports** - Remove or use
43
+ - [ ] **No `any` types** - Use proper types
44
+ - [ ] **useCallback/useMemo** - For expensive operations in deps
45
+ - [ ] **Error boundaries** - Around risky components
46
+
47
+ ## Common Review Issues
48
+
49
+ ### Authorization
50
+
51
+ ```go
52
+ // BAD - blocks admins with empty ClientIDs
53
+ if len(clientIDs) == 0 {
54
+ return http.StatusForbidden
55
+ }
56
+
57
+ // GOOD - use centralized utility
58
+ clientIDs, err := utils.GetClientIDsForQuery(user, h.db)
59
+ ```
60
+
61
+ ### Error Messages
62
+
63
+ ```go
64
+ // BAD - leaks internals
65
+ http.Error(w, err.Error(), 500)
66
+
67
+ // GOOD - generic message, log details
68
+ log.Error("database error", "error", err, "user_id", user.ID)
69
+ http.Error(w, "Internal server error", 500)
70
+ ```
71
+
72
+ ### TypeScript Imports
73
+
74
+ ```typescript
75
+ // BAD - causes build errors
76
+ import { SomeType } from './types';
77
+
78
+ // GOOD
79
+ import type { SomeType } from './types';
80
+ ```
81
+
82
+ ### React Query
83
+
84
+ ```typescript
85
+ // BAD - query runs even when not ready
86
+ const { data } = useQuery({
87
+ queryKey: ['items', clientId],
88
+ queryFn: () => fetchItems(clientId),
89
+ });
90
+
91
+ // GOOD - only runs when clientId is set
92
+ const { data } = useQuery({
93
+ queryKey: ['items', clientId],
94
+ queryFn: () => fetchItems(clientId),
95
+ enabled: !!clientId,
96
+ });
97
+ ```
98
+
99
+ ## Approval Criteria
100
+
101
+ ### Must Have for Approval
102
+
103
+ 1. **Tests pass** - All CI checks green
104
+ 2. **No security issues** - Auth, input validation, no SQL injection
105
+ 3. **No breaking changes** - Or migration path provided
106
+ 4. **Code follows patterns** - Consistent with existing codebase
107
+
108
+ ### Nice to Have
109
+
110
+ 1. Documentation updated
111
+ 2. Performance considered
112
+ 3. Error messages helpful
113
+ 4. Edge cases handled
114
+
115
+ ## Security Checklist
116
+
117
+ - [ ] **No SQL injection** - Use parameterized queries
118
+ - [ ] **No XSS** - Sanitize user input in UI
119
+ - [ ] **Auth on all endpoints** - Middleware applied
120
+ - [ ] **Client isolation** - Multi-tenant data filtered
121
+ - [ ] **No secrets in code** - Use env vars or KMS
122
+ - [ ] **SSRF protection** - URL validation for external calls
123
+
124
+ ## Performance Checklist
125
+
126
+ - [ ] **N+1 queries** - Use preloading/joins
127
+ - [ ] **Pagination** - For list endpoints
128
+ - [ ] **Indexes** - For filtered/sorted columns
129
+ - [ ] **Memoization** - For expensive React renders
130
+ - [ ] **Bundle size** - No unnecessary imports
131
+
132
+ ## Review Comments Format
133
+
134
+ ### Requesting Changes
135
+
136
+ ```
137
+ **[MUST FIX]** This leaks internal error details to the client.
138
+ Suggest: Use a generic message and log the details server-side.
139
+ ```
140
+
141
+ ### Suggestions
142
+
143
+ ```
144
+ **[SUGGESTION]** Consider using `useMemo` here since this calculation
145
+ runs on every render.
146
+ ```
147
+
148
+ ### Questions
149
+
150
+ ```
151
+ **[QUESTION]** What happens if `clientId` is undefined? Should we
152
+ add an early return or enabled flag?
153
+ ```
154
+
155
+ ### Praise
156
+
157
+ ```
158
+ **[NICE]** Good use of the centralized auth utility here!
159
+ ```
160
+
161
+ ## Recent Learnings
162
+
163
+ | Date | Issue | Resolution |
164
+ |------|-------|------------|
165
+ | Dec 2024 | Admin 403 errors | Use `GetClientIDsForQuery()` |
166
+ | Dec 2024 | Type import errors | Use `import type` |
167
+ | Dec 2024 | Role-based filtering | Check analyst vs manager vs admin |
168
+ | Dec 2024 | Error boundaries | Wrap risky components |