@pennyfarthing/core 11.3.3 → 11.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (577) hide show
  1. package/README.md +1 -1
  2. package/package.json +3 -2
  3. package/packages/core/dist/workflow/__test_context_watch__/.session/.tandem-turn-counter +1 -0
  4. package/packages/core/dist/workflow/__test_context_watch__/.session/95-6-session.md +3 -0
  5. package/packages/core/dist/workflow/__test_context_watch__/.session/95-6-tandem-architect.md +6 -0
  6. package/packages/core/dist/workflow/__test_file_watch__/.session/95-4-tandem-architect.md +6 -0
  7. package/packages/core/dist/workflow/__test_file_watch__/workdir/trigger.ts +1 -0
  8. package/packages/core/dist/workflow/__test_tool_watch__/.session/95-5-tandem-architect.md +6 -0
  9. package/packages/core/dist/workflow/__test_tool_watch__/.session/95-5-tandem-toolcalls.jsonl +1 -0
  10. package/packages/core/dist/workflow/cross-entity-validation.d.ts +117 -0
  11. package/packages/core/dist/workflow/cross-entity-validation.d.ts.map +1 -0
  12. package/packages/core/dist/workflow/cross-entity-validation.js +148 -0
  13. package/packages/core/dist/workflow/cross-entity-validation.js.map +1 -0
  14. package/packages/core/dist/workflow/cross-entity-validation.test.d.ts +10 -0
  15. package/packages/core/dist/workflow/cross-entity-validation.test.d.ts.map +1 -0
  16. package/packages/core/dist/workflow/cross-entity-validation.test.js +512 -0
  17. package/packages/core/dist/workflow/cross-entity-validation.test.js.map +1 -0
  18. package/pennyfarthing-dist/agents/sm-finish.md +2 -2
  19. package/pennyfarthing-dist/agents/testing-runner.md +1 -1
  20. package/pennyfarthing-dist/commands/pf-prime.md +1 -1
  21. package/pennyfarthing-dist/guides/agent-behavior.md +1 -1
  22. package/pennyfarthing-dist/guides/bikerack.md +1 -1
  23. package/pennyfarthing-dist/guides/brownfield-tools.md +7 -7
  24. package/pennyfarthing-dist/guides/gates.md +3 -3
  25. package/pennyfarthing-dist/guides/handoff-cli.md +6 -6
  26. package/pennyfarthing-dist/guides/prime.md +6 -6
  27. package/pennyfarthing-dist/guides/scale-levels.md +1 -1
  28. package/pennyfarthing-dist/personas/themes/firefly.yaml +4 -4
  29. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/CLAUDE.md +2 -2
  30. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/README.md +2 -2
  31. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/__pycache__/__init__.cpython-314.pyc +0 -0
  32. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/__pycache__/cli.cpython-314.pyc +0 -0
  33. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/__pycache__/context.cpython-314.pyc +0 -0
  34. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/__pycache__/__init__.cpython-314.pyc +0 -0
  35. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/__pycache__/cli.cpython-314.pyc +0 -0
  36. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/__pycache__/focus.cpython-314.pyc +0 -0
  37. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/__pycache__/split.cpython-314.pyc +0 -0
  38. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/cli.py +3 -3
  39. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/focus.py +1 -1
  40. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/split.py +1 -1
  41. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bellmode_hook.py +2 -2
  42. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/__init__.py +1 -1
  43. package/pennyfarthing-dist/pf/bikerack/__main__.py +5 -0
  44. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
  45. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
  46. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
  47. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/audit_log_panel.py +1 -1
  48. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/background_panel.py +1 -1
  49. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/changed_panel.py +2 -2
  50. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/cli.py +3 -3
  51. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/context_meter_footer.py +1 -1
  52. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/debug_panel.py +1 -1
  53. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/diffs_panel.py +1 -1
  54. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/git_panel.py +1 -1
  55. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/launcher.py +2 -2
  56. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/portrait_resolver.py +2 -2
  57. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/progress_panel.py +1 -1
  58. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/sprint_panel.py +3 -3
  59. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/story_detail_data.py +1 -1
  60. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/story_detail_screen.py +2 -2
  61. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/tui.py +17 -17
  62. package/pennyfarthing-dist/pf/bmad/__pycache__/__init__.cpython-314.pyc +0 -0
  63. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/__pycache__/cli.cpython-314.pyc +0 -0
  64. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/cli.py +7 -7
  65. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/importer.py +4 -4
  66. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/sync.py +9 -9
  67. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/test_parser.py +2 -2
  68. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/test_sync.py +2 -2
  69. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/brownfield/__init__.py +1 -1
  70. package/pennyfarthing-dist/pf/brownfield/__main__.py +8 -0
  71. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/brownfield/cli.py +2 -2
  72. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/cli.py +24 -24
  73. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/codemarkers/__init__.py +2 -2
  74. package/pennyfarthing-dist/pf/codemarkers/__main__.py +6 -0
  75. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/codemarkers/analyze.py +1 -1
  76. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/codemarkers/cli.py +8 -8
  77. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/codemarkers/formatters.py +2 -2
  78. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/__init__.py +2 -2
  79. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/__pycache__/__init__.cpython-314.pyc +0 -0
  80. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/__pycache__/config.cpython-314.pyc +0 -0
  81. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/__pycache__/output.cpython-314.pyc +0 -0
  82. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/pr_config.py +1 -1
  83. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/themes.py +1 -1
  84. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/complexity/__init__.py +2 -2
  85. package/pennyfarthing-dist/pf/complexity/__main__.py +6 -0
  86. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/complexity/analyze.py +1 -1
  87. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/complexity/cli.py +4 -4
  88. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/complexity/formatters.py +1 -1
  89. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/config.py +2 -2
  90. package/pennyfarthing-dist/pf/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
  91. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/consultation/__pycache__/cli.cpython-314.pyc +0 -0
  92. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/consultation/cli.py +5 -5
  93. package/pennyfarthing-dist/pf/deadcode/__main__.py +6 -0
  94. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
  95. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
  96. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/analyze.py +1 -1
  97. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/cli.py +8 -8
  98. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/formatters.py +1 -1
  99. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/dependencies/__init__.py +2 -2
  100. package/pennyfarthing-dist/pf/dependencies/__main__.py +5 -0
  101. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/dependencies/analyze.py +1 -1
  102. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/dependencies/cli.py +4 -4
  103. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/dependencies/formatters.py +1 -1
  104. package/pennyfarthing-dist/pf/epic/__pycache__/__init__.cpython-314.pyc +0 -0
  105. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/epic/__pycache__/cli.cpython-314.pyc +0 -0
  106. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/gate/cli.py +2 -2
  107. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git/__init__.py +3 -3
  108. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git/create_branches.py +3 -3
  109. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git/hooks_installer.py +1 -1
  110. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git/repos.py +2 -2
  111. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git/status_all.py +1 -1
  112. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git/worktree.py +3 -3
  113. package/pennyfarthing-dist/pf/git_group/__pycache__/__init__.cpython-314.pyc +0 -0
  114. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git_group/__pycache__/cli.cpython-314.pyc +0 -0
  115. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git_group/cli.py +10 -10
  116. package/pennyfarthing-dist/pf/handoff/__pycache__/__init__.cpython-314.pyc +0 -0
  117. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/__pycache__/cli.cpython-314.pyc +0 -0
  118. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/cli.py +5 -5
  119. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/marker.py +1 -1
  120. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/phase_check.py +2 -2
  121. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/__init__.py +2 -2
  122. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/__main__.py +2 -2
  123. package/pennyfarthing-dist/pf/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  124. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
  125. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
  126. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/__pycache__/models.cpython-314.pyc +0 -0
  127. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/analyze.py +8 -8
  128. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/cli.py +3 -3
  129. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/formatters.py +1 -1
  130. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
  131. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
  132. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/cli.cpython-314.pyc +0 -0
  133. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
  134. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
  135. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
  136. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
  137. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/bell_mode.py +1 -1
  138. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/cli.py +11 -11
  139. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/context_breaker.py +1 -1
  140. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/context_warning.py +1 -1
  141. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/cyclist_pretooluse.py +1 -1
  142. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/schema_validation.py +1 -1
  143. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/session_start.py +3 -3
  144. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/sprint_yaml_validation.py +1 -1
  145. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/statusline.py +1 -1
  146. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks.py +3 -3
  147. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/__init__.py +2 -2
  148. package/pennyfarthing-dist/pf/hotspots/__main__.py +6 -0
  149. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
  150. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
  151. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
  152. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/__pycache__/models.cpython-314.pyc +0 -0
  153. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/analyze.py +2 -2
  154. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/cli.py +5 -5
  155. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/formatters.py +2 -2
  156. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__init__.py +5 -5
  157. package/pennyfarthing-dist/pf/jira/__main__.py +10 -0
  158. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/__init__.cpython-314.pyc +0 -0
  159. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
  160. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/claim.cpython-314.pyc +0 -0
  161. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/cli.cpython-314.pyc +0 -0
  162. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/client.cpython-314.pyc +0 -0
  163. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/create.cpython-314.pyc +0 -0
  164. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/epic.cpython-314.pyc +0 -0
  165. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/operations.cpython-314.pyc +0 -0
  166. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
  167. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/story.cpython-314.pyc +0 -0
  168. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/sync.cpython-314.pyc +0 -0
  169. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/bidirectional.py +9 -9
  170. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/claim.py +4 -4
  171. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/cli.py +15 -15
  172. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/client.py +1 -1
  173. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/create.py +5 -5
  174. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/epic.py +6 -6
  175. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/operations.py +1 -1
  176. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/reconcile.py +2 -2
  177. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/story.py +6 -6
  178. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/sync.py +5 -5
  179. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira_bidirectional_sync.py +3 -3
  180. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira_epic_creation.py +3 -3
  181. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira_sync.py +3 -3
  182. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira_sync_story.py +3 -3
  183. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/launch/__pycache__/__init__.cpython-314.pyc +0 -0
  184. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/launch/__pycache__/cli.cpython-314.pyc +0 -0
  185. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/launch/cli.py +7 -7
  186. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/migration/__init__.py +5 -5
  187. package/pennyfarthing-dist/pf/migration/__main__.py +10 -0
  188. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/migration/cli.py +6 -6
  189. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/migration/validate.py +7 -7
  190. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/output.py +2 -2
  191. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/patch_mode.py +1 -1
  192. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/preflight/__init__.py +1 -1
  193. package/pennyfarthing-dist/pf/preflight/__main__.py +10 -0
  194. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/preflight/cli.py +2 -2
  195. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/pretooluse_hook.py +1 -1
  196. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/__init__.py +7 -7
  197. package/pennyfarthing-dist/pf/prime/__main__.py +8 -0
  198. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/cli.py +9 -9
  199. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/heatmap.py +1 -1
  200. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/loader.py +3 -3
  201. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/persona.py +4 -4
  202. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/session.py +2 -2
  203. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/tiers.py +4 -4
  204. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/workflow.py +3 -3
  205. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/schema_validation_hook.py +1 -1
  206. package/pennyfarthing-dist/pf/session/__pycache__/__init__.cpython-314.pyc +0 -0
  207. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/session/__pycache__/cli.cpython-314.pyc +0 -0
  208. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/session/cli.py +2 -2
  209. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/session_start_hook.py +1 -1
  210. package/pennyfarthing-dist/pf/settings/__pycache__/__init__.cpython-314.pyc +0 -0
  211. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/settings/__pycache__/cli.cpython-314.pyc +0 -0
  212. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/settings/cli.py +3 -3
  213. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/settings/settings.py +1 -1
  214. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__init__.py +5 -5
  215. package/pennyfarthing-dist/pf/sprint/__main__.py +10 -0
  216. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
  217. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/archive.cpython-314.pyc +0 -0
  218. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/cli.cpython-314.pyc +0 -0
  219. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
  220. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/epic_update.cpython-314.pyc +0 -0
  221. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/loader.cpython-314.pyc +0 -0
  222. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/status.cpython-314.pyc +0 -0
  223. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
  224. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
  225. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
  226. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/validator.cpython-314.pyc +0 -0
  227. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/work.cpython-314.pyc +0 -0
  228. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
  229. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/archive.py +3 -3
  230. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/archive_epic.py +3 -3
  231. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/cli.py +41 -41
  232. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/epic_add.py +3 -3
  233. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/epic_update.py +3 -3
  234. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/import_epic.py +2 -2
  235. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/loader.py +1 -1
  236. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/status.py +1 -1
  237. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/story_add.py +5 -5
  238. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/story_finish.py +3 -3
  239. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/story_update.py +4 -4
  240. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/validate_cmd.py +2 -2
  241. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/validator.py +3 -3
  242. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/work.py +4 -4
  243. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/story/__init__.py +7 -7
  244. package/pennyfarthing-dist/pf/story/__main__.py +10 -0
  245. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/story/cli.py +4 -4
  246. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/story/create.py +2 -2
  247. package/pennyfarthing-dist/pf/tests/__init__.py +1 -0
  248. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/conftest.py +3 -3
  249. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_108_1_gate_migration.py +3 -3
  250. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_108_2_remove_handoff_fallback.py +2 -2
  251. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_archive_epic.py +2 -2
  252. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_bc.py +1 -1
  253. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_bikerack.py +39 -39
  254. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_brownfield.py +6 -6
  255. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_cli_modules.py +20 -20
  256. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_cli_normalization.py +1 -1
  257. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_codemarkers.py +60 -60
  258. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_common.py +17 -17
  259. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_confidence_sm_evaluation.py +1 -1
  260. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_confidence_sm_gate.py +3 -3
  261. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_dialogue_manager.py +11 -11
  262. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_epic_shard_validation.py +15 -15
  263. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_gate_file_resolution.py +1 -1
  264. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_gate_runner.py +1 -1
  265. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_git_utils.py +8 -8
  266. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_handoff_cli.py +12 -12
  267. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_handoff_e2e.py +2 -2
  268. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_healthscore.py +20 -20
  269. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_jira_package.py +29 -29
  270. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_package_structure.py +42 -42
  271. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_patch_mode.py +22 -22
  272. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_prime.py +41 -41
  273. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_resolve_gate_file_field.py +1 -3
  274. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_sprint_package.py +30 -30
  275. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_sprint_panel.py +2 -2
  276. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_sprint_validator.py +1 -1
  277. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_story_add.py +11 -11
  278. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_story_package.py +12 -12
  279. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_story_update.py +16 -16
  280. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_tiers.py +72 -72
  281. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_token_counting.py +28 -28
  282. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_topology_loader.py +37 -37
  283. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_tui_focus.py +2 -2
  284. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_tui_panel_persistence.py +10 -10
  285. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_validate_cmd.py +1 -1
  286. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_version_sentinel.py +1 -1
  287. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_workflow_check.py +7 -7
  288. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_workflow_list_team.py +1 -1
  289. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_yaml_io.py +1 -1
  290. package/pennyfarthing-dist/pf/theme/__main__.py +6 -0
  291. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/theme/__pycache__/__init__.cpython-314.pyc +0 -0
  292. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/theme/__pycache__/cli.cpython-314.pyc +0 -0
  293. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/theme/cli.py +6 -6
  294. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/__pycache__/__init__.cpython-314.pyc +0 -0
  295. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/__pycache__/cli.cpython-314.pyc +0 -0
  296. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/agent.py +1 -1
  297. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/schema.py +2 -2
  298. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/skill_command.py +1 -1
  299. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/sprint.py +2 -2
  300. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/tandem_awareness.py +1 -1
  301. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/team_mode.py +1 -1
  302. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/workflow.py +1 -1
  303. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/cli.py +9 -9
  304. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/welcome_hook.py +1 -1
  305. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/__init__.py +3 -3
  306. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
  307. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/__pycache__/cli.cpython-314.pyc +0 -0
  308. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/__pycache__/scale.cpython-314.pyc +0 -0
  309. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/__pycache__/state.cpython-314.pyc +0 -0
  310. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/cli.py +18 -18
  311. package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/helpers.py +1 -1
  312. package/pennyfarthing-dist/pyproject.toml +18 -0
  313. package/pennyfarthing-dist/scripts/core/agent-session.sh +3 -3
  314. package/pennyfarthing-dist/scripts/core/check-context.sh +8 -8
  315. package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +3 -3
  316. package/pennyfarthing-dist/scripts/jira/README.md +1 -1
  317. package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +1 -1
  318. package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +1 -1
  319. package/pennyfarthing-dist/scripts/jira/jira-claim-story.sh +1 -1
  320. package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +1 -1
  321. package/pennyfarthing-dist/scripts/jira/jira-sync-story.sh +1 -1
  322. package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +1 -1
  323. package/pennyfarthing-dist/scripts/lib/common.sh +3 -3
  324. package/pennyfarthing-dist/scripts/lib/run-pf.sh +11 -13
  325. package/pennyfarthing-dist/scripts/sprint/README.md +1 -1
  326. package/pennyfarthing-dist/scripts/story/create-story.sh +1 -1
  327. package/pennyfarthing-dist/scripts/story/size-story.sh +1 -1
  328. package/pennyfarthing-dist/scripts/story/story-template.sh +1 -1
  329. package/pennyfarthing-dist/scripts/theme/list-themes.sh +3 -3
  330. package/pennyfarthing-dist/templates/pyproject.toml +3 -3
  331. package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
  332. package/pennyfarthing_scripts/__pycache__/config.cpython-314.pyc +0 -0
  333. package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
  334. package/pennyfarthing_scripts/__pycache__/jira_bidirectional_sync.cpython-314.pyc +0 -0
  335. package/pennyfarthing_scripts/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
  336. package/pennyfarthing_scripts/__pycache__/jira_sync.cpython-314.pyc +0 -0
  337. package/pennyfarthing_scripts/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
  338. package/pennyfarthing_scripts/__pycache__/output.cpython-314.pyc +0 -0
  339. package/pennyfarthing_scripts/__pycache__/patch_mode.cpython-314.pyc +0 -0
  340. package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
  341. package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
  342. package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
  343. package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
  344. package/pennyfarthing_scripts/bikerack/__main__.py +0 -5
  345. package/pennyfarthing_scripts/bikerack/__pycache__/__main__.cpython-314.pyc +0 -0
  346. package/pennyfarthing_scripts/bikerack/__pycache__/audit_log_panel.cpython-314.pyc +0 -0
  347. package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
  348. package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
  349. package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
  350. package/pennyfarthing_scripts/bikerack/__pycache__/context_meter_footer.cpython-314.pyc +0 -0
  351. package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
  352. package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
  353. package/pennyfarthing_scripts/bikerack/__pycache__/events.cpython-314.pyc +0 -0
  354. package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
  355. package/pennyfarthing_scripts/bikerack/__pycache__/portrait.cpython-314.pyc +0 -0
  356. package/pennyfarthing_scripts/bikerack/__pycache__/portrait_resolver.cpython-314.pyc +0 -0
  357. package/pennyfarthing_scripts/bikerack/__pycache__/progress_panel.cpython-314.pyc +0 -0
  358. package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
  359. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_data.cpython-314.pyc +0 -0
  360. package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_screen.cpython-314.pyc +0 -0
  361. package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
  362. package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
  363. package/pennyfarthing_scripts/bmad/__pycache__/__init__.cpython-314.pyc +0 -0
  364. package/pennyfarthing_scripts/bmad/__pycache__/parser.cpython-314.pyc +0 -0
  365. package/pennyfarthing_scripts/bmad/__pycache__/sync.cpython-314.pyc +0 -0
  366. package/pennyfarthing_scripts/bmad/__pycache__/test_parser.cpython-314-pytest-9.0.2.pyc +0 -0
  367. package/pennyfarthing_scripts/bmad/__pycache__/test_sync.cpython-314-pytest-9.0.2.pyc +0 -0
  368. package/pennyfarthing_scripts/brownfield/__main__.py +0 -8
  369. package/pennyfarthing_scripts/brownfield/__pycache__/__init__.cpython-314.pyc +0 -0
  370. package/pennyfarthing_scripts/brownfield/__pycache__/__main__.cpython-314.pyc +0 -0
  371. package/pennyfarthing_scripts/brownfield/__pycache__/cli.cpython-314.pyc +0 -0
  372. package/pennyfarthing_scripts/brownfield/__pycache__/discover.cpython-314.pyc +0 -0
  373. package/pennyfarthing_scripts/codemarkers/__main__.py +0 -6
  374. package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
  375. package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
  376. package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
  377. package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
  378. package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
  379. package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
  380. package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
  381. package/pennyfarthing_scripts/complexity/__main__.py +0 -6
  382. package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
  383. package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
  384. package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
  385. package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
  386. package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
  387. package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
  388. package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
  389. package/pennyfarthing_scripts/deadcode/__main__.py +0 -6
  390. package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
  391. package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
  392. package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
  393. package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
  394. package/pennyfarthing_scripts/dependencies/__main__.py +0 -5
  395. package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
  396. package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
  397. package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
  398. package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
  399. package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
  400. package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
  401. package/pennyfarthing_scripts/epic/__pycache__/__init__.cpython-314.pyc +0 -0
  402. package/pennyfarthing_scripts/gate/__pycache__/__init__.cpython-314.pyc +0 -0
  403. package/pennyfarthing_scripts/gate/__pycache__/cli.cpython-314.pyc +0 -0
  404. package/pennyfarthing_scripts/gate/__pycache__/validate.cpython-314.pyc +0 -0
  405. package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
  406. package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
  407. package/pennyfarthing_scripts/git/__pycache__/hooks_installer.cpython-314.pyc +0 -0
  408. package/pennyfarthing_scripts/git/__pycache__/repos.cpython-314.pyc +0 -0
  409. package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
  410. package/pennyfarthing_scripts/git/__pycache__/worktree.cpython-314.pyc +0 -0
  411. package/pennyfarthing_scripts/git_group/__pycache__/__init__.cpython-314.pyc +0 -0
  412. package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-314.pyc +0 -0
  413. package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
  414. package/pennyfarthing_scripts/handoff/__pycache__/gate_file.cpython-314.pyc +0 -0
  415. package/pennyfarthing_scripts/handoff/__pycache__/gate_runner.cpython-314.pyc +0 -0
  416. package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
  417. package/pennyfarthing_scripts/handoff/__pycache__/phase_check.cpython-314.pyc +0 -0
  418. package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
  419. package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
  420. package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
  421. package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
  422. package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
  423. package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
  424. package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
  425. package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
  426. package/pennyfarthing_scripts/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
  427. package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
  428. package/pennyfarthing_scripts/hotspots/__main__.py +0 -6
  429. package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
  430. package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
  431. package/pennyfarthing_scripts/jira/__main__.py +0 -10
  432. package/pennyfarthing_scripts/jira/__pycache__/__main__.cpython-314.pyc +0 -0
  433. package/pennyfarthing_scripts/migration/__main__.py +0 -10
  434. package/pennyfarthing_scripts/migration/__pycache__/__init__.cpython-314.pyc +0 -0
  435. package/pennyfarthing_scripts/migration/__pycache__/session.cpython-314.pyc +0 -0
  436. package/pennyfarthing_scripts/migration/__pycache__/skill.cpython-314.pyc +0 -0
  437. package/pennyfarthing_scripts/migration/__pycache__/step.cpython-314.pyc +0 -0
  438. package/pennyfarthing_scripts/migration/__pycache__/validate.cpython-314.pyc +0 -0
  439. package/pennyfarthing_scripts/preflight/__main__.py +0 -10
  440. package/pennyfarthing_scripts/preflight/__pycache__/__init__.cpython-314.pyc +0 -0
  441. package/pennyfarthing_scripts/preflight/__pycache__/__main__.cpython-314.pyc +0 -0
  442. package/pennyfarthing_scripts/preflight/__pycache__/cli.cpython-314.pyc +0 -0
  443. package/pennyfarthing_scripts/preflight/__pycache__/finish.cpython-314.pyc +0 -0
  444. package/pennyfarthing_scripts/prime/__main__.py +0 -8
  445. package/pennyfarthing_scripts/prime/__pycache__/__init__.cpython-314.pyc +0 -0
  446. package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
  447. package/pennyfarthing_scripts/prime/__pycache__/heatmap.cpython-314.pyc +0 -0
  448. package/pennyfarthing_scripts/prime/__pycache__/loader.cpython-314.pyc +0 -0
  449. package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
  450. package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
  451. package/pennyfarthing_scripts/prime/__pycache__/session.cpython-314.pyc +0 -0
  452. package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
  453. package/pennyfarthing_scripts/prime/__pycache__/version_sentinel.cpython-314.pyc +0 -0
  454. package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
  455. package/pennyfarthing_scripts/session/__pycache__/__init__.cpython-314.pyc +0 -0
  456. package/pennyfarthing_scripts/settings/__pycache__/__init__.cpython-314.pyc +0 -0
  457. package/pennyfarthing_scripts/settings/__pycache__/settings.cpython-314.pyc +0 -0
  458. package/pennyfarthing_scripts/sprint/__main__.py +0 -10
  459. package/pennyfarthing_scripts/sprint/__pycache__/__main__.cpython-314.pyc +0 -0
  460. package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
  461. package/pennyfarthing_scripts/sprint/__pycache__/import_epic.cpython-314.pyc +0 -0
  462. package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
  463. package/pennyfarthing_scripts/story/__main__.py +0 -10
  464. package/pennyfarthing_scripts/story/__pycache__/__init__.cpython-314.pyc +0 -0
  465. package/pennyfarthing_scripts/story/__pycache__/__main__.cpython-314.pyc +0 -0
  466. package/pennyfarthing_scripts/story/__pycache__/cli.cpython-314.pyc +0 -0
  467. package/pennyfarthing_scripts/story/__pycache__/create.cpython-314.pyc +0 -0
  468. package/pennyfarthing_scripts/story/__pycache__/size.cpython-314.pyc +0 -0
  469. package/pennyfarthing_scripts/story/__pycache__/template.cpython-314.pyc +0 -0
  470. package/pennyfarthing_scripts/tests/__init__.py +0 -1
  471. package/pennyfarthing_scripts/tests/__pycache__/__init__.cpython-314.pyc +0 -0
  472. package/pennyfarthing_scripts/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
  473. package/pennyfarthing_scripts/tests/__pycache__/test_108_2_remove_handoff_fallback.cpython-314-pytest-9.0.2.pyc +0 -0
  474. package/pennyfarthing_scripts/tests/__pycache__/test_archive_epic.cpython-314-pytest-9.0.2.pyc +0 -0
  475. package/pennyfarthing_scripts/tests/__pycache__/test_bc.cpython-314-pytest-9.0.2.pyc +0 -0
  476. package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
  477. package/pennyfarthing_scripts/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
  478. package/pennyfarthing_scripts/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
  479. package/pennyfarthing_scripts/tests/__pycache__/test_cli_normalization.cpython-314-pytest-9.0.2.pyc +0 -0
  480. package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
  481. package/pennyfarthing_scripts/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
  482. package/pennyfarthing_scripts/tests/__pycache__/test_confidence_sm_evaluation.cpython-314-pytest-9.0.2.pyc +0 -0
  483. package/pennyfarthing_scripts/tests/__pycache__/test_confidence_sm_gate.cpython-314-pytest-9.0.2.pyc +0 -0
  484. package/pennyfarthing_scripts/tests/__pycache__/test_epic_shard_validation.cpython-314-pytest-9.0.2.pyc +0 -0
  485. package/pennyfarthing_scripts/tests/__pycache__/test_gate_file_resolution.cpython-314-pytest-9.0.2.pyc +0 -0
  486. package/pennyfarthing_scripts/tests/__pycache__/test_gate_runner.cpython-314-pytest-9.0.2.pyc +0 -0
  487. package/pennyfarthing_scripts/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
  488. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
  489. package/pennyfarthing_scripts/tests/__pycache__/test_handoff_e2e.cpython-314-pytest-9.0.2.pyc +0 -0
  490. package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
  491. package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
  492. package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
  493. package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
  494. package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
  495. package/pennyfarthing_scripts/tests/__pycache__/test_resolve_gate_file_field.cpython-314-pytest-9.0.2.pyc +0 -0
  496. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
  497. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_panel.cpython-314-pytest-9.0.2.pyc +0 -0
  498. package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
  499. package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
  500. package/pennyfarthing_scripts/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
  501. package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
  502. package/pennyfarthing_scripts/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
  503. package/pennyfarthing_scripts/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
  504. package/pennyfarthing_scripts/tests/__pycache__/test_topology_loader.cpython-314-pytest-9.0.2.pyc +0 -0
  505. package/pennyfarthing_scripts/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
  506. package/pennyfarthing_scripts/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
  507. package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
  508. package/pennyfarthing_scripts/tests/__pycache__/test_version_sentinel.cpython-314-pytest-9.0.2.pyc +0 -0
  509. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
  510. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_list_team.cpython-314-pytest-9.0.2.pyc +0 -0
  511. package/pennyfarthing_scripts/tests/__pycache__/test_workflow_list_team.cpython-314.pyc +0 -0
  512. package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
  513. package/pennyfarthing_scripts/theme/__main__.py +0 -6
  514. package/pennyfarthing_scripts/validate/adapters/__pycache__/__init__.cpython-314.pyc +0 -0
  515. package/pennyfarthing_scripts/validate/adapters/__pycache__/agent.cpython-314.pyc +0 -0
  516. package/pennyfarthing_scripts/validate/adapters/__pycache__/schema.cpython-314.pyc +0 -0
  517. package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
  518. package/pennyfarthing_scripts/validate/adapters/__pycache__/sprint.cpython-314.pyc +0 -0
  519. package/pennyfarthing_scripts/validate/adapters/__pycache__/tandem_awareness.cpython-314.pyc +0 -0
  520. package/pennyfarthing_scripts/validate/adapters/__pycache__/team_mode.cpython-314.pyc +0 -0
  521. package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
  522. package/pennyfarthing_scripts/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
  523. package/pennyfarthing_scripts/workflow/__pycache__/team_lifecycle.cpython-314.pyc +0 -0
  524. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/__init__.py +0 -0
  525. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/__init__.py +0 -0
  526. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/base_panel.py +0 -0
  527. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/events.py +0 -0
  528. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/ws_client.py +0 -0
  529. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/__init__.py +0 -0
  530. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/parser.py +0 -0
  531. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/brownfield/discover.py +0 -0
  532. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/codemarkers/models.py +0 -0
  533. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/config.py +0 -0
  534. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/output.py +0 -0
  535. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/complexity/models.py +0 -0
  536. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/consultation/__init__.py +0 -0
  537. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/consultation/dialogue_manager.py +0 -0
  538. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/context.py +0 -0
  539. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/__init__.py +0 -0
  540. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/models.py +0 -0
  541. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/dependencies/models.py +0 -0
  542. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/epic/__init__.py +0 -0
  543. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/epic/cli.py +0 -0
  544. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/gate/__init__.py +0 -0
  545. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/gate/validate.py +0 -0
  546. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git_group/__init__.py +0 -0
  547. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/__init__.py +0 -0
  548. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/complete_phase.py +0 -0
  549. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/gate_file.py +0 -0
  550. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/gate_runner.py +0 -0
  551. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/resolve_gate.py +0 -0
  552. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/models.py +0 -0
  553. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__init__.py +0 -0
  554. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/cyclist-pretooluse-hook.sh +0 -0
  555. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/pre_edit_check.py +0 -0
  556. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/reflector_check.py +0 -0
  557. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/session_stop.py +0 -0
  558. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/models.py +0 -0
  559. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/launch/__init__.py +0 -0
  560. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/migration/session.py +0 -0
  561. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/migration/skill.py +0 -0
  562. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/migration/step.py +0 -0
  563. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/preflight/finish.py +0 -0
  564. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/models.py +0 -0
  565. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/version_sentinel.py +0 -0
  566. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/session/__init__.py +0 -0
  567. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/settings/__init__.py +0 -0
  568. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/yaml_io.py +0 -0
  569. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/story/size.py +0 -0
  570. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/story/template.py +0 -0
  571. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/swebench.py +0 -0
  572. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/theme/__init__.py +0 -0
  573. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/__init__.py +0 -0
  574. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/__init__.py +0 -0
  575. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/scale.py +0 -0
  576. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/state.py +0 -0
  577. /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/team_lifecycle.py +0 -0
@@ -1,6 +1,6 @@
1
1
  """Tests for CLI entry point modules.
2
2
 
3
- Story 63-9: Reorganize pennyfarthing_scripts into fan-out CLI pattern.
3
+ Story 63-9: Reorganize pf into fan-out CLI pattern.
4
4
 
5
5
  These tests verify the CLI modules work as entry points and
6
6
  properly delegate to library modules.
@@ -16,7 +16,7 @@ class TestJiraCLIModule:
16
16
  def test_jira_cli_help(self) -> None:
17
17
  """jira CLI should show help with --help."""
18
18
  result = subprocess.run(
19
- [sys.executable, "-m", "pennyfarthing_scripts.jira", "--help"],
19
+ [sys.executable, "-m", "pf.jira", "--help"],
20
20
  capture_output=True,
21
21
  text=True,
22
22
  timeout=30,
@@ -29,7 +29,7 @@ class TestJiraCLIModule:
29
29
  def test_jira_cli_view_subcommand(self) -> None:
30
30
  """jira CLI should have view subcommand."""
31
31
  result = subprocess.run(
32
- [sys.executable, "-m", "pennyfarthing_scripts.jira", "view", "--help"],
32
+ [sys.executable, "-m", "pf.jira", "view", "--help"],
33
33
  capture_output=True,
34
34
  text=True,
35
35
  timeout=30,
@@ -41,7 +41,7 @@ class TestJiraCLIModule:
41
41
  def test_jira_cli_sync_subcommand(self) -> None:
42
42
  """jira CLI should have sync subcommand."""
43
43
  result = subprocess.run(
44
- [sys.executable, "-m", "pennyfarthing_scripts.jira", "sync", "--help"],
44
+ [sys.executable, "-m", "pf.jira", "sync", "--help"],
45
45
  capture_output=True,
46
46
  text=True,
47
47
  timeout=30,
@@ -52,7 +52,7 @@ class TestJiraCLIModule:
52
52
  def test_jira_cli_claim_subcommand(self) -> None:
53
53
  """jira CLI should have claim subcommand."""
54
54
  result = subprocess.run(
55
- [sys.executable, "-m", "pennyfarthing_scripts.jira", "claim", "--help"],
55
+ [sys.executable, "-m", "pf.jira", "claim", "--help"],
56
56
  capture_output=True,
57
57
  text=True,
58
58
  timeout=30,
@@ -63,7 +63,7 @@ class TestJiraCLIModule:
63
63
  def test_jira_cli_create_subcommand(self) -> None:
64
64
  """jira CLI should have create subcommand."""
65
65
  result = subprocess.run(
66
- [sys.executable, "-m", "pennyfarthing_scripts.jira", "create", "--help"],
66
+ [sys.executable, "-m", "pf.jira", "create", "--help"],
67
67
  capture_output=True,
68
68
  text=True,
69
69
  timeout=30,
@@ -74,7 +74,7 @@ class TestJiraCLIModule:
74
74
  def test_jira_cli_bidirectional_subcommand(self) -> None:
75
75
  """jira CLI should have bidirectional subcommand."""
76
76
  result = subprocess.run(
77
- [sys.executable, "-m", "pennyfarthing_scripts.jira", "bidirectional", "--help"],
77
+ [sys.executable, "-m", "pf.jira", "bidirectional", "--help"],
78
78
  capture_output=True,
79
79
  text=True,
80
80
  timeout=30,
@@ -89,7 +89,7 @@ class TestSprintCLIModule:
89
89
  def test_sprint_cli_help(self) -> None:
90
90
  """sprint CLI should show help with --help."""
91
91
  result = subprocess.run(
92
- [sys.executable, "-m", "pennyfarthing_scripts.sprint", "--help"],
92
+ [sys.executable, "-m", "pf.sprint", "--help"],
93
93
  capture_output=True,
94
94
  text=True,
95
95
  timeout=30,
@@ -101,7 +101,7 @@ class TestSprintCLIModule:
101
101
  def test_sprint_cli_status_subcommand(self) -> None:
102
102
  """sprint CLI should have status subcommand."""
103
103
  result = subprocess.run(
104
- [sys.executable, "-m", "pennyfarthing_scripts.sprint", "status", "--help"],
104
+ [sys.executable, "-m", "pf.sprint", "status", "--help"],
105
105
  capture_output=True,
106
106
  text=True,
107
107
  timeout=30,
@@ -112,7 +112,7 @@ class TestSprintCLIModule:
112
112
  def test_sprint_cli_backlog_subcommand(self) -> None:
113
113
  """sprint CLI should have backlog subcommand."""
114
114
  result = subprocess.run(
115
- [sys.executable, "-m", "pennyfarthing_scripts.sprint", "backlog", "--help"],
115
+ [sys.executable, "-m", "pf.sprint", "backlog", "--help"],
116
116
  capture_output=True,
117
117
  text=True,
118
118
  timeout=30,
@@ -123,7 +123,7 @@ class TestSprintCLIModule:
123
123
  def test_sprint_cli_work_subcommand(self) -> None:
124
124
  """sprint CLI should have work subcommand."""
125
125
  result = subprocess.run(
126
- [sys.executable, "-m", "pennyfarthing_scripts.sprint", "work", "--help"],
126
+ [sys.executable, "-m", "pf.sprint", "work", "--help"],
127
127
  capture_output=True,
128
128
  text=True,
129
129
  timeout=30,
@@ -134,7 +134,7 @@ class TestSprintCLIModule:
134
134
  def test_sprint_cli_archive_subcommand(self) -> None:
135
135
  """sprint CLI should have archive subcommand."""
136
136
  result = subprocess.run(
137
- [sys.executable, "-m", "pennyfarthing_scripts.sprint", "archive", "--help"],
137
+ [sys.executable, "-m", "pf.sprint", "archive", "--help"],
138
138
  capture_output=True,
139
139
  text=True,
140
140
  timeout=30,
@@ -149,7 +149,7 @@ class TestStoryCLIModule:
149
149
  def test_story_cli_help(self) -> None:
150
150
  """story CLI should show help with --help."""
151
151
  result = subprocess.run(
152
- [sys.executable, "-m", "pennyfarthing_scripts.story", "--help"],
152
+ [sys.executable, "-m", "pf.story", "--help"],
153
153
  capture_output=True,
154
154
  text=True,
155
155
  timeout=30,
@@ -161,7 +161,7 @@ class TestStoryCLIModule:
161
161
  def test_story_cli_size_subcommand(self) -> None:
162
162
  """story CLI should have size subcommand."""
163
163
  result = subprocess.run(
164
- [sys.executable, "-m", "pennyfarthing_scripts.story", "size", "--help"],
164
+ [sys.executable, "-m", "pf.story", "size", "--help"],
165
165
  capture_output=True,
166
166
  text=True,
167
167
  timeout=30,
@@ -172,7 +172,7 @@ class TestStoryCLIModule:
172
172
  def test_story_cli_template_subcommand(self) -> None:
173
173
  """story CLI should have template subcommand."""
174
174
  result = subprocess.run(
175
- [sys.executable, "-m", "pennyfarthing_scripts.story", "template", "--help"],
175
+ [sys.executable, "-m", "pf.story", "template", "--help"],
176
176
  capture_output=True,
177
177
  text=True,
178
178
  timeout=30,
@@ -183,7 +183,7 @@ class TestStoryCLIModule:
183
183
  def test_story_cli_create_subcommand(self) -> None:
184
184
  """story CLI should have create subcommand."""
185
185
  result = subprocess.run(
186
- [sys.executable, "-m", "pennyfarthing_scripts.story", "create", "--help"],
186
+ [sys.executable, "-m", "pf.story", "create", "--help"],
187
187
  capture_output=True,
188
188
  text=True,
189
189
  timeout=30,
@@ -198,7 +198,7 @@ class TestOldCLICompatibility:
198
198
  def test_jira_sync_module_runnable(self) -> None:
199
199
  """jira_sync.py should still be runnable as module."""
200
200
  result = subprocess.run(
201
- [sys.executable, "-m", "pennyfarthing_scripts.jira_sync", "--help"],
201
+ [sys.executable, "-m", "pf.jira_sync", "--help"],
202
202
  capture_output=True,
203
203
  text=True,
204
204
  timeout=30,
@@ -210,7 +210,7 @@ class TestOldCLICompatibility:
210
210
  def test_jira_bidirectional_sync_module_runnable(self) -> None:
211
211
  """jira_bidirectional_sync.py should still be runnable."""
212
212
  result = subprocess.run(
213
- [sys.executable, "-m", "pennyfarthing_scripts.jira_bidirectional_sync", "--help"],
213
+ [sys.executable, "-m", "pf.jira_bidirectional_sync", "--help"],
214
214
  capture_output=True,
215
215
  text=True,
216
216
  timeout=30,
@@ -221,7 +221,7 @@ class TestOldCLICompatibility:
221
221
  def test_jira_epic_creation_module_runnable(self) -> None:
222
222
  """jira_epic_creation.py should still be runnable."""
223
223
  result = subprocess.run(
224
- [sys.executable, "-m", "pennyfarthing_scripts.jira_epic_creation", "--help"],
224
+ [sys.executable, "-m", "pf.jira_epic_creation", "--help"],
225
225
  capture_output=True,
226
226
  text=True,
227
227
  timeout=30,
@@ -232,7 +232,7 @@ class TestOldCLICompatibility:
232
232
  def test_jira_sync_story_module_runnable(self) -> None:
233
233
  """jira_sync_story.py should still be runnable."""
234
234
  result = subprocess.run(
235
- [sys.executable, "-m", "pennyfarthing_scripts.jira_sync_story", "--help"],
235
+ [sys.executable, "-m", "pf.jira_sync_story", "--help"],
236
236
  capture_output=True,
237
237
  text=True,
238
238
  timeout=30,
@@ -21,7 +21,7 @@ import click.testing
21
21
 
22
22
  def _get_cli():
23
23
  """Import the CLI group lazily to avoid import-time side effects."""
24
- from pennyfarthing_scripts.cli import cli
24
+ from pf.cli import cli
25
25
  return cli
26
26
 
27
27
 
@@ -26,7 +26,7 @@ class TestCodeMarkerModel:
26
26
 
27
27
  def test_required_fields(self) -> None:
28
28
  """CodeMarker requires path, line, marker_type, text."""
29
- from pennyfarthing_scripts.codemarkers.models import CodeMarker
29
+ from pf.codemarkers.models import CodeMarker
30
30
 
31
31
  m = CodeMarker(path="src/app.ts", line=42, marker_type="TODO", text="TODO: refactor")
32
32
  assert m.path == "src/app.ts"
@@ -36,7 +36,7 @@ class TestCodeMarkerModel:
36
36
 
37
37
  def test_default_blame_fields(self) -> None:
38
38
  """Blame fields default to empty/zero."""
39
- from pennyfarthing_scripts.codemarkers.models import CodeMarker
39
+ from pf.codemarkers.models import CodeMarker
40
40
 
41
41
  m = CodeMarker(path="a.py", line=1, marker_type="FIXME", text="FIXME: broken")
42
42
  assert m.author == ""
@@ -46,7 +46,7 @@ class TestCodeMarkerModel:
46
46
 
47
47
  def test_stale_marker(self) -> None:
48
48
  """is_stale can be set to True."""
49
- from pennyfarthing_scripts.codemarkers.models import CodeMarker
49
+ from pf.codemarkers.models import CodeMarker
50
50
 
51
51
  m = CodeMarker(
52
52
  path="old.py", line=10, marker_type="TODO", text="TODO: old",
@@ -57,7 +57,7 @@ class TestCodeMarkerModel:
57
57
 
58
58
  def test_serializable(self) -> None:
59
59
  """CodeMarker should be serializable via dataclasses.asdict."""
60
- from pennyfarthing_scripts.codemarkers.models import CodeMarker
60
+ from pf.codemarkers.models import CodeMarker
61
61
 
62
62
  m = CodeMarker(path="x.py", line=5, marker_type="HACK", text="HACK: workaround")
63
63
  d = asdict(m)
@@ -71,7 +71,7 @@ class TestMarkerSummaryModel:
71
71
 
72
72
  def test_defaults(self) -> None:
73
73
  """MarkerSummary fields default to zero/empty."""
74
- from pennyfarthing_scripts.codemarkers.models import MarkerSummary
74
+ from pf.codemarkers.models import MarkerSummary
75
75
 
76
76
  s = MarkerSummary()
77
77
  assert s.total_markers == 0
@@ -80,7 +80,7 @@ class TestMarkerSummaryModel:
80
80
 
81
81
  def test_populated(self) -> None:
82
82
  """MarkerSummary with values."""
83
- from pennyfarthing_scripts.codemarkers.models import MarkerSummary
83
+ from pf.codemarkers.models import MarkerSummary
84
84
 
85
85
  s = MarkerSummary(
86
86
  total_markers=10, stale_markers=3,
@@ -95,7 +95,7 @@ class TestCodeMarkersResultModel:
95
95
 
96
96
  def test_success_result(self) -> None:
97
97
  """Successful result has success=True and markers list."""
98
- from pennyfarthing_scripts.codemarkers.models import CodeMarker, CodeMarkersResult
98
+ from pf.codemarkers.models import CodeMarker, CodeMarkersResult
99
99
 
100
100
  r = CodeMarkersResult(
101
101
  success=True, repo_name="test", repo_path="/tmp/test",
@@ -108,7 +108,7 @@ class TestCodeMarkersResultModel:
108
108
 
109
109
  def test_error_result(self) -> None:
110
110
  """Error result has success=False and error message."""
111
- from pennyfarthing_scripts.codemarkers.models import CodeMarkersResult
111
+ from pf.codemarkers.models import CodeMarkersResult
112
112
 
113
113
  r = CodeMarkersResult(
114
114
  success=False, repo_name="bad", repo_path="/nonexistent",
@@ -119,7 +119,7 @@ class TestCodeMarkersResultModel:
119
119
 
120
120
  def test_json_serializable(self) -> None:
121
121
  """Full result serializes to JSON via asdict."""
122
- from pennyfarthing_scripts.codemarkers.models import (
122
+ from pf.codemarkers.models import (
123
123
  CodeMarker,
124
124
  CodeMarkersResult,
125
125
  MarkerSummary,
@@ -147,7 +147,7 @@ class TestGrepMarkers:
147
147
 
148
148
  def test_finds_todo(self, tmp_path: Path) -> None:
149
149
  """Detects TODO comments."""
150
- from pennyfarthing_scripts.codemarkers.analyze import _grep_markers
150
+ from pf.codemarkers.analyze import _grep_markers
151
151
 
152
152
  f = tmp_path / "app.py"
153
153
  f.write_text("x = 1\n# TODO: fix this\ny = 2\n")
@@ -158,7 +158,7 @@ class TestGrepMarkers:
158
158
 
159
159
  def test_finds_fixme(self, tmp_path: Path) -> None:
160
160
  """Detects FIXME comments."""
161
- from pennyfarthing_scripts.codemarkers.analyze import _grep_markers
161
+ from pf.codemarkers.analyze import _grep_markers
162
162
 
163
163
  f = tmp_path / "bug.ts"
164
164
  f.write_text("// FIXME: null check needed\n")
@@ -168,7 +168,7 @@ class TestGrepMarkers:
168
168
 
169
169
  def test_finds_hack(self, tmp_path: Path) -> None:
170
170
  """Detects HACK comments."""
171
- from pennyfarthing_scripts.codemarkers.analyze import _grep_markers
171
+ from pf.codemarkers.analyze import _grep_markers
172
172
 
173
173
  f = tmp_path / "util.js"
174
174
  f.write_text("/* HACK: temporary workaround */\n")
@@ -178,7 +178,7 @@ class TestGrepMarkers:
178
178
 
179
179
  def test_finds_xxx(self, tmp_path: Path) -> None:
180
180
  """Detects XXX comments."""
181
- from pennyfarthing_scripts.codemarkers.analyze import _grep_markers
181
+ from pf.codemarkers.analyze import _grep_markers
182
182
 
183
183
  f = tmp_path / "danger.py"
184
184
  f.write_text("# XXX: this is terrible\n")
@@ -188,7 +188,7 @@ class TestGrepMarkers:
188
188
 
189
189
  def test_multiple_markers_same_file(self, tmp_path: Path) -> None:
190
190
  """Finds multiple markers in a single file."""
191
- from pennyfarthing_scripts.codemarkers.analyze import _grep_markers
191
+ from pf.codemarkers.analyze import _grep_markers
192
192
 
193
193
  f = tmp_path / "multi.py"
194
194
  f.write_text("# TODO: first\nx = 1\n# FIXME: second\n# HACK: third\n")
@@ -199,7 +199,7 @@ class TestGrepMarkers:
199
199
 
200
200
  def test_excludes_node_modules(self, tmp_path: Path) -> None:
201
201
  """Files matching exclude patterns are skipped."""
202
- from pennyfarthing_scripts.codemarkers.analyze import _grep_markers
202
+ from pf.codemarkers.analyze import _grep_markers
203
203
 
204
204
  nm = tmp_path / "node_modules" / "pkg"
205
205
  nm.mkdir(parents=True)
@@ -213,7 +213,7 @@ class TestGrepMarkers:
213
213
 
214
214
  def test_case_sensitive(self, tmp_path: Path) -> None:
215
215
  """Markers must be uppercase to match."""
216
- from pennyfarthing_scripts.codemarkers.analyze import _grep_markers
216
+ from pf.codemarkers.analyze import _grep_markers
217
217
 
218
218
  f = tmp_path / "lower.py"
219
219
  f.write_text("# todo: lowercase should not match\n# TODO: uppercase matches\n")
@@ -223,7 +223,7 @@ class TestGrepMarkers:
223
223
 
224
224
  def test_nested_directories(self, tmp_path: Path) -> None:
225
225
  """Scans recursively into subdirectories."""
226
- from pennyfarthing_scripts.codemarkers.analyze import _grep_markers
226
+ from pf.codemarkers.analyze import _grep_markers
227
227
 
228
228
  sub = tmp_path / "src" / "lib"
229
229
  sub.mkdir(parents=True)
@@ -233,7 +233,7 @@ class TestGrepMarkers:
233
233
 
234
234
  def test_empty_directory(self, tmp_path: Path) -> None:
235
235
  """Returns empty list for directory with no markers."""
236
- from pennyfarthing_scripts.codemarkers.analyze import _grep_markers
236
+ from pf.codemarkers.analyze import _grep_markers
237
237
 
238
238
  (tmp_path / "clean.py").write_text("x = 1\ny = 2\n")
239
239
  markers = _grep_markers(tmp_path, excludes=[])
@@ -241,7 +241,7 @@ class TestGrepMarkers:
241
241
 
242
242
  def test_binary_files_skipped(self, tmp_path: Path) -> None:
243
243
  """Binary files should not cause crashes."""
244
- from pennyfarthing_scripts.codemarkers.analyze import _grep_markers
244
+ from pf.codemarkers.analyze import _grep_markers
245
245
 
246
246
  (tmp_path / "image.png").write_bytes(b"\x89PNG\r\n\x1a\n" + b"\x00" * 100)
247
247
  (tmp_path / "code.py").write_text("# TODO: real marker\n")
@@ -254,7 +254,7 @@ class TestParseBlameOutput:
254
254
 
255
255
  def test_parses_author_and_time(self) -> None:
256
256
  """Extracts author name and author-time from porcelain output."""
257
- from pennyfarthing_scripts.codemarkers.analyze import _parse_blame_porcelain
257
+ from pf.codemarkers.analyze import _parse_blame_porcelain
258
258
 
259
259
  porcelain = (
260
260
  "abc123 1 1 1\n"
@@ -276,7 +276,7 @@ class TestParseBlameOutput:
276
276
 
277
277
  def test_empty_output(self) -> None:
278
278
  """Returns empty dict for empty output."""
279
- from pennyfarthing_scripts.codemarkers.analyze import _parse_blame_porcelain
279
+ from pf.codemarkers.analyze import _parse_blame_porcelain
280
280
 
281
281
  result = _parse_blame_porcelain("", line=1)
282
282
  assert result == {} or result.get("author") == ""
@@ -288,7 +288,7 @@ class TestBatchBlame:
288
288
  @pytest.mark.asyncio
289
289
  async def test_blames_entire_file(self) -> None:
290
290
  """Blames the whole file and returns data for requested lines."""
291
- from pennyfarthing_scripts.codemarkers.analyze import _batch_blame_file
291
+ from pf.codemarkers.analyze import _batch_blame_file
292
292
 
293
293
  blame_output = (
294
294
  "abc123 1 1 1\n"
@@ -314,7 +314,7 @@ class TestBatchBlame:
314
314
  )
315
315
 
316
316
  with patch(
317
- "pennyfarthing_scripts.codemarkers.analyze._run_git_command",
317
+ "pf.codemarkers.analyze._run_git_command",
318
318
  new_callable=AsyncMock,
319
319
  return_value=(blame_output, "", 0),
320
320
  ):
@@ -329,10 +329,10 @@ class TestBatchBlame:
329
329
  @pytest.mark.asyncio
330
330
  async def test_git_blame_failure_returns_empty(self) -> None:
331
331
  """When git blame fails, returns empty dict for all lines."""
332
- from pennyfarthing_scripts.codemarkers.analyze import _batch_blame_file
332
+ from pf.codemarkers.analyze import _batch_blame_file
333
333
 
334
334
  with patch(
335
- "pennyfarthing_scripts.codemarkers.analyze._run_git_command",
335
+ "pf.codemarkers.analyze._run_git_command",
336
336
  new_callable=AsyncMock,
337
337
  return_value=("", "fatal: not a git repo", 128),
338
338
  ):
@@ -346,7 +346,7 @@ class TestAnalyzeRepo:
346
346
  @pytest.mark.asyncio
347
347
  async def test_nonexistent_path(self) -> None:
348
348
  """Returns error result for nonexistent path."""
349
- from pennyfarthing_scripts.codemarkers.analyze import analyze_repo
349
+ from pf.codemarkers.analyze import analyze_repo
350
350
 
351
351
  result = await analyze_repo("bad", Path("/nonexistent/repo"), days=90)
352
352
  assert result.success is False
@@ -355,13 +355,13 @@ class TestAnalyzeRepo:
355
355
  @pytest.mark.asyncio
356
356
  async def test_empty_repo(self, tmp_path: Path) -> None:
357
357
  """Returns success with empty markers for repo with no markers."""
358
- from pennyfarthing_scripts.codemarkers.analyze import analyze_repo
358
+ from pf.codemarkers.analyze import analyze_repo
359
359
 
360
360
  (tmp_path / ".git").mkdir()
361
361
  (tmp_path / "clean.py").write_text("x = 1\n")
362
362
 
363
363
  with patch(
364
- "pennyfarthing_scripts.codemarkers.analyze._batch_blame_file",
364
+ "pf.codemarkers.analyze._batch_blame_file",
365
365
  new_callable=AsyncMock,
366
366
  return_value={},
367
367
  ):
@@ -372,7 +372,7 @@ class TestAnalyzeRepo:
372
372
  @pytest.mark.asyncio
373
373
  async def test_markers_enriched_with_blame(self, tmp_path: Path) -> None:
374
374
  """Markers get author, date, age_days from git blame."""
375
- from pennyfarthing_scripts.codemarkers.analyze import analyze_repo
375
+ from pf.codemarkers.analyze import analyze_repo
376
376
 
377
377
  (tmp_path / ".git").mkdir()
378
378
  (tmp_path / "app.py").write_text("x = 1\n# TODO: fix this\ny = 2\n")
@@ -387,7 +387,7 @@ class TestAnalyzeRepo:
387
387
  }
388
388
 
389
389
  with patch(
390
- "pennyfarthing_scripts.codemarkers.analyze._batch_blame_file",
390
+ "pf.codemarkers.analyze._batch_blame_file",
391
391
  side_effect=mock_blame,
392
392
  ):
393
393
  result = await analyze_repo("test", tmp_path, days=90)
@@ -399,7 +399,7 @@ class TestAnalyzeRepo:
399
399
  @pytest.mark.asyncio
400
400
  async def test_stale_threshold(self, tmp_path: Path) -> None:
401
401
  """Markers older than threshold are flagged is_stale=True."""
402
- from pennyfarthing_scripts.codemarkers.analyze import analyze_repo
402
+ from pf.codemarkers.analyze import analyze_repo
403
403
 
404
404
  (tmp_path / ".git").mkdir()
405
405
  (tmp_path / "old.py").write_text("# TODO: ancient code\n")
@@ -411,7 +411,7 @@ class TestAnalyzeRepo:
411
411
  return {1: {"author": "OldDev", "author_time": old_time}}
412
412
 
413
413
  with patch(
414
- "pennyfarthing_scripts.codemarkers.analyze._batch_blame_file",
414
+ "pf.codemarkers.analyze._batch_blame_file",
415
415
  side_effect=mock_blame,
416
416
  ):
417
417
  result = await analyze_repo("test", tmp_path, days=90)
@@ -421,7 +421,7 @@ class TestAnalyzeRepo:
421
421
  @pytest.mark.asyncio
422
422
  async def test_summary_computed(self, tmp_path: Path) -> None:
423
423
  """Result includes summary with counts by type."""
424
- from pennyfarthing_scripts.codemarkers.analyze import analyze_repo
424
+ from pf.codemarkers.analyze import analyze_repo
425
425
 
426
426
  (tmp_path / ".git").mkdir()
427
427
  (tmp_path / "mix.py").write_text("# TODO: one\n# FIXME: two\n# TODO: three\n")
@@ -433,7 +433,7 @@ class TestAnalyzeRepo:
433
433
  return {ln: {"author": "Dev", "author_time": recent} for ln in lines}
434
434
 
435
435
  with patch(
436
- "pennyfarthing_scripts.codemarkers.analyze._batch_blame_file",
436
+ "pf.codemarkers.analyze._batch_blame_file",
437
437
  side_effect=mock_blame,
438
438
  ):
439
439
  result = await analyze_repo("test", tmp_path, days=90)
@@ -446,7 +446,7 @@ class TestAnalyzeRepo:
446
446
  @pytest.mark.asyncio
447
447
  async def test_default_excludes_applied(self, tmp_path: Path) -> None:
448
448
  """DEFAULT_EXCLUDES filters out node_modules, dist, etc."""
449
- from pennyfarthing_scripts.codemarkers.analyze import analyze_repo
449
+ from pf.codemarkers.analyze import analyze_repo
450
450
 
451
451
  (tmp_path / ".git").mkdir()
452
452
  nm = tmp_path / "node_modules" / "pkg"
@@ -461,7 +461,7 @@ class TestAnalyzeRepo:
461
461
  return {ln: {"author": "Dev", "author_time": recent} for ln in lines}
462
462
 
463
463
  with patch(
464
- "pennyfarthing_scripts.codemarkers.analyze._batch_blame_file",
464
+ "pf.codemarkers.analyze._batch_blame_file",
465
465
  side_effect=mock_blame,
466
466
  ):
467
467
  result = await analyze_repo("test", tmp_path, days=90)
@@ -473,22 +473,22 @@ class TestShouldExclude:
473
473
  """_should_exclude matches file paths against glob patterns."""
474
474
 
475
475
  def test_matches_node_modules(self) -> None:
476
- from pennyfarthing_scripts.codemarkers.analyze import _should_exclude
476
+ from pf.codemarkers.analyze import _should_exclude
477
477
 
478
478
  assert _should_exclude("node_modules/pkg/index.js", ["node_modules/*"]) is True
479
479
 
480
480
  def test_matches_lock_file(self) -> None:
481
- from pennyfarthing_scripts.codemarkers.analyze import _should_exclude
481
+ from pf.codemarkers.analyze import _should_exclude
482
482
 
483
483
  assert _should_exclude("package-lock.json", ["package-lock.json"]) is True
484
484
 
485
485
  def test_matches_glob_extension(self) -> None:
486
- from pennyfarthing_scripts.codemarkers.analyze import _should_exclude
486
+ from pf.codemarkers.analyze import _should_exclude
487
487
 
488
488
  assert _should_exclude("bundle.min.js", ["*.min.js"]) is True
489
489
 
490
490
  def test_no_match(self) -> None:
491
- from pennyfarthing_scripts.codemarkers.analyze import _should_exclude
491
+ from pf.codemarkers.analyze import _should_exclude
492
492
 
493
493
  assert _should_exclude("src/app.py", ["node_modules/*", "dist/*"]) is False
494
494
 
@@ -503,15 +503,15 @@ class TestTableFormatter:
503
503
 
504
504
  def test_empty_list(self) -> None:
505
505
  """Empty marker list produces 'no markers' message."""
506
- from pennyfarthing_scripts.codemarkers.formatters import format_marker_table
506
+ from pf.codemarkers.formatters import format_marker_table
507
507
 
508
508
  out = format_marker_table([])
509
509
  assert "no" in out.lower() or "No" in out
510
510
 
511
511
  def test_table_has_headers(self) -> None:
512
512
  """Table output includes column headers."""
513
- from pennyfarthing_scripts.codemarkers.formatters import format_marker_table
514
- from pennyfarthing_scripts.codemarkers.models import CodeMarker
513
+ from pf.codemarkers.formatters import format_marker_table
514
+ from pf.codemarkers.models import CodeMarker
515
515
 
516
516
  markers = [
517
517
  CodeMarker(path="a.py", line=1, marker_type="TODO", text="TODO: test",
@@ -524,8 +524,8 @@ class TestTableFormatter:
524
524
 
525
525
  def test_top_n_limits_output(self) -> None:
526
526
  """Table respects top_n limit."""
527
- from pennyfarthing_scripts.codemarkers.formatters import format_marker_table
528
- from pennyfarthing_scripts.codemarkers.models import CodeMarker
527
+ from pf.codemarkers.formatters import format_marker_table
528
+ from pf.codemarkers.models import CodeMarker
529
529
 
530
530
  markers = [
531
531
  CodeMarker(path=f"f{i}.py", line=i, marker_type="TODO", text=f"TODO: {i}")
@@ -541,8 +541,8 @@ class TestJsonExport:
541
541
  """export_json serializes full result to JSON."""
542
542
 
543
543
  def test_valid_json(self) -> None:
544
- from pennyfarthing_scripts.codemarkers.formatters import export_json
545
- from pennyfarthing_scripts.codemarkers.models import (
544
+ from pf.codemarkers.formatters import export_json
545
+ from pf.codemarkers.models import (
546
546
  CodeMarker,
547
547
  CodeMarkersResult,
548
548
  MarkerSummary,
@@ -564,8 +564,8 @@ class TestCsvExport:
564
564
  """export_csv outputs CSV with headers."""
565
565
 
566
566
  def test_csv_header_row(self) -> None:
567
- from pennyfarthing_scripts.codemarkers.formatters import export_csv
568
- from pennyfarthing_scripts.codemarkers.models import CodeMarker
567
+ from pf.codemarkers.formatters import export_csv
568
+ from pf.codemarkers.models import CodeMarker
569
569
 
570
570
  markers = [
571
571
  CodeMarker(path="a.py", line=1, marker_type="TODO", text="TODO: test"),
@@ -589,7 +589,7 @@ class TestCLI:
589
589
  """codemarkers group shows help."""
590
590
  from click.testing import CliRunner
591
591
 
592
- from pennyfarthing_scripts.codemarkers.cli import codemarkers
592
+ from pf.codemarkers.cli import codemarkers
593
593
 
594
594
  runner = CliRunner()
595
595
  result = runner.invoke(codemarkers, ["--help"])
@@ -600,7 +600,7 @@ class TestCLI:
600
600
  """analyze subcommand is registered."""
601
601
  from click.testing import CliRunner
602
602
 
603
- from pennyfarthing_scripts.codemarkers.cli import codemarkers
603
+ from pf.codemarkers.cli import codemarkers
604
604
 
605
605
  runner = CliRunner()
606
606
  result = runner.invoke(codemarkers, ["analyze", "--help"])
@@ -612,7 +612,7 @@ class TestCLI:
612
612
  """stale subcommand is registered."""
613
613
  from click.testing import CliRunner
614
614
 
615
- from pennyfarthing_scripts.codemarkers.cli import codemarkers
615
+ from pf.codemarkers.cli import codemarkers
616
616
 
617
617
  runner = CliRunner()
618
618
  result = runner.invoke(codemarkers, ["stale", "--help"])
@@ -622,7 +622,7 @@ class TestCLI:
622
622
  """summary subcommand is registered."""
623
623
  from click.testing import CliRunner
624
624
 
625
- from pennyfarthing_scripts.codemarkers.cli import codemarkers
625
+ from pf.codemarkers.cli import codemarkers
626
626
 
627
627
  runner = CliRunner()
628
628
  result = runner.invoke(codemarkers, ["summary", "--help"])
@@ -632,13 +632,13 @@ class TestCLI:
632
632
  """--format json produces JSON output."""
633
633
  from click.testing import CliRunner
634
634
 
635
- from pennyfarthing_scripts.codemarkers.cli import codemarkers
635
+ from pf.codemarkers.cli import codemarkers
636
636
 
637
637
  runner = CliRunner()
638
638
  with patch(
639
- "pennyfarthing_scripts.codemarkers.cli._run_analysis"
639
+ "pf.codemarkers.cli._run_analysis"
640
640
  ) as mock_run:
641
- from pennyfarthing_scripts.codemarkers.models import CodeMarkersResult, MarkerSummary
641
+ from pf.codemarkers.models import CodeMarkersResult, MarkerSummary
642
642
  mock_run.return_value = CodeMarkersResult(
643
643
  success=True, repo_name="test", repo_path="/tmp",
644
644
  stale_threshold_days=90, markers=[],
@@ -651,7 +651,7 @@ class TestCLI:
651
651
 
652
652
 
653
653
  class TestMainModule:
654
- """python -m pennyfarthing_scripts.codemarkers works."""
654
+ """python -m pf.codemarkers works."""
655
655
 
656
656
  def test_module_runnable(self) -> None:
657
657
  """Module can be invoked with --help."""
@@ -659,7 +659,7 @@ class TestMainModule:
659
659
  import sys
660
660
 
661
661
  result = subprocess.run(
662
- [sys.executable, "-m", "pennyfarthing_scripts.codemarkers", "--help"],
662
+ [sys.executable, "-m", "pf.codemarkers", "--help"],
663
663
  capture_output=True, text=True, timeout=30,
664
664
  )
665
665
  assert result.returncode == 0
@@ -675,7 +675,7 @@ class TestModuleExports:
675
675
  """__init__.py re-exports key symbols."""
676
676
 
677
677
  def test_exports_models(self) -> None:
678
- from pennyfarthing_scripts.codemarkers import (
678
+ from pf.codemarkers import (
679
679
  CodeMarker,
680
680
  CodeMarkersResult,
681
681
  )
@@ -683,5 +683,5 @@ class TestModuleExports:
683
683
  assert CodeMarkersResult is not None
684
684
 
685
685
  def test_exports_analyze(self) -> None:
686
- from pennyfarthing_scripts.codemarkers import analyze_repo
686
+ from pf.codemarkers import analyze_repo
687
687
  assert callable(analyze_repo)