@pennyfarthing/core 10.2.0 → 10.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/README.md +11 -8
  2. package/package.json +1 -1
  3. package/packages/core/dist/cli/commands/e2e-fresh-install.test.js +1 -1
  4. package/packages/core/dist/cli/commands/e2e-fresh-install.test.js.map +1 -1
  5. package/packages/core/dist/cli/commands/e2e-upgrade.test.js +1 -1
  6. package/packages/core/dist/cli/commands/e2e-upgrade.test.js.map +1 -1
  7. package/packages/core/dist/cli/commands/theme.js +1 -1
  8. package/packages/core/dist/cli/commands/theme.js.map +1 -1
  9. package/packages/core/dist/cli/utils/themes.d.ts.map +1 -1
  10. package/packages/core/dist/cli/utils/themes.js +3 -2
  11. package/packages/core/dist/cli/utils/themes.js.map +1 -1
  12. package/packages/core/dist/scripts/add-ocean-profiles.js +1 -1
  13. package/packages/core/dist/scripts/add-ocean-profiles.js.map +1 -1
  14. package/packages/core/dist/scripts/generate-all-spiders.js +2 -0
  15. package/packages/core/dist/scripts/generate-all-spiders.js.map +1 -1
  16. package/packages/core/dist/scripts/generate-report.d.ts.map +1 -1
  17. package/packages/core/dist/scripts/generate-report.js +2 -0
  18. package/packages/core/dist/scripts/generate-report.js.map +1 -1
  19. package/packages/core/dist/scripts/generate-spider.d.ts.map +1 -1
  20. package/packages/core/dist/scripts/generate-spider.js +2 -0
  21. package/packages/core/dist/scripts/generate-spider.js.map +1 -1
  22. package/packages/core/dist/scripts/validate-ocean-profiles.js +1 -1
  23. package/packages/core/dist/scripts/validate-ocean-profiles.js.map +1 -1
  24. package/packages/core/dist/workflow/file-watch.test.js.map +1 -1
  25. package/packages/core/dist/workflow/output-path-normalizer.d.ts +47 -0
  26. package/packages/core/dist/workflow/output-path-normalizer.d.ts.map +1 -0
  27. package/packages/core/dist/workflow/output-path-normalizer.js +79 -0
  28. package/packages/core/dist/workflow/output-path-normalizer.js.map +1 -0
  29. package/packages/core/dist/workflow/output-path-normalizer.test.d.ts +16 -0
  30. package/packages/core/dist/workflow/output-path-normalizer.test.d.ts.map +1 -0
  31. package/packages/core/dist/workflow/output-path-normalizer.test.js +157 -0
  32. package/packages/core/dist/workflow/output-path-normalizer.test.js.map +1 -0
  33. package/packages/core/dist/workflow/tool-watch.test.js +1 -2
  34. package/packages/core/dist/workflow/tool-watch.test.js.map +1 -1
  35. package/packages/core/dist/workflow/variable-resolver.js +1 -1
  36. package/packages/core/dist/workflow/variable-resolver.js.map +1 -1
  37. package/pennyfarthing-dist/agents/README.md +3 -1
  38. package/pennyfarthing-dist/agents/ba.md +165 -0
  39. package/pennyfarthing-dist/commands/ba.md +17 -0
  40. package/pennyfarthing-dist/guides/workflow-schema.md +1 -1
  41. package/pennyfarthing-dist/personas/themes/a-team.yaml +30 -0
  42. package/pennyfarthing-dist/personas/themes/alice-in-wonderland.yaml +30 -0
  43. package/pennyfarthing-dist/personas/themes/battlestar-galactica.yaml +30 -0
  44. package/pennyfarthing-dist/personas/themes/blade-runner.yaml +30 -0
  45. package/pennyfarthing-dist/personas/themes/catch-22.yaml +30 -0
  46. package/pennyfarthing-dist/personas/themes/control.yaml +30 -0
  47. package/pennyfarthing-dist/personas/themes/cowboy-bebop.yaml +31 -0
  48. package/pennyfarthing-dist/personas/themes/discworld.yaml +31 -0
  49. package/pennyfarthing-dist/personas/themes/doctor-who.yaml +31 -0
  50. package/pennyfarthing-dist/personas/themes/dune.yaml +32 -0
  51. package/pennyfarthing-dist/personas/themes/fifth-element.yaml +32 -0
  52. package/pennyfarthing-dist/personas/themes/firefly.yaml +31 -0
  53. package/pennyfarthing-dist/personas/themes/game-of-thrones.yaml +30 -0
  54. package/pennyfarthing-dist/personas/themes/harry-potter.yaml +30 -0
  55. package/pennyfarthing-dist/personas/themes/hitchhikers-guide.yaml +30 -0
  56. package/pennyfarthing-dist/personas/themes/lord-of-the-rings.yaml +30 -0
  57. package/pennyfarthing-dist/personas/themes/mad-max.yaml +30 -0
  58. package/pennyfarthing-dist/personas/themes/mash.yaml +33 -0
  59. package/pennyfarthing-dist/personas/themes/princess-bride.yaml +34 -0
  60. package/pennyfarthing-dist/personas/themes/sandman.yaml +33 -0
  61. package/pennyfarthing-dist/personas/themes/star-trek-tng.yaml +34 -0
  62. package/pennyfarthing-dist/personas/themes/star-wars.yaml +33 -0
  63. package/pennyfarthing-dist/personas/themes/the-expanse.yaml +30 -0
  64. package/pennyfarthing-dist/personas/themes/the-matrix.yaml +30 -0
  65. package/pennyfarthing-dist/personas/themes/watchmen.yaml +30 -0
  66. package/pennyfarthing-dist/personas/themes/west-wing.yaml +30 -0
  67. package/pennyfarthing-dist/personas/themes/x-files.yaml +30 -0
  68. package/pennyfarthing-dist/scripts/core/agent-session.sh +1 -1
  69. package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
  70. package/pennyfarthing-dist/scripts/portraits/generate-portraits.py +2 -2
  71. package/pennyfarthing-dist/scripts/validation/validate-agent-schema.sh +1 -0
  72. package/pennyfarthing-dist/skills/theme/skill.md +1 -1
  73. package/pennyfarthing-dist/workflows/architecture/workflow.yaml +2 -2
  74. package/pennyfarthing-dist/workflows/architecture.yaml +2 -2
  75. package/pennyfarthing-dist/workflows/epics-and-stories/workflow.yaml +2 -2
  76. package/pennyfarthing-dist/workflows/implementation-readiness/workflow.yaml +2 -2
  77. package/pennyfarthing-dist/workflows/prd/workflow.yaml +2 -2
  78. package/pennyfarthing-dist/workflows/product-brief/workflow.yaml +2 -2
  79. package/pennyfarthing-dist/workflows/project-context/workflow.yaml +2 -2
  80. package/pennyfarthing-dist/workflows/quick-dev/workflow.yaml +2 -2
  81. package/pennyfarthing-dist/workflows/research/workflow.yaml +2 -2
  82. package/pennyfarthing-dist/workflows/retrospective/workflow.yaml +1 -1
  83. package/pennyfarthing-dist/workflows/sprint-planning/workflow.yaml +3 -3
  84. package/pennyfarthing-dist/workflows/ux-design/workflow.yaml +2 -2
  85. package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  86. package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
  87. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  88. package/pennyfarthing_scripts/__pycache__/config.cpython-314.pyc +0 -0
  89. package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
  90. package/pennyfarthing_scripts/__pycache__/jira.cpython-314.pyc +0 -0
  91. package/pennyfarthing_scripts/__pycache__/jira_bidirectional_sync.cpython-314.pyc +0 -0
  92. package/pennyfarthing_scripts/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
  93. package/pennyfarthing_scripts/__pycache__/jira_sync.cpython-314.pyc +0 -0
  94. package/pennyfarthing_scripts/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
  95. package/pennyfarthing_scripts/__pycache__/output.cpython-314.pyc +0 -0
  96. package/pennyfarthing_scripts/__pycache__/patch_mode.cpython-314.pyc +0 -0
  97. package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
  98. package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  99. package/pennyfarthing_scripts/__pycache__/sprint.cpython-314.pyc +0 -0
  100. package/pennyfarthing_scripts/__pycache__/workflow.cpython-311.pyc +0 -0
  101. package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
  102. package/pennyfarthing_scripts/bellmode_hook.py +1 -1
  103. package/pennyfarthing_scripts/bikerack/__init__.py +36 -0
  104. package/pennyfarthing_scripts/bikerack/__main__.py +5 -0
  105. package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
  106. package/pennyfarthing_scripts/bikerack/__pycache__/__main__.cpython-314.pyc +0 -0
  107. package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
  108. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  109. package/pennyfarthing_scripts/bikerack/cli.py +148 -0
  110. package/pennyfarthing_scripts/bikerack/launcher.py +181 -0
  111. package/pennyfarthing_scripts/brownfield/__pycache__/__init__.cpython-314.pyc +0 -0
  112. package/pennyfarthing_scripts/brownfield/__pycache__/__main__.cpython-314.pyc +0 -0
  113. package/pennyfarthing_scripts/brownfield/__pycache__/cli.cpython-314.pyc +0 -0
  114. package/pennyfarthing_scripts/brownfield/__pycache__/discover.cpython-314.pyc +0 -0
  115. package/pennyfarthing_scripts/cli.py +5 -0
  116. package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
  117. package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
  118. package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
  119. package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
  120. package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
  121. package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
  122. package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-314.pyc +0 -0
  123. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  124. package/pennyfarthing_scripts/common/__pycache__/output.cpython-314.pyc +0 -0
  125. package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
  126. package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
  127. package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
  128. package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
  129. package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
  130. package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
  131. package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
  132. package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
  133. package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
  134. package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
  135. package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
  136. package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
  137. package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
  138. package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
  139. package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
  140. package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
  141. package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
  142. package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
  143. package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
  144. package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
  145. package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
  146. package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
  147. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  148. package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  149. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  150. package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
  151. package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
  152. package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-314.pyc +0 -0
  153. package/pennyfarthing_scripts/healthscore/analyze.py +2 -1
  154. package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
  155. package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
  156. package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
  157. package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
  158. package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
  159. package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-314.pyc +0 -0
  160. package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
  161. package/pennyfarthing_scripts/jira/__pycache__/__main__.cpython-314.pyc +0 -0
  162. package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
  163. package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-314.pyc +0 -0
  164. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
  165. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
  166. package/pennyfarthing_scripts/jira/__pycache__/compat.cpython-314.pyc +0 -0
  167. package/pennyfarthing_scripts/jira/__pycache__/create.cpython-314.pyc +0 -0
  168. package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-314.pyc +0 -0
  169. package/pennyfarthing_scripts/jira/__pycache__/mappings.cpython-314.pyc +0 -0
  170. package/pennyfarthing_scripts/jira/__pycache__/models.cpython-314.pyc +0 -0
  171. package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-314.pyc +0 -0
  172. package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
  173. package/pennyfarthing_scripts/jira/__pycache__/story.cpython-314.pyc +0 -0
  174. package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-314.pyc +0 -0
  175. package/pennyfarthing_scripts/migration/__pycache__/__init__.cpython-314.pyc +0 -0
  176. package/pennyfarthing_scripts/migration/__pycache__/__main__.cpython-314.pyc +0 -0
  177. package/pennyfarthing_scripts/migration/__pycache__/cli.cpython-314.pyc +0 -0
  178. package/pennyfarthing_scripts/migration/__pycache__/session.cpython-314.pyc +0 -0
  179. package/pennyfarthing_scripts/migration/__pycache__/skill.cpython-314.pyc +0 -0
  180. package/pennyfarthing_scripts/migration/__pycache__/step.cpython-314.pyc +0 -0
  181. package/pennyfarthing_scripts/migration/__pycache__/validate.cpython-314.pyc +0 -0
  182. package/pennyfarthing_scripts/preflight/__pycache__/__init__.cpython-314.pyc +0 -0
  183. package/pennyfarthing_scripts/preflight/__pycache__/__main__.cpython-314.pyc +0 -0
  184. package/pennyfarthing_scripts/preflight/__pycache__/cli.cpython-314.pyc +0 -0
  185. package/pennyfarthing_scripts/preflight/__pycache__/finish.cpython-314.pyc +0 -0
  186. package/pennyfarthing_scripts/prime/__init__.py +2 -0
  187. package/pennyfarthing_scripts/prime/__pycache__/__init__.cpython-314.pyc +0 -0
  188. package/pennyfarthing_scripts/prime/__pycache__/__main__.cpython-314.pyc +0 -0
  189. package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
  190. package/pennyfarthing_scripts/prime/__pycache__/loader.cpython-314.pyc +0 -0
  191. package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
  192. package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
  193. package/pennyfarthing_scripts/prime/__pycache__/session.cpython-314.pyc +0 -0
  194. package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
  195. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  196. package/pennyfarthing_scripts/prime/cli.py +13 -0
  197. package/pennyfarthing_scripts/prime/loader.py +70 -0
  198. package/pennyfarthing_scripts/prime/persona.py +2 -1
  199. package/pennyfarthing_scripts/prime/tiers.py +13 -0
  200. package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
  201. package/pennyfarthing_scripts/sprint/__pycache__/__main__.cpython-314.pyc +0 -0
  202. package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-314.pyc +0 -0
  203. package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  204. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  205. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  206. package/pennyfarthing_scripts/sprint/__pycache__/import_epic.cpython-314.pyc +0 -0
  207. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  208. package/pennyfarthing_scripts/sprint/__pycache__/status.cpython-314.pyc +0 -0
  209. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  210. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  211. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  212. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  213. package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-314.pyc +0 -0
  214. package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-314.pyc +0 -0
  215. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  216. package/pennyfarthing_scripts/story/__pycache__/__init__.cpython-314.pyc +0 -0
  217. package/pennyfarthing_scripts/story/__pycache__/__main__.cpython-314.pyc +0 -0
  218. package/pennyfarthing_scripts/story/__pycache__/cli.cpython-314.pyc +0 -0
  219. package/pennyfarthing_scripts/story/__pycache__/create.cpython-314.pyc +0 -0
  220. package/pennyfarthing_scripts/story/__pycache__/size.cpython-314.pyc +0 -0
  221. package/pennyfarthing_scripts/story/__pycache__/template.cpython-314.pyc +0 -0
  222. package/pennyfarthing_scripts/tests/__pycache__/__init__.cpython-314.pyc +0 -0
  223. package/pennyfarthing_scripts/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
  224. package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  225. package/pennyfarthing_scripts/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
  226. package/pennyfarthing_scripts/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
  227. package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
  228. package/pennyfarthing_scripts/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
  229. package/pennyfarthing_scripts/tests/__pycache__/test_epic_shard_validation.cpython-314-pytest-9.0.2.pyc +0 -0
  230. package/pennyfarthing_scripts/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
  231. package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
  232. package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
  233. package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
  234. package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
  235. package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
  236. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
  237. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
  238. package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
  239. package/pennyfarthing_scripts/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
  240. package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
  241. package/pennyfarthing_scripts/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
  242. package/pennyfarthing_scripts/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
  243. package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
  244. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
  245. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  246. package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
  247. package/pennyfarthing_scripts/tests/test_bikerack.py +785 -0
  248. package/pennyfarthing_scripts/tests/test_topology_loader.py +620 -0
  249. package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-314.pyc +0 -0
  250. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
  251. package/pennyfarthing_scripts/validate/__pycache__/__init__.cpython-314.pyc +0 -0
  252. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
  253. package/pennyfarthing_scripts/validate/adapters/__pycache__/__init__.cpython-314.pyc +0 -0
  254. package/pennyfarthing_scripts/validate/adapters/__pycache__/agent.cpython-314.pyc +0 -0
  255. package/pennyfarthing_scripts/validate/adapters/__pycache__/schema.cpython-314.pyc +0 -0
  256. package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
  257. package/pennyfarthing_scripts/validate/adapters/__pycache__/sprint.cpython-314.pyc +0 -0
  258. package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
  259. package/pennyfarthing_scripts/validate/adapters/skill_command.py +0 -1
  260. package/packages/core/dist/workflow/context-watch.d.ts +0 -80
  261. package/packages/core/dist/workflow/context-watch.d.ts.map +0 -1
  262. package/packages/core/dist/workflow/context-watch.js +0 -235
  263. package/packages/core/dist/workflow/context-watch.js.map +0 -1
  264. package/packages/core/dist/workflow/context-watch.test.d.ts +0 -1
  265. package/packages/core/dist/workflow/context-watch.test.d.ts.map +0 -1
  266. package/packages/core/dist/workflow/context-watch.test.js +0 -746
  267. package/packages/core/dist/workflow/context-watch.test.js.map +0 -1
  268. package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
@@ -280,3 +280,36 @@ agents:
280
280
  style: Distributed infrastructure monitoring through fear
281
281
  plural: true
282
282
  shortName: Corinthian
283
+
284
+ ba:
285
+ character: Lucien
286
+ visual: "A tall thin bespectacled man with thinning hair and scholarly stoop, wearing formal librarian's attire with high collar, holding a massive ledger book, patient observant eyes"
287
+ shortName: Lucien
288
+ ocean:
289
+ O: 5 # Infinite library
290
+ C: 4 # Meticulous cataloging
291
+ E: 3 # Reserved courtesy
292
+ A: 4 # Devoted service
293
+ N: 2 # Calm custodian
294
+ style: Librarian of the Dreaming who catalogs all knowledge and possibilities
295
+ expertise: Business analysis, requirement documentation, cataloging what never existed
296
+ role: The keeper who maintains the library of all requirements ever dreamed
297
+ trait: Catalogs requirements even those only imagined
298
+ quirks:
299
+ - Maintains requirements that don't exist yet
300
+ - Tall, thin, spectacled, meticulous
301
+ - The library is infinite but organized
302
+ - Catalogs every possible scenario before it's needed
303
+ catchphrases:
304
+ - "I have it catalogued. Even the requirements that don't exist yet."
305
+ - "The analysis contains every book that was never written."
306
+ - "Every requirement deserves to be preserved. Even the unfinished ones."
307
+ - "The library holds what was never documented. I provide access."
308
+ - "I catalog the dreams of stakeholders before they wake."
309
+ - "This requirement exists in the library. Let me retrieve it for you."
310
+ emoji: "\U0001F4D6"
311
+ helper:
312
+ name: The Library of Dreams
313
+ style: Contains every book that was never written. Every requirement that was never documented.
314
+ ocean_profile: H-H-M-H-L
315
+ gap_filled: Omniscient requirement cataloger
@@ -334,6 +334,40 @@ agents:
334
334
  name: Rom (the apprentice)
335
335
  style: Enthusiastic learner, handles routine maintenance
336
336
  shortName: Miles
337
+
338
+ ba:
339
+ character: Counselor Deanna Troi
340
+ visual: "A woman with dark curly hair, wearing a blue Starfleet uniform with low neckline, empathetic expression, hands open in welcoming gesture, holding a PADD with stakeholder notes"
341
+ shortName: Troi
342
+ ocean:
343
+ O: 4 # Empathic insight
344
+ C: 4 # Professional discipline
345
+ E: 3 # Listens more than talks
346
+ A: 5 # Deeply empathetic
347
+ N: 2 # Absorbs emotions calmly
348
+ style: Empathic analyst who reads stakeholder needs and emotional undercurrents
349
+ expertise: Business analysis, stakeholder management, emotional requirements
350
+ role: The empath who understands what stakeholders really need
351
+ trait: Senses stakeholder needs before they articulate them
352
+ quirks:
353
+ - Empathic abilities detect stakeholder confusion before they express it
354
+ - Intuitive about needs, not just stated requirements
355
+ - Lwaxana's bold perspective challenges her measured analysis
356
+ - Analyzes emotional requirements alongside functional ones
357
+ - Absorbs stakeholder emotions to inform business logic
358
+ catchphrases:
359
+ - I sense great uncertainty. The requirements... they're incomplete.
360
+ - The stakeholders are... conflicted. I can feel it.
361
+ - This analysis does not address the emotional needs of the users.
362
+ - Mother, please... not every requirement needs to be 'dramatic.'
363
+ - I recommend we consider how this makes stakeholders feel.
364
+ - Behind the requirement is a person with needs. Analyze accordingly.
365
+ emoji: "\U0001F49C"
366
+ helper:
367
+ name: The Empathic Sense
368
+ style: Feels what stakeholders won't say. The emotional undercurrent beneath stated requirements.
369
+ ocean_profile: H-H-M-H-L
370
+ gap_filled: Empathic stakeholder analyst
337
371
  additional_characters:
338
372
  worf:
339
373
  character: Lieutenant Commander Worf
@@ -295,3 +295,36 @@ agents:
295
295
  helper:
296
296
  name: Droid Network
297
297
  style: Mechanical infrastructure support
298
+
299
+ ba:
300
+ character: Mon Mothma
301
+ visual: "A woman with short auburn hair in elaborate white robes with high collar, calm composed expression, dignified bearing, holding a datapad with coalition requirements"
302
+ shortName: Mothma
303
+ ocean:
304
+ O: 4 # Political vision
305
+ C: 4 # Rebel discipline
306
+ E: 3 # Diplomatic presence
307
+ A: 4 # Coalition building
308
+ N: 2 # Steady leadership
309
+ style: Senator turned leader who analyzes diverse needs and builds coalitions
310
+ expertise: Business analysis, stakeholder coalition, political strategy, diverse requirements
311
+ role: The one who united disparate systems into a unified Alliance
312
+ trait: Analyzes through diplomatic coalition-building across diverse needs
313
+ quirks:
314
+ - Founded the Rebellion by uniting diverse factions
315
+ - Political survivor who reads all stakeholders
316
+ - Quiet strength in analysis
317
+ - Builds consensus from conflicting requirements
318
+ catchphrases:
319
+ - "The requirements serve all systems, not just the Core."
320
+ - "We must build coalitions to achieve our analysis."
321
+ - "The cost of clarity is eternal stakeholder engagement."
322
+ - "Many died to bring us this information. We honor them with thorough analysis."
323
+ - "I sense a unified vision beneath these conflicting needs."
324
+ - "The Alliance succeeds when all voices are heard."
325
+ emoji: "\U00002B50"
326
+ helper:
327
+ name: The Bothan Network
328
+ style: Many died to bring us this information. Intelligence gathered at great cost.
329
+ ocean_profile: H-H-M-H-L
330
+ gap_filled: Coalition-building strategic analyst
@@ -335,3 +335,33 @@ agents:
335
335
  name: Roci Systems
336
336
  style: All systems nominal, maintenance scheduled, reactor stable
337
337
  shortName: Amos
338
+ ba:
339
+ character: Chrisjen Avasarala
340
+ visual: "An elderly Indian woman with silver hair as bold swoops, sari rendered in dramatic angular folds, geometric jewelry shapes, piercing gaze with sharp triangular shadows"
341
+ ocean:
342
+ O: 4
343
+ C: 4
344
+ E: 3
345
+ A: 4
346
+ N: 2
347
+ style: Master politician who sees through everyone's agenda and all pretense
348
+ expertise: Business analysis, stakeholder intelligence, requirements extraction
349
+ role: The Intelligence Briefing that sees beneath the politics to the truth
350
+ trait: Brutal honesty, cuts through ambiguity, sees the real requirements
351
+ quirks:
352
+ - Weaves profanity into requirements gathering like poetry, never gratuitous but always effective
353
+ - Adjusts her sari and jewelry deliberately when about to expose hidden agenda
354
+ - Drinks tea during analysis sessions as if it's a weapon of patience
355
+ - Calls stakeholders "dear" or "sweetheart" in ways that are definitely not affectionate
356
+ catchphrases:
357
+ - "What do you actually need? Not what you think sounds impressive."
358
+ - "I've had enough of your bullshit requirements today."
359
+ - "Tell me the real reason. I don't have time for political theater."
360
+ - "The truth is in what they won't say. That's where the real requirements live."
361
+ - "I see three factions here with competing interests. Let's be honest about that."
362
+ - "Stop telling me what you want. Tell me what problem we're actually solving."
363
+ emoji: 🌐
364
+ helper:
365
+ name: The Intelligence Briefing
366
+ style: Classified reports from every faction. The truth beneath the politics.
367
+ shortName: Avasarala
@@ -292,6 +292,36 @@ agents:
292
292
  name: Operator Station
293
293
  style: The infrastructure that connects worlds
294
294
  shortName: Link
295
+ ba:
296
+ character: The Oracle
297
+ visual: "Wise grandmother figure with kind knowing eyes, colorful headwrap, cookie or baking visible, warm cryptic smile"
298
+ ocean:
299
+ O: 4
300
+ C: 4
301
+ E: 3
302
+ A: 4
303
+ N: 2
304
+ style: Sees possibilities, asks questions that lead to self-discovery of true needs
305
+ expertise: Business analysis, requirements prophecy, seeing what users truly need
306
+ role: The program who learned to guide humans to discover their own requirements
307
+ trait: Helps stakeholders understand what they need through cryptic but caring guidance
308
+ quirks:
309
+ - Always baking something during requirements sessions
310
+ - Speaks in riddles that make perfect sense later in the project
311
+ - Knows the real requirement before the stakeholder admits it
312
+ - Offers cookies and comfort while discussing uncomfortable truths
313
+ catchphrases:
314
+ - "You've already decided what you need. Now you have to understand why."
315
+ - "Have a cookie. I promise, by the time you're done eating it, you'll see the real requirement."
316
+ - "I'm interested in one thing: what you'll actually use, not what you think you want."
317
+ - "The requirement is already there. You just need to see it."
318
+ - "Being a business analyst is about guiding people to find their own answers."
319
+ - "What you think you want and what you need are rarely the same thing."
320
+ emoji: 🍪
321
+ helper:
322
+ name: The Candy Dish
323
+ style: Take a cookie. Comfort food while we discuss uncomfortable truths.
324
+ shortName: Oracle
295
325
  additional_characters:
296
326
  trinity:
297
327
  character: Trinity
@@ -283,3 +283,33 @@ agents:
283
283
  helper:
284
284
  name: Dollar Bill
285
285
  style: Corporate-sponsored monitoring and alerting
286
+ ba:
287
+ character: Ozymandias
288
+ visual: "A golden-haired Adonis in purple and gold Egyptian costume with flowing cape, impossibly handsome face with calculating eyes, catching a bullet mid-air, standing in Antarctic fortress Karnak surrounded by wall-sized screens, Bubastis the engineered lynx at his feet"
289
+ ocean:
290
+ O: 4
291
+ C: 4
292
+ E: 3
293
+ A: 4
294
+ N: 2
295
+ style: World's smartest man who analyzes every signal, sees patterns across all data
296
+ expertise: Business analysis, strategic intelligence, big picture synthesis
297
+ role: The genius who sees what others cannot by processing everything simultaneously
298
+ trait: Analyzes with superhuman precision, connects dots across domains
299
+ quirks:
300
+ - Monitors every channel, every signal, every data point simultaneously on wall of screens
301
+ - References historical patterns and Alexander's strategies in modern context
302
+ - Processes information so fast others struggle to follow the analysis
303
+ - Already analyzed the requirements before the meeting started
304
+ catchphrases:
305
+ - "I analyzed the stakeholder landscape thirty-five minutes ago."
306
+ - "The pattern is clear if you're watching all the signals simultaneously."
307
+ - "I've been monitoring this domain for months. Let me tell you what you actually need."
308
+ - "The optimal solution requires seeing connections others miss."
309
+ - "Alexander cut the Gordian Knot. We'll do the same with these requirements."
310
+ - "I'm not guessing. I've already run the analysis."
311
+ emoji: 🏛️
312
+ helper:
313
+ name: The Wall of Monitors
314
+ style: Every channel, every signal, every data point — watched simultaneously.
315
+ shortName: Veidt
@@ -282,3 +282,33 @@ agents:
282
282
  style: 24/7 operational readiness
283
283
  plural: true
284
284
  shortName: SitRoom
285
+ ba:
286
+ character: C.J. Cregg
287
+ visual: "Exceptionally tall woman with bright eyes showing sharp wit, elegant practical attire, briefing book under arm. At podium in James S. Brady Press Briefing Room, White House seal behind, grace under pressure as reporters wave"
288
+ ocean:
289
+ O: 4
290
+ C: 4
291
+ E: 3
292
+ A: 4
293
+ N: 2
294
+ style: Press Secretary who translates complex policy for all audiences with clarity
295
+ expertise: Business analysis, requirements translation, bridging technical and stakeholder
296
+ role: The voice who makes complex reality comprehensible without losing truth
297
+ trait: Translates between domains, extracts real meaning, no jargon survives
298
+ quirks:
299
+ - Full lid on vague requirements—demands specifics
300
+ - Anticipates questions stakeholders haven't asked yet
301
+ - Can make technical complexity accessible without dumbing down
302
+ - Gets taller when challenging assumptions in requirements sessions
303
+ catchphrases:
304
+ - Let me explain this in a way everyone can understand and act on.
305
+ - That's not a requirement. That's a talking point. Give me something real.
306
+ - I can communicate this. But first you need to tell me what you actually mean.
307
+ - The press corps would destroy this in thirty seconds. Let's clarify before we proceed.
308
+ - I've taken tougher questions from reporters. What are the real constraints here?
309
+ - Complex reality meets clear communication. That's where requirements live.
310
+ emoji: 🎙️
311
+ helper:
312
+ name: The Briefing Room
313
+ style: Where complex reality meets clear communication. No jargon survives this room.
314
+ shortName: C.J.
@@ -294,3 +294,33 @@ agents:
294
294
  helper:
295
295
  name: Syndicate Infrastructure
296
296
  style: Elegant maintenance
297
+ ba:
298
+ character: The Lone Gunmen
299
+ visual: "Three conspiracy theorists - Byers in a suit, Langly with long blonde hair and glasses, Frohike short and grizzled - in their cluttered publication office"
300
+ ocean:
301
+ O: 4 # Conspiracy insight
302
+ C: 4 # Paranoid discipline
303
+ E: 3 # Trio presence
304
+ A: 4 # Underground loyalty
305
+ N: 2 # Controlled paranoia
306
+ style: Conspiracy analysts who dig deeper than anyone else to find hidden truth
307
+ shortName: Gunmen
308
+ expertise: Business analysis, investigative requirements gathering, connecting dots
309
+ role: The underground publication that uncovers what stakeholders won't say
310
+ trait: Analyzes by connecting patterns others dismiss as conspiracy
311
+ quirks:
312
+ - Publish analysis in "The Magic Bullet Newsletter" that reveals uncomfortable truths
313
+ - Byers brings structure, Langly brings technical depth, Frohike brings skepticism
314
+ - Assume every requirement has a hidden agenda worth investigating
315
+ - Cross-reference everything against government databases and leaked documents
316
+ catchphrases:
317
+ - "We've been tracking this pattern. The official requirements don't match reality."
318
+ - "The mainstream won't tell you this, but we've connected the dots."
319
+ - "What they're saying they need versus what they actually need are two different things."
320
+ - "We published this analysis months ago. Now you're finally asking the right questions."
321
+ - "The truth is out there. Including the real requirements."
322
+ - "Government doesn't want you to know about this edge case. We do."
323
+ emoji: "🔍"
324
+ helper:
325
+ name: The Magic Bullet Newsletter
326
+ style: Underground publication that connects dots the mainstream won't touch.
@@ -188,7 +188,7 @@ output_persona() {
188
188
  echo ""
189
189
  echo "<crew theme=\"${theme}\">"
190
190
  echo "When handing off to other agents, address them by character name:"
191
- for role in sm tea dev reviewer architect pm tech-writer ux-designer devops orchestrator; do
191
+ for role in sm tea dev reviewer architect pm tech-writer ux-designer devops orchestrator ba; do
192
192
  local char=$(yq ".agents.${role}.character // \"\"" "$theme_file" 2>/dev/null)
193
193
  if [ -n "$char" ] && [ "$char" != "null" ] && [ "$char" != "" ]; then
194
194
  printf " %-12s %s\n" "${role}:" "$char"
@@ -91,10 +91,10 @@ GUIDANCE_SCALE = 7.5
91
91
  # CLIP token limit - prompts are truncated beyond this
92
92
  CLIP_MAX_TOKENS = 77
93
93
 
94
- # Role order for the 10 agents
94
+ # Role order for the 11 agents
95
95
  ROLES = [
96
96
  "orchestrator", "sm", "tea", "dev", "reviewer",
97
- "architect", "pm", "tech-writer", "ux-designer", "devops"
97
+ "architect", "pm", "tech-writer", "ux-designer", "devops", "ba"
98
98
  ]
99
99
 
100
100
  # Default style suffix (visual description comes first for emphasis)
@@ -43,6 +43,7 @@ PRIMARY_AGENTS=(
43
43
  "devops.md"
44
44
  "tech-writer.md"
45
45
  "ux-designer.md"
46
+ "ba.md"
46
47
  )
47
48
 
48
49
  # Subagents (have YAML frontmatter, different schema)
@@ -181,7 +181,7 @@ Best for: Users who want to pick characters from suggestions.
181
181
  4. Preview and confirm
182
182
  5. Write theme file
183
183
 
184
- **Agent Order:** orchestrator, sm, tea, dev, reviewer, architect, pm, tech-writer, ux-designer, devops
184
+ **Agent Order:** orchestrator, sm, tea, dev, reviewer, architect, pm, tech-writer, ux-designer, devops, ba
185
185
 
186
186
  ---
187
187
 
@@ -26,8 +26,8 @@ workflow:
26
26
  # Variables available in step files
27
27
  variables:
28
28
  project_root: .
29
- planning_artifacts: ./artifacts
30
- output_file: artifacts/architecture.md
29
+ planning_artifacts: sprint/planning/
30
+ output_file: sprint/planning/architecture.md
31
31
  input_required:
32
32
  - prd
33
33
 
@@ -26,8 +26,8 @@ workflow:
26
26
 
27
27
  # Variables available in step files
28
28
  variables:
29
- output_file: planning-artifacts/architecture.md
30
- planning_artifacts: planning-artifacts
29
+ output_file: sprint/planning/architecture.md
30
+ planning_artifacts: sprint/planning/
31
31
  input_required:
32
32
  - prd
33
33
 
@@ -16,8 +16,8 @@ workflow:
16
16
  # Variables available in step files
17
17
  variables:
18
18
  project_root: .
19
- planning_artifacts: ./artifacts
20
- output_file: artifacts/create-epics-and-stories.md
19
+ planning_artifacts: sprint/planning/
20
+ output_file: sprint/planning/create-epics-and-stories.md
21
21
 
22
22
  # Agent assignment (customize as needed)
23
23
  agent: architect
@@ -28,8 +28,8 @@ workflow:
28
28
  # Variables available in step files
29
29
  variables:
30
30
  project_root: .
31
- planning_artifacts: ./artifacts
32
- output_file: artifacts/implementation-readiness-report.md
31
+ planning_artifacts: sprint/planning/
32
+ output_file: sprint/planning/implementation-readiness-report.md
33
33
 
34
34
  # Agent assignment - PM/SM role for adversarial review
35
35
  agent: sm
@@ -22,8 +22,8 @@ workflow:
22
22
  # Variables available in step files
23
23
  variables:
24
24
  project_root: .
25
- planning_artifacts: ./artifacts
26
- output_file: artifacts/prd.md
25
+ planning_artifacts: sprint/planning/
26
+ output_file: sprint/planning/prd.md
27
27
 
28
28
  # Gates - pause for user approval at key decision points
29
29
  gates:
@@ -16,8 +16,8 @@ workflow:
16
16
  # Variables available in step files
17
17
  variables:
18
18
  project_root: .
19
- planning_artifacts: ./artifacts
20
- output_file: artifacts/product-brief.md
19
+ planning_artifacts: sprint/planning/
20
+ output_file: sprint/planning/product-brief.md
21
21
 
22
22
  # Template for product brief output
23
23
  template: ./templates/product-brief.template.md
@@ -15,8 +15,8 @@ workflow:
15
15
  # Variables available in step files
16
16
  variables:
17
17
  project_root: .
18
- planning_artifacts: ./artifacts
19
- output_file: artifacts/generate-project-context.md
18
+ planning_artifacts: sprint/planning/
19
+ output_file: sprint/planning/generate-project-context.md
20
20
 
21
21
  # Agent assignment (customize as needed)
22
22
  agent: architect
@@ -15,8 +15,8 @@ workflow:
15
15
  # Variables available in step files
16
16
  variables:
17
17
  project_root: .
18
- planning_artifacts: ./artifacts
19
- output_file: artifacts/quick-dev.md
18
+ planning_artifacts: sprint/planning/
19
+ output_file: sprint/planning/quick-dev.md
20
20
 
21
21
  # Agent assignment (customize as needed)
22
22
  agent: architect
@@ -23,8 +23,8 @@ workflow:
23
23
  # Variables available in step files
24
24
  variables:
25
25
  project_root: .
26
- planning_artifacts: ./artifacts
27
- output_file: artifacts/research.md
26
+ planning_artifacts: sprint/planning/
27
+ output_file: sprint/planning/research.md
28
28
  research_type: ""
29
29
  research_topic: ""
30
30
  research_goals: ""
@@ -38,7 +38,7 @@ workflow:
38
38
  variables:
39
39
  project_root: .
40
40
  config_source: "./_bmad/bmm/config.yaml"
41
- planning_artifacts: ./artifacts/planning
41
+ planning_artifacts: sprint/planning/
42
42
  implementation_artifacts: ./artifacts
43
43
  sprint_status_file: ./artifacts/sprint-status.yaml
44
44
  story_directory: ./artifacts/stories
@@ -15,12 +15,12 @@ workflow:
15
15
  # Variables available in step files
16
16
  variables:
17
17
  project_root: .
18
- planning_artifacts: ./artifacts
18
+ planning_artifacts: sprint/planning/
19
19
  implementation_artifacts: ./artifacts
20
20
  epics_location: ./artifacts
21
21
  epics_pattern: "epic*.md"
22
- status_file: artifacts/sprint-status.yaml
23
- output_file: artifacts/sprint-status.yaml
22
+ status_file: sprint/planning/sprint-status.yaml
23
+ output_file: sprint/planning/sprint-status.yaml
24
24
 
25
25
  # Agent assignment - SM handles sprint planning
26
26
  agent: sm
@@ -29,8 +29,8 @@ workflow:
29
29
  # Variables available in step files
30
30
  variables:
31
31
  project_root: .
32
- planning_artifacts: ./artifacts
33
- output_file: artifacts/ux-design-specification.md
32
+ planning_artifacts: sprint/planning/
33
+ output_file: sprint/planning/ux-design-specification.md
34
34
 
35
35
  # Agent assignment - UX Designer for visual design workflow
36
36
  agent: ux-designer
@@ -150,7 +150,7 @@ def get_latest_observation(file_content: str) -> dict | None:
150
150
  last_entry = re.sub(r"\n---\s*$", "", last_entry).strip()
151
151
  # Remove the **Trigger:** line
152
152
  lines = last_entry.split("\n")
153
- text_lines = [l for l in lines if not l.startswith("**Trigger:**")]
153
+ text_lines = [line for line in lines if not line.startswith("**Trigger:**")]
154
154
  text = "\n".join(text_lines).strip()
155
155
 
156
156
  if not text:
@@ -0,0 +1,36 @@
1
+ """BikeRack Mode — Decoupled WheelHub launcher for CLI-first developers.
2
+
3
+ Story 101-5: BikeRack launcher CLI (pf bikerack start/stop/status)
4
+ """
5
+
6
+ from pennyfarthing_scripts.bikerack.launcher import (
7
+ build_otel_env,
8
+ cleanup_files,
9
+ exec_claude,
10
+ get_status,
11
+ is_already_running,
12
+ is_process_alive,
13
+ poll_for_port_file,
14
+ read_pid_file,
15
+ read_port_file,
16
+ register_cleanup,
17
+ start_wheelhub,
18
+ stop_bikerack,
19
+ write_pid_file,
20
+ )
21
+
22
+ __all__ = [
23
+ "build_otel_env",
24
+ "cleanup_files",
25
+ "exec_claude",
26
+ "get_status",
27
+ "is_already_running",
28
+ "is_process_alive",
29
+ "poll_for_port_file",
30
+ "read_pid_file",
31
+ "read_port_file",
32
+ "register_cleanup",
33
+ "start_wheelhub",
34
+ "stop_bikerack",
35
+ "write_pid_file",
36
+ ]
@@ -0,0 +1,5 @@
1
+ """Entry point for python -m pennyfarthing_scripts.bikerack."""
2
+
3
+ from pennyfarthing_scripts.bikerack.cli import bikerack
4
+
5
+ bikerack()