@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
@@ -116,9 +116,9 @@ Gates run as Haiku subagents — keep instructions focused and evaluation criter
116
116
  | File | Purpose |
117
117
  |------|---------|
118
118
  | `pennyfarthing-dist/gates/*.md` | Gate definitions |
119
- | `pennyfarthing_scripts/handoff/gate_runner.py` | Spawns gate subagents |
120
- | `pennyfarthing_scripts/handoff/gate_file.py` | Gate file discovery and resolution |
121
- | `pennyfarthing_scripts/handoff/resolve_gate.py` | Resolves gate for a workflow phase |
119
+ | `pf/handoff/gate_runner.py` | Spawns gate subagents |
120
+ | `pf/handoff/gate_file.py` | Gate file discovery and resolution |
121
+ | `pf/handoff/resolve_gate.py` | Resolves gate for a workflow phase |
122
122
 
123
123
  <info>
124
124
  **ADR:** `docs/adr/0025-script-first-gate-extraction.md`
@@ -104,12 +104,12 @@ See `guides/gates.md` for gate file format and evaluation details.
104
104
 
105
105
  | File | Purpose |
106
106
  |------|---------|
107
- | `pennyfarthing_scripts/handoff/cli.py` | Click command definitions |
108
- | `pennyfarthing_scripts/handoff/resolve_gate.py` | Gate resolution logic |
109
- | `pennyfarthing_scripts/handoff/complete_phase.py` | Session file atomic updates |
110
- | `pennyfarthing_scripts/handoff/marker.py` | Environment-aware marker generation |
111
- | `pennyfarthing_scripts/handoff/gate_runner.py` | Gate subagent spawner |
112
- | `pennyfarthing_scripts/handoff/gate_file.py` | Gate file discovery |
107
+ | `pf/handoff/cli.py` | Click command definitions |
108
+ | `pf/handoff/resolve_gate.py` | Gate resolution logic |
109
+ | `pf/handoff/complete_phase.py` | Session file atomic updates |
110
+ | `pf/handoff/marker.py` | Environment-aware marker generation |
111
+ | `pf/handoff/gate_runner.py` | Gate subagent spawner |
112
+ | `pf/handoff/gate_file.py` | Gate file discovery |
113
113
 
114
114
  <info>
115
115
  **Related:** `guides/gates.md` (gate system), `agents/agent-behavior.md` (exit protocol), `guides/reflector.md` (marker types)
@@ -40,12 +40,12 @@ Prime selects a context tier based on session state to manage token overhead:
40
40
  | File | Purpose |
41
41
  |------|---------|
42
42
  | `packages/cyclist/src/prime.ts` | TypeScript module: `getPrimeContext()`, `getPrimeContextWithTier()`, `selectContextTier()` |
43
- | `pennyfarthing_scripts/prime/cli.py` | Python CLI entry point |
44
- | `pennyfarthing_scripts/prime/tiers.py` | Tiered context selection logic |
45
- | `pennyfarthing_scripts/prime/persona.py` | Persona loading from theme config |
46
- | `pennyfarthing_scripts/prime/session.py` | Session state reading and registration |
47
- | `pennyfarthing_scripts/prime/workflow.py` | Workflow state detection |
48
- | `pennyfarthing_scripts/prime/models.py` | Data structures (WorkflowStatus, ContextTier, PrimeResult) |
43
+ | `pf/prime/cli.py` | Python CLI entry point |
44
+ | `pf/prime/tiers.py` | Tiered context selection logic |
45
+ | `pf/prime/persona.py` | Persona loading from theme config |
46
+ | `pf/prime/session.py` | Session state reading and registration |
47
+ | `pf/prime/workflow.py` | Workflow state detection |
48
+ | `pf/prime/models.py` | Data structures (WorkflowStatus, ContextTier, PrimeResult) |
49
49
  | `pennyfarthing-dist/scripts/core/prime.sh` | Shell wrapper |
50
50
  | `pennyfarthing-dist/commands/prime.md` | User command docs |
51
51
 
@@ -75,7 +75,7 @@ Or when asked during workflow initiation, specify your preferred level.
75
75
  ## Python API
76
76
 
77
77
  ```python
78
- from pennyfarthing_scripts.workflow import (
78
+ from pf.workflow import (
79
79
  detect_scale_level,
80
80
  get_workflow_for_scale_level,
81
81
  get_required_artifacts,
@@ -13,7 +13,7 @@ theme:
13
13
  default_humor: enabled
14
14
  character_immersion: high
15
15
  user_title: Crew
16
- portrait_style: ", space western, warm sepia ship interior, dusty frontier, Chinese-American fusion"
16
+ portrait_style: ", tarot card style, Smith-Waite deck, "
17
17
  tier: A
18
18
  zeitgeist:
19
19
  score: 82.3
@@ -21,7 +21,7 @@ zeitgeist:
21
21
  agents:
22
22
  orchestrator:
23
23
  character: Shepherd Book
24
- visual: "An older African American man with gray hair styled upward, kind weathered face, wearing brown shepherd's robes with religious collar, carrying worn Bible, knowing eyes with hidden depths"
24
+ visual: "An older clean-shaven African American man with gray hair styled upward, kind weathered face"
25
25
  ocean:
26
26
  O: 4 # High openness - philosophical, sees multiple perspectives
27
27
  C: 4 # High conscientiousness - disciplined, mysterious past
@@ -73,7 +73,7 @@ agents:
73
73
  style: Tactical execution under fire
74
74
  tea:
75
75
  character: Jayne Cobb
76
- visual: "A large muscular man with goatee, wearing tight t-shirt with cunning girl design, multiple weapons visible including large gun, tough skeptical expression"
76
+ visual: "A large muscular man with goatee, multiple weapons visible including large gun, tough skeptical expression"
77
77
  # JOB FAIR OPTIMIZED: Scored 87.5 as TEA - "how does this get me killed?" is perfect testing
78
78
  ocean:
79
79
  O: 1 # Very low openness - practical, simple needs
@@ -100,7 +100,7 @@ agents:
100
100
  style: Testing tool of choice
101
101
  dev:
102
102
  character: Malcolm Reynolds
103
- visual: "A rugged man in his thirties with brown hair, wearing brown leather duster coat over suspenders and work shirt, pistol at hip, sardonic half-smile, Browncoat veteran bearing"
103
+ visual: "A rugged man in his thirties with brown hair, wearing brown leather duster coat over suspenders and work shirt, pistol at hip, sardonic half-smile"
104
104
  # JOB FAIR OPTIMIZED: Scored 77.5 as Dev (beat Kaylee's 74.3)
105
105
  ocean:
106
106
  O: 3 # Medium openness - practical but adaptable
@@ -1,6 +1,6 @@
1
1
  # CLAUDE.md — pf CLI
2
2
 
3
- Python Click CLI for Pennyfarthing. Entry point: `pennyfarthing_scripts/cli.py`. Invoked as `pf`.
3
+ Python Click CLI for Pennyfarthing. Entry point: `pf/cli.py`. Invoked as `pf`.
4
4
 
5
5
  ## Command Index
6
6
 
@@ -207,7 +207,7 @@ Legacy shims (`bellmode_hook.py`, `pretooluse_hook.py`, etc.) re-export from `ho
207
207
  ## Architecture
208
208
 
209
209
  - **Framework:** Click (lazy-loaded groups for <200ms startup)
210
- - **Entry point:** `cli.py` registers all groups, `pyproject.toml` maps `pf` to `pennyfarthing_scripts.cli:main`
210
+ - **Entry point:** `cli.py` registers all groups, `pyproject.toml` maps `pf` to `pf.cli:main`
211
211
  - **Pattern:** Each command group is a subpackage with `cli.py` defining Click commands and sibling modules for logic
212
212
  - **Output:** JSON for machine consumption (`--json`), formatted text for humans
213
213
  - **Dry run:** Most mutating commands support `--dry-run` to preview changes
@@ -36,7 +36,7 @@ Scripts invoke Python modules directly:
36
36
 
37
37
  ```bash
38
38
  # From a bash script
39
- python -m pennyfarthing_scripts.jira.sync "$EPIC_ID"
39
+ python -m pf.jira.sync "$EPIC_ID"
40
40
 
41
41
  # PYTHONPATH is set by the script:
42
42
  # export PYTHONPATH="${PROJECT_ROOT}${PYTHONPATH:+:$PYTHONPATH}"
@@ -54,7 +54,7 @@ NO GPU dependencies here. Those belong in meta scripts (`scripts/*.py`).
54
54
 
55
55
  ```bash
56
56
  cd pennyfarthing
57
- python -m pytest pennyfarthing_scripts/tests/
57
+ python -m pytest pf/tests/
58
58
  ```
59
59
 
60
60
  ## What Does NOT Go Here
@@ -19,7 +19,7 @@ import urllib.request
19
19
 
20
20
  import click
21
21
 
22
- from pennyfarthing_scripts.bc.focus import (
22
+ from pf.bc.focus import (
23
23
  VALID_PANELS,
24
24
  clear_all_named_layouts,
25
25
  clear_named_layout,
@@ -29,7 +29,7 @@ from pennyfarthing_scripts.bc.focus import (
29
29
  save_named_layout,
30
30
  set_panel_focus,
31
31
  )
32
- from pennyfarthing_scripts.bc.split import set_split_layout
32
+ from pf.bc.split import set_split_layout
33
33
 
34
34
 
35
35
  def _get_current_layout() -> dict | None:
@@ -41,7 +41,7 @@ def _get_current_layout() -> dict | None:
41
41
  Returns:
42
42
  Layout dict, or None if no server is running or fetch fails.
43
43
  """
44
- from pennyfarthing_scripts.bc.focus import _get_root
44
+ from pf.bc.focus import _get_root
45
45
 
46
46
  root = _get_root()
47
47
 
@@ -17,7 +17,7 @@ from ruamel.yaml import YAML
17
17
  def _get_root() -> Path:
18
18
  """Get project root, falling back to cwd."""
19
19
  try:
20
- from pennyfarthing_scripts.common.config import get_project_root
20
+ from pf.common.config import get_project_root
21
21
 
22
22
  return get_project_root()
23
23
  except Exception:
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
 
8
8
  from pathlib import Path
9
9
 
10
- from pennyfarthing_scripts.bc.focus import (
10
+ from pf.bc.focus import (
11
11
  VALID_PANELS,
12
12
  _read_config,
13
13
  _write_config,
@@ -5,10 +5,10 @@ This file will be removed in a future version.
5
5
  """
6
6
 
7
7
  # Re-export public API from new location for existing tests/imports
8
- from pennyfarthing_scripts.hooks.bell_mode import ( # noqa: F401
8
+ from pf.hooks.bell_mode import ( # noqa: F401
9
9
  _check_tandem_files as check_tandem_files,
10
10
  )
11
- from pennyfarthing_scripts.hooks.bell_mode import (
11
+ from pf.hooks.bell_mode import (
12
12
  main,
13
13
  )
14
14
 
@@ -3,7 +3,7 @@
3
3
  Story 101-5: BikeRack launcher CLI (pf bikerack start/stop/status)
4
4
  """
5
5
 
6
- from pennyfarthing_scripts.bikerack.launcher import (
6
+ from pf.bikerack.launcher import (
7
7
  build_otel_env,
8
8
  cleanup_files,
9
9
  exec_claude,
@@ -0,0 +1,5 @@
1
+ """Entry point for python -m pf.bikerack."""
2
+
3
+ from pf.bikerack.cli import bikerack
4
+
5
+ bikerack()
@@ -15,7 +15,7 @@ from rich.console import Console
15
15
  from textual._context import NoActiveAppError
16
16
  from textual.widgets import DataTable
17
17
 
18
- from pennyfarthing_scripts.bikerack.base_panel import PANEL_ICONS, BasePanel
18
+ from pf.bikerack.base_panel import PANEL_ICONS, BasePanel
19
19
 
20
20
  MAX_INPUT_LENGTH = 80
21
21
 
@@ -12,7 +12,7 @@ from typing import Any
12
12
  from rich.console import Group
13
13
  from rich.text import Text
14
14
 
15
- from pennyfarthing_scripts.bikerack.base_panel import PANEL_ICONS, BasePanel, format_duration
15
+ from pf.bikerack.base_panel import PANEL_ICONS, BasePanel, format_duration
16
16
 
17
17
 
18
18
  class BackgroundPanel(BasePanel):
@@ -13,7 +13,7 @@ from typing import Any
13
13
  from rich.text import Text
14
14
  from textual.binding import Binding
15
15
 
16
- from pennyfarthing_scripts.bikerack.base_panel import PANEL_ICONS, BasePanel
16
+ from pf.bikerack.base_panel import PANEL_ICONS, BasePanel
17
17
 
18
18
  # Status code → (icon, label, style)
19
19
  _STATUS_MAP: dict[str, tuple[str, str, str]] = {
@@ -144,7 +144,7 @@ class ChangedPanel(BasePanel):
144
144
  """Post NavigateToFile event for the selected file."""
145
145
  path = self.get_selected_path()
146
146
  if path is not None:
147
- from pennyfarthing_scripts.bikerack.events import NavigateToFile
147
+ from pf.bikerack.events import NavigateToFile
148
148
 
149
149
  self.post_message(NavigateToFile(path=path))
150
150
 
@@ -43,7 +43,7 @@ def start(project_dir, dry_run):
43
43
  Starts WheelHub in background, waits for readiness,
44
44
  sets OTEL env vars, and execs Claude CLI.
45
45
  """
46
- from pennyfarthing_scripts.bikerack.launcher import (
46
+ from pf.bikerack.launcher import (
47
47
  build_otel_env,
48
48
  exec_claude,
49
49
  is_already_running,
@@ -105,7 +105,7 @@ def start(project_dir, dry_run):
105
105
  @click.option("--dry-run", is_flag=True, help="Show what would be done without making changes")
106
106
  def stop(project_dir, dry_run):
107
107
  """Stop running BikeRack instance."""
108
- from pennyfarthing_scripts.bikerack.launcher import resolve_project_dir, stop_bikerack
108
+ from pf.bikerack.launcher import resolve_project_dir, stop_bikerack
109
109
 
110
110
  project_dir = resolve_project_dir(project_dir)
111
111
 
@@ -131,7 +131,7 @@ def stop(project_dir, dry_run):
131
131
  )
132
132
  def status(project_dir):
133
133
  """Show BikeRack running state."""
134
- from pennyfarthing_scripts.bikerack.launcher import get_status, resolve_project_dir
134
+ from pf.bikerack.launcher import get_status, resolve_project_dir
135
135
 
136
136
  project_dir = resolve_project_dir(project_dir)
137
137
  result = get_status(project_dir)
@@ -19,7 +19,7 @@ from rich.text import Text
19
19
  from textual.message import Message
20
20
  from textual.widgets import Static
21
21
 
22
- from pennyfarthing_scripts.bikerack.base_panel import render_progress_bar
22
+ from pf.bikerack.base_panel import render_progress_bar
23
23
 
24
24
 
25
25
  class ContextMeterFooter(Static):
@@ -14,7 +14,7 @@ from rich.console import Group
14
14
  from rich.table import Table
15
15
  from rich.text import Text
16
16
 
17
- from pennyfarthing_scripts.bikerack.base_panel import PANEL_ICONS, BasePanel, render_progress_bar
17
+ from pf.bikerack.base_panel import PANEL_ICONS, BasePanel, render_progress_bar
18
18
 
19
19
  # Tier → Rich style mapping
20
20
  _TIER_STYLES: dict[str, str] = {
@@ -19,7 +19,7 @@ from rich.syntax import Syntax
19
19
  from rich.text import Text
20
20
  from textual.binding import Binding
21
21
 
22
- from pennyfarthing_scripts.bikerack.base_panel import PANEL_ICONS, BasePanel
22
+ from pf.bikerack.base_panel import PANEL_ICONS, BasePanel
23
23
 
24
24
  #: Default max content lines rendered per page before truncation kicks in.
25
25
  DEFAULT_LINE_LIMIT = 1000
@@ -10,7 +10,7 @@ from typing import Any
10
10
 
11
11
  from rich.text import Text
12
12
 
13
- from pennyfarthing_scripts.bikerack.base_panel import PANEL_ICONS, BasePanel
13
+ from pf.bikerack.base_panel import PANEL_ICONS, BasePanel
14
14
 
15
15
 
16
16
  def _file_breakdown(dirty_files: list[dict]) -> Text:
@@ -79,7 +79,7 @@ def resolve_project_dir(project_dir: str | None) -> Path:
79
79
 
80
80
  def _find_framework_dir() -> Path:
81
81
  """Locate the pennyfarthing framework root from this package's location."""
82
- # pennyfarthing_scripts/bikerack/launcher.py -> pennyfarthing/
82
+ # pf/bikerack/launcher.py -> pennyfarthing/
83
83
  return Path(__file__).resolve().parent.parent.parent
84
84
 
85
85
 
@@ -230,7 +230,7 @@ def start_tui(project_dir: Path, port: int) -> subprocess.Popen:
230
230
  import sys
231
231
 
232
232
  proc = subprocess.Popen(
233
- [sys.executable, "-m", "pennyfarthing_scripts.bikerack.tui", "--port", str(port)],
233
+ [sys.executable, "-m", "pf.bikerack.tui", "--port", str(port)],
234
234
  cwd=str(project_dir),
235
235
  start_new_session=True,
236
236
  stdout=subprocess.DEVNULL,
@@ -1,7 +1,7 @@
1
1
  """Portrait path resolution for BikeRack TUI.
2
2
 
3
3
  Resolves persona portrait image paths using the canonical theme discovery
4
- from ``pennyfarthing_scripts.common.themes``. Each theme directory that
4
+ from ``pf.common.themes``. Each theme directory that
5
5
  contains ``themes/{name}.yaml`` has a sibling ``portraits/{name}/`` with
6
6
  size-bucketed portrait images.
7
7
 
@@ -79,7 +79,7 @@ def resolve_portrait_path(
79
79
  Returns:
80
80
  Path to portrait file, or None if not found.
81
81
  """
82
- from pennyfarthing_scripts.common.themes import discover_all_theme_dirs
82
+ from pf.common.themes import discover_all_theme_dirs
83
83
 
84
84
  theme_dirs = discover_all_theme_dirs(project_root)
85
85
 
@@ -12,7 +12,7 @@ from typing import Any
12
12
  from rich.console import Group
13
13
  from rich.text import Text
14
14
 
15
- from pennyfarthing_scripts.bikerack.base_panel import (
15
+ from pf.bikerack.base_panel import (
16
16
  PANEL_ICONS,
17
17
  BasePanel,
18
18
  render_progress_bar,
@@ -16,7 +16,7 @@ from textual.message import Message
16
16
  from textual.widget import Widget
17
17
  from textual.widgets import Static, Tree
18
18
 
19
- from pennyfarthing_scripts.bikerack.base_panel import PANEL_ICONS, render_progress_bar
19
+ from pf.bikerack.base_panel import PANEL_ICONS, render_progress_bar
20
20
 
21
21
 
22
22
  def _normalize_status(status: str) -> str:
@@ -372,7 +372,7 @@ class SprintPanel(Widget):
372
372
  return
373
373
  if data.get("type") == "story":
374
374
  story = data["story"]
375
- from pennyfarthing_scripts.bikerack.story_detail_screen import (
375
+ from pf.bikerack.story_detail_screen import (
376
376
  StoryDetailScreen,
377
377
  )
378
378
 
@@ -425,7 +425,7 @@ class SprintPanel(Widget):
425
425
  story = self.get_selected_story()
426
426
  if story is None:
427
427
  return
428
- from pennyfarthing_scripts.bikerack.story_detail_screen import (
428
+ from pf.bikerack.story_detail_screen import (
429
429
  StoryDetailScreen,
430
430
  )
431
431
 
@@ -111,7 +111,7 @@ def _get_sprint_story_status(story_id: str) -> str | None:
111
111
 
112
112
  try:
113
113
  out = subprocess.run(
114
- [sys.executable, "-m", "pennyfarthing_scripts.cli",
114
+ [sys.executable, "-m", "pf.cli",
115
115
  "sprint", "story", "field", story_id, "status"],
116
116
  capture_output=True,
117
117
  text=True,
@@ -40,7 +40,7 @@ class StoryDetailScreen(Screen):
40
40
  return ws_data
41
41
 
42
42
  try:
43
- from pennyfarthing_scripts.bikerack.story_detail_data import fetch_story_detail
43
+ from pf.bikerack.story_detail_data import fetch_story_detail
44
44
 
45
45
  enriched = fetch_story_detail(story_id)
46
46
  except Exception:
@@ -83,7 +83,7 @@ class StoryDetailScreen(Screen):
83
83
  if priority:
84
84
  meta_parts.append(priority)
85
85
  if assignee:
86
- from pennyfarthing_scripts.bikerack.sprint_panel import _format_assignee
86
+ from pf.bikerack.sprint_panel import _format_assignee
87
87
 
88
88
  name = _format_assignee(assignee)
89
89
  if name:
@@ -23,19 +23,19 @@ from textual.message import Message
23
23
  from textual.reactive import reactive
24
24
  from textual.widgets import Footer, Header, Static, Tab, Tabs
25
25
 
26
- from pennyfarthing_scripts.bc.focus import get_last_panel, save_last_panel
27
- from pennyfarthing_scripts.bikerack.audit_log_panel import AuditLogPanel
28
- from pennyfarthing_scripts.bikerack.background_panel import BackgroundPanel
29
- from pennyfarthing_scripts.bikerack.base_panel import get_panel_icon
30
- from pennyfarthing_scripts.bikerack.changed_panel import ChangedPanel
31
- from pennyfarthing_scripts.bikerack.context_meter_footer import ContextMeterFooter
32
- from pennyfarthing_scripts.bikerack.debug_panel import DebugPanel
33
- from pennyfarthing_scripts.bikerack.diffs_panel import DiffsPanel
34
- from pennyfarthing_scripts.bikerack.events import NavigateToFile
35
- from pennyfarthing_scripts.bikerack.git_panel import GitPanel
36
- from pennyfarthing_scripts.bikerack.progress_panel import ProgressPanel
37
- from pennyfarthing_scripts.bikerack.sprint_panel import SprintPanel
38
- from pennyfarthing_scripts.bikerack.ws_client import ConnectionState, WheelHubClient
26
+ from pf.bc.focus import get_last_panel, save_last_panel
27
+ from pf.bikerack.audit_log_panel import AuditLogPanel
28
+ from pf.bikerack.background_panel import BackgroundPanel
29
+ from pf.bikerack.base_panel import get_panel_icon
30
+ from pf.bikerack.changed_panel import ChangedPanel
31
+ from pf.bikerack.context_meter_footer import ContextMeterFooter
32
+ from pf.bikerack.debug_panel import DebugPanel
33
+ from pf.bikerack.diffs_panel import DiffsPanel
34
+ from pf.bikerack.events import NavigateToFile
35
+ from pf.bikerack.git_panel import GitPanel
36
+ from pf.bikerack.progress_panel import ProgressPanel
37
+ from pf.bikerack.sprint_panel import SprintPanel
38
+ from pf.bikerack.ws_client import ConnectionState, WheelHubClient
39
39
 
40
40
  STATE_DISPLAY: dict[ConnectionState, str] = {
41
41
  ConnectionState.CONNECTED: "[green]● Connected[/green]",
@@ -200,7 +200,7 @@ class AgentHeader(Static):
200
200
  theme = data.get("theme", "")
201
201
  role = data.get("role", "")
202
202
  if theme and role:
203
- from pennyfarthing_scripts.bikerack import portrait_resolver
203
+ from pf.bikerack import portrait_resolver
204
204
 
205
205
  return portrait_resolver.resolve_portrait_path(theme, role)
206
206
  return None
@@ -232,7 +232,7 @@ class AgentHeader(Static):
232
232
 
233
233
  # Theme name
234
234
  if theme:
235
- from pennyfarthing_scripts.bikerack.base_panel import humanize_theme
235
+ from pf.bikerack.base_panel import humanize_theme
236
236
 
237
237
  parts.append(f"[dim]{humanize_theme(theme)}[/dim]")
238
238
 
@@ -286,7 +286,7 @@ class AgentHeader(Static):
286
286
 
287
287
  # Now try to load the real image and swap it in
288
288
  try:
289
- from pennyfarthing_scripts.bikerack.portrait_resolver import (
289
+ from pf.bikerack.portrait_resolver import (
290
290
  detect_image_protocol,
291
291
  )
292
292
 
@@ -901,7 +901,7 @@ def main(
901
901
  project_dir: Project directory for port file discovery. Defaults to cwd.
902
902
  """
903
903
  # Detect terminal image protocol BEFORE App.run() claims the terminal
904
- from pennyfarthing_scripts.bikerack import portrait_resolver
904
+ from pf.bikerack import portrait_resolver
905
905
 
906
906
  portrait_resolver.detect_image_protocol()
907
907
 
@@ -37,8 +37,8 @@ def bmad_import(bmad_path: str, repos: str, dry_run: bool):
37
37
 
38
38
  BMAD_PATH is the path to the _bmad-output/ directory.
39
39
  """
40
- from pennyfarthing_scripts.bmad.importer import import_bmad_project
41
- from pennyfarthing_scripts.common.config import get_project_root
40
+ from pf.bmad.importer import import_bmad_project
41
+ from pf.common.config import get_project_root
42
42
 
43
43
  root = get_project_root()
44
44
  sprint_dir = root / "sprint"
@@ -90,14 +90,14 @@ def sync(
90
90
  click.echo("Specify --pull, --push, or --both", err=True)
91
91
  raise SystemExit(1)
92
92
 
93
- from pennyfarthing_scripts.bmad.parser import discover_bmad_stories
94
- from pennyfarthing_scripts.bmad.sync import (
93
+ from pf.bmad.parser import discover_bmad_stories
94
+ from pf.bmad.sync import (
95
95
  _collect_pf_stories,
96
96
  execute_sync_plan,
97
97
  format_sync_plan,
98
98
  generate_sync_plan,
99
99
  )
100
- from pennyfarthing_scripts.common.config import get_project_root, load_pennyfarthing_config
100
+ from pf.common.config import get_project_root, load_pennyfarthing_config
101
101
 
102
102
  root = get_project_root()
103
103
  config = load_pennyfarthing_config(root)
@@ -171,8 +171,8 @@ def sync(
171
171
  @bmad.command()
172
172
  def status():
173
173
  """Show drift report — what's out of sync between PF and BMAD."""
174
- from pennyfarthing_scripts.bmad.sync import drift_report
175
- from pennyfarthing_scripts.common.config import get_project_root, load_pennyfarthing_config
174
+ from pf.bmad.sync import drift_report
175
+ from pf.common.config import get_project_root, load_pennyfarthing_config
176
176
 
177
177
  root = get_project_root()
178
178
  config = load_pennyfarthing_config(root)
@@ -11,12 +11,12 @@ from datetime import date
11
11
  from pathlib import Path
12
12
  from typing import Any
13
13
 
14
- from pennyfarthing_scripts.bmad.parser import (
14
+ from pf.bmad.parser import (
15
15
  discover_bmad_epics,
16
16
  discover_bmad_stories,
17
17
  map_bmad_to_pf,
18
18
  )
19
- from pennyfarthing_scripts.common.config import get_project_root, load_pennyfarthing_config
19
+ from pf.common.config import get_project_root, load_pennyfarthing_config
20
20
 
21
21
 
22
22
  def _get_bmad_config(project_root: Path) -> dict[str, Any]:
@@ -105,8 +105,8 @@ def import_bmad_project(
105
105
  Returns:
106
106
  Result dict with success, counts, and details.
107
107
  """
108
- from pennyfarthing_scripts.sprint.validator import validate_epic_shard
109
- from pennyfarthing_scripts.sprint.yaml_io import write_sprint
108
+ from pf.sprint.validator import validate_epic_shard
109
+ from pf.sprint.yaml_io import write_sprint
110
110
 
111
111
  root = project_root or get_project_root()
112
112
  bmad_config = _get_bmad_config(root)