@pennyfarthing/core 11.3.1 → 11.3.2

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 (408) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/packages/core/dist/cli/commands/doctor.d.ts +9 -1
  4. package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
  5. package/packages/core/dist/cli/commands/doctor.js +107 -51
  6. package/packages/core/dist/cli/commands/doctor.js.map +1 -1
  7. package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
  8. package/packages/core/dist/cli/commands/update.js +1 -26
  9. package/packages/core/dist/cli/commands/update.js.map +1 -1
  10. package/packages/core/dist/cli/utils/python.d.ts +1 -0
  11. package/packages/core/dist/cli/utils/python.d.ts.map +1 -1
  12. package/packages/core/dist/cli/utils/python.js +11 -1
  13. package/packages/core/dist/cli/utils/python.js.map +1 -1
  14. package/packages/core/dist/cli/utils/settings-pf-wrapper.test.d.ts +16 -0
  15. package/packages/core/dist/cli/utils/settings-pf-wrapper.test.d.ts.map +1 -0
  16. package/packages/core/dist/cli/utils/settings-pf-wrapper.test.js +377 -0
  17. package/packages/core/dist/cli/utils/settings-pf-wrapper.test.js.map +1 -0
  18. package/packages/core/dist/server/paths.d.ts.map +1 -1
  19. package/packages/core/dist/server/paths.js +6 -0
  20. package/packages/core/dist/server/paths.js.map +1 -1
  21. package/packages/core/dist/workflow/team-lifecycle.d.ts +169 -0
  22. package/packages/core/dist/workflow/team-lifecycle.d.ts.map +1 -0
  23. package/packages/core/dist/workflow/team-lifecycle.js +217 -0
  24. package/packages/core/dist/workflow/team-lifecycle.js.map +1 -0
  25. package/packages/core/dist/workflow/team-lifecycle.test.d.ts +20 -0
  26. package/packages/core/dist/workflow/team-lifecycle.test.d.ts.map +1 -0
  27. package/packages/core/dist/workflow/team-lifecycle.test.js +966 -0
  28. package/packages/core/dist/workflow/team-lifecycle.test.js.map +1 -0
  29. package/packages/core/dist/workflow/workflow-graph-validation.d.ts +65 -0
  30. package/packages/core/dist/workflow/workflow-graph-validation.d.ts.map +1 -0
  31. package/packages/core/dist/workflow/workflow-graph-validation.js +190 -0
  32. package/packages/core/dist/workflow/workflow-graph-validation.js.map +1 -0
  33. package/packages/core/dist/workflow/workflow-graph-validation.test.d.ts +18 -0
  34. package/packages/core/dist/workflow/workflow-graph-validation.test.d.ts.map +1 -0
  35. package/packages/core/dist/workflow/workflow-graph-validation.test.js +706 -0
  36. package/packages/core/dist/workflow/workflow-graph-validation.test.js.map +1 -0
  37. package/pennyfarthing-dist/scripts/lib/run-pf.sh +3 -0
  38. package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
  39. package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
  40. package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
  41. package/pennyfarthing_scripts/__pycache__/config.cpython-314.pyc +0 -0
  42. package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
  43. package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
  44. package/pennyfarthing_scripts/__pycache__/jira_bidirectional_sync.cpython-314.pyc +0 -0
  45. package/pennyfarthing_scripts/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
  46. package/pennyfarthing_scripts/__pycache__/jira_sync.cpython-314.pyc +0 -0
  47. package/pennyfarthing_scripts/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
  48. package/pennyfarthing_scripts/__pycache__/output.cpython-314.pyc +0 -0
  49. package/pennyfarthing_scripts/__pycache__/patch_mode.cpython-314.pyc +0 -0
  50. package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
  51. package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  52. package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
  53. package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
  54. package/pennyfarthing_scripts/bc/__pycache__/__init__.cpython-314.pyc +0 -0
  55. package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
  56. package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
  57. package/pennyfarthing_scripts/bc/__pycache__/split.cpython-314.pyc +0 -0
  58. package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
  59. package/pennyfarthing_scripts/bikerack/__pycache__/__main__.cpython-314.pyc +0 -0
  60. package/pennyfarthing_scripts/bikerack/__pycache__/audit_log_panel.cpython-314.pyc +0 -0
  61. package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
  62. package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
  63. package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
  64. package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
  65. package/pennyfarthing_scripts/bikerack/__pycache__/context_meter_footer.cpython-314.pyc +0 -0
  66. package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
  67. package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
  68. package/pennyfarthing_scripts/bikerack/__pycache__/events.cpython-314.pyc +0 -0
  69. package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
  70. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  71. package/pennyfarthing_scripts/bikerack/__pycache__/portrait.cpython-314.pyc +0 -0
  72. package/pennyfarthing_scripts/bikerack/__pycache__/portrait_resolver.cpython-314.pyc +0 -0
  73. package/pennyfarthing_scripts/bikerack/__pycache__/progress_panel.cpython-314.pyc +0 -0
  74. package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
  75. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_data.cpython-314.pyc +0 -0
  76. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_screen.cpython-314.pyc +0 -0
  77. package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
  78. package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
  79. package/pennyfarthing_scripts/bmad/__init__.py +1 -0
  80. package/pennyfarthing_scripts/bmad/__pycache__/__init__.cpython-314.pyc +0 -0
  81. package/pennyfarthing_scripts/bmad/__pycache__/cli.cpython-314.pyc +0 -0
  82. package/pennyfarthing_scripts/bmad/__pycache__/parser.cpython-314.pyc +0 -0
  83. package/pennyfarthing_scripts/bmad/__pycache__/sync.cpython-314.pyc +0 -0
  84. package/pennyfarthing_scripts/bmad/__pycache__/test_parser.cpython-314-pytest-9.0.2.pyc +0 -0
  85. package/pennyfarthing_scripts/bmad/__pycache__/test_sync.cpython-314-pytest-9.0.2.pyc +0 -0
  86. package/pennyfarthing_scripts/bmad/cli.py +197 -0
  87. package/pennyfarthing_scripts/bmad/importer.py +200 -0
  88. package/pennyfarthing_scripts/bmad/parser.py +233 -0
  89. package/pennyfarthing_scripts/bmad/sync.py +464 -0
  90. package/pennyfarthing_scripts/bmad/test_parser.py +253 -0
  91. package/pennyfarthing_scripts/bmad/test_sync.py +223 -0
  92. package/pennyfarthing_scripts/brownfield/__pycache__/__init__.cpython-314.pyc +0 -0
  93. package/pennyfarthing_scripts/brownfield/__pycache__/__main__.cpython-314.pyc +0 -0
  94. package/pennyfarthing_scripts/brownfield/__pycache__/cli.cpython-314.pyc +0 -0
  95. package/pennyfarthing_scripts/brownfield/__pycache__/discover.cpython-314.pyc +0 -0
  96. package/pennyfarthing_scripts/cli.py +5 -0
  97. package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
  98. package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
  99. package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
  100. package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
  101. package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
  102. package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
  103. package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-314.pyc +0 -0
  104. package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
  105. package/pennyfarthing_scripts/common/__pycache__/output.cpython-314.pyc +0 -0
  106. package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
  107. package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
  108. package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
  109. package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
  110. package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
  111. package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
  112. package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
  113. package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
  114. package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-314.pyc +0 -0
  115. package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
  116. package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
  117. package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
  118. package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
  119. package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
  120. package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
  121. package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
  122. package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
  123. package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
  124. package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
  125. package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
  126. package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
  127. package/pennyfarthing_scripts/epic/__pycache__/__init__.cpython-314.pyc +0 -0
  128. package/pennyfarthing_scripts/epic/__pycache__/cli.cpython-314.pyc +0 -0
  129. package/pennyfarthing_scripts/gate/__pycache__/__init__.cpython-314.pyc +0 -0
  130. package/pennyfarthing_scripts/gate/__pycache__/cli.cpython-314.pyc +0 -0
  131. package/pennyfarthing_scripts/gate/__pycache__/validate.cpython-314.pyc +0 -0
  132. package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
  133. package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
  134. package/pennyfarthing_scripts/git/__pycache__/hooks_installer.cpython-314.pyc +0 -0
  135. package/pennyfarthing_scripts/git/__pycache__/repos.cpython-314.pyc +0 -0
  136. package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
  137. package/pennyfarthing_scripts/git/__pycache__/worktree.cpython-314.pyc +0 -0
  138. package/pennyfarthing_scripts/git_group/__pycache__/__init__.cpython-314.pyc +0 -0
  139. package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-314.pyc +0 -0
  140. package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-314.pyc +0 -0
  141. package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-314.pyc +0 -0
  142. package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
  143. package/pennyfarthing_scripts/handoff/__pycache__/gate_file.cpython-314.pyc +0 -0
  144. package/pennyfarthing_scripts/handoff/__pycache__/gate_runner.cpython-314.pyc +0 -0
  145. package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
  146. package/pennyfarthing_scripts/handoff/__pycache__/phase_check.cpython-314.pyc +0 -0
  147. package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
  148. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  149. package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  150. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  151. package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
  152. package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
  153. package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-314.pyc +0 -0
  154. package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
  155. package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
  156. package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-314.pyc +0 -0
  157. package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
  158. package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
  159. package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
  160. package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
  161. package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
  162. package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
  163. package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
  164. package/pennyfarthing_scripts/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
  165. package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
  166. package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
  167. package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
  168. package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
  169. package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
  170. package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
  171. package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
  172. package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-314.pyc +0 -0
  173. package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-314.pyc +0 -0
  174. package/pennyfarthing_scripts/jira/__pycache__/__main__.cpython-314.pyc +0 -0
  175. package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
  176. package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-314.pyc +0 -0
  177. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-314.pyc +0 -0
  178. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-314.pyc +0 -0
  179. package/pennyfarthing_scripts/jira/__pycache__/create.cpython-314.pyc +0 -0
  180. package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-314.pyc +0 -0
  181. package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-314.pyc +0 -0
  182. package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
  183. package/pennyfarthing_scripts/jira/__pycache__/story.cpython-314.pyc +0 -0
  184. package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-314.pyc +0 -0
  185. package/pennyfarthing_scripts/launch/__pycache__/__init__.cpython-314.pyc +0 -0
  186. package/pennyfarthing_scripts/launch/__pycache__/cli.cpython-314.pyc +0 -0
  187. package/pennyfarthing_scripts/migration/__pycache__/__init__.cpython-314.pyc +0 -0
  188. package/pennyfarthing_scripts/migration/__pycache__/session.cpython-314.pyc +0 -0
  189. package/pennyfarthing_scripts/migration/__pycache__/skill.cpython-314.pyc +0 -0
  190. package/pennyfarthing_scripts/migration/__pycache__/step.cpython-314.pyc +0 -0
  191. package/pennyfarthing_scripts/migration/__pycache__/validate.cpython-314.pyc +0 -0
  192. package/pennyfarthing_scripts/preflight/__pycache__/__init__.cpython-314.pyc +0 -0
  193. package/pennyfarthing_scripts/preflight/__pycache__/__main__.cpython-314.pyc +0 -0
  194. package/pennyfarthing_scripts/preflight/__pycache__/cli.cpython-314.pyc +0 -0
  195. package/pennyfarthing_scripts/preflight/__pycache__/finish.cpython-314.pyc +0 -0
  196. package/pennyfarthing_scripts/prime/__pycache__/__init__.cpython-314.pyc +0 -0
  197. package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
  198. package/pennyfarthing_scripts/prime/__pycache__/heatmap.cpython-314.pyc +0 -0
  199. package/pennyfarthing_scripts/prime/__pycache__/loader.cpython-314.pyc +0 -0
  200. package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
  201. package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
  202. package/pennyfarthing_scripts/prime/__pycache__/session.cpython-314.pyc +0 -0
  203. package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
  204. package/pennyfarthing_scripts/prime/__pycache__/version_sentinel.cpython-314.pyc +0 -0
  205. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  206. package/pennyfarthing_scripts/session/__pycache__/__init__.cpython-314.pyc +0 -0
  207. package/pennyfarthing_scripts/session/__pycache__/cli.cpython-314.pyc +0 -0
  208. package/pennyfarthing_scripts/settings/__pycache__/__init__.cpython-314.pyc +0 -0
  209. package/pennyfarthing_scripts/settings/__pycache__/cli.cpython-314.pyc +0 -0
  210. package/pennyfarthing_scripts/settings/__pycache__/settings.cpython-314.pyc +0 -0
  211. package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
  212. package/pennyfarthing_scripts/sprint/__pycache__/__main__.cpython-314.pyc +0 -0
  213. package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-314.pyc +0 -0
  214. package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  215. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  216. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  217. package/pennyfarthing_scripts/sprint/__pycache__/epic_update.cpython-314.pyc +0 -0
  218. package/pennyfarthing_scripts/sprint/__pycache__/import_epic.cpython-314.pyc +0 -0
  219. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  220. package/pennyfarthing_scripts/sprint/__pycache__/status.cpython-314.pyc +0 -0
  221. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  222. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  223. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  224. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  225. package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-314.pyc +0 -0
  226. package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-314.pyc +0 -0
  227. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  228. package/pennyfarthing_scripts/story/__pycache__/__init__.cpython-314.pyc +0 -0
  229. package/pennyfarthing_scripts/story/__pycache__/__main__.cpython-314.pyc +0 -0
  230. package/pennyfarthing_scripts/story/__pycache__/cli.cpython-314.pyc +0 -0
  231. package/pennyfarthing_scripts/story/__pycache__/create.cpython-314.pyc +0 -0
  232. package/pennyfarthing_scripts/story/__pycache__/size.cpython-314.pyc +0 -0
  233. package/pennyfarthing_scripts/story/__pycache__/template.cpython-314.pyc +0 -0
  234. package/pennyfarthing_scripts/tests/__pycache__/__init__.cpython-314.pyc +0 -0
  235. package/pennyfarthing_scripts/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
  236. package/pennyfarthing_scripts/tests/__pycache__/test_108_2_remove_handoff_fallback.cpython-314-pytest-9.0.2.pyc +0 -0
  237. package/pennyfarthing_scripts/tests/__pycache__/test_archive_epic.cpython-314-pytest-9.0.2.pyc +0 -0
  238. package/pennyfarthing_scripts/tests/__pycache__/test_bc.cpython-314-pytest-9.0.2.pyc +0 -0
  239. package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  240. package/pennyfarthing_scripts/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
  241. package/pennyfarthing_scripts/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
  242. package/pennyfarthing_scripts/tests/__pycache__/test_cli_normalization.cpython-314-pytest-9.0.2.pyc +0 -0
  243. package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
  244. package/pennyfarthing_scripts/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
  245. package/pennyfarthing_scripts/tests/__pycache__/test_confidence_sm_evaluation.cpython-314-pytest-9.0.2.pyc +0 -0
  246. package/pennyfarthing_scripts/tests/__pycache__/test_confidence_sm_gate.cpython-314-pytest-9.0.2.pyc +0 -0
  247. package/pennyfarthing_scripts/tests/__pycache__/test_epic_shard_validation.cpython-314-pytest-9.0.2.pyc +0 -0
  248. package/pennyfarthing_scripts/tests/__pycache__/test_gate_file_resolution.cpython-314-pytest-9.0.2.pyc +0 -0
  249. package/pennyfarthing_scripts/tests/__pycache__/test_gate_runner.cpython-314-pytest-9.0.2.pyc +0 -0
  250. package/pennyfarthing_scripts/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
  251. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  252. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_e2e.cpython-314-pytest-9.0.2.pyc +0 -0
  253. package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
  254. package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
  255. package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
  256. package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
  257. package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
  258. package/pennyfarthing_scripts/tests/__pycache__/test_resolve_gate_file_field.cpython-314-pytest-9.0.2.pyc +0 -0
  259. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
  260. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_panel.cpython-314-pytest-9.0.2.pyc +0 -0
  261. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
  262. package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
  263. package/pennyfarthing_scripts/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
  264. package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
  265. package/pennyfarthing_scripts/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
  266. package/pennyfarthing_scripts/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
  267. package/pennyfarthing_scripts/tests/__pycache__/test_topology_loader.cpython-314-pytest-9.0.2.pyc +0 -0
  268. package/pennyfarthing_scripts/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
  269. package/pennyfarthing_scripts/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
  270. package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
  271. package/pennyfarthing_scripts/tests/__pycache__/test_version_sentinel.cpython-314-pytest-9.0.2.pyc +0 -0
  272. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
  273. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_list_team.cpython-314-pytest-9.0.2.pyc +0 -0
  274. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_list_team.cpython-314.pyc +0 -0
  275. package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
  276. package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-314.pyc +0 -0
  277. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-314.pyc +0 -0
  278. package/pennyfarthing_scripts/validate/__pycache__/__init__.cpython-314.pyc +0 -0
  279. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
  280. package/pennyfarthing_scripts/validate/adapters/__pycache__/__init__.cpython-314.pyc +0 -0
  281. package/pennyfarthing_scripts/validate/adapters/__pycache__/agent.cpython-314.pyc +0 -0
  282. package/pennyfarthing_scripts/validate/adapters/__pycache__/schema.cpython-314.pyc +0 -0
  283. package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
  284. package/pennyfarthing_scripts/validate/adapters/__pycache__/sprint.cpython-314.pyc +0 -0
  285. package/pennyfarthing_scripts/validate/adapters/__pycache__/tandem_awareness.cpython-314.pyc +0 -0
  286. package/pennyfarthing_scripts/validate/adapters/__pycache__/team_mode.cpython-314.pyc +0 -0
  287. package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
  288. package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
  289. package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-314.pyc +0 -0
  290. package/pennyfarthing_scripts/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
  291. package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-314.pyc +0 -0
  292. package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-314.pyc +0 -0
  293. package/pennyfarthing_scripts/workflow/__pycache__/team_lifecycle.cpython-314.pyc +0 -0
  294. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.d.ts +0 -17
  295. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.d.ts.map +0 -1
  296. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.js +0 -470
  297. package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.js.map +0 -1
  298. package/packages/core/dist/cli/cyclist-migration.test.d.ts +0 -16
  299. package/packages/core/dist/cli/cyclist-migration.test.d.ts.map +0 -1
  300. package/packages/core/dist/cli/cyclist-migration.test.js +0 -229
  301. package/packages/core/dist/cli/cyclist-migration.test.js.map +0 -1
  302. package/packages/core/dist/cli/utils/stale-artifacts.d.ts +0 -59
  303. package/packages/core/dist/cli/utils/stale-artifacts.d.ts.map +0 -1
  304. package/packages/core/dist/cli/utils/stale-artifacts.js +0 -163
  305. package/packages/core/dist/cli/utils/stale-artifacts.js.map +0 -1
  306. package/packages/core/dist/scripts/benchmark-integration.d.ts +0 -182
  307. package/packages/core/dist/scripts/benchmark-integration.d.ts.map +0 -1
  308. package/packages/core/dist/scripts/benchmark-integration.js +0 -691
  309. package/packages/core/dist/scripts/benchmark-integration.js.map +0 -1
  310. package/packages/core/dist/scripts/job-fair-aggregator.d.ts +0 -150
  311. package/packages/core/dist/scripts/job-fair-aggregator.d.ts.map +0 -1
  312. package/packages/core/dist/scripts/job-fair-aggregator.js +0 -547
  313. package/packages/core/dist/scripts/job-fair-aggregator.js.map +0 -1
  314. package/packages/core/dist/scripts/theme-detail.test.d.ts.map +0 -1
  315. package/packages/core/dist/scripts/theme-detail.test.js.map +0 -1
  316. package/pennyfarthing-dist/scripts/hooks/__pycache__/question_reflector_check.cpython-314.pyc +0 -0
  317. package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  318. package/pennyfarthing_scripts/__pycache__/cli.cpython-311.pyc +0 -0
  319. package/pennyfarthing_scripts/__pycache__/context.cpython-311.pyc +0 -0
  320. package/pennyfarthing_scripts/__pycache__/jira.cpython-314.pyc +0 -0
  321. package/pennyfarthing_scripts/__pycache__/sprint.cpython-314.pyc +0 -0
  322. package/pennyfarthing_scripts/__pycache__/workflow.cpython-311.pyc +0 -0
  323. package/pennyfarthing_scripts/bc/__pycache__/__init__.cpython-311.pyc +0 -0
  324. package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-311.pyc +0 -0
  325. package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-311.pyc +0 -0
  326. package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-311.pyc +0 -0
  327. package/pennyfarthing_scripts/bikerack/__pycache__/cli.cpython-311.pyc +0 -0
  328. package/pennyfarthing_scripts/bikerack/__pycache__/launcher.cpython-311.pyc +0 -0
  329. package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-311.pyc +0 -0
  330. package/pennyfarthing_scripts/common/__pycache__/config.cpython-311.pyc +0 -0
  331. package/pennyfarthing_scripts/common/__pycache__/output.cpython-311.pyc +0 -0
  332. package/pennyfarthing_scripts/common/__pycache__/pr_config.cpython-314.pyc +0 -0
  333. package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-311.pyc +0 -0
  334. package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-311.pyc +0 -0
  335. package/pennyfarthing_scripts/consultation/__pycache__/dialogue_manager.cpython-314.pyc +0 -0
  336. package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-311.pyc +0 -0
  337. package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-311.pyc +0 -0
  338. package/pennyfarthing_scripts/epic/__pycache__/__init__.cpython-311.pyc +0 -0
  339. package/pennyfarthing_scripts/epic/__pycache__/cli.cpython-311.pyc +0 -0
  340. package/pennyfarthing_scripts/git_group/__pycache__/__init__.cpython-311.pyc +0 -0
  341. package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-311.pyc +0 -0
  342. package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-311.pyc +0 -0
  343. package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-311.pyc +0 -0
  344. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-311.pyc +0 -0
  345. package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-311.pyc +0 -0
  346. package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-311.pyc +0 -0
  347. package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-311.pyc +0 -0
  348. package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  349. package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-311.pyc +0 -0
  350. package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-311.pyc +0 -0
  351. package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-311.pyc +0 -0
  352. package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-311.pyc +0 -0
  353. package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-311.pyc +0 -0
  354. package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-311.pyc +0 -0
  355. package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-311.pyc +0 -0
  356. package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-311.pyc +0 -0
  357. package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-311.pyc +0 -0
  358. package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-311.pyc +0 -0
  359. package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-311.pyc +0 -0
  360. package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-311.pyc +0 -0
  361. package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-311.pyc +0 -0
  362. package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-311.pyc +0 -0
  363. package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-311.pyc +0 -0
  364. package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-311.pyc +0 -0
  365. package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-311.pyc +0 -0
  366. package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-311.pyc +0 -0
  367. package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-311.pyc +0 -0
  368. package/pennyfarthing_scripts/jira/__pycache__/client.cpython-311.pyc +0 -0
  369. package/pennyfarthing_scripts/jira/__pycache__/compat.cpython-314.pyc +0 -0
  370. package/pennyfarthing_scripts/jira/__pycache__/create.cpython-311.pyc +0 -0
  371. package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-311.pyc +0 -0
  372. package/pennyfarthing_scripts/jira/__pycache__/mappings.cpython-314.pyc +0 -0
  373. package/pennyfarthing_scripts/jira/__pycache__/models.cpython-314.pyc +0 -0
  374. package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-311.pyc +0 -0
  375. package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-311.pyc +0 -0
  376. package/pennyfarthing_scripts/jira/__pycache__/story.cpython-311.pyc +0 -0
  377. package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-311.pyc +0 -0
  378. package/pennyfarthing_scripts/launch/__pycache__/__init__.cpython-311.pyc +0 -0
  379. package/pennyfarthing_scripts/launch/__pycache__/cli.cpython-311.pyc +0 -0
  380. package/pennyfarthing_scripts/migration/__pycache__/__main__.cpython-314.pyc +0 -0
  381. package/pennyfarthing_scripts/migration/__pycache__/cli.cpython-314.pyc +0 -0
  382. package/pennyfarthing_scripts/prime/__pycache__/__main__.cpython-314.pyc +0 -0
  383. package/pennyfarthing_scripts/session/__pycache__/__init__.cpython-311.pyc +0 -0
  384. package/pennyfarthing_scripts/session/__pycache__/cli.cpython-311.pyc +0 -0
  385. package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-311.pyc +0 -0
  386. package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-311.pyc +0 -0
  387. package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-311.pyc +0 -0
  388. package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-311.pyc +0 -0
  389. package/pennyfarthing_scripts/sprint/__pycache__/epic_update.cpython-311.pyc +0 -0
  390. package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-311.pyc +0 -0
  391. package/pennyfarthing_scripts/sprint/__pycache__/status.cpython-311.pyc +0 -0
  392. package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-311.pyc +0 -0
  393. package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-311.pyc +0 -0
  394. package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-311.pyc +0 -0
  395. package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-311.pyc +0 -0
  396. package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-311.pyc +0 -0
  397. package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-311.pyc +0 -0
  398. package/pennyfarthing_scripts/tests/__pycache__/test_108_1_gate_migration.cpython-314-pytest-9.0.2.pyc +0 -0
  399. package/pennyfarthing_scripts/tests/__pycache__/test_dialogue_manager.cpython-314-pytest-9.0.2.pyc +0 -0
  400. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  401. package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-311.pyc +0 -0
  402. package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-311.pyc +0 -0
  403. package/pennyfarthing_scripts/validate/__pycache__/__init__.cpython-311.pyc +0 -0
  404. package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-311.pyc +0 -0
  405. package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-311.pyc +0 -0
  406. package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-311.pyc +0 -0
  407. package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-311.pyc +0 -0
  408. package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-311.pyc +0 -0
@@ -1,229 +0,0 @@
1
- /**
2
- * Story 11-3: Cyclist Migration Tests
3
- *
4
- * These tests verify the Cyclist Electron GUI is correctly migrated
5
- * into the pnpm workspace as @pennyfarthing/cyclist.
6
- * Tests are designed to FAIL until the migration is complete.
7
- *
8
- * Acceptance Criteria:
9
- * 1. packages/cyclist/ contains Cyclist source
10
- * 2. Dependencies use workspace:* for internal packages
11
- * 3. Portrait resolution uses @pennyfarthing/shared
12
- * 4. Electron app starts and shows portraits
13
- * 5. Dogfooding scenario works (portraits load from pennyfarthing-dist/)
14
- */
15
- import { describe, it } from 'node:test';
16
- import assert from 'node:assert';
17
- import { existsSync, readFileSync, readdirSync } from 'node:fs';
18
- import { join } from 'node:path';
19
- import { findMonorepoRoot } from './utils/files.js';
20
- const __dirname = import.meta.dirname;
21
- const PROJECT_ROOT = findMonorepoRoot(__dirname);
22
- describe('Story 11-3: Cyclist Migration into Monorepo', () => {
23
- describe('AC1: packages/cyclist/ contains Cyclist source', () => {
24
- it('should have packages/cyclist directory', () => {
25
- const cyclistDir = join(PROJECT_ROOT, 'packages', 'cyclist');
26
- assert.ok(existsSync(cyclistDir), 'packages/cyclist/ directory must exist');
27
- });
28
- it('should have packages/cyclist/src directory', () => {
29
- const srcDir = join(PROJECT_ROOT, 'packages', 'cyclist', 'src');
30
- assert.ok(existsSync(srcDir), 'packages/cyclist/src/ directory must exist');
31
- });
32
- it('should have packages/cyclist/src/main.ts (Electron main process)', () => {
33
- const mainTs = join(PROJECT_ROOT, 'packages', 'cyclist', 'src', 'main.ts');
34
- assert.ok(existsSync(mainTs), 'packages/cyclist/src/main.ts must exist');
35
- });
36
- it('should have packages/cyclist/src/paths.ts (path resolution)', () => {
37
- const pathsTs = join(PROJECT_ROOT, 'packages', 'cyclist', 'src', 'paths.ts');
38
- assert.ok(existsSync(pathsTs), 'packages/cyclist/src/paths.ts must exist');
39
- });
40
- it('should have packages/cyclist/src/public directory', () => {
41
- const publicDir = join(PROJECT_ROOT, 'packages', 'cyclist', 'src', 'public');
42
- assert.ok(existsSync(publicDir), 'packages/cyclist/src/public/ directory must exist');
43
- });
44
- it('should have packages/cyclist/package.json', () => {
45
- const packageJson = join(PROJECT_ROOT, 'packages', 'cyclist', 'package.json');
46
- assert.ok(existsSync(packageJson), 'packages/cyclist/package.json must exist');
47
- });
48
- it('should have @pennyfarthing/cyclist as package name', () => {
49
- const packageJsonPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'package.json');
50
- if (!existsSync(packageJsonPath)) {
51
- assert.fail('packages/cyclist/package.json must exist first');
52
- }
53
- const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
54
- assert.strictEqual(pkg.name, '@pennyfarthing/cyclist', 'Package name must be @pennyfarthing/cyclist');
55
- });
56
- it('should have packages/cyclist/tsconfig.json', () => {
57
- const tsconfig = join(PROJECT_ROOT, 'packages', 'cyclist', 'tsconfig.json');
58
- assert.ok(existsSync(tsconfig), 'packages/cyclist/tsconfig.json must exist');
59
- });
60
- });
61
- describe('AC2: Dependencies use workspace:* for internal packages', () => {
62
- it('should have @pennyfarthing/shared as workspace dependency', () => {
63
- const packageJsonPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'package.json');
64
- if (!existsSync(packageJsonPath)) {
65
- assert.fail('packages/cyclist/package.json must exist first');
66
- }
67
- const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
68
- const deps = pkg.dependencies || {};
69
- assert.ok(deps['@pennyfarthing/shared'], 'packages/cyclist should depend on @pennyfarthing/shared');
70
- // Dependency can use workspace:* or a version range
71
- assert.ok(deps['@pennyfarthing/shared'].includes('workspace') || /^\^?\d/.test(deps['@pennyfarthing/shared']), '@pennyfarthing/shared dependency should use workspace protocol or version range');
72
- });
73
- it('should NOT have pennyfarthing GitHub dependency', () => {
74
- const packageJsonPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'package.json');
75
- if (!existsSync(packageJsonPath)) {
76
- assert.fail('packages/cyclist/package.json must exist first');
77
- }
78
- const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
79
- const deps = pkg.dependencies || {};
80
- assert.ok(!deps['pennyfarthing'] || !deps['pennyfarthing'].includes('github'), 'packages/cyclist should NOT have GitHub pennyfarthing dependency (use workspace instead)');
81
- });
82
- it('should be listed in pnpm-workspace.yaml packages', () => {
83
- const workspaceYamlPath = join(PROJECT_ROOT, 'pnpm-workspace.yaml');
84
- const content = readFileSync(workspaceYamlPath, 'utf-8');
85
- // packages/* pattern should include packages/cyclist
86
- assert.ok(content.includes('packages/*') || content.includes('packages/cyclist'), 'pnpm-workspace.yaml should include packages/cyclist (via packages/* pattern)');
87
- });
88
- });
89
- describe('AC3: Portrait resolution uses shared resolver pattern', () => {
90
- // Note: paths.ts inlines the shared resolver functions for standalone npm distribution
91
- // This is valid - we test for the functions existing, not the import pattern
92
- it('should have resolvePennyfarthingDist function', () => {
93
- const pathsPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'src', 'paths.ts');
94
- if (!existsSync(pathsPath)) {
95
- assert.fail('packages/cyclist/src/paths.ts must exist first');
96
- }
97
- const content = readFileSync(pathsPath, 'utf-8');
98
- assert.ok(content.includes('resolvePennyfarthingDist'), 'paths.ts should have resolvePennyfarthingDist function (inlined or imported)');
99
- });
100
- it('should have getPortraitPaths function', () => {
101
- const pathsPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'src', 'paths.ts');
102
- if (!existsSync(pathsPath)) {
103
- assert.fail('packages/cyclist/src/paths.ts must exist first');
104
- }
105
- const content = readFileSync(pathsPath, 'utf-8');
106
- assert.ok(content.includes('getPortraitPaths'), 'paths.ts should have getPortraitPaths function (inlined or imported)');
107
- });
108
- it('should NOT have hardcoded pennyfarthing path in getPortraitsDir', () => {
109
- const pathsPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'src', 'paths.ts');
110
- if (!existsSync(pathsPath)) {
111
- assert.fail('packages/cyclist/src/paths.ts must exist first');
112
- }
113
- const content = readFileSync(pathsPath, 'utf-8');
114
- // Should not contain the old hardcoded path logic (join calls, not comments)
115
- // Old pattern was: join(..., 'pennyfarthing', 'pennyfarthing-dist')
116
- const hasOldPattern = content.includes("join(__dirname, 'pennyfarthing', 'pennyfarthing-dist')") ||
117
- content.includes('join(__dirname, "pennyfarthing", "pennyfarthing-dist")');
118
- assert.ok(!hasOldPattern, 'paths.ts should NOT have hardcoded pennyfarthing path - use shared resolver instead');
119
- });
120
- it('should depend on @pennyfarthing/shared in package.json', () => {
121
- const packageJsonPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'package.json');
122
- if (!existsSync(packageJsonPath)) {
123
- assert.fail('packages/cyclist/package.json must exist first');
124
- }
125
- const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
126
- const deps = pkg.dependencies || {};
127
- assert.ok(deps['@pennyfarthing/shared'], 'packages/cyclist should depend on @pennyfarthing/shared');
128
- });
129
- });
130
- describe('AC4: Electron app starts and shows portraits', () => {
131
- // Note: Full build verification requires pnpm install which needs workspace resolution
132
- // These tests verify the package configuration is correct for building
133
- it('should have Electron dependency', () => {
134
- const packageJsonPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'package.json');
135
- if (!existsSync(packageJsonPath)) {
136
- assert.fail('packages/cyclist/package.json must exist first');
137
- }
138
- const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
139
- const devDeps = pkg.devDependencies || {};
140
- assert.ok(devDeps['electron'], 'packages/cyclist should have electron as devDependency');
141
- });
142
- it('should have build script in package.json', () => {
143
- const packageJsonPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'package.json');
144
- if (!existsSync(packageJsonPath)) {
145
- assert.fail('packages/cyclist/package.json must exist first');
146
- }
147
- const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
148
- assert.ok(pkg.scripts?.build, 'packages/cyclist should have a build script');
149
- });
150
- it('should have main entry point configured', () => {
151
- const packageJsonPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'package.json');
152
- if (!existsSync(packageJsonPath)) {
153
- assert.fail('packages/cyclist/package.json must exist first');
154
- }
155
- const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
156
- assert.ok(pkg.main, 'packages/cyclist should have a main entry point');
157
- });
158
- });
159
- describe('AC5: Dogfooding scenario works', () => {
160
- it('should resolve portraits from pennyfarthing-dist in monorepo', () => {
161
- // This test validates that portrait resolution works in the monorepo context
162
- const pennyfarthingDist = join(PROJECT_ROOT, 'pennyfarthing-dist');
163
- assert.ok(existsSync(pennyfarthingDist), 'pennyfarthing-dist/ should exist at monorepo root for dogfooding');
164
- });
165
- it('should have portraits directory in pennyfarthing-dist', () => {
166
- const portraitsDir = join(PROJECT_ROOT, 'pennyfarthing-dist', 'personas', 'portraits');
167
- assert.ok(existsSync(portraitsDir), 'pennyfarthing-dist/personas/portraits/ should exist');
168
- });
169
- it('should have at least one theme with portraits', () => {
170
- const portraitsDir = join(PROJECT_ROOT, 'pennyfarthing-dist', 'personas', 'portraits');
171
- if (!existsSync(portraitsDir)) {
172
- assert.fail('portraits directory must exist first');
173
- }
174
- const themes = readdirSync(portraitsDir);
175
- assert.ok(themes.length > 0, 'Should have at least one theme directory in portraits');
176
- });
177
- it('should have paths.ts configured to use shared resolver', () => {
178
- // Verify paths.ts source code uses the shared resolver
179
- // Runtime verification requires pnpm install + build
180
- const pathsPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'src', 'paths.ts');
181
- if (!existsSync(pathsPath)) {
182
- assert.fail('packages/cyclist/src/paths.ts must exist');
183
- }
184
- const content = readFileSync(pathsPath, 'utf-8');
185
- assert.ok(content.includes('resolvePennyfarthingDist') && content.includes('getPortraitPaths'), 'paths.ts should use resolvePennyfarthingDist and getPortraitPaths from shared');
186
- });
187
- });
188
- describe('Build Integration', () => {
189
- // Note: Full TypeScript compilation requires pnpm install to resolve workspace dependencies
190
- // These tests verify the build configuration is correct
191
- it('should have valid tsconfig.json extending base', () => {
192
- const tsconfigPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'tsconfig.json');
193
- if (!existsSync(tsconfigPath)) {
194
- assert.fail('packages/cyclist/tsconfig.json must exist');
195
- }
196
- const content = readFileSync(tsconfigPath, 'utf-8');
197
- const tsconfig = JSON.parse(content);
198
- assert.ok(tsconfig.extends?.includes('tsconfig.base.json'), 'tsconfig.json should extend ../../tsconfig.base.json');
199
- });
200
- it('should have outDir configured for dist', () => {
201
- const tsconfigPath = join(PROJECT_ROOT, 'packages', 'cyclist', 'tsconfig.json');
202
- if (!existsSync(tsconfigPath)) {
203
- assert.fail('packages/cyclist/tsconfig.json must exist');
204
- }
205
- const content = readFileSync(tsconfigPath, 'utf-8');
206
- const tsconfig = JSON.parse(content);
207
- assert.strictEqual(tsconfig.compilerOptions?.outDir, 'dist', 'tsconfig.json should output to dist directory');
208
- });
209
- });
210
- describe('Source File Completeness', () => {
211
- it('should have pennyfarthing.ts (persona/theme loading)', () => {
212
- const pennyfarthingTs = join(PROJECT_ROOT, 'packages', 'cyclist', 'src', 'pennyfarthing.ts');
213
- assert.ok(existsSync(pennyfarthingTs), 'packages/cyclist/src/pennyfarthing.ts must exist');
214
- });
215
- it('should have server.ts (Express server)', () => {
216
- const serverTs = join(PROJECT_ROOT, 'packages', 'cyclist', 'src', 'server.ts');
217
- assert.ok(existsSync(serverTs), 'packages/cyclist/src/server.ts must exist');
218
- });
219
- it('should have api/ directory', () => {
220
- const apiDir = join(PROJECT_ROOT, 'packages', 'cyclist', 'src', 'api');
221
- assert.ok(existsSync(apiDir), 'packages/cyclist/src/api/ directory must exist');
222
- });
223
- it('should have tests/ directory', () => {
224
- const testsDir = join(PROJECT_ROOT, 'packages', 'cyclist', 'tests');
225
- assert.ok(existsSync(testsDir), 'packages/cyclist/tests/ directory must exist');
226
- });
227
- });
228
- });
229
- //# sourceMappingURL=cyclist-migration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cyclist-migration.test.js","sourceRoot":"","sources":["../../src/cli/cyclist-migration.test.ts"],"names":[],"mappings":"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"}
@@ -1,59 +0,0 @@
1
- /**
2
- * Stale artifact detection and cleanup for v8-v10 → v11.x upgrades.
3
- *
4
- * Story 117-3: Upgrading from v8.x-v10.x leaves stale artifacts:
5
- * - .claude/manifest.json (v8-era manifest, now at .pennyfarthing/)
6
- * - .claude/personas/ directory (removed in v11)
7
- * - Non-prefixed commands in .claude/commands/ (41 extras from old naming scheme)
8
- * - Non-prefixed skills in .claude/skills/ (20 extras from old naming scheme)
9
- *
10
- * This module provides detection and cleanup functions used by:
11
- * - `pennyfarthing update` (automatic cleanup during upgrade)
12
- * - `pennyfarthing doctor` (detection and --fix)
13
- */
14
- /**
15
- * Known stale command names from pre-pf-prefix era (v8-v10).
16
- * These were renamed to pf-* in v11.
17
- * Source: migration 009's OLD_COMMAND_NAMES list.
18
- */
19
- export declare const STALE_COMMAND_NAMES: readonly string[];
20
- /**
21
- * Known stale skill names from pre-pf-prefix era (v8-v10).
22
- * These were renamed to pf-* in v11.
23
- * Source: migration 009's OLD_SKILL_NAMES list.
24
- */
25
- export declare const STALE_SKILL_NAMES: readonly string[];
26
- export interface StaleArtifact {
27
- path: string;
28
- type: 'file' | 'directory';
29
- category: 'manifest' | 'personas' | 'command' | 'skill';
30
- description: string;
31
- }
32
- export interface CleanupResult {
33
- removed: StaleArtifact[];
34
- preserved: StaleArtifact[];
35
- dryRun: boolean;
36
- }
37
- /**
38
- * Detect stale artifacts from v8-v10 installations.
39
- *
40
- * Checks for:
41
- * 1. .claude/manifest.json (redundant when .pennyfarthing/manifest.json exists)
42
- * 2. .claude/personas/ directory (removed in v11)
43
- * 3. Non-prefixed command files that match known stale names
44
- * 4. Non-prefixed skill directories that match known stale names
45
- *
46
- * Only flags items that are real files/directories (not symlinks created
47
- * by migration 007's backward-compat layer).
48
- */
49
- export declare function detectStaleArtifacts(projectRoot: string): StaleArtifact[];
50
- /**
51
- * Remove detected stale artifacts.
52
- *
53
- * Respects dryRun flag — logs what would be removed without deleting.
54
- * Returns summary of what was removed vs preserved.
55
- */
56
- export declare function cleanupStaleArtifacts(projectRoot: string, options?: {
57
- dryRun?: boolean;
58
- }): CleanupResult;
59
- //# sourceMappingURL=stale-artifacts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stale-artifacts.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/stale-artifacts.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAchD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAM9C,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,QAAQ,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IACxD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,EAAE,CA4EzE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7B,aAAa,CA0Bf"}
@@ -1,163 +0,0 @@
1
- import { existsSync, readdirSync, lstatSync, unlinkSync, rmSync } from 'fs';
2
- import { join } from 'path';
3
- /**
4
- * Stale artifact detection and cleanup for v8-v10 → v11.x upgrades.
5
- *
6
- * Story 117-3: Upgrading from v8.x-v10.x leaves stale artifacts:
7
- * - .claude/manifest.json (v8-era manifest, now at .pennyfarthing/)
8
- * - .claude/personas/ directory (removed in v11)
9
- * - Non-prefixed commands in .claude/commands/ (41 extras from old naming scheme)
10
- * - Non-prefixed skills in .claude/skills/ (20 extras from old naming scheme)
11
- *
12
- * This module provides detection and cleanup functions used by:
13
- * - `pennyfarthing update` (automatic cleanup during upgrade)
14
- * - `pennyfarthing doctor` (detection and --fix)
15
- */
16
- /**
17
- * Known stale command names from pre-pf-prefix era (v8-v10).
18
- * These were renamed to pf-* in v11.
19
- * Source: migration 009's OLD_COMMAND_NAMES list.
20
- */
21
- export const STALE_COMMAND_NAMES = [
22
- 'architect.md', 'ba.md', 'brainstorming.md', 'check.md',
23
- 'chore.md', 'close-epic.md', 'continue-session.md',
24
- 'create-branches-from-story.md', 'create-theme.md', 'dev.md',
25
- 'devops.md', 'fix-blocker.md', 'git-cleanup.md', 'health-check.md',
26
- 'help.md', 'list-themes.md', 'new-work.md', 'orchestrator.md',
27
- 'parallel-work.md', 'party-mode.md', 'patch.md', 'permissions.md',
28
- 'pm.md', 'prime.md', 'release.md', 'repo-status.md', 'retro.md',
29
- 'reviewer.md', 'run-ci.md', 'set-theme.md', 'setup.md',
30
- 'show-theme.md', 'sm.md', 'sprint-planning.md', 'sprint.md',
31
- 'standalone.md', 'start-epic.md', 'sync-epic-to-jira.md',
32
- 'sync-work-with-sprint.md', 'tea.md', 'tech-writer.md',
33
- 'theme-maker.md', 'theme.md', 'update-domain-docs.md',
34
- 'ux-designer.md', 'work.md', 'workflow.md',
35
- ];
36
- /**
37
- * Known stale skill names from pre-pf-prefix era (v8-v10).
38
- * These were renamed to pf-* in v11.
39
- * Source: migration 009's OLD_SKILL_NAMES list.
40
- */
41
- export const STALE_SKILL_NAMES = [
42
- 'agentic-patterns', 'bc', 'changelog', 'code-review',
43
- 'context-engineering', 'cyclist', 'dev-patterns', 'jira',
44
- 'just', 'mermaid', 'otel', 'permissions', 'sprint', 'story',
45
- 'systematic-debugging', 'testing', 'theme', 'theme-creation',
46
- 'workflow', 'yq',
47
- ];
48
- /**
49
- * Detect stale artifacts from v8-v10 installations.
50
- *
51
- * Checks for:
52
- * 1. .claude/manifest.json (redundant when .pennyfarthing/manifest.json exists)
53
- * 2. .claude/personas/ directory (removed in v11)
54
- * 3. Non-prefixed command files that match known stale names
55
- * 4. Non-prefixed skill directories that match known stale names
56
- *
57
- * Only flags items that are real files/directories (not symlinks created
58
- * by migration 007's backward-compat layer).
59
- */
60
- export function detectStaleArtifacts(projectRoot) {
61
- const stale = [];
62
- const claudeDir = join(projectRoot, '.claude');
63
- if (!existsSync(claudeDir))
64
- return stale;
65
- // 1. .claude/manifest.json — only stale if .pennyfarthing/manifest.json also exists
66
- const claudeManifest = join(claudeDir, 'manifest.json');
67
- const pfManifest = join(projectRoot, '.pennyfarthing', 'manifest.json');
68
- if (existsSync(claudeManifest) && existsSync(pfManifest)) {
69
- const stat = lstatSync(claudeManifest);
70
- if (!stat.isSymbolicLink()) {
71
- stale.push({
72
- path: '.claude/manifest.json',
73
- type: 'file',
74
- category: 'manifest',
75
- description: 'Redundant v8-era manifest (superseded by .pennyfarthing/manifest.json)',
76
- });
77
- }
78
- }
79
- // 2. .claude/personas/ directory — removed in v11
80
- const personasDir = join(claudeDir, 'personas');
81
- if (existsSync(personasDir)) {
82
- const stat = lstatSync(personasDir);
83
- if (stat.isDirectory() && !stat.isSymbolicLink()) {
84
- stale.push({
85
- path: '.claude/personas',
86
- type: 'directory',
87
- category: 'personas',
88
- description: 'Personas directory removed in v11 (now in .pennyfarthing/personas/)',
89
- });
90
- }
91
- }
92
- // 3. Non-prefixed commands matching known stale names
93
- const commandsDir = join(claudeDir, 'commands');
94
- if (existsSync(commandsDir)) {
95
- const entries = readdirSync(commandsDir);
96
- for (const entry of entries) {
97
- if (STALE_COMMAND_NAMES.includes(entry)) {
98
- const entryPath = join(commandsDir, entry);
99
- const stat = lstatSync(entryPath);
100
- if (stat.isFile() && !stat.isSymbolicLink()) {
101
- stale.push({
102
- path: `.claude/commands/${entry}`,
103
- type: 'file',
104
- category: 'command',
105
- description: `Stale non-prefixed command (renamed to pf-${entry} in v11)`,
106
- });
107
- }
108
- }
109
- }
110
- }
111
- // 4. Non-prefixed skills matching known stale names
112
- const skillsDir = join(claudeDir, 'skills');
113
- if (existsSync(skillsDir)) {
114
- const entries = readdirSync(skillsDir);
115
- for (const entry of entries) {
116
- if (STALE_SKILL_NAMES.includes(entry)) {
117
- const entryPath = join(skillsDir, entry);
118
- const stat = lstatSync(entryPath);
119
- if (stat.isDirectory() && !stat.isSymbolicLink()) {
120
- stale.push({
121
- path: `.claude/skills/${entry}`,
122
- type: 'directory',
123
- category: 'skill',
124
- description: `Stale non-prefixed skill (renamed to pf-${entry} in v11)`,
125
- });
126
- }
127
- }
128
- }
129
- }
130
- return stale;
131
- }
132
- /**
133
- * Remove detected stale artifacts.
134
- *
135
- * Respects dryRun flag — logs what would be removed without deleting.
136
- * Returns summary of what was removed vs preserved.
137
- */
138
- export function cleanupStaleArtifacts(projectRoot, options) {
139
- const dryRun = options?.dryRun ?? false;
140
- const artifacts = detectStaleArtifacts(projectRoot);
141
- if (dryRun || artifacts.length === 0) {
142
- return { removed: artifacts, preserved: [], dryRun };
143
- }
144
- const removed = [];
145
- const preserved = [];
146
- for (const artifact of artifacts) {
147
- const fullPath = join(projectRoot, artifact.path);
148
- try {
149
- if (artifact.type === 'file') {
150
- unlinkSync(fullPath);
151
- }
152
- else {
153
- rmSync(fullPath, { recursive: true, force: true });
154
- }
155
- removed.push(artifact);
156
- }
157
- catch {
158
- preserved.push(artifact);
159
- }
160
- }
161
- return { removed, preserved, dryRun };
162
- }
163
- //# sourceMappingURL=stale-artifacts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stale-artifacts.js","sourceRoot":"","sources":["../../../src/cli/utils/stale-artifacts.ts"],"names":[],"mappings":"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"}