@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
|
@@ -28,7 +28,7 @@ class TestTierCLIArgument:
|
|
|
28
28
|
|
|
29
29
|
def test_tier_argument_accepts_full(self, tmp_path: Path) -> None:
|
|
30
30
|
"""Test --tier FULL is accepted."""
|
|
31
|
-
from
|
|
31
|
+
from pf.prime.cli import main
|
|
32
32
|
|
|
33
33
|
pf_dir = tmp_path / ".pennyfarthing"
|
|
34
34
|
pf_dir.mkdir()
|
|
@@ -36,14 +36,14 @@ class TestTierCLIArgument:
|
|
|
36
36
|
agents_dir.mkdir()
|
|
37
37
|
(agents_dir / "dev.md").write_text("# Dev Agent")
|
|
38
38
|
|
|
39
|
-
with patch("
|
|
39
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
40
40
|
result = main(["--agent", "dev", "--tier", "FULL", "--no-workflow", "--no-register"])
|
|
41
41
|
|
|
42
42
|
assert result == 0
|
|
43
43
|
|
|
44
44
|
def test_tier_argument_accepts_refresh(self, tmp_path: Path) -> None:
|
|
45
45
|
"""Test --tier REFRESH is accepted."""
|
|
46
|
-
from
|
|
46
|
+
from pf.prime.cli import main
|
|
47
47
|
|
|
48
48
|
pf_dir = tmp_path / ".pennyfarthing"
|
|
49
49
|
pf_dir.mkdir()
|
|
@@ -51,14 +51,14 @@ class TestTierCLIArgument:
|
|
|
51
51
|
agents_dir.mkdir()
|
|
52
52
|
(agents_dir / "dev.md").write_text("# Dev Agent")
|
|
53
53
|
|
|
54
|
-
with patch("
|
|
54
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
55
55
|
result = main(["--agent", "dev", "--tier", "REFRESH", "--no-workflow", "--no-register"])
|
|
56
56
|
|
|
57
57
|
assert result == 0
|
|
58
58
|
|
|
59
59
|
def test_tier_argument_accepts_handoff(self, tmp_path: Path) -> None:
|
|
60
60
|
"""Test --tier HANDOFF is accepted."""
|
|
61
|
-
from
|
|
61
|
+
from pf.prime.cli import main
|
|
62
62
|
|
|
63
63
|
pf_dir = tmp_path / ".pennyfarthing"
|
|
64
64
|
pf_dir.mkdir()
|
|
@@ -66,14 +66,14 @@ class TestTierCLIArgument:
|
|
|
66
66
|
agents_dir.mkdir()
|
|
67
67
|
(agents_dir / "dev.md").write_text("# Dev Agent")
|
|
68
68
|
|
|
69
|
-
with patch("
|
|
69
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
70
70
|
result = main(["--agent", "dev", "--tier", "HANDOFF", "--no-workflow", "--no-register"])
|
|
71
71
|
|
|
72
72
|
assert result == 0
|
|
73
73
|
|
|
74
74
|
def test_tier_argument_accepts_minimal(self, tmp_path: Path) -> None:
|
|
75
75
|
"""Test --tier MINIMAL is accepted."""
|
|
76
|
-
from
|
|
76
|
+
from pf.prime.cli import main
|
|
77
77
|
|
|
78
78
|
pf_dir = tmp_path / ".pennyfarthing"
|
|
79
79
|
pf_dir.mkdir()
|
|
@@ -81,14 +81,14 @@ class TestTierCLIArgument:
|
|
|
81
81
|
agents_dir.mkdir()
|
|
82
82
|
(agents_dir / "dev.md").write_text("# Dev Agent")
|
|
83
83
|
|
|
84
|
-
with patch("
|
|
84
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
85
85
|
result = main(["--agent", "dev", "--tier", "MINIMAL", "--no-workflow", "--no-register"])
|
|
86
86
|
|
|
87
87
|
assert result == 0
|
|
88
88
|
|
|
89
89
|
def test_tier_argument_rejects_invalid_value(self, tmp_path: Path) -> None:
|
|
90
90
|
"""Test --tier rejects invalid values."""
|
|
91
|
-
from
|
|
91
|
+
from pf.prime.cli import main
|
|
92
92
|
|
|
93
93
|
with pytest.raises(SystemExit) as exc_info:
|
|
94
94
|
main(["--tier", "INVALID"])
|
|
@@ -98,7 +98,7 @@ class TestTierCLIArgument:
|
|
|
98
98
|
|
|
99
99
|
def test_tier_argument_case_insensitive(self, tmp_path: Path) -> None:
|
|
100
100
|
"""Test --tier accepts lowercase values."""
|
|
101
|
-
from
|
|
101
|
+
from pf.prime.cli import main
|
|
102
102
|
|
|
103
103
|
pf_dir = tmp_path / ".pennyfarthing"
|
|
104
104
|
pf_dir.mkdir()
|
|
@@ -106,7 +106,7 @@ class TestTierCLIArgument:
|
|
|
106
106
|
agents_dir.mkdir()
|
|
107
107
|
(agents_dir / "dev.md").write_text("# Dev Agent")
|
|
108
108
|
|
|
109
|
-
with patch("
|
|
109
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
110
110
|
# Should accept lowercase
|
|
111
111
|
result = main(["--agent", "dev", "--tier", "full", "--no-workflow", "--no-register"])
|
|
112
112
|
|
|
@@ -123,13 +123,13 @@ class TestTierComponentLoading:
|
|
|
123
123
|
|
|
124
124
|
def test_full_tier_loads_all_components(self, tmp_path: Path, capsys) -> None:
|
|
125
125
|
"""Test FULL tier loads all 10 components."""
|
|
126
|
-
from
|
|
126
|
+
from pf.prime.cli import prime
|
|
127
127
|
|
|
128
128
|
# Setup complete project structure
|
|
129
129
|
self._setup_full_project(tmp_path)
|
|
130
130
|
|
|
131
|
-
with patch("
|
|
132
|
-
with patch("
|
|
131
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
132
|
+
with patch("pf.prime.loader.get_project_root", return_value=tmp_path):
|
|
133
133
|
result = prime(
|
|
134
134
|
agent_name="dev",
|
|
135
135
|
tier="FULL",
|
|
@@ -148,13 +148,13 @@ class TestTierComponentLoading:
|
|
|
148
148
|
|
|
149
149
|
def test_refresh_tier_loads_dynamic_only(self, tmp_path: Path, capsys) -> None:
|
|
150
150
|
"""Test REFRESH tier loads only dynamic state (~600 tokens)."""
|
|
151
|
-
from
|
|
151
|
+
from pf.prime.cli import prime
|
|
152
152
|
|
|
153
153
|
# Setup
|
|
154
154
|
self._setup_full_project(tmp_path)
|
|
155
155
|
|
|
156
|
-
with patch("
|
|
157
|
-
with patch("
|
|
156
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
157
|
+
with patch("pf.prime.loader.get_project_root", return_value=tmp_path):
|
|
158
158
|
result = prime(
|
|
159
159
|
agent_name="dev",
|
|
160
160
|
tier="REFRESH",
|
|
@@ -182,13 +182,13 @@ class TestTierComponentLoading:
|
|
|
182
182
|
|
|
183
183
|
def test_handoff_tier_loads_agent_essentials(self, tmp_path: Path, capsys) -> None:
|
|
184
184
|
"""Test HANDOFF tier loads agent definition + compressed persona (~700 tokens)."""
|
|
185
|
-
from
|
|
185
|
+
from pf.prime.cli import prime
|
|
186
186
|
|
|
187
187
|
# Setup
|
|
188
188
|
self._setup_full_project(tmp_path)
|
|
189
189
|
|
|
190
|
-
with patch("
|
|
191
|
-
with patch("
|
|
190
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
191
|
+
with patch("pf.prime.loader.get_project_root", return_value=tmp_path):
|
|
192
192
|
result = prime(
|
|
193
193
|
agent_name="dev",
|
|
194
194
|
tier="HANDOFF",
|
|
@@ -219,13 +219,13 @@ class TestTierComponentLoading:
|
|
|
219
219
|
|
|
220
220
|
def test_minimal_tier_loads_workflow_only(self, tmp_path: Path, capsys) -> None:
|
|
221
221
|
"""Test MINIMAL tier loads only workflow state (~200 tokens)."""
|
|
222
|
-
from
|
|
222
|
+
from pf.prime.cli import prime
|
|
223
223
|
|
|
224
224
|
# Setup
|
|
225
225
|
self._setup_full_project(tmp_path)
|
|
226
226
|
|
|
227
|
-
with patch("
|
|
228
|
-
with patch("
|
|
227
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
228
|
+
with patch("pf.prime.loader.get_project_root", return_value=tmp_path):
|
|
229
229
|
result = prime(
|
|
230
230
|
agent_name="dev",
|
|
231
231
|
tier="MINIMAL",
|
|
@@ -315,8 +315,8 @@ class TestCompressedPersonaFormat:
|
|
|
315
315
|
def test_compressed_persona_has_xml_structure(self, tmp_path: Path) -> None:
|
|
316
316
|
"""Test compressed persona uses XML format."""
|
|
317
317
|
# Import will fail until function is implemented
|
|
318
|
-
from
|
|
319
|
-
from
|
|
318
|
+
from pf.prime.models import Persona
|
|
319
|
+
from pf.prime.persona import format_persona_compressed
|
|
320
320
|
|
|
321
321
|
persona = Persona(
|
|
322
322
|
character="Rosie the Riveter",
|
|
@@ -333,8 +333,8 @@ class TestCompressedPersonaFormat:
|
|
|
333
333
|
|
|
334
334
|
def test_compressed_persona_includes_voice(self, tmp_path: Path) -> None:
|
|
335
335
|
"""Test compressed persona includes voice element."""
|
|
336
|
-
from
|
|
337
|
-
from
|
|
336
|
+
from pf.prime.models import Persona
|
|
337
|
+
from pf.prime.persona import format_persona_compressed
|
|
338
338
|
|
|
339
339
|
persona = Persona(
|
|
340
340
|
character="Rosie the Riveter",
|
|
@@ -349,8 +349,8 @@ class TestCompressedPersonaFormat:
|
|
|
349
349
|
|
|
350
350
|
def test_compressed_persona_includes_style(self, tmp_path: Path) -> None:
|
|
351
351
|
"""Test compressed persona includes style element."""
|
|
352
|
-
from
|
|
353
|
-
from
|
|
352
|
+
from pf.prime.models import Persona
|
|
353
|
+
from pf.prime.persona import format_persona_compressed
|
|
354
354
|
|
|
355
355
|
persona = Persona(
|
|
356
356
|
character="Rosie the Riveter",
|
|
@@ -364,8 +364,8 @@ class TestCompressedPersonaFormat:
|
|
|
364
364
|
|
|
365
365
|
def test_compressed_persona_includes_catchphrase_if_present(self, tmp_path: Path) -> None:
|
|
366
366
|
"""Test compressed persona includes catchphrase from quote."""
|
|
367
|
-
from
|
|
368
|
-
from
|
|
367
|
+
from pf.prime.models import Persona
|
|
368
|
+
from pf.prime.persona import format_persona_compressed
|
|
369
369
|
|
|
370
370
|
persona = Persona(
|
|
371
371
|
character="Rosie the Riveter",
|
|
@@ -381,8 +381,8 @@ class TestCompressedPersonaFormat:
|
|
|
381
381
|
|
|
382
382
|
def test_compressed_persona_token_count(self, tmp_path: Path) -> None:
|
|
383
383
|
"""Test compressed persona is approximately 100 tokens (~400 chars)."""
|
|
384
|
-
from
|
|
385
|
-
from
|
|
384
|
+
from pf.prime.models import Persona
|
|
385
|
+
from pf.prime.persona import format_persona_compressed
|
|
386
386
|
|
|
387
387
|
persona = Persona(
|
|
388
388
|
character="Rosie the Riveter",
|
|
@@ -401,8 +401,8 @@ class TestCompressedPersonaFormat:
|
|
|
401
401
|
|
|
402
402
|
def test_full_persona_token_count(self, tmp_path: Path) -> None:
|
|
403
403
|
"""Test full persona is approximately 300 tokens (~1200 chars)."""
|
|
404
|
-
from
|
|
405
|
-
from
|
|
404
|
+
from pf.prime.models import CrewMember, Persona
|
|
405
|
+
from pf.prime.persona import format_persona_output
|
|
406
406
|
|
|
407
407
|
persona = Persona(
|
|
408
408
|
character="Rosie the Riveter",
|
|
@@ -434,7 +434,7 @@ class TestDefaultBehavior:
|
|
|
434
434
|
|
|
435
435
|
def test_no_tier_argument_defaults_to_full(self, tmp_path: Path, capsys) -> None:
|
|
436
436
|
"""Test that omitting --tier defaults to FULL behavior."""
|
|
437
|
-
from
|
|
437
|
+
from pf.prime.cli import prime
|
|
438
438
|
|
|
439
439
|
# Setup
|
|
440
440
|
pf_dir = tmp_path / ".pennyfarthing"
|
|
@@ -451,8 +451,8 @@ class TestDefaultBehavior:
|
|
|
451
451
|
sidecar_dir.mkdir(parents=True)
|
|
452
452
|
(sidecar_dir / "patterns.md").write_text("# Patterns")
|
|
453
453
|
|
|
454
|
-
with patch("
|
|
455
|
-
with patch("
|
|
454
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
455
|
+
with patch("pf.prime.loader.get_project_root", return_value=tmp_path):
|
|
456
456
|
# No --tier argument
|
|
457
457
|
result = prime(
|
|
458
458
|
agent_name="dev",
|
|
@@ -471,7 +471,7 @@ class TestDefaultBehavior:
|
|
|
471
471
|
|
|
472
472
|
def test_explicit_full_tier_matches_default(self, tmp_path: Path, capsys) -> None:
|
|
473
473
|
"""Test that --tier FULL produces same output as default."""
|
|
474
|
-
from
|
|
474
|
+
from pf.prime.cli import prime
|
|
475
475
|
|
|
476
476
|
# Setup
|
|
477
477
|
pf_dir = tmp_path / ".pennyfarthing"
|
|
@@ -480,8 +480,8 @@ class TestDefaultBehavior:
|
|
|
480
480
|
agents_dir.mkdir()
|
|
481
481
|
(agents_dir / "dev.md").write_text("# Dev Agent")
|
|
482
482
|
|
|
483
|
-
with patch("
|
|
484
|
-
with patch("
|
|
483
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
484
|
+
with patch("pf.prime.loader.get_project_root", return_value=tmp_path):
|
|
485
485
|
# Run without tier
|
|
486
486
|
result1 = prime(
|
|
487
487
|
agent_name="dev",
|
|
@@ -510,7 +510,7 @@ class TestDefaultBehavior:
|
|
|
510
510
|
"""Test existing flags (--quiet, --json, etc.) work with --tier."""
|
|
511
511
|
import json
|
|
512
512
|
|
|
513
|
-
from
|
|
513
|
+
from pf.prime.cli import prime
|
|
514
514
|
|
|
515
515
|
# Setup
|
|
516
516
|
pf_dir = tmp_path / ".pennyfarthing"
|
|
@@ -519,7 +519,7 @@ class TestDefaultBehavior:
|
|
|
519
519
|
agents_dir.mkdir()
|
|
520
520
|
(agents_dir / "dev.md").write_text("# Dev Agent")
|
|
521
521
|
|
|
522
|
-
with patch("
|
|
522
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
523
523
|
result = prime(
|
|
524
524
|
agent_name="dev",
|
|
525
525
|
tier="REFRESH",
|
|
@@ -548,7 +548,7 @@ class TestTierLoadingPaths:
|
|
|
548
548
|
|
|
549
549
|
def test_full_tier_with_all_options(self, tmp_path: Path) -> None:
|
|
550
550
|
"""Test FULL tier with all context sources available."""
|
|
551
|
-
from
|
|
551
|
+
from pf.prime.tiers import ContextTier, load_tier_components
|
|
552
552
|
|
|
553
553
|
# Setup complete project
|
|
554
554
|
self._setup_complete_project(tmp_path)
|
|
@@ -569,7 +569,7 @@ class TestTierLoadingPaths:
|
|
|
569
569
|
|
|
570
570
|
def test_full_tier_with_missing_optional(self, tmp_path: Path) -> None:
|
|
571
571
|
"""Test FULL tier gracefully handles missing optional components."""
|
|
572
|
-
from
|
|
572
|
+
from pf.prime.tiers import ContextTier, load_tier_components
|
|
573
573
|
|
|
574
574
|
# Minimal setup - only agent definition
|
|
575
575
|
pf_dir = tmp_path / ".pennyfarthing"
|
|
@@ -590,7 +590,7 @@ class TestTierLoadingPaths:
|
|
|
590
590
|
|
|
591
591
|
def test_refresh_tier_components(self, tmp_path: Path) -> None:
|
|
592
592
|
"""Test REFRESH tier returns correct component set."""
|
|
593
|
-
from
|
|
593
|
+
from pf.prime.tiers import ContextTier, load_tier_components
|
|
594
594
|
|
|
595
595
|
self._setup_complete_project(tmp_path)
|
|
596
596
|
|
|
@@ -612,7 +612,7 @@ class TestTierLoadingPaths:
|
|
|
612
612
|
|
|
613
613
|
def test_handoff_tier_components(self, tmp_path: Path) -> None:
|
|
614
614
|
"""Test HANDOFF tier returns correct component set."""
|
|
615
|
-
from
|
|
615
|
+
from pf.prime.tiers import ContextTier, load_tier_components
|
|
616
616
|
|
|
617
617
|
self._setup_complete_project(tmp_path)
|
|
618
618
|
|
|
@@ -633,7 +633,7 @@ class TestTierLoadingPaths:
|
|
|
633
633
|
|
|
634
634
|
def test_minimal_tier_components(self, tmp_path: Path) -> None:
|
|
635
635
|
"""Test MINIMAL tier returns minimal component set."""
|
|
636
|
-
from
|
|
636
|
+
from pf.prime.tiers import ContextTier, load_tier_components
|
|
637
637
|
|
|
638
638
|
self._setup_complete_project(tmp_path)
|
|
639
639
|
|
|
@@ -654,7 +654,7 @@ class TestTierLoadingPaths:
|
|
|
654
654
|
|
|
655
655
|
def test_tier_enum_values(self) -> None:
|
|
656
656
|
"""Test ContextTier enum has all required values."""
|
|
657
|
-
from
|
|
657
|
+
from pf.prime.tiers import ContextTier
|
|
658
658
|
|
|
659
659
|
assert hasattr(ContextTier, "FULL")
|
|
660
660
|
assert hasattr(ContextTier, "REFRESH")
|
|
@@ -663,7 +663,7 @@ class TestTierLoadingPaths:
|
|
|
663
663
|
|
|
664
664
|
def test_tier_from_string(self) -> None:
|
|
665
665
|
"""Test converting string to ContextTier."""
|
|
666
|
-
from
|
|
666
|
+
from pf.prime.tiers import ContextTier, tier_from_string
|
|
667
667
|
|
|
668
668
|
assert tier_from_string("FULL") == ContextTier.FULL
|
|
669
669
|
assert tier_from_string("REFRESH") == ContextTier.REFRESH
|
|
@@ -726,13 +726,13 @@ class TestTokenReduction:
|
|
|
726
726
|
|
|
727
727
|
def test_refresh_tier_under_800_tokens(self, tmp_path: Path, capsys) -> None:
|
|
728
728
|
"""Test REFRESH tier output is under 800 tokens (~3200 chars)."""
|
|
729
|
-
from
|
|
729
|
+
from pf.prime.cli import prime
|
|
730
730
|
|
|
731
731
|
# Setup with realistic content
|
|
732
732
|
self._setup_realistic_project(tmp_path)
|
|
733
733
|
|
|
734
|
-
with patch("
|
|
735
|
-
with patch("
|
|
734
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
735
|
+
with patch("pf.prime.loader.get_project_root", return_value=tmp_path):
|
|
736
736
|
result = prime(
|
|
737
737
|
agent_name="dev",
|
|
738
738
|
tier="REFRESH",
|
|
@@ -748,13 +748,13 @@ class TestTokenReduction:
|
|
|
748
748
|
|
|
749
749
|
def test_handoff_tier_under_900_tokens(self, tmp_path: Path, capsys) -> None:
|
|
750
750
|
"""Test HANDOFF tier output is under 900 tokens (~3600 chars)."""
|
|
751
|
-
from
|
|
751
|
+
from pf.prime.cli import prime
|
|
752
752
|
|
|
753
753
|
# Setup with realistic content
|
|
754
754
|
self._setup_realistic_project(tmp_path)
|
|
755
755
|
|
|
756
|
-
with patch("
|
|
757
|
-
with patch("
|
|
756
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
757
|
+
with patch("pf.prime.loader.get_project_root", return_value=tmp_path):
|
|
758
758
|
result = prime(
|
|
759
759
|
agent_name="dev",
|
|
760
760
|
tier="HANDOFF",
|
|
@@ -770,13 +770,13 @@ class TestTokenReduction:
|
|
|
770
770
|
|
|
771
771
|
def test_minimal_tier_under_300_tokens(self, tmp_path: Path, capsys) -> None:
|
|
772
772
|
"""Test MINIMAL tier output is under 300 tokens (~1200 chars)."""
|
|
773
|
-
from
|
|
773
|
+
from pf.prime.cli import prime
|
|
774
774
|
|
|
775
775
|
# Setup with realistic content
|
|
776
776
|
self._setup_realistic_project(tmp_path)
|
|
777
777
|
|
|
778
|
-
with patch("
|
|
779
|
-
with patch("
|
|
778
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
779
|
+
with patch("pf.prime.loader.get_project_root", return_value=tmp_path):
|
|
780
780
|
result = prime(
|
|
781
781
|
agent_name="dev",
|
|
782
782
|
tier="MINIMAL",
|
|
@@ -792,13 +792,13 @@ class TestTokenReduction:
|
|
|
792
792
|
|
|
793
793
|
def test_full_tier_approximately_4000_tokens(self, tmp_path: Path, capsys) -> None:
|
|
794
794
|
"""Test FULL tier output is approximately 4000 tokens (~16000 chars)."""
|
|
795
|
-
from
|
|
795
|
+
from pf.prime.cli import prime
|
|
796
796
|
|
|
797
797
|
# Setup with realistic content
|
|
798
798
|
self._setup_realistic_project(tmp_path)
|
|
799
799
|
|
|
800
|
-
with patch("
|
|
801
|
-
with patch("
|
|
800
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
801
|
+
with patch("pf.prime.loader.get_project_root", return_value=tmp_path):
|
|
802
802
|
result = prime(
|
|
803
803
|
agent_name="dev",
|
|
804
804
|
tier="FULL",
|
|
@@ -815,14 +815,14 @@ class TestTokenReduction:
|
|
|
815
815
|
|
|
816
816
|
def test_tier_reduction_ratio(self, tmp_path: Path, capsys) -> None:
|
|
817
817
|
"""Test that reduced tiers are significantly smaller than FULL."""
|
|
818
|
-
from
|
|
818
|
+
from pf.prime.cli import prime
|
|
819
819
|
|
|
820
820
|
self._setup_realistic_project(tmp_path)
|
|
821
821
|
|
|
822
822
|
sizes = {}
|
|
823
823
|
for tier in ["FULL", "REFRESH", "HANDOFF", "MINIMAL"]:
|
|
824
|
-
with patch("
|
|
825
|
-
with patch("
|
|
824
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
825
|
+
with patch("pf.prime.loader.get_project_root", return_value=tmp_path):
|
|
826
826
|
prime(
|
|
827
827
|
agent_name="dev",
|
|
828
828
|
tier=tier,
|
|
@@ -992,7 +992,7 @@ class TestTierIntegration:
|
|
|
992
992
|
"""Test JSON output includes current tier."""
|
|
993
993
|
import json
|
|
994
994
|
|
|
995
|
-
from
|
|
995
|
+
from pf.prime.cli import prime
|
|
996
996
|
|
|
997
997
|
pf_dir = tmp_path / ".pennyfarthing"
|
|
998
998
|
pf_dir.mkdir()
|
|
@@ -1000,7 +1000,7 @@ class TestTierIntegration:
|
|
|
1000
1000
|
agents_dir.mkdir()
|
|
1001
1001
|
(agents_dir / "dev.md").write_text("# Dev Agent")
|
|
1002
1002
|
|
|
1003
|
-
with patch("
|
|
1003
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
1004
1004
|
result = prime(
|
|
1005
1005
|
agent_name="dev",
|
|
1006
1006
|
tier="REFRESH",
|
|
@@ -1019,7 +1019,7 @@ class TestTierIntegration:
|
|
|
1019
1019
|
|
|
1020
1020
|
def test_tier_with_workflow_detection(self, tmp_path: Path, capsys) -> None:
|
|
1021
1021
|
"""Test tier works correctly with workflow detection enabled."""
|
|
1022
|
-
from
|
|
1022
|
+
from pf.prime.cli import prime
|
|
1023
1023
|
|
|
1024
1024
|
pf_dir = tmp_path / ".pennyfarthing"
|
|
1025
1025
|
pf_dir.mkdir()
|
|
@@ -1034,8 +1034,8 @@ class TestTierIntegration:
|
|
|
1034
1034
|
"epics": []
|
|
1035
1035
|
}))
|
|
1036
1036
|
|
|
1037
|
-
with patch("
|
|
1038
|
-
with patch("
|
|
1037
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
1038
|
+
with patch("pf.prime.loader.get_project_root", return_value=tmp_path):
|
|
1039
1039
|
result = prime(
|
|
1040
1040
|
agent_name="dev",
|
|
1041
1041
|
tier="MINIMAL",
|
|
@@ -1051,7 +1051,7 @@ class TestTierIntegration:
|
|
|
1051
1051
|
|
|
1052
1052
|
def test_tier_with_redirect_detection(self, tmp_path: Path, capsys) -> None:
|
|
1053
1053
|
"""Test tier works correctly with redirect detection."""
|
|
1054
|
-
from
|
|
1054
|
+
from pf.prime.cli import prime
|
|
1055
1055
|
|
|
1056
1056
|
pf_dir = tmp_path / ".pennyfarthing"
|
|
1057
1057
|
pf_dir.mkdir()
|
|
@@ -1075,7 +1075,7 @@ class TestTierIntegration:
|
|
|
1075
1075
|
- **Current Phase:** green
|
|
1076
1076
|
""")
|
|
1077
1077
|
|
|
1078
|
-
with patch("
|
|
1078
|
+
with patch("pf.prime.cli.get_project_root", return_value=tmp_path):
|
|
1079
1079
|
result = prime(
|
|
1080
1080
|
agent_name="tea",
|
|
1081
1081
|
tier="HANDOFF",
|