@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.
- package/README.md +1 -1
- package/package.json +3 -2
- package/packages/core/dist/workflow/__test_context_watch__/.session/.tandem-turn-counter +1 -0
- package/packages/core/dist/workflow/__test_context_watch__/.session/95-6-session.md +3 -0
- package/packages/core/dist/workflow/__test_context_watch__/.session/95-6-tandem-architect.md +6 -0
- package/packages/core/dist/workflow/__test_file_watch__/.session/95-4-tandem-architect.md +6 -0
- package/packages/core/dist/workflow/__test_file_watch__/workdir/trigger.ts +1 -0
- package/packages/core/dist/workflow/__test_tool_watch__/.session/95-5-tandem-architect.md +6 -0
- package/packages/core/dist/workflow/__test_tool_watch__/.session/95-5-tandem-toolcalls.jsonl +1 -0
- package/packages/core/dist/workflow/cross-entity-validation.d.ts +117 -0
- package/packages/core/dist/workflow/cross-entity-validation.d.ts.map +1 -0
- package/packages/core/dist/workflow/cross-entity-validation.js +148 -0
- package/packages/core/dist/workflow/cross-entity-validation.js.map +1 -0
- package/packages/core/dist/workflow/cross-entity-validation.test.d.ts +10 -0
- package/packages/core/dist/workflow/cross-entity-validation.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/cross-entity-validation.test.js +512 -0
- package/packages/core/dist/workflow/cross-entity-validation.test.js.map +1 -0
- package/pennyfarthing-dist/agents/sm-finish.md +2 -2
- package/pennyfarthing-dist/agents/testing-runner.md +1 -1
- package/pennyfarthing-dist/commands/pf-prime.md +1 -1
- package/pennyfarthing-dist/guides/agent-behavior.md +1 -1
- package/pennyfarthing-dist/guides/bikerack.md +1 -1
- package/pennyfarthing-dist/guides/brownfield-tools.md +7 -7
- package/pennyfarthing-dist/guides/gates.md +3 -3
- package/pennyfarthing-dist/guides/handoff-cli.md +6 -6
- package/pennyfarthing-dist/guides/prime.md +6 -6
- package/pennyfarthing-dist/guides/scale-levels.md +1 -1
- package/pennyfarthing-dist/personas/themes/firefly.yaml +4 -4
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/CLAUDE.md +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/README.md +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/__pycache__/context.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/__pycache__/focus.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/__pycache__/split.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/cli.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/focus.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/split.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bellmode_hook.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/__init__.py +1 -1
- package/pennyfarthing-dist/pf/bikerack/__main__.py +5 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/__pycache__/launcher.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/audit_log_panel.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/background_panel.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/changed_panel.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/cli.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/context_meter_footer.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/debug_panel.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/diffs_panel.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/git_panel.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/launcher.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/portrait_resolver.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/progress_panel.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/sprint_panel.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/story_detail_data.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/story_detail_screen.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/tui.py +17 -17
- package/pennyfarthing-dist/pf/bmad/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/cli.py +7 -7
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/importer.py +4 -4
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/sync.py +9 -9
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/test_parser.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/test_sync.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/brownfield/__init__.py +1 -1
- package/pennyfarthing-dist/pf/brownfield/__main__.py +8 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/brownfield/cli.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/cli.py +24 -24
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/codemarkers/__init__.py +2 -2
- package/pennyfarthing-dist/pf/codemarkers/__main__.py +6 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/codemarkers/analyze.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/codemarkers/cli.py +8 -8
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/codemarkers/formatters.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/__init__.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/__pycache__/config.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/__pycache__/output.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/pr_config.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/themes.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/complexity/__init__.py +2 -2
- package/pennyfarthing-dist/pf/complexity/__main__.py +6 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/complexity/analyze.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/complexity/cli.py +4 -4
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/complexity/formatters.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/config.py +2 -2
- package/pennyfarthing-dist/pf/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/consultation/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/consultation/cli.py +5 -5
- package/pennyfarthing-dist/pf/deadcode/__main__.py +6 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/analyze.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/cli.py +8 -8
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/formatters.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/dependencies/__init__.py +2 -2
- package/pennyfarthing-dist/pf/dependencies/__main__.py +5 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/dependencies/analyze.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/dependencies/cli.py +4 -4
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/dependencies/formatters.py +1 -1
- package/pennyfarthing-dist/pf/epic/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/epic/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/gate/cli.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git/__init__.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git/create_branches.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git/hooks_installer.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git/repos.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git/status_all.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git/worktree.py +3 -3
- package/pennyfarthing-dist/pf/git_group/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git_group/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git_group/cli.py +10 -10
- package/pennyfarthing-dist/pf/handoff/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/cli.py +5 -5
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/marker.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/phase_check.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/__init__.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/__main__.py +2 -2
- package/pennyfarthing-dist/pf/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/__pycache__/analyze.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/__pycache__/models.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/analyze.py +8 -8
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/cli.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/formatters.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/bell_mode.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/cli.py +11 -11
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/context_breaker.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/context_warning.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/cyclist_pretooluse.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/schema_validation.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/session_start.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/sprint_yaml_validation.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/statusline.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/__init__.py +2 -2
- package/pennyfarthing-dist/pf/hotspots/__main__.py +6 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/__pycache__/analyze.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/__pycache__/models.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/analyze.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/cli.py +5 -5
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/formatters.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__init__.py +5 -5
- package/pennyfarthing-dist/pf/jira/__main__.py +10 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/bidirectional.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/claim.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/client.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/create.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/epic.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/operations.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/reconcile.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/story.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/__pycache__/sync.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/bidirectional.py +9 -9
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/claim.py +4 -4
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/cli.py +15 -15
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/client.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/create.py +5 -5
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/epic.py +6 -6
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/operations.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/reconcile.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/story.py +6 -6
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira/sync.py +5 -5
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira_bidirectional_sync.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira_epic_creation.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira_sync.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/jira_sync_story.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/launch/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/launch/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/launch/cli.py +7 -7
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/migration/__init__.py +5 -5
- package/pennyfarthing-dist/pf/migration/__main__.py +10 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/migration/cli.py +6 -6
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/migration/validate.py +7 -7
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/output.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/patch_mode.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/preflight/__init__.py +1 -1
- package/pennyfarthing-dist/pf/preflight/__main__.py +10 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/preflight/cli.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/pretooluse_hook.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/__init__.py +7 -7
- package/pennyfarthing-dist/pf/prime/__main__.py +8 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/cli.py +9 -9
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/heatmap.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/loader.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/persona.py +4 -4
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/session.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/tiers.py +4 -4
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/workflow.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/schema_validation_hook.py +1 -1
- package/pennyfarthing-dist/pf/session/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/session/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/session/cli.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/session_start_hook.py +1 -1
- package/pennyfarthing-dist/pf/settings/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/settings/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/settings/cli.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/settings/settings.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__init__.py +5 -5
- package/pennyfarthing-dist/pf/sprint/__main__.py +10 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/archive.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/epic_add.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/epic_update.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/loader.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/status.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/story_add.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/validate_cmd.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/validator.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/work.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/__pycache__/yaml_io.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/archive.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/archive_epic.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/cli.py +41 -41
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/epic_add.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/epic_update.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/import_epic.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/loader.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/status.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/story_add.py +5 -5
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/story_finish.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/story_update.py +4 -4
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/validate_cmd.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/validator.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/work.py +4 -4
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/story/__init__.py +7 -7
- package/pennyfarthing-dist/pf/story/__main__.py +10 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/story/cli.py +4 -4
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/story/create.py +2 -2
- package/pennyfarthing-dist/pf/tests/__init__.py +1 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/conftest.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_108_1_gate_migration.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_108_2_remove_handoff_fallback.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_archive_epic.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_bc.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_bikerack.py +39 -39
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_brownfield.py +6 -6
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_cli_modules.py +20 -20
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_cli_normalization.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_codemarkers.py +60 -60
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_common.py +17 -17
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_confidence_sm_evaluation.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_confidence_sm_gate.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_dialogue_manager.py +11 -11
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_epic_shard_validation.py +15 -15
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_gate_file_resolution.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_gate_runner.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_git_utils.py +8 -8
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_handoff_cli.py +12 -12
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_handoff_e2e.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_healthscore.py +20 -20
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_jira_package.py +29 -29
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_package_structure.py +42 -42
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_patch_mode.py +22 -22
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_prime.py +41 -41
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_resolve_gate_file_field.py +1 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_sprint_package.py +30 -30
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_sprint_panel.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_sprint_validator.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_story_add.py +11 -11
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_story_package.py +12 -12
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_story_update.py +16 -16
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_tiers.py +72 -72
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_token_counting.py +28 -28
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_topology_loader.py +37 -37
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_tui_focus.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_tui_panel_persistence.py +10 -10
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_validate_cmd.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_version_sentinel.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_workflow_check.py +7 -7
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_workflow_list_team.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/tests/test_yaml_io.py +1 -1
- package/pennyfarthing-dist/pf/theme/__main__.py +6 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/theme/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/theme/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/theme/cli.py +6 -6
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/agent.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/schema.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/skill_command.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/sprint.py +2 -2
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/tandem_awareness.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/team_mode.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/workflow.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/cli.py +9 -9
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/welcome_hook.py +1 -1
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/__init__.py +3 -3
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/__pycache__/cli.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/__pycache__/scale.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/__pycache__/state.cpython-314.pyc +0 -0
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/cli.py +18 -18
- package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/helpers.py +1 -1
- package/pennyfarthing-dist/pyproject.toml +18 -0
- package/pennyfarthing-dist/scripts/core/agent-session.sh +3 -3
- package/pennyfarthing-dist/scripts/core/check-context.sh +8 -8
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +3 -3
- package/pennyfarthing-dist/scripts/jira/README.md +1 -1
- package/pennyfarthing-dist/scripts/jira/create-jira-epic.sh +1 -1
- package/pennyfarthing-dist/scripts/jira/create-jira-story.sh +1 -1
- package/pennyfarthing-dist/scripts/jira/jira-claim-story.sh +1 -1
- package/pennyfarthing-dist/scripts/jira/jira-reconcile.sh +1 -1
- package/pennyfarthing-dist/scripts/jira/jira-sync-story.sh +1 -1
- package/pennyfarthing-dist/scripts/jira/sync-epic-jira.sh +1 -1
- package/pennyfarthing-dist/scripts/lib/common.sh +3 -3
- package/pennyfarthing-dist/scripts/lib/run-pf.sh +11 -13
- package/pennyfarthing-dist/scripts/sprint/README.md +1 -1
- package/pennyfarthing-dist/scripts/story/create-story.sh +1 -1
- package/pennyfarthing-dist/scripts/story/size-story.sh +1 -1
- package/pennyfarthing-dist/scripts/story/story-template.sh +1 -1
- package/pennyfarthing-dist/scripts/theme/list-themes.sh +3 -3
- package/pennyfarthing-dist/templates/pyproject.toml +3 -3
- package/pennyfarthing_scripts/__pycache__/bellmode_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/hooks.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_bidirectional_sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_epic_creation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/jira_sync_story.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/output.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/patch_mode.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/pretooluse_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/schema_validation_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/session_start_hook.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__main__.py +0 -5
- package/pennyfarthing_scripts/bikerack/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/audit_log_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/background_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/base_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/changed_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/context_meter_footer.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/debug_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/diffs_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/events.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/git_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/portrait.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/portrait_resolver.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/progress_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/sprint_panel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_data.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/story_detail_screen.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/tui.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/ws_client.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bmad/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bmad/__pycache__/parser.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bmad/__pycache__/sync.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bmad/__pycache__/test_parser.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/bmad/__pycache__/test_sync.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__main__.py +0 -8
- package/pennyfarthing_scripts/brownfield/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/brownfield/__pycache__/discover.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__main__.py +0 -6
- package/pennyfarthing_scripts/codemarkers/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/codemarkers/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/themes.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__main__.py +0 -6
- package/pennyfarthing_scripts/complexity/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/complexity/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__main__.py +0 -6
- package/pennyfarthing_scripts/deadcode/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__main__.py +0 -5
- package/pennyfarthing_scripts/dependencies/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/analyze.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/dependencies/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/epic/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/gate/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/gate/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/gate/__pycache__/validate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/create_branches.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/hooks_installer.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/repos.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/status_all.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git/__pycache__/worktree.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/git_group/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/gate_file.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/gate_runner.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/marker.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/phase_check.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/resolve_gate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/session_stop.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__main__.py +0 -6
- package/pennyfarthing_scripts/hotspots/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/formatters.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/jira/__main__.py +0 -10
- package/pennyfarthing_scripts/jira/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__main__.py +0 -10
- package/pennyfarthing_scripts/migration/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/session.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/skill.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/step.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/migration/__pycache__/validate.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__main__.py +0 -10
- package/pennyfarthing_scripts/preflight/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/preflight/__pycache__/finish.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__main__.py +0 -8
- package/pennyfarthing_scripts/prime/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/heatmap.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/loader.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/models.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/persona.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/session.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/tiers.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/version_sentinel.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/session/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/settings/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/settings/__pycache__/settings.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__main__.py +0 -10
- package/pennyfarthing_scripts/sprint/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/archive_epic.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/import_epic.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__main__.py +0 -10
- package/pennyfarthing_scripts/story/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/__main__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/create.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/size.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/story/__pycache__/template.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/tests/__init__.py +0 -1
- package/pennyfarthing_scripts/tests/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/conftest.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_108_2_remove_handoff_fallback.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_archive_epic.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_bc.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_brownfield.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_cli_modules.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_cli_normalization.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_codemarkers.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_common.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_confidence_sm_evaluation.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_confidence_sm_gate.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_epic_shard_validation.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_gate_file_resolution.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_gate_runner.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_git_utils.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_handoff_cli.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_handoff_e2e.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_healthscore.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_jira_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_package_structure.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_patch_mode.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_prime.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_resolve_gate_file_field.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_panel.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_sprint_validator.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_add.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_package.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_story_update.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tiers.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_token_counting.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_topology_loader.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tui_focus.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_tui_panel_persistence.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_validate_cmd.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_version_sentinel.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_workflow_check.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_workflow_list_team.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_workflow_list_team.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_yaml_io.cpython-314-pytest-9.0.2.pyc +0 -0
- package/pennyfarthing_scripts/theme/__main__.py +0 -6
- package/pennyfarthing_scripts/validate/adapters/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/agent.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/schema.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/skill_command.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/sprint.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/tandem_awareness.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/team_mode.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/team_lifecycle.cpython-314.pyc +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bc/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/base_panel.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/events.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bikerack/ws_client.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/bmad/parser.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/brownfield/discover.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/codemarkers/models.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/config.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/common/output.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/complexity/models.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/consultation/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/consultation/dialogue_manager.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/context.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/deadcode/models.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/dependencies/models.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/epic/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/epic/cli.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/gate/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/gate/validate.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/git_group/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/complete_phase.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/gate_file.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/gate_runner.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/handoff/resolve_gate.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/healthscore/models.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/cyclist-pretooluse-hook.sh +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/pre_edit_check.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/reflector_check.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hooks/session_stop.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/hotspots/models.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/launch/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/migration/session.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/migration/skill.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/migration/step.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/preflight/finish.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/models.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/prime/version_sentinel.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/session/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/settings/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/sprint/yaml_io.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/story/size.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/story/template.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/swebench.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/theme/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/validate/adapters/__init__.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/scale.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/state.py +0 -0
- /package/{pennyfarthing_scripts → pennyfarthing-dist/pf}/workflow/team_lifecycle.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Tests for the fan-out CLI package structure.
|
|
2
2
|
|
|
3
|
-
Story 63-9: Reorganize
|
|
3
|
+
Story 63-9: Reorganize pf into fan-out CLI pattern.
|
|
4
4
|
|
|
5
5
|
These tests verify:
|
|
6
6
|
1. Library packages exist (jira/, sprint/, story/, common/)
|
|
@@ -18,13 +18,13 @@ class TestCommonPackage:
|
|
|
18
18
|
|
|
19
19
|
def test_common_package_exists(self) -> None:
|
|
20
20
|
"""common/ package should exist and be importable."""
|
|
21
|
-
from
|
|
21
|
+
from pf import common
|
|
22
22
|
|
|
23
23
|
assert common is not None
|
|
24
24
|
|
|
25
25
|
def test_output_module_in_common(self) -> None:
|
|
26
26
|
"""output.py should be importable from common/."""
|
|
27
|
-
from
|
|
27
|
+
from pf.common import output
|
|
28
28
|
|
|
29
29
|
assert hasattr(output, "success")
|
|
30
30
|
assert hasattr(output, "info")
|
|
@@ -34,7 +34,7 @@ class TestCommonPackage:
|
|
|
34
34
|
|
|
35
35
|
def test_config_module_in_common(self) -> None:
|
|
36
36
|
"""config.py should be importable from common/."""
|
|
37
|
-
from
|
|
37
|
+
from pf.common import config
|
|
38
38
|
|
|
39
39
|
assert hasattr(config, "get_project_root")
|
|
40
40
|
assert hasattr(config, "load_yaml_config")
|
|
@@ -42,7 +42,7 @@ class TestCommonPackage:
|
|
|
42
42
|
|
|
43
43
|
def test_output_backwards_compatibility(self) -> None:
|
|
44
44
|
"""Old import path should still work for backwards compatibility."""
|
|
45
|
-
from
|
|
45
|
+
from pf import output
|
|
46
46
|
|
|
47
47
|
# Should re-export from common.output
|
|
48
48
|
assert hasattr(output, "success")
|
|
@@ -50,7 +50,7 @@ class TestCommonPackage:
|
|
|
50
50
|
|
|
51
51
|
def test_config_backwards_compatibility(self) -> None:
|
|
52
52
|
"""Old import path should still work for backwards compatibility."""
|
|
53
|
-
from
|
|
53
|
+
from pf import config
|
|
54
54
|
|
|
55
55
|
# Should re-export from common.config
|
|
56
56
|
assert hasattr(config, "get_project_root")
|
|
@@ -61,14 +61,14 @@ class TestJiraPackage:
|
|
|
61
61
|
|
|
62
62
|
def test_jira_package_exists(self) -> None:
|
|
63
63
|
"""jira/ package should exist and be importable."""
|
|
64
|
-
from
|
|
64
|
+
from pf import jira
|
|
65
65
|
|
|
66
66
|
# Should be a package, not the old flat module
|
|
67
67
|
assert hasattr(jira, "__path__") # Packages have __path__
|
|
68
68
|
|
|
69
69
|
def test_client_module_in_jira(self) -> None:
|
|
70
70
|
"""client.py should contain JiraClient and helper functions."""
|
|
71
|
-
from
|
|
71
|
+
from pf.jira import client
|
|
72
72
|
|
|
73
73
|
assert hasattr(client, "JiraClient")
|
|
74
74
|
assert hasattr(client, "get_issue")
|
|
@@ -78,7 +78,7 @@ class TestJiraPackage:
|
|
|
78
78
|
|
|
79
79
|
def test_claim_module_in_jira(self) -> None:
|
|
80
80
|
"""claim.py should provide story claiming functionality."""
|
|
81
|
-
from
|
|
81
|
+
from pf.jira import claim
|
|
82
82
|
|
|
83
83
|
# Main function for claiming stories
|
|
84
84
|
assert hasattr(claim, "claim_story")
|
|
@@ -86,7 +86,7 @@ class TestJiraPackage:
|
|
|
86
86
|
|
|
87
87
|
def test_sync_module_in_jira(self) -> None:
|
|
88
88
|
"""sync.py should provide epic sync functionality."""
|
|
89
|
-
from
|
|
89
|
+
from pf.jira import sync
|
|
90
90
|
|
|
91
91
|
assert hasattr(sync, "sync_epic")
|
|
92
92
|
assert hasattr(sync, "sync_story")
|
|
@@ -94,7 +94,7 @@ class TestJiraPackage:
|
|
|
94
94
|
|
|
95
95
|
def test_bidirectional_module_in_jira(self) -> None:
|
|
96
96
|
"""bidirectional.py should provide bidirectional sync."""
|
|
97
|
-
from
|
|
97
|
+
from pf.jira import bidirectional
|
|
98
98
|
|
|
99
99
|
assert hasattr(bidirectional, "generate_sync_plan")
|
|
100
100
|
assert hasattr(bidirectional, "execute_sync_plan")
|
|
@@ -103,7 +103,7 @@ class TestJiraPackage:
|
|
|
103
103
|
|
|
104
104
|
def test_epic_module_in_jira(self) -> None:
|
|
105
105
|
"""epic.py should provide epic creation functionality."""
|
|
106
|
-
from
|
|
106
|
+
from pf.jira import epic
|
|
107
107
|
|
|
108
108
|
assert hasattr(epic, "create_epic")
|
|
109
109
|
assert hasattr(epic, "create_epic_from_yaml")
|
|
@@ -111,14 +111,14 @@ class TestJiraPackage:
|
|
|
111
111
|
|
|
112
112
|
def test_story_module_in_jira(self) -> None:
|
|
113
113
|
"""story.py should provide story sync functionality."""
|
|
114
|
-
from
|
|
114
|
+
from pf.jira import story
|
|
115
115
|
|
|
116
116
|
assert hasattr(story, "sync_story")
|
|
117
117
|
assert hasattr(story, "get_story_from_sprint")
|
|
118
118
|
|
|
119
119
|
def test_jira_package_reexports(self) -> None:
|
|
120
120
|
"""jira/__init__.py should re-export commonly used items."""
|
|
121
|
-
from
|
|
121
|
+
from pf.jira import (
|
|
122
122
|
JiraClient,
|
|
123
123
|
extract_jira_key,
|
|
124
124
|
)
|
|
@@ -129,7 +129,7 @@ class TestJiraPackage:
|
|
|
129
129
|
def test_jira_backwards_compatibility(self) -> None:
|
|
130
130
|
"""Old-style imports should still work."""
|
|
131
131
|
# These imports should work for backwards compatibility
|
|
132
|
-
from
|
|
132
|
+
from pf.jira import STATUS_TO_JIRA, JiraClient, get_issue
|
|
133
133
|
|
|
134
134
|
assert JiraClient is not None
|
|
135
135
|
assert callable(get_issue)
|
|
@@ -141,14 +141,14 @@ class TestSprintPackage:
|
|
|
141
141
|
|
|
142
142
|
def test_sprint_package_exists(self) -> None:
|
|
143
143
|
"""sprint/ package should exist and be importable."""
|
|
144
|
-
from
|
|
144
|
+
from pf import sprint
|
|
145
145
|
|
|
146
146
|
# Should be a package, not the old flat module
|
|
147
147
|
assert hasattr(sprint, "__path__")
|
|
148
148
|
|
|
149
149
|
def test_loader_module_in_sprint(self) -> None:
|
|
150
150
|
"""loader.py should provide sprint YAML loading."""
|
|
151
|
-
from
|
|
151
|
+
from pf.sprint import loader
|
|
152
152
|
|
|
153
153
|
assert hasattr(loader, "load_sprint")
|
|
154
154
|
assert hasattr(loader, "find_epic")
|
|
@@ -158,27 +158,27 @@ class TestSprintPackage:
|
|
|
158
158
|
|
|
159
159
|
def test_status_module_in_sprint(self) -> None:
|
|
160
160
|
"""status.py should provide sprint status operations."""
|
|
161
|
-
from
|
|
161
|
+
from pf.sprint import status
|
|
162
162
|
|
|
163
163
|
assert hasattr(status, "get_sprint_status")
|
|
164
164
|
assert hasattr(status, "format_status")
|
|
165
165
|
|
|
166
166
|
def test_work_module_in_sprint(self) -> None:
|
|
167
167
|
"""work.py should provide work session management."""
|
|
168
|
-
from
|
|
168
|
+
from pf.sprint import work
|
|
169
169
|
|
|
170
170
|
assert hasattr(work, "start_work")
|
|
171
171
|
assert hasattr(work, "check_story")
|
|
172
172
|
|
|
173
173
|
def test_archive_module_in_sprint(self) -> None:
|
|
174
174
|
"""archive.py should provide story archiving."""
|
|
175
|
-
from
|
|
175
|
+
from pf.sprint import archive
|
|
176
176
|
|
|
177
177
|
assert hasattr(archive, "archive_story")
|
|
178
178
|
|
|
179
179
|
def test_sprint_package_reexports(self) -> None:
|
|
180
180
|
"""sprint/__init__.py should re-export commonly used items."""
|
|
181
|
-
from
|
|
181
|
+
from pf.sprint import (
|
|
182
182
|
find_epic,
|
|
183
183
|
load_sprint,
|
|
184
184
|
)
|
|
@@ -188,7 +188,7 @@ class TestSprintPackage:
|
|
|
188
188
|
|
|
189
189
|
def test_sprint_backwards_compatibility(self) -> None:
|
|
190
190
|
"""Old-style imports should still work."""
|
|
191
|
-
from
|
|
191
|
+
from pf.sprint import find_epic, load_current_sprint, load_sprint
|
|
192
192
|
|
|
193
193
|
assert callable(load_sprint)
|
|
194
194
|
assert callable(find_epic)
|
|
@@ -200,28 +200,28 @@ class TestStoryPackage:
|
|
|
200
200
|
|
|
201
201
|
def test_story_package_exists(self) -> None:
|
|
202
202
|
"""story/ package should exist and be importable."""
|
|
203
|
-
from
|
|
203
|
+
from pf import story
|
|
204
204
|
|
|
205
205
|
# Should be a package
|
|
206
206
|
assert hasattr(story, "__path__")
|
|
207
207
|
|
|
208
208
|
def test_size_module_in_story(self) -> None:
|
|
209
209
|
"""size.py should provide story sizing utilities."""
|
|
210
|
-
from
|
|
210
|
+
from pf.story import size
|
|
211
211
|
|
|
212
212
|
assert hasattr(size, "get_sizing_guidelines")
|
|
213
213
|
assert hasattr(size, "format_size_info")
|
|
214
214
|
|
|
215
215
|
def test_template_module_in_story(self) -> None:
|
|
216
216
|
"""template.py should provide story templates."""
|
|
217
|
-
from
|
|
217
|
+
from pf.story import template
|
|
218
218
|
|
|
219
219
|
assert hasattr(template, "get_template")
|
|
220
220
|
assert hasattr(template, "get_all_templates")
|
|
221
221
|
|
|
222
222
|
def test_create_module_in_story(self) -> None:
|
|
223
223
|
"""create.py should provide story creation."""
|
|
224
|
-
from
|
|
224
|
+
from pf.story import create
|
|
225
225
|
|
|
226
226
|
assert hasattr(create, "create_story")
|
|
227
227
|
assert hasattr(create, "generate_story_yaml")
|
|
@@ -233,14 +233,14 @@ class TestJiraCLI:
|
|
|
233
233
|
def test_jira_cli_has_main(self) -> None:
|
|
234
234
|
"""jira.py should have a main() entry point."""
|
|
235
235
|
# Import the CLI module (not the package)
|
|
236
|
-
import
|
|
236
|
+
import pf.jira as jira_pkg
|
|
237
237
|
|
|
238
238
|
# The package's __main__.py or main module should have main()
|
|
239
239
|
assert hasattr(jira_pkg, "main") or hasattr(jira_pkg, "cli")
|
|
240
240
|
|
|
241
241
|
def test_jira_cli_subcommands(self) -> None:
|
|
242
242
|
"""jira CLI should support expected subcommands."""
|
|
243
|
-
from
|
|
243
|
+
from pf.jira import cli
|
|
244
244
|
|
|
245
245
|
# CLI should define these subcommands
|
|
246
246
|
assert hasattr(cli, "view") or "view" in dir(cli)
|
|
@@ -250,11 +250,11 @@ class TestJiraCLI:
|
|
|
250
250
|
assert hasattr(cli, "bidirectional") or "bidirectional" in dir(cli)
|
|
251
251
|
|
|
252
252
|
def test_jira_cli_runnable_as_module(self) -> None:
|
|
253
|
-
"""python -m
|
|
253
|
+
"""python -m pf.jira should work."""
|
|
254
254
|
import subprocess
|
|
255
255
|
|
|
256
256
|
result = subprocess.run(
|
|
257
|
-
[sys.executable, "-m", "
|
|
257
|
+
[sys.executable, "-m", "pf.jira", "--help"],
|
|
258
258
|
capture_output=True,
|
|
259
259
|
text=True,
|
|
260
260
|
)
|
|
@@ -268,13 +268,13 @@ class TestSprintCLI:
|
|
|
268
268
|
|
|
269
269
|
def test_sprint_cli_has_main(self) -> None:
|
|
270
270
|
"""sprint.py should have a main() entry point."""
|
|
271
|
-
import
|
|
271
|
+
import pf.sprint as sprint_pkg
|
|
272
272
|
|
|
273
273
|
assert hasattr(sprint_pkg, "main") or hasattr(sprint_pkg, "cli")
|
|
274
274
|
|
|
275
275
|
def test_sprint_cli_subcommands(self) -> None:
|
|
276
276
|
"""sprint CLI should support expected subcommands."""
|
|
277
|
-
from
|
|
277
|
+
from pf.sprint import cli
|
|
278
278
|
|
|
279
279
|
# CLI should define these subcommands based on skill.md
|
|
280
280
|
assert hasattr(cli, "status") or "status" in dir(cli)
|
|
@@ -283,11 +283,11 @@ class TestSprintCLI:
|
|
|
283
283
|
assert hasattr(cli, "archive") or "archive" in dir(cli)
|
|
284
284
|
|
|
285
285
|
def test_sprint_cli_runnable_as_module(self) -> None:
|
|
286
|
-
"""python -m
|
|
286
|
+
"""python -m pf.sprint should work."""
|
|
287
287
|
import subprocess
|
|
288
288
|
|
|
289
289
|
result = subprocess.run(
|
|
290
|
-
[sys.executable, "-m", "
|
|
290
|
+
[sys.executable, "-m", "pf.sprint", "--help"],
|
|
291
291
|
capture_output=True,
|
|
292
292
|
text=True,
|
|
293
293
|
)
|
|
@@ -300,13 +300,13 @@ class TestStoryCLI:
|
|
|
300
300
|
|
|
301
301
|
def test_story_cli_has_main(self) -> None:
|
|
302
302
|
"""story.py should have a main() entry point."""
|
|
303
|
-
import
|
|
303
|
+
import pf.story as story_pkg
|
|
304
304
|
|
|
305
305
|
assert hasattr(story_pkg, "main") or hasattr(story_pkg, "cli")
|
|
306
306
|
|
|
307
307
|
def test_story_cli_subcommands(self) -> None:
|
|
308
308
|
"""story CLI should support expected subcommands."""
|
|
309
|
-
from
|
|
309
|
+
from pf.story import cli
|
|
310
310
|
|
|
311
311
|
# CLI should define these subcommands based on skill.md
|
|
312
312
|
assert hasattr(cli, "size") or "size" in dir(cli)
|
|
@@ -314,11 +314,11 @@ class TestStoryCLI:
|
|
|
314
314
|
assert hasattr(cli, "create") or "create" in dir(cli)
|
|
315
315
|
|
|
316
316
|
def test_story_cli_runnable_as_module(self) -> None:
|
|
317
|
-
"""python -m
|
|
317
|
+
"""python -m pf.story should work."""
|
|
318
318
|
import subprocess
|
|
319
319
|
|
|
320
320
|
result = subprocess.run(
|
|
321
|
-
[sys.executable, "-m", "
|
|
321
|
+
[sys.executable, "-m", "pf.story", "--help"],
|
|
322
322
|
capture_output=True,
|
|
323
323
|
text=True,
|
|
324
324
|
)
|
|
@@ -331,7 +331,7 @@ class TestOldModuleCompatibility:
|
|
|
331
331
|
|
|
332
332
|
def test_jira_sync_module_works(self) -> None:
|
|
333
333
|
"""jira_sync.py should still be importable and functional."""
|
|
334
|
-
from
|
|
334
|
+
from pf import jira_sync
|
|
335
335
|
|
|
336
336
|
assert hasattr(jira_sync, "sync_epic")
|
|
337
337
|
assert hasattr(jira_sync, "sync_story")
|
|
@@ -339,21 +339,21 @@ class TestOldModuleCompatibility:
|
|
|
339
339
|
|
|
340
340
|
def test_jira_bidirectional_sync_module_works(self) -> None:
|
|
341
341
|
"""jira_bidirectional_sync.py should still be importable."""
|
|
342
|
-
from
|
|
342
|
+
from pf import jira_bidirectional_sync
|
|
343
343
|
|
|
344
344
|
assert hasattr(jira_bidirectional_sync, "generate_sync_plan")
|
|
345
345
|
assert hasattr(jira_bidirectional_sync, "main")
|
|
346
346
|
|
|
347
347
|
def test_jira_epic_creation_module_works(self) -> None:
|
|
348
348
|
"""jira_epic_creation.py should still be importable."""
|
|
349
|
-
from
|
|
349
|
+
from pf import jira_epic_creation
|
|
350
350
|
|
|
351
351
|
assert hasattr(jira_epic_creation, "create_epic")
|
|
352
352
|
assert hasattr(jira_epic_creation, "main")
|
|
353
353
|
|
|
354
354
|
def test_jira_sync_story_module_works(self) -> None:
|
|
355
355
|
"""jira_sync_story.py should still be importable."""
|
|
356
|
-
from
|
|
356
|
+
from pf import jira_sync_story
|
|
357
357
|
|
|
358
358
|
assert hasattr(jira_sync_story, "sync_story")
|
|
359
359
|
assert hasattr(jira_sync_story, "main")
|
|
@@ -27,7 +27,7 @@ import yaml
|
|
|
27
27
|
|
|
28
28
|
# Import will fail until module exists - this is intentional for RED state
|
|
29
29
|
try:
|
|
30
|
-
from
|
|
30
|
+
from pf.patch_mode import (
|
|
31
31
|
PatchStack,
|
|
32
32
|
PatchState,
|
|
33
33
|
create_patch_branch,
|
|
@@ -73,7 +73,7 @@ class TestPatchModeModuleExists:
|
|
|
73
73
|
|
|
74
74
|
def test_module_importable(self) -> None:
|
|
75
75
|
"""patch_mode module should be importable."""
|
|
76
|
-
assert IMPORT_SUCCESS, "
|
|
76
|
+
assert IMPORT_SUCCESS, "pf.patch_mode module does not exist"
|
|
77
77
|
|
|
78
78
|
def test_patch_state_class_exists(self) -> None:
|
|
79
79
|
"""PatchState class should exist."""
|
|
@@ -162,7 +162,7 @@ class TestPatchBranchCreation:
|
|
|
162
162
|
if not IMPORT_SUCCESS:
|
|
163
163
|
pytest.skip("Module not implemented")
|
|
164
164
|
# Mock git operations
|
|
165
|
-
with patch("
|
|
165
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
166
166
|
mock_run.return_value = MagicMock(returncode=0)
|
|
167
167
|
branch_name = create_patch_branch(
|
|
168
168
|
description="fix broken script",
|
|
@@ -179,7 +179,7 @@ class TestPatchBranchCreation:
|
|
|
179
179
|
"""AC3: Branch name should follow patch/<desc>-<timestamp> format."""
|
|
180
180
|
if not IMPORT_SUCCESS:
|
|
181
181
|
pytest.skip("Module not implemented")
|
|
182
|
-
with patch("
|
|
182
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
183
183
|
mock_run.return_value = MagicMock(returncode=0)
|
|
184
184
|
branch_name = create_patch_branch(
|
|
185
185
|
description="fix broken script",
|
|
@@ -192,7 +192,7 @@ class TestPatchBranchCreation:
|
|
|
192
192
|
"""AC3: Branch name should sanitize special characters from description."""
|
|
193
193
|
if not IMPORT_SUCCESS:
|
|
194
194
|
pytest.skip("Module not implemented")
|
|
195
|
-
with patch("
|
|
195
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
196
196
|
mock_run.return_value = MagicMock(returncode=0)
|
|
197
197
|
branch_name = create_patch_branch(
|
|
198
198
|
description="fix: broken/script (urgent!)",
|
|
@@ -227,7 +227,7 @@ class TestDevOnlyWorkflow:
|
|
|
227
227
|
"""AC4: Entering patch mode should set agent to dev."""
|
|
228
228
|
if not IMPORT_SUCCESS:
|
|
229
229
|
pytest.skip("Module not implemented")
|
|
230
|
-
with patch("
|
|
230
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
231
231
|
mock_run.return_value = MagicMock(returncode=0)
|
|
232
232
|
result = enter_patch_mode(
|
|
233
233
|
description="fix broken script",
|
|
@@ -284,7 +284,7 @@ class TestMergeBack:
|
|
|
284
284
|
"""AC6: merge_patch_branch should merge to feature branch."""
|
|
285
285
|
if not IMPORT_SUCCESS:
|
|
286
286
|
pytest.skip("Module not implemented")
|
|
287
|
-
with patch("
|
|
287
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
288
288
|
mock_run.return_value = MagicMock(returncode=0)
|
|
289
289
|
merge_patch_branch(
|
|
290
290
|
patch_branch="patch/fix-script-1234567890",
|
|
@@ -300,7 +300,7 @@ class TestMergeBack:
|
|
|
300
300
|
"""AC6: merge_patch_branch should delete the patch branch after merge."""
|
|
301
301
|
if not IMPORT_SUCCESS:
|
|
302
302
|
pytest.skip("Module not implemented")
|
|
303
|
-
with patch("
|
|
303
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
304
304
|
mock_run.return_value = MagicMock(returncode=0)
|
|
305
305
|
merge_patch_branch(
|
|
306
306
|
patch_branch="patch/fix-script-1234567890",
|
|
@@ -331,11 +331,11 @@ class TestStateRestoration:
|
|
|
331
331
|
"""AC7: restore_workflow_state should return original state."""
|
|
332
332
|
if not IMPORT_SUCCESS:
|
|
333
333
|
pytest.skip("Module not implemented")
|
|
334
|
-
with patch("
|
|
334
|
+
with patch("pf.patch_mode.get_patch_stack") as mock_stack:
|
|
335
335
|
state = PatchState(**saved_state)
|
|
336
336
|
mock_stack.return_value.peek.return_value = state
|
|
337
337
|
mock_stack.return_value.pop.return_value = state
|
|
338
|
-
with patch("
|
|
338
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
339
339
|
mock_run.return_value = MagicMock(returncode=0)
|
|
340
340
|
result = restore_workflow_state()
|
|
341
341
|
assert result["story_id"] == "MSSCI-12345"
|
|
@@ -346,11 +346,11 @@ class TestStateRestoration:
|
|
|
346
346
|
"""AC7: restore should checkout the original feature branch."""
|
|
347
347
|
if not IMPORT_SUCCESS:
|
|
348
348
|
pytest.skip("Module not implemented")
|
|
349
|
-
with patch("
|
|
349
|
+
with patch("pf.patch_mode.get_patch_stack") as mock_stack:
|
|
350
350
|
state = PatchState(**saved_state)
|
|
351
351
|
mock_stack.return_value.peek.return_value = state
|
|
352
352
|
mock_stack.return_value.pop.return_value = state
|
|
353
|
-
with patch("
|
|
353
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
354
354
|
mock_run.return_value = MagicMock(returncode=0)
|
|
355
355
|
restore_workflow_state(repo_path=tmp_path)
|
|
356
356
|
# Should checkout feature branch
|
|
@@ -417,7 +417,7 @@ class TestTirepumpIntegration:
|
|
|
417
417
|
"""AC9: exit_patch_mode should return handoff marker for original agent."""
|
|
418
418
|
if not IMPORT_SUCCESS:
|
|
419
419
|
pytest.skip("Module not implemented")
|
|
420
|
-
with patch("
|
|
420
|
+
with patch("pf.patch_mode.get_patch_stack") as mock_stack:
|
|
421
421
|
mock_state = MagicMock()
|
|
422
422
|
mock_state.agent = "dev"
|
|
423
423
|
mock_state.story_id = "MSSCI-12345"
|
|
@@ -427,7 +427,7 @@ class TestTirepumpIntegration:
|
|
|
427
427
|
mock_stack.return_value.peek.return_value = mock_state
|
|
428
428
|
mock_stack.return_value.pop.return_value = mock_state
|
|
429
429
|
|
|
430
|
-
with patch("
|
|
430
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
431
431
|
mock_run.return_value = MagicMock(returncode=0)
|
|
432
432
|
result = exit_patch_mode()
|
|
433
433
|
|
|
@@ -441,7 +441,7 @@ class TestTirepumpIntegration:
|
|
|
441
441
|
if not IMPORT_SUCCESS:
|
|
442
442
|
pytest.skip("Module not implemented")
|
|
443
443
|
# Relay mode should continue after patch completes
|
|
444
|
-
with patch("
|
|
444
|
+
with patch("pf.patch_mode.get_patch_stack") as mock_stack:
|
|
445
445
|
mock_state = MagicMock()
|
|
446
446
|
mock_state.agent = "dev"
|
|
447
447
|
mock_state.story_id = "MSSCI-12345"
|
|
@@ -451,7 +451,7 @@ class TestTirepumpIntegration:
|
|
|
451
451
|
mock_stack.return_value.peek.return_value = mock_state
|
|
452
452
|
mock_stack.return_value.pop.return_value = mock_state
|
|
453
453
|
|
|
454
|
-
with patch("
|
|
454
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
455
455
|
mock_run.return_value = MagicMock(returncode=0)
|
|
456
456
|
result = exit_patch_mode()
|
|
457
457
|
# Should not disable relay mode
|
|
@@ -527,7 +527,7 @@ class TestNestedPatches:
|
|
|
527
527
|
"""AC10: Entering nested patch should preserve parent patch state."""
|
|
528
528
|
if not IMPORT_SUCCESS:
|
|
529
529
|
pytest.skip("Module not implemented")
|
|
530
|
-
with patch("
|
|
530
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
531
531
|
mock_run.return_value = MagicMock(returncode=0)
|
|
532
532
|
|
|
533
533
|
# Enter first patch
|
|
@@ -620,7 +620,7 @@ class TestEnterPatchModeIntegration:
|
|
|
620
620
|
"""enter_patch_mode should create branch and save state atomically."""
|
|
621
621
|
if not IMPORT_SUCCESS:
|
|
622
622
|
pytest.skip("Module not implemented")
|
|
623
|
-
with patch("
|
|
623
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
624
624
|
mock_run.return_value = MagicMock(returncode=0, stdout="patch/fix-bug-123")
|
|
625
625
|
|
|
626
626
|
stack_file = tmp_path / ".session" / "patch-stack.yaml"
|
|
@@ -645,7 +645,7 @@ class TestEnterPatchModeIntegration:
|
|
|
645
645
|
"""enter_patch_mode should fail gracefully if git fails."""
|
|
646
646
|
if not IMPORT_SUCCESS:
|
|
647
647
|
pytest.skip("Module not implemented")
|
|
648
|
-
with patch("
|
|
648
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
649
649
|
mock_run.return_value = MagicMock(returncode=1, stderr="git error")
|
|
650
650
|
|
|
651
651
|
with pytest.raises(Exception) as exc_info:
|
|
@@ -683,7 +683,7 @@ class TestExitPatchModeIntegration:
|
|
|
683
683
|
)
|
|
684
684
|
stack.push(state)
|
|
685
685
|
|
|
686
|
-
with patch("
|
|
686
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
687
687
|
mock_run.return_value = MagicMock(returncode=0)
|
|
688
688
|
|
|
689
689
|
result = exit_patch_mode(
|
|
@@ -731,7 +731,7 @@ class TestExitPatchModeIntegration:
|
|
|
731
731
|
else: # merge fails
|
|
732
732
|
return MagicMock(returncode=1, stderr="merge conflict")
|
|
733
733
|
|
|
734
|
-
with patch("
|
|
734
|
+
with patch("pf.patch_mode.subprocess.run", side_effect=mock_run_side_effect):
|
|
735
735
|
with pytest.raises(RuntimeError) as exc_info:
|
|
736
736
|
exit_patch_mode(
|
|
737
737
|
patch_branch="patch/fix-bug-123",
|
|
@@ -765,7 +765,7 @@ class TestExitPatchModeIntegration:
|
|
|
765
765
|
)
|
|
766
766
|
stack.push(state)
|
|
767
767
|
|
|
768
|
-
with patch("
|
|
768
|
+
with patch("pf.patch_mode.subprocess.run") as mock_run:
|
|
769
769
|
mock_run.return_value = MagicMock(returncode=1, stderr="branch does not exist")
|
|
770
770
|
|
|
771
771
|
with pytest.raises(RuntimeError) as exc_info:
|