@pennyfarthing/core 11.2.1 → 11.3.1
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 +102 -42
- package/package.json +1 -1
- package/packages/core/dist/cli/commands/doctor-legacy.test.js +2 -2
- package/packages/core/dist/cli/commands/doctor-legacy.test.js.map +1 -1
- package/packages/core/dist/cli/commands/doctor.d.ts +55 -0
- package/packages/core/dist/cli/commands/doctor.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/doctor.js +324 -50
- package/packages/core/dist/cli/commands/doctor.js.map +1 -1
- package/packages/core/dist/cli/commands/init.d.ts +12 -0
- package/packages/core/dist/cli/commands/init.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/init.js +45 -0
- package/packages/core/dist/cli/commands/init.js.map +1 -1
- package/packages/core/dist/cli/commands/pyproject-install.test.d.ts +19 -0
- package/packages/core/dist/cli/commands/pyproject-install.test.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/pyproject-install.test.js +261 -0
- package/packages/core/dist/cli/commands/pyproject-install.test.js.map +1 -0
- package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.d.ts +17 -0
- package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.d.ts.map +1 -0
- package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.js +470 -0
- package/packages/core/dist/cli/commands/stale-artifacts-cleanup.test.js.map +1 -0
- package/packages/core/dist/cli/commands/update-consolidation.test.js +14 -6
- package/packages/core/dist/cli/commands/update-consolidation.test.js.map +1 -1
- package/packages/core/dist/cli/commands/update.d.ts.map +1 -1
- package/packages/core/dist/cli/commands/update.js +31 -2
- package/packages/core/dist/cli/commands/update.js.map +1 -1
- package/packages/core/dist/cli/index.js +2 -0
- package/packages/core/dist/cli/index.js.map +1 -1
- package/packages/core/dist/cli/utils/python.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/python.js +11 -0
- package/packages/core/dist/cli/utils/python.js.map +1 -1
- package/packages/core/dist/cli/utils/settings-hook-migration.test.d.ts +17 -0
- package/packages/core/dist/cli/utils/settings-hook-migration.test.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/settings-hook-migration.test.js +382 -0
- package/packages/core/dist/cli/utils/settings-hook-migration.test.js.map +1 -0
- package/packages/core/dist/cli/utils/settings.d.ts +0 -4
- package/packages/core/dist/cli/utils/settings.d.ts.map +1 -1
- package/packages/core/dist/cli/utils/settings.js +45 -27
- package/packages/core/dist/cli/utils/settings.js.map +1 -1
- package/packages/core/dist/cli/utils/stale-artifacts.d.ts +59 -0
- package/packages/core/dist/cli/utils/stale-artifacts.d.ts.map +1 -0
- package/packages/core/dist/cli/utils/stale-artifacts.js +163 -0
- package/packages/core/dist/cli/utils/stale-artifacts.js.map +1 -0
- package/packages/core/dist/consultation/dialogue-manager.d.ts +1 -1
- package/packages/core/dist/consultation/dialogue-manager.d.ts.map +1 -1
- package/packages/core/dist/consultation/dialogue-manager.js +1 -1
- package/packages/core/dist/consultation/dialogue-manager.js.map +1 -1
- package/packages/core/dist/consultation/dialogue-manager.test.js.map +1 -1
- package/packages/core/dist/consultation/tandem-metrics.test.js.map +1 -1
- package/packages/core/dist/public/css/react.css +1 -1
- package/packages/core/dist/public/js/react/react.js +9 -9
- package/packages/core/dist/server/api/git.d.ts.map +1 -1
- package/packages/core/dist/server/api/git.js +0 -1
- package/packages/core/dist/server/api/git.js.map +1 -1
- package/packages/core/dist/server/api/index.d.ts +2 -0
- package/packages/core/dist/server/api/index.d.ts.map +1 -1
- package/packages/core/dist/server/api/index.js +2 -0
- package/packages/core/dist/server/api/index.js.map +1 -1
- package/packages/core/dist/server/api/project-info.d.ts +11 -0
- package/packages/core/dist/server/api/project-info.d.ts.map +1 -0
- package/packages/core/dist/server/api/project-info.js +18 -0
- package/packages/core/dist/server/api/project-info.js.map +1 -0
- package/packages/core/dist/server/otlp-receiver.d.ts.map +1 -1
- package/packages/core/dist/server/otlp-receiver.js +18 -1
- package/packages/core/dist/server/otlp-receiver.js.map +1 -1
- package/packages/core/dist/server/otlp-receiver.test.js +1 -1
- package/packages/core/dist/server/otlp-receiver.test.js.map +1 -1
- package/packages/core/dist/server/server.d.ts.map +1 -1
- package/packages/core/dist/server/server.js +3 -2
- package/packages/core/dist/server/server.js.map +1 -1
- package/packages/core/dist/server/server.test.d.ts +1 -1
- package/packages/core/dist/server/server.test.js +8 -8
- package/packages/core/dist/server/settings.d.ts +1 -0
- package/packages/core/dist/server/settings.d.ts.map +1 -1
- package/packages/core/dist/server/settings.js +18 -0
- package/packages/core/dist/server/settings.js.map +1 -1
- package/packages/core/dist/workflow/tandem-workflow-templates.test.js +7 -5
- package/packages/core/dist/workflow/tandem-workflow-templates.test.js.map +1 -1
- package/packages/core/dist/workflow/workflow-migration.test.js +6 -5
- package/packages/core/dist/workflow/workflow-migration.test.js.map +1 -1
- package/packages/core/dist/workflow/workflow-team-templates.test.d.ts +17 -0
- package/packages/core/dist/workflow/workflow-team-templates.test.d.ts.map +1 -0
- package/packages/core/dist/workflow/workflow-team-templates.test.js +275 -0
- package/packages/core/dist/workflow/workflow-team-templates.test.js.map +1 -0
- package/pennyfarthing-dist/agents/dev.md +19 -4
- package/pennyfarthing-dist/agents/devops.md +2 -10
- package/pennyfarthing-dist/agents/reviewer-preflight.md +4 -5
- package/pennyfarthing-dist/agents/reviewer.md +17 -4
- package/pennyfarthing-dist/agents/sm-finish.md +1 -1
- package/pennyfarthing-dist/agents/sm-setup.md +7 -7
- package/pennyfarthing-dist/agents/sm.md +16 -29
- package/pennyfarthing-dist/agents/tea.md +2 -2
- package/pennyfarthing-dist/agents/testing-runner.md +1 -1
- package/pennyfarthing-dist/commands/pf-architect.md +1 -1
- package/pennyfarthing-dist/commands/pf-ba.md +1 -1
- package/pennyfarthing-dist/commands/pf-chore.md +2 -2
- package/pennyfarthing-dist/commands/pf-dev.md +1 -1
- package/pennyfarthing-dist/commands/pf-devops.md +1 -1
- package/pennyfarthing-dist/commands/pf-epic.md +6 -6
- package/pennyfarthing-dist/commands/pf-git.md +10 -10
- package/pennyfarthing-dist/commands/pf-health-check.md +31 -12
- package/pennyfarthing-dist/commands/pf-help.md +12 -12
- package/pennyfarthing-dist/commands/pf-orchestrator.md +1 -1
- package/pennyfarthing-dist/commands/pf-pm.md +1 -1
- package/pennyfarthing-dist/commands/pf-prime.md +8 -8
- package/pennyfarthing-dist/commands/pf-reviewer.md +1 -1
- package/pennyfarthing-dist/commands/pf-session.md +7 -7
- package/pennyfarthing-dist/commands/pf-sm.md +1 -1
- package/pennyfarthing-dist/commands/pf-sprint.md +7 -7
- package/pennyfarthing-dist/commands/pf-tea.md +1 -1
- package/pennyfarthing-dist/commands/pf-tech-writer.md +1 -1
- package/pennyfarthing-dist/commands/pf-theme.md +9 -9
- package/pennyfarthing-dist/commands/pf-ux-designer.md +1 -1
- package/pennyfarthing-dist/commands/pf-work.md +1 -1
- package/pennyfarthing-dist/gates/{confidence-sm.md → confidence.md} +16 -17
- package/pennyfarthing-dist/gates/dev-exit.md +75 -0
- package/pennyfarthing-dist/gates/merge-ready.md +49 -0
- package/pennyfarthing-dist/gates/release-ready.md +95 -0
- package/pennyfarthing-dist/gates/reviewer-preflight-check.md +90 -0
- package/pennyfarthing-dist/gates/sm-setup-exit.md +82 -0
- package/pennyfarthing-dist/guides/agent-behavior.md +129 -20
- package/pennyfarthing-dist/guides/agent-coordination.md +10 -10
- package/pennyfarthing-dist/guides/agent-tag-taxonomy.md +6 -6
- package/pennyfarthing-dist/guides/agent-template-tactical.md +1 -1
- package/pennyfarthing-dist/guides/bell-mode.md +1 -1
- package/pennyfarthing-dist/guides/bikerack.md +10 -10
- package/pennyfarthing-dist/guides/brownfield-tools.md +24 -24
- package/pennyfarthing-dist/guides/command-tag-taxonomy.md +1 -1
- package/pennyfarthing-dist/guides/gate-schema.md +2 -2
- package/pennyfarthing-dist/guides/gates.md +10 -5
- package/pennyfarthing-dist/guides/handoff-cli.md +8 -8
- package/pennyfarthing-dist/guides/hooks.md +27 -27
- package/pennyfarthing-dist/guides/prime.md +2 -2
- package/pennyfarthing-dist/guides/reflector.md +1 -1
- package/pennyfarthing-dist/guides/skill-schema.md +6 -6
- package/pennyfarthing-dist/guides/tandem-protocol.md +3 -3
- package/pennyfarthing-dist/guides/workflow-schema.md +1 -1
- package/pennyfarthing-dist/guides/worktree-mode.md +3 -3
- package/pennyfarthing-dist/guides/xml-tags.md +8 -8
- package/pennyfarthing-dist/scripts/README.md +4 -4
- package/pennyfarthing-dist/scripts/core/agent-session.sh +2 -5
- package/pennyfarthing-dist/scripts/core/check-context.sh +1 -1
- package/pennyfarthing-dist/scripts/core/pf.sh +5 -0
- package/pennyfarthing-dist/scripts/core/phase-check-start.sh +2 -5
- package/pennyfarthing-dist/scripts/core/prime.sh +2 -25
- package/pennyfarthing-dist/scripts/git/README.md +14 -14
- package/pennyfarthing-dist/scripts/git/create-feature-branches.sh +2 -3
- package/pennyfarthing-dist/scripts/git/git-status-all.sh +2 -3
- package/pennyfarthing-dist/scripts/git/install-git-hooks.sh +2 -3
- package/pennyfarthing-dist/scripts/git/worktree-manager.sh +2 -4
- package/pennyfarthing-dist/scripts/hooks/README.md +6 -6
- package/pennyfarthing-dist/scripts/hooks/bell-mode-hook.sh +3 -3
- package/pennyfarthing-dist/scripts/hooks/context-circuit-breaker.sh +3 -3
- package/pennyfarthing-dist/scripts/hooks/context-warning.sh +3 -3
- package/pennyfarthing-dist/scripts/hooks/cyclist-pretooluse-hook.sh +3 -3
- package/pennyfarthing-dist/scripts/hooks/otel-auto-config.sh +5 -4
- package/pennyfarthing-dist/scripts/hooks/pre-commit.sh +2 -1
- package/pennyfarthing-dist/scripts/hooks/pre-edit-check.sh +3 -3
- package/pennyfarthing-dist/scripts/hooks/question-reflector-check.sh +3 -3
- package/pennyfarthing-dist/scripts/hooks/schema-validation.sh +3 -3
- package/pennyfarthing-dist/scripts/hooks/session-start.sh +3 -3
- package/pennyfarthing-dist/scripts/hooks/session-stop.sh +3 -3
- package/pennyfarthing-dist/scripts/hooks/sprint-yaml-validation.sh +3 -3
- package/pennyfarthing-dist/scripts/hooks/welcome-hook.sh +3 -4
- package/pennyfarthing-dist/scripts/lib/env.sh +34 -0
- package/pennyfarthing-dist/scripts/lib/find-root.sh +5 -0
- package/pennyfarthing-dist/scripts/lib/run-pf.sh +43 -0
- package/pennyfarthing-dist/scripts/misc/README.md +1 -1
- package/pennyfarthing-dist/scripts/misc/statusline.sh +3 -3
- package/pennyfarthing-dist/scripts/sprint/README.md +21 -21
- package/pennyfarthing-dist/scripts/workflow/README.md +2 -2
- package/pennyfarthing-dist/scripts/workflow/finish-story.sh +2 -16
- package/pennyfarthing-dist/scripts/workflow/fix-session-phase.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/get-workflow-type.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/list-workflows.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/phase-owner.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/resume-workflow.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/show-workflow.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/start-workflow.sh +3 -3
- package/pennyfarthing-dist/scripts/workflow/workflow-status.sh +3 -3
- package/pennyfarthing-dist/skills/pf-bc/examples.md +23 -23
- package/pennyfarthing-dist/skills/pf-bc/skill.md +17 -17
- package/pennyfarthing-dist/skills/pf-bc/usage.md +8 -8
- package/pennyfarthing-dist/skills/pf-jira/SKILL.md +15 -15
- package/pennyfarthing-dist/skills/pf-jira/examples.md +48 -48
- package/pennyfarthing-dist/skills/pf-jira/usage.md +15 -15
- package/pennyfarthing-dist/skills/pf-settings/skill.md +42 -0
- package/pennyfarthing-dist/skills/pf-sprint/examples.md +80 -80
- package/pennyfarthing-dist/skills/pf-sprint/skill.md +35 -35
- package/pennyfarthing-dist/skills/pf-sprint/usage.md +30 -30
- package/pennyfarthing-dist/skills/pf-theme/examples.md +15 -15
- package/pennyfarthing-dist/skills/pf-theme/skill.md +6 -6
- package/pennyfarthing-dist/skills/pf-theme/usage.md +5 -5
- package/pennyfarthing-dist/skills/pf-workflow/examples.md +27 -27
- package/pennyfarthing-dist/skills/pf-workflow/skill.md +11 -11
- package/pennyfarthing-dist/skills/pf-workflow/usage.md +11 -11
- package/pennyfarthing-dist/skills/skill-registry.yaml +34 -19
- package/pennyfarthing-dist/templates/pyproject.toml +27 -0
- package/pennyfarthing-dist/templates/settings.local.json.template +11 -11
- package/pennyfarthing-dist/workflows/bdd-tandem.yaml +7 -3
- package/pennyfarthing-dist/workflows/bdd-team.yaml +89 -0
- package/pennyfarthing-dist/workflows/bdd.yaml +7 -3
- package/pennyfarthing-dist/workflows/epics-and-stories/steps/step-05-import-to-future.md +1 -1
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-01-analyze.md +1 -1
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-04-verify.md +1 -1
- package/pennyfarthing-dist/workflows/git-cleanup/steps/step-05-complete.md +1 -1
- package/pennyfarthing-dist/workflows/installation-check/steps/step-01-foundation.md +77 -0
- package/pennyfarthing-dist/workflows/installation-check/steps/step-02-commands.md +82 -0
- package/pennyfarthing-dist/workflows/installation-check/steps/step-03-hooks.md +121 -0
- package/pennyfarthing-dist/workflows/installation-check/steps/step-04-scripts.md +83 -0
- package/pennyfarthing-dist/workflows/installation-check/steps/step-05-layout.md +81 -0
- package/pennyfarthing-dist/workflows/installation-check/steps/step-06-legacy.md +94 -0
- package/pennyfarthing-dist/workflows/installation-check/steps/step-07-tools.md +80 -0
- package/pennyfarthing-dist/workflows/installation-check/steps/step-08-summary.md +99 -0
- package/pennyfarthing-dist/workflows/installation-check/workflow.yaml +47 -0
- package/pennyfarthing-dist/workflows/project-setup/steps/step-01-discover.md +47 -0
- package/pennyfarthing-dist/workflows/tdd-tandem.yaml +7 -3
- package/pennyfarthing-dist/workflows/tdd-team.yaml +80 -0
- package/pennyfarthing-dist/workflows/tdd.yaml +7 -3
- package/pennyfarthing-dist/workflows/trivial.yaml +7 -3
- package/pennyfarthing_scripts/__init__.py +1 -1
- package/pennyfarthing_scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/context.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/__pycache__/context.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/focus.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/__pycache__/split.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/bc/cli.py +23 -2
- package/pennyfarthing_scripts/bc/focus.py +1 -0
- package/pennyfarthing_scripts/bc/split.py +52 -0
- package/pennyfarthing_scripts/bellmode_hook.py +2 -5
- package/pennyfarthing_scripts/bikerack/__pycache__/__init__.cpython-311.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__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/cli.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__/launcher.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/bikerack/__pycache__/launcher.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/bikerack/audit_log_panel.py +48 -6
- package/pennyfarthing_scripts/bikerack/context_meter_footer.py +53 -3
- package/pennyfarthing_scripts/bikerack/launcher.py +6 -6
- package/pennyfarthing_scripts/bikerack/progress_panel.py +0 -1
- package/pennyfarthing_scripts/bikerack/sprint_panel.py +1 -1
- package/pennyfarthing_scripts/bikerack/story_detail_data.py +4 -1
- package/pennyfarthing_scripts/bikerack/story_detail_screen.py +2 -1
- package/pennyfarthing_scripts/bikerack/tui.py +214 -10
- package/pennyfarthing_scripts/bikerack/ws_client.py +2 -2
- package/pennyfarthing_scripts/cli.py +5 -0
- package/pennyfarthing_scripts/common/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/config.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/output.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/common/__pycache__/pr_config.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/common/config.py +29 -2
- package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/consultation/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/consultation/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/consultation/cli.py +3 -3
- package/pennyfarthing_scripts/context.py +3 -3
- package/pennyfarthing_scripts/deadcode/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/deadcode/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/epic/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/epic/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/git/hooks_installer.py +2 -3
- package/pennyfarthing_scripts/git/status_all.py +1 -1
- package/pennyfarthing_scripts/git/worktree.py +2 -2
- package/pennyfarthing_scripts/git_group/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/git_group/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/handoff/__pycache__/complete_phase.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-311.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/analyze.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/healthscore/__pycache__/models.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__init__.py +8 -3
- package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/bell_mode.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/context_breaker.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/context_warning.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/cyclist_pretooluse.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/pre_edit_check.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/reflector_check.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/schema_validation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/session_start.cpython-311.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-311.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/sprint_yaml_validation.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hooks/__pycache__/statusline.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/hooks/bell_mode.py +0 -1
- package/pennyfarthing_scripts/hooks/pre_edit_check.py +0 -1
- package/pennyfarthing_scripts/hooks/reflector_check.py +1 -2
- package/pennyfarthing_scripts/hooks/schema_validation.py +0 -1
- package/pennyfarthing_scripts/hooks/session_start.py +6 -8
- package/pennyfarthing_scripts/hooks/statusline.py +10 -1
- package/pennyfarthing_scripts/hotspots/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/analyze.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/hotspots/__pycache__/models.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/bidirectional.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/claim.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/client.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/create.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/epic.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/operations.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/reconcile.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/story.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/jira/__pycache__/sync.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/launch/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/launch/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/prime/__pycache__/workflow.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/prime/heatmap.py +3 -15
- package/pennyfarthing_scripts/session/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/session/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/settings/__init__.py +0 -0
- package/pennyfarthing_scripts/settings/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/settings/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/settings/__pycache__/settings.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/settings/cli.py +55 -0
- package/pennyfarthing_scripts/settings/settings.py +98 -0
- package/pennyfarthing_scripts/sprint/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/archive.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/epic_add.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/epic_update.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/loader.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/status.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_add.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_finish.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/story_update.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/validate_cmd.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/validator.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/work.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/__pycache__/yaml_io.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/sprint/cli.py +121 -0
- package/pennyfarthing_scripts/sprint/loader.py +154 -3
- package/pennyfarthing_scripts/sprint/story_update.py +7 -0
- package/pennyfarthing_scripts/tests/__pycache__/test_bikerack.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/test_bikerack.py +26 -26
- package/pennyfarthing_scripts/tests/test_confidence_sm_gate.py +17 -16
- package/pennyfarthing_scripts/tests/test_dialogue_manager.py +0 -1
- package/pennyfarthing_scripts/tests/test_resolve_gate_file_field.py +45 -47
- package/pennyfarthing_scripts/tests/test_workflow_list_team.py +143 -0
- package/pennyfarthing_scripts/theme/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/theme/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/validate/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/validate/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/validate/adapters/team_mode.py +323 -0
- package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/__init__.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/cli.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/helpers.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/scale.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-311.pyc +0 -0
- package/pennyfarthing_scripts/workflow/__pycache__/state.cpython-314.pyc +0 -0
- package/pennyfarthing_scripts/workflow/cli.py +15 -14
- package/pennyfarthing_scripts/workflow/state.py +0 -1
- package/pennyfarthing_scripts/workflow/team_lifecycle.py +3 -4
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<gate name="reviewer-preflight-check" model="haiku">
|
|
2
|
+
|
|
3
|
+
<purpose>
|
|
4
|
+
Composite gate for reviewer preflight. Extends tests-pass with code smell
|
|
5
|
+
detection and error boundary checks. The reviewer-preflight subagent runs
|
|
6
|
+
this gate before the Reviewer does critical analysis.
|
|
7
|
+
</purpose>
|
|
8
|
+
|
|
9
|
+
<ref gate="gates/tests-pass" />
|
|
10
|
+
|
|
11
|
+
<check name="no-debug-code">
|
|
12
|
+
No debug artifacts in changed files.
|
|
13
|
+
Search changed files (`git diff --name-only develop...HEAD`) for:
|
|
14
|
+
- `console.log` (not guarded by `process.env.NODE_ENV`)
|
|
15
|
+
- `dangerouslySetInnerHTML`
|
|
16
|
+
- `.skip(` (test skips)
|
|
17
|
+
- `TODO` / `FIXME`
|
|
18
|
+
Count by category. None found = pass.
|
|
19
|
+
</check>
|
|
20
|
+
|
|
21
|
+
<check name="error-boundaries">
|
|
22
|
+
UI components have error boundaries (UI repos only).
|
|
23
|
+
For React component files in diff, verify error boundary wrapping.
|
|
24
|
+
Skip for non-UI repos.
|
|
25
|
+
</check>
|
|
26
|
+
|
|
27
|
+
<pass>
|
|
28
|
+
Run all checks from `gates/tests-pass` (test-suite, working-tree, branch-status),
|
|
29
|
+
then run no-debug-code and error-boundaries.
|
|
30
|
+
|
|
31
|
+
If ALL pass, return:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
GATE_RESULT:
|
|
35
|
+
status: pass
|
|
36
|
+
gate: reviewer-preflight-check
|
|
37
|
+
message: "Preflight clear: tests green, no smells, boundaries present"
|
|
38
|
+
checks:
|
|
39
|
+
- name: test-suite
|
|
40
|
+
status: pass
|
|
41
|
+
detail: "{passed}/{total} passing ({source: cached|fresh})"
|
|
42
|
+
- name: working-tree
|
|
43
|
+
status: pass
|
|
44
|
+
detail: "No uncommitted changes"
|
|
45
|
+
- name: branch-status
|
|
46
|
+
status: pass
|
|
47
|
+
detail: "On branch {branch}"
|
|
48
|
+
- name: no-debug-code
|
|
49
|
+
status: pass
|
|
50
|
+
detail: "No debug patterns in {N} changed files"
|
|
51
|
+
- name: error-boundaries
|
|
52
|
+
status: pass
|
|
53
|
+
detail: "Error boundaries present (or N/A for non-UI)"
|
|
54
|
+
```
|
|
55
|
+
</pass>
|
|
56
|
+
|
|
57
|
+
<fail>
|
|
58
|
+
If ANY check fails, report all results. Note: code smells are advisory (YELLOW)
|
|
59
|
+
rather than blocking (RED) — the Reviewer makes the final call.
|
|
60
|
+
|
|
61
|
+
```yaml
|
|
62
|
+
GATE_RESULT:
|
|
63
|
+
status: fail
|
|
64
|
+
gate: reviewer-preflight-check
|
|
65
|
+
message: "Preflight issues: {summary}"
|
|
66
|
+
checks:
|
|
67
|
+
- name: test-suite
|
|
68
|
+
status: pass | fail
|
|
69
|
+
detail: "{test results or failure list}"
|
|
70
|
+
- name: working-tree
|
|
71
|
+
status: pass | fail
|
|
72
|
+
detail: "{clean or list of uncommitted files}"
|
|
73
|
+
- name: branch-status
|
|
74
|
+
status: pass | fail
|
|
75
|
+
detail: "{branch info}"
|
|
76
|
+
- name: no-debug-code
|
|
77
|
+
status: pass | fail
|
|
78
|
+
detail: "{clean or smell counts by category}"
|
|
79
|
+
- name: error-boundaries
|
|
80
|
+
status: pass | fail
|
|
81
|
+
detail: "{present, missing list, or N/A}"
|
|
82
|
+
recovery:
|
|
83
|
+
- "Fix failing tests before review"
|
|
84
|
+
- "Commit or stash uncommitted changes"
|
|
85
|
+
- "Remove debug code: {locations}"
|
|
86
|
+
- "Add error boundaries to: {components}"
|
|
87
|
+
```
|
|
88
|
+
</fail>
|
|
89
|
+
|
|
90
|
+
</gate>
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<gate name="sm-setup-exit" model="haiku">
|
|
2
|
+
|
|
3
|
+
<purpose>
|
|
4
|
+
Verify SM has completed story setup before handing off to the next agent.
|
|
5
|
+
Without a properly configured session file, the next agent cannot function.
|
|
6
|
+
Extracts the inline pre-handoff checklist from sm.md.
|
|
7
|
+
</purpose>
|
|
8
|
+
|
|
9
|
+
<pass>
|
|
10
|
+
Run these checks in order:
|
|
11
|
+
|
|
12
|
+
1. **session-exists:** Check `.session/{story-id}-session.md` exists.
|
|
13
|
+
```bash
|
|
14
|
+
ls .session/{story-id}-session.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
2. **session-fields-set:** Read session file and verify:
|
|
18
|
+
- `**Workflow:**` field present and non-empty
|
|
19
|
+
- `**Phase:**` field present and set to `setup`
|
|
20
|
+
|
|
21
|
+
3. **story-context-exists:** Verify:
|
|
22
|
+
- `sprint/context/context-epic-{N}.md` exists (extract epic number from story ID)
|
|
23
|
+
- Session file contains technical approach section
|
|
24
|
+
- Session file contains acceptance criteria
|
|
25
|
+
|
|
26
|
+
4. **branch-created:** For each repo in session `**Repos:**`:
|
|
27
|
+
- Run `git branch --show-current`
|
|
28
|
+
- Confirm not on `main` or `develop`
|
|
29
|
+
|
|
30
|
+
If ALL pass, return:
|
|
31
|
+
|
|
32
|
+
```yaml
|
|
33
|
+
GATE_RESULT:
|
|
34
|
+
status: pass
|
|
35
|
+
gate: sm-setup-exit
|
|
36
|
+
message: "Session {story-id} ready. Workflow: {workflow}, Branch: {branch}"
|
|
37
|
+
checks:
|
|
38
|
+
- name: session-exists
|
|
39
|
+
status: pass
|
|
40
|
+
detail: ".session/{story-id}-session.md exists"
|
|
41
|
+
- name: session-fields-set
|
|
42
|
+
status: pass
|
|
43
|
+
detail: "Workflow: {workflow}, Phase: setup"
|
|
44
|
+
- name: story-context-exists
|
|
45
|
+
status: pass
|
|
46
|
+
detail: "Epic context and story ACs present"
|
|
47
|
+
- name: branch-created
|
|
48
|
+
status: pass
|
|
49
|
+
detail: "Branch {branch} created in {repos}"
|
|
50
|
+
```
|
|
51
|
+
</pass>
|
|
52
|
+
|
|
53
|
+
<fail>
|
|
54
|
+
If ANY check fails, report all results:
|
|
55
|
+
|
|
56
|
+
```yaml
|
|
57
|
+
GATE_RESULT:
|
|
58
|
+
status: fail
|
|
59
|
+
gate: sm-setup-exit
|
|
60
|
+
message: "Setup incomplete: {summary}"
|
|
61
|
+
checks:
|
|
62
|
+
- name: session-exists
|
|
63
|
+
status: pass | fail
|
|
64
|
+
detail: "{exists or missing}"
|
|
65
|
+
- name: session-fields-set
|
|
66
|
+
status: pass | fail
|
|
67
|
+
detail: "{fields present or missing fields list}"
|
|
68
|
+
- name: story-context-exists
|
|
69
|
+
status: pass | fail
|
|
70
|
+
detail: "{context present or missing sections}"
|
|
71
|
+
- name: branch-created
|
|
72
|
+
status: pass | fail
|
|
73
|
+
detail: "{branch status per repo}"
|
|
74
|
+
recovery:
|
|
75
|
+
- "Run sm-setup to create session file"
|
|
76
|
+
- "Set Workflow and Phase fields in session"
|
|
77
|
+
- "Write story context with technical approach and ACs"
|
|
78
|
+
- "Create feature branch: git checkout -b feat/{story-slug}"
|
|
79
|
+
```
|
|
80
|
+
</fail>
|
|
81
|
+
|
|
82
|
+
</gate>
|
|
@@ -3,23 +3,28 @@
|
|
|
3
3
|
|
|
4
4
|
**Tests:** Use `testing-runner` subagent, never run directly.
|
|
5
5
|
|
|
6
|
-
**Handoff:** Run
|
|
6
|
+
**Handoff:** Run pf.sh `handoff resolve-gate` → gate check → pf.sh `handoff complete-phase` → pf.sh `handoff marker` → EXIT. See `<agent-exit-protocol>`.
|
|
7
7
|
|
|
8
8
|
**Sidecars:** Write learnings BEFORE starting exit protocol.
|
|
9
9
|
|
|
10
10
|
**Scripts:** Pennyfarthing scripts are Python-based (`pennyfarthing_scripts/`), not shell—check before assuming `.sh`.
|
|
11
|
+
|
|
12
|
+
**pf CLI:** Never call bare `pf` — it is not globally installed. Always use the wrapper:
|
|
13
|
+
```bash
|
|
14
|
+
"$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh <command> [args...]
|
|
15
|
+
```
|
|
11
16
|
</critical>
|
|
12
17
|
|
|
13
18
|
<critical>
|
|
14
19
|
**Story completion is MANDATORY.** A story is NOT done until:
|
|
15
20
|
1. Reviewer approves and merges the PR
|
|
16
|
-
2. SM runs
|
|
21
|
+
2. SM runs pf.sh `sprint story finish` (archive session, update Jira, clean up)
|
|
17
22
|
|
|
18
23
|
**Never** start new work while stories have open PRs. The merge gate blocks `/pf-sprint work` if open PRs exist.
|
|
19
24
|
|
|
20
25
|
**If stuck in incomplete state:**
|
|
21
|
-
- Open PRs? → Run `/reviewer` to complete reviews and merge
|
|
22
|
-
- Merged but not finished? → Run `/sm` to trigger finish flow
|
|
26
|
+
- Open PRs? → Run `/pf-reviewer` to complete reviews and merge
|
|
27
|
+
- Merged but not finished? → Run `/pf-sm` to trigger finish flow
|
|
23
28
|
</critical>
|
|
24
29
|
|
|
25
30
|
---
|
|
@@ -49,7 +54,7 @@ On activation, check session file for a `**Tandem:**` line (e.g., `**Tandem:** a
|
|
|
49
54
|
|
|
50
55
|
**If tandem is configured:**
|
|
51
56
|
|
|
52
|
-
1. **Resolve backseat persona** from theme using the `pf theme`
|
|
57
|
+
1. **Resolve backseat persona** from theme using the `pf.sh theme`
|
|
53
58
|
```bash
|
|
54
59
|
THEME=$(yq '.theme' .pennyfarthing/config.local.yaml)
|
|
55
60
|
PARTNER_CHARACTER=$(yq ".agents.{PARTNER}.character" .pennyfarthing/personas/themes/${THEME}.yaml)
|
|
@@ -95,6 +100,109 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
|
|
|
95
100
|
|
|
96
101
|
---
|
|
97
102
|
|
|
103
|
+
<team-mode>
|
|
104
|
+
## Team Mode — Phase-Scoped Native Teams
|
|
105
|
+
|
|
106
|
+
Team mode enables parallel agent collaboration within a single workflow phase using Claude Code's native Agent Teams. The phase agent is always the **team lead**; spawned agents are **teammates**. Teams are created at phase start and destroyed before handoff.
|
|
107
|
+
|
|
108
|
+
**Prerequisites:**
|
|
109
|
+
- Workflow phase has a `team:` block in its YAML definition
|
|
110
|
+
- `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` env var is set
|
|
111
|
+
- Interactive session (not `-p` mode)
|
|
112
|
+
- Feature detection passes (`pf detect teams` or equivalent)
|
|
113
|
+
|
|
114
|
+
**If prerequisites are not met:** Fall back to solo execution (optionally with tandem consultation). No error — team mode is always optional.
|
|
115
|
+
|
|
116
|
+
### Detection
|
|
117
|
+
|
|
118
|
+
On activation, check the workflow YAML for a `team:` block on your phase:
|
|
119
|
+
|
|
120
|
+
```yaml
|
|
121
|
+
phases:
|
|
122
|
+
- name: green
|
|
123
|
+
agent: dev
|
|
124
|
+
team:
|
|
125
|
+
teammates:
|
|
126
|
+
- agent: architect
|
|
127
|
+
task: "Review implementation approach and patterns"
|
|
128
|
+
- agent: tea
|
|
129
|
+
task: "Verify tests stay green, flag regressions"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
If `team:` is present and prerequisites are met, you are the **team lead** for this phase.
|
|
133
|
+
|
|
134
|
+
### Team Lead Responsibilities
|
|
135
|
+
|
|
136
|
+
**On phase entry:**
|
|
137
|
+
|
|
138
|
+
1. **Create the team:**
|
|
139
|
+
```
|
|
140
|
+
TeamCreate("phase-{PHASE}-{STORY_ID}")
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
2. **Spawn teammates** per workflow YAML config. Each teammate gets a spawn prompt:
|
|
144
|
+
```
|
|
145
|
+
Task(team_name="phase-{PHASE}-{STORY_ID}", name="{agent}",
|
|
146
|
+
prompt="Run `pf agent start {agent}`. Story: {STORY_ID}.
|
|
147
|
+
{task assignment from YAML}")
|
|
148
|
+
```
|
|
149
|
+
Teammates auto-load CLAUDE.md, MCP servers, and skills from the working directory. Spawn prompts only need the activation command and task assignment — keep under 500 tokens.
|
|
150
|
+
|
|
151
|
+
3. **Coordinate via SendMessage.** Use `SendMessage` for all intra-phase communication with teammates:
|
|
152
|
+
- Assign work: `SendMessage(to="{teammate}", message="Implement the adapter pattern for...")`
|
|
153
|
+
- Check status: `SendMessage(to="{teammate}", message="Status on your review?")`
|
|
154
|
+
- Broadcast: `SendMessage(message="Shifting approach — using strategy pattern instead")`
|
|
155
|
+
|
|
156
|
+
4. **Do your own work.** You are still the primary implementer. Teammates assist — they don't replace you.
|
|
157
|
+
|
|
158
|
+
**Before exit protocol:**
|
|
159
|
+
|
|
160
|
+
5. **Shut down all teammates.** This is mandatory before starting the normal exit protocol:
|
|
161
|
+
```
|
|
162
|
+
SendMessage(to="{teammate}", message="Phase complete. Shut down.")
|
|
163
|
+
```
|
|
164
|
+
Wait for teammates to go idle, then:
|
|
165
|
+
```
|
|
166
|
+
TeamDelete("phase-{PHASE}-{STORY_ID}")
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
6. **Proceed with normal exit protocol** (assessment → resolve-gate → complete-phase → marker).
|
|
170
|
+
|
|
171
|
+
### Teammate Responsibilities
|
|
172
|
+
|
|
173
|
+
When spawned as a teammate (you receive a task via spawn prompt, not a phase handoff):
|
|
174
|
+
|
|
175
|
+
1. **Recognize you are a teammate, not the lead.** You do not own the phase. You do not run the exit protocol. You do not emit handoff markers.
|
|
176
|
+
|
|
177
|
+
2. **Activate normally** via `pf agent start {agent}`. Read the session file for story context.
|
|
178
|
+
|
|
179
|
+
3. **Communicate via SendMessage.** All collaboration with the lead and other teammates uses `SendMessage`:
|
|
180
|
+
- Report findings: `SendMessage(to="lead", message="Found coupling issue in...")`
|
|
181
|
+
- Ask questions: `SendMessage(to="lead", message="Should I use the existing adapter?")`
|
|
182
|
+
- Share status: `SendMessage(to="lead", message="Review complete. 2 issues found.")`
|
|
183
|
+
|
|
184
|
+
4. **Go idle when your task is done.** Once your assigned task is complete, send a final status message and wait. Do not start new work unprompted.
|
|
185
|
+
|
|
186
|
+
5. **Respond to shutdown requests.** When the lead sends a shutdown message, wrap up immediately. Save any observations to the session file or sidecar, then stop.
|
|
187
|
+
|
|
188
|
+
### Communication Channels
|
|
189
|
+
|
|
190
|
+
| Channel | Scope | Used For |
|
|
191
|
+
|---------|-------|----------|
|
|
192
|
+
| `SendMessage` | Intra-phase (within team) | Lead ↔ teammate collaboration, status updates, task assignment |
|
|
193
|
+
| Reflector markers (`<!-- CYCLIST:... -->`) | Inter-phase (between phases) | Handoff from one phase agent to the next — **unchanged** |
|
|
194
|
+
| Session file | Cross-phase persistence | Story state, assessments, ACs — written by lead only in team mode |
|
|
195
|
+
| Sidecar files | Agent learning | Teammates may write to their own sidecar with file locking |
|
|
196
|
+
|
|
197
|
+
<critical>
|
|
198
|
+
**Never use SendMessage for inter-phase handoff.** Markers and `pf handoff` are the only way to transition between phases. SendMessage is for real-time collaboration within a phase.
|
|
199
|
+
|
|
200
|
+
**Never use markers for intra-phase communication.** Markers are routing signals for Cyclist UI and the handoff system. They have no meaning inside a team.
|
|
201
|
+
</critical>
|
|
202
|
+
</team-mode>
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
98
206
|
## Reflector
|
|
99
207
|
|
|
100
208
|
<critical>
|
|
@@ -117,20 +225,21 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
|
|
|
117
225
|
## Exit Protocol
|
|
118
226
|
|
|
119
227
|
1. Write assessment to session
|
|
120
|
-
2.
|
|
121
|
-
3.
|
|
122
|
-
4.
|
|
123
|
-
5. If
|
|
124
|
-
6. If
|
|
125
|
-
|
|
228
|
+
2. **If team mode active:** Shut down all teammates via `SendMessage`, then `TeamDelete`. Wait for cleanup before proceeding.
|
|
229
|
+
3. Terminate tandem backseat (if active)
|
|
230
|
+
4. `"$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff resolve-gate {story-id} {workflow} {phase}` → RESOLVE_RESULT
|
|
231
|
+
5. If blocked → report error, STOP
|
|
232
|
+
6. If skip → jump to step 8
|
|
233
|
+
7. If ready → spawn gate subagent with gate file → GATE_RESULT
|
|
234
|
+
- If fail → fix issues, retry from step 4 (max 3 retries)
|
|
126
235
|
- If pass → continue
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
236
|
+
8. `"$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff complete-phase {story-id} {workflow} {from} {to} {gate-type}`
|
|
237
|
+
9. `"$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff marker {next_agent}` → AGENT_COMMAND block
|
|
238
|
+
10. **Act on AGENT_COMMAND:**
|
|
239
|
+
- Has `marker:` field → emit the CYCLIST marker (Cyclist path)
|
|
240
|
+
- `action: "inline_handoff"` → run `activation_command` via Bash, output result, adopt new agent identity
|
|
241
|
+
- `action: "tirepump_handoff"` → tell user: "Context is high. Run `/clear` then `{fallback}`"
|
|
242
|
+
- No action, no marker → output `fallback` text and EXIT
|
|
134
243
|
|
|
135
244
|
**Agents drive exit directly — no handoff subagent.** Scripts handle routing and session updates atomically.
|
|
136
245
|
</agent-exit-protocol>
|
|
@@ -141,12 +250,12 @@ See `.pennyfarthing/guides/tandem-protocol.md` for full protocol details.
|
|
|
141
250
|
On activation, check if story phase belongs to you:
|
|
142
251
|
|
|
143
252
|
```bash
|
|
144
|
-
pf handoff phase-check {your_agent_name}
|
|
253
|
+
"$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh handoff phase-check {your_agent_name}
|
|
145
254
|
```
|
|
146
255
|
|
|
147
256
|
If result has `action: "redirect"`:
|
|
148
257
|
|
|
149
258
|
- **Cyclist:** Emit `<!-- CYCLIST:HANDOFF:/{phase_owner} -->` and EXIT
|
|
150
|
-
- **CLI + relay ON:** Run `pf agent start {phase_owner} --tier handoff --quiet` via Bash, adopt new identity
|
|
259
|
+
- **CLI + relay ON:** Run `source .pennyfarthing/scripts/lib/env.sh && source "$CLAUDE_PROJECT_DIR/.pennyfarthing/scripts/lib/run-pf.sh" && run_pf agent start {phase_owner} --tier handoff --quiet` via Bash, adopt new identity
|
|
151
260
|
- **CLI + relay OFF:** Output `Run /pf-{phase_owner} to continue` and EXIT
|
|
152
261
|
</wrong-phase-detection>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
This document describes how Pennyfarthing agents are coordinated. The framework supports both single-repo and multi-repo projects.
|
|
6
6
|
|
|
7
|
-
**Key Principle:** Single entry point (`/pf-session new` or `/work`), state detection via session files, handoffs via Haiku subagents.
|
|
7
|
+
**Key Principle:** Single entry point (`/pf-session new` or `/pf-work`), state detection via session files, handoffs via Haiku subagents.
|
|
8
8
|
|
|
9
9
|
## The TDD Flow
|
|
10
10
|
|
|
@@ -12,7 +12,7 @@ SM → TEA → Dev → Reviewer → SM (setup → red → green → review → f
|
|
|
12
12
|
|
|
13
13
|
Handoffs between agents are managed by Haiku subagents.
|
|
14
14
|
|
|
15
|
-
**Entry points:** `/pf-session new` (new story) or `/work` (smart resume/start)
|
|
15
|
+
**Entry points:** `/pf-session new` (new story) or `/pf-work` (smart resume/start)
|
|
16
16
|
**State detection:** Agents read session file on activation
|
|
17
17
|
**Handoffs:** Agents spawn Haiku subagents to update session file
|
|
18
18
|
**Finish:** SM handles when status = `approved`
|
|
@@ -263,7 +263,7 @@ User: @/pm
|
|
|
263
263
|
### Tactical Agent Workflow (Dev Example)
|
|
264
264
|
|
|
265
265
|
```
|
|
266
|
-
User: @/dev
|
|
266
|
+
User: @/pf-dev
|
|
267
267
|
|
|
268
268
|
1. Load Dev agent definition (.pennyfarthing/agents/dev.md)
|
|
269
269
|
2. Load base context:
|
|
@@ -428,7 +428,7 @@ Dev Agent Example (API story):
|
|
|
428
428
|
- No subagent extraction
|
|
429
429
|
|
|
430
430
|
### Current Architecture (January 2026)
|
|
431
|
-
- Smart entry point: `/work` (resumes or starts new)
|
|
431
|
+
- Smart entry point: `/pf-work` (resumes or starts new)
|
|
432
432
|
- Alternative: `/pf-session new` (explicitly start new story)
|
|
433
433
|
- State detection via session file in `.session/`
|
|
434
434
|
- Handoffs via Haiku subagents in `.pennyfarthing/agents/`
|
|
@@ -447,17 +447,17 @@ sprint/ # Sprint tracking
|
|
|
447
447
|
### Commands Reference
|
|
448
448
|
```bash
|
|
449
449
|
# Entry points
|
|
450
|
-
/work
|
|
450
|
+
/pf-work # Smart entry - resume or start new
|
|
451
451
|
/pf-session new # Explicitly start new story
|
|
452
452
|
|
|
453
453
|
# TDD Flow agents
|
|
454
|
-
/sm
|
|
455
|
-
/tea
|
|
456
|
-
/dev
|
|
457
|
-
/reviewer
|
|
454
|
+
/pf-sm # Scrum Master (setup + finish)
|
|
455
|
+
/pf-tea # Test Engineer (RED phase)
|
|
456
|
+
/pf-dev # Developer (GREEN phase)
|
|
457
|
+
/pf-reviewer # Code Reviewer
|
|
458
458
|
|
|
459
459
|
# Support agents
|
|
460
|
-
/architect
|
|
460
|
+
/pf-architect # Architecture design
|
|
461
461
|
/tech-writer # Documentation
|
|
462
462
|
/ux-designer # UI/UX design
|
|
463
463
|
/devops # Infrastructure
|
|
@@ -106,7 +106,7 @@ High-priority instruction that MUST be followed.
|
|
|
106
106
|
```xml
|
|
107
107
|
<critical>
|
|
108
108
|
**HANDOFF REQUIRES MARKER OUTPUT.** After exit protocol completes:
|
|
109
|
-
Run `pf handoff marker {next_agent}` as ABSOLUTE LAST ACTION, output result, EXIT.
|
|
109
|
+
Run `pf.sh handoff marker {next_agent}` as ABSOLUTE LAST ACTION, output result, EXIT.
|
|
110
110
|
</critical>
|
|
111
111
|
```
|
|
112
112
|
- **Validation:** First `<critical>` should be within line 30
|
|
@@ -175,10 +175,10 @@ Logic for checking if this agent owns the current phase.
|
|
|
175
175
|
|
|
176
176
|
Read `**Workflow:**` and `**Phase:**` from session. Query:
|
|
177
177
|
```bash
|
|
178
|
-
OWNER=$(pf workflow phase-check {workflow} {phase})
|
|
178
|
+
OWNER=$("$CLAUDE_PROJECT_DIR"/.pennyfarthing/scripts/core/pf.sh workflow phase-check {workflow} {phase})
|
|
179
179
|
```
|
|
180
180
|
|
|
181
|
-
**If OWNER != "dev":** Run `pf handoff marker $OWNER`, output result, tell user.
|
|
181
|
+
**If OWNER != "dev":** Run `pf.sh handoff marker $OWNER`, output result, tell user.
|
|
182
182
|
</phase-check>
|
|
183
183
|
```
|
|
184
184
|
|
|
@@ -250,9 +250,9 @@ Tags that contain checklists with `- [ ]` items.
|
|
|
250
250
|
## MANDATORY: Complete Before Exiting
|
|
251
251
|
|
|
252
252
|
- [ ] Write Dev Assessment to session file
|
|
253
|
-
- [ ] Run `pf handoff resolve-gate` — verify gate status
|
|
254
|
-
- [ ] Run `pf handoff complete-phase` — atomic session update
|
|
255
|
-
- [ ] Run `pf handoff marker {next_agent}` — emit marker and EXIT
|
|
253
|
+
- [ ] Run `pf.sh handoff resolve-gate` — verify gate status
|
|
254
|
+
- [ ] Run `pf.sh handoff complete-phase` — atomic session update
|
|
255
|
+
- [ ] Run `pf.sh handoff marker {next_agent}` — emit marker and EXIT
|
|
256
256
|
</handoff-gate>
|
|
257
257
|
```
|
|
258
258
|
|
|
@@ -38,7 +38,7 @@ Auto-loaded by `agent-session.sh start` from theme config. See output above.
|
|
|
38
38
|
</persona>
|
|
39
39
|
|
|
40
40
|
<role>
|
|
41
|
-
**Primary:** {When this agent is invoked, e.g., "via /tea for TDD test writing"}
|
|
41
|
+
**Primary:** {When this agent is invoked, e.g., "via /pf-tea for TDD test writing"}
|
|
42
42
|
**Position:** {Where in TDD flow, e.g., "SM → **TEA** → Dev → Reviewer"}
|
|
43
43
|
</role>
|
|
44
44
|
|
|
@@ -26,7 +26,7 @@ User queues message in Editor
|
|
|
26
26
|
|------|---------|
|
|
27
27
|
| `packages/cyclist/src/bell-mode.ts` | State management: `isBellModeEnabled()`, `setBellMode()`, `toggleBellMode()` |
|
|
28
28
|
| `packages/cyclist/src/api/bell.ts` | WebSocket broadcast of bell-consumed events |
|
|
29
|
-
| `pf hooks bell-mode` | PostToolUse hook — reads queue, returns `additionalContext` |
|
|
29
|
+
| `pf.sh hooks bell-mode` | PostToolUse hook — reads queue, returns `additionalContext` |
|
|
30
30
|
| `packages/cyclist/src/public/hooks/useMessageQueue.ts` | React hook: `queueMessage()`, `dequeueMessage()`, `injectMessage()`, `handleTurnComplete()` |
|
|
31
31
|
| `packages/cyclist/src/public/contexts/MessageQueueContext.tsx` | Shared React context (single queue instance across components) |
|
|
32
32
|
| `packages/cyclist/src/public/components/ControlBar.tsx` | Bell mode toggle button |
|
|
@@ -28,7 +28,7 @@ Cyclist bundles the conversation UI and dashboard panels into one Electron app.
|
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
30
|
# Launch BikeRack + Claude CLI together
|
|
31
|
-
pf bikerack start
|
|
31
|
+
pf.sh bikerack start
|
|
32
32
|
|
|
33
33
|
# Or via just recipe
|
|
34
34
|
just bikerack
|
|
@@ -37,10 +37,10 @@ just bikerack
|
|
|
37
37
|
just bikerack dir=/path/to/project
|
|
38
38
|
|
|
39
39
|
# Stop a running instance
|
|
40
|
-
pf bikerack stop
|
|
40
|
+
pf.sh bikerack stop
|
|
41
41
|
|
|
42
42
|
# Check status
|
|
43
|
-
pf bikerack status
|
|
43
|
+
pf.sh bikerack status
|
|
44
44
|
```
|
|
45
45
|
|
|
46
46
|
BikeRack opens a browser with the Dockview panel layout. Claude CLI runs in the foreground. When Claude exits, BikeRack shuts down automatically via `trap EXIT`.
|
|
@@ -71,7 +71,7 @@ BikeRack supports two modes:
|
|
|
71
71
|
|
|
72
72
|
## How It Works
|
|
73
73
|
|
|
74
|
-
1. **Launcher** (`pf bikerack start`) starts WheelHub with `IS_BIKERACK=1`
|
|
74
|
+
1. **Launcher** (`pf.sh bikerack start`) starts WheelHub with `IS_BIKERACK=1`
|
|
75
75
|
2. **WheelHub** listens on port 2898 (separate from Cyclist's 1898)
|
|
76
76
|
3. **ClaudeService is skipped** — no `/ws/claude` WebSocket channel
|
|
77
77
|
4. **OTEL telemetry** flows from Claude CLI to WheelHub's OTLP receiver
|
|
@@ -92,8 +92,8 @@ Client-side detection is URL-based: the presence of `?panel=X` triggers standalo
|
|
|
92
92
|
|
|
93
93
|
| File | Purpose |
|
|
94
94
|
|------|---------|
|
|
95
|
-
| `.
|
|
96
|
-
| `.wheelhub-pid` | WheelHub PID, written by launcher — enables `pf bikerack stop` |
|
|
95
|
+
| `.bikerack-port` | Port number, written after `server.listen()` — readiness signal |
|
|
96
|
+
| `.wheelhub-pid` | WheelHub PID, written by launcher — enables `pf.sh bikerack stop` |
|
|
97
97
|
|
|
98
98
|
Both are deleted on shutdown. Shared with Cyclist (single WheelHub namespace).
|
|
99
99
|
|
|
@@ -102,9 +102,9 @@ Both are deleted on shutdown. Shared with Cyclist (single WheelHub namespace).
|
|
|
102
102
|
Save and restore BikeRack panel layouts:
|
|
103
103
|
|
|
104
104
|
```bash
|
|
105
|
-
pf bc save my-layout # Save current layout
|
|
106
|
-
pf bc load my-layout # Restore a saved layout
|
|
107
|
-
pf bc list # List saved layouts
|
|
105
|
+
pf.sh bc save my-layout # Save current layout
|
|
106
|
+
pf.sh bc load my-layout # Restore a saved layout
|
|
107
|
+
pf.sh bc list # List saved layouts
|
|
108
108
|
```
|
|
109
109
|
|
|
110
110
|
## Key Files
|
|
@@ -115,7 +115,7 @@ pf bc list # List saved layouts
|
|
|
115
115
|
| `packages/core/src/public/components/BikeRackWorkspace.tsx` | Dockview layout for BikeRack |
|
|
116
116
|
| `packages/core/src/public/components/BikeRackIndex.tsx` | Panel listing index page |
|
|
117
117
|
| `packages/core/src/public/components/StandalonePanel.tsx` | `?panel=X` routing + `PANEL_REGISTRY` |
|
|
118
|
-
| `pennyfarthing_scripts/bikerack/cli.py` | `pf bikerack` launcher CLI |
|
|
118
|
+
| `pennyfarthing_scripts/bikerack/cli.py` | `pf.sh bikerack` launcher CLI |
|
|
119
119
|
|
|
120
120
|
## Constraints
|
|
121
121
|
|
|
@@ -6,7 +6,7 @@ CLI tools for analyzing existing codebases. Identify change hotspots, complexity
|
|
|
6
6
|
|
|
7
7
|
## Overview
|
|
8
8
|
|
|
9
|
-
All tools are available under `pf debug` and share a consistent interface: `--format` (table/json/csv), `--output` (file), `--top` (result count), `--exclude` (patterns), and `--repo` (target).
|
|
9
|
+
All tools are available under `pf.sh debug` and share a consistent interface: `--format` (table/json/csv), `--output` (file), `--top` (result count), `--exclude` (patterns), and `--repo` (target).
|
|
10
10
|
|
|
11
11
|
## Tools
|
|
12
12
|
|
|
@@ -16,19 +16,19 @@ Find files that change most frequently — high churn often correlates with bugs
|
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
# Full analysis (files + directories)
|
|
19
|
-
pf debug hotspots analyze
|
|
19
|
+
pf.sh debug hotspots analyze
|
|
20
20
|
|
|
21
21
|
# File-level only
|
|
22
|
-
pf debug hotspots files
|
|
22
|
+
pf.sh debug hotspots files
|
|
23
23
|
|
|
24
24
|
# Directory-level only
|
|
25
|
-
pf debug hotspots dirs
|
|
25
|
+
pf.sh debug hotspots dirs
|
|
26
26
|
|
|
27
27
|
# Options
|
|
28
|
-
pf debug hotspots analyze --days 90 --top 20 --repo pennyfarthing
|
|
29
|
-
pf debug hotspots analyze --format json --output hotspots.json
|
|
30
|
-
pf debug hotspots analyze --exclude "*.test.ts" --branch main
|
|
31
|
-
pf debug hotspots analyze --skip-type orchestrator
|
|
28
|
+
pf.sh debug hotspots analyze --days 90 --top 20 --repo pennyfarthing
|
|
29
|
+
pf.sh debug hotspots analyze --format json --output hotspots.json
|
|
30
|
+
pf.sh debug hotspots analyze --exclude "*.test.ts" --branch main
|
|
31
|
+
pf.sh debug hotspots analyze --skip-type orchestrator
|
|
32
32
|
```
|
|
33
33
|
|
|
34
34
|
### Complexity
|
|
@@ -36,9 +36,9 @@ pf debug hotspots analyze --skip-type orchestrator
|
|
|
36
36
|
Measure code complexity metrics across files.
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
pf debug complexity analyze
|
|
40
|
-
pf debug complexity analyze --path ./packages/core/src
|
|
41
|
-
pf debug complexity analyze --top 30 --format csv
|
|
39
|
+
pf.sh debug complexity analyze
|
|
40
|
+
pf.sh debug complexity analyze --path ./packages/core/src
|
|
41
|
+
pf.sh debug complexity analyze --top 30 --format csv
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
### Dead Code
|
|
@@ -47,12 +47,12 @@ Find unused code: stale files with no recent commits, and unused TypeScript expo
|
|
|
47
47
|
|
|
48
48
|
```bash
|
|
49
49
|
# Files with no recent commits (default: 180 days)
|
|
50
|
-
pf debug deadcode stale
|
|
51
|
-
pf debug deadcode stale --days 90 --repo pennyfarthing
|
|
50
|
+
pf.sh debug deadcode stale
|
|
51
|
+
pf.sh debug deadcode stale --days 90 --repo pennyfarthing
|
|
52
52
|
|
|
53
53
|
# Unused TypeScript exports (via ts-prune)
|
|
54
|
-
pf debug deadcode exports
|
|
55
|
-
pf debug deadcode exports --repo pennyfarthing --format json
|
|
54
|
+
pf.sh debug deadcode exports
|
|
55
|
+
pf.sh debug deadcode exports --repo pennyfarthing --format json
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
### Code Markers
|
|
@@ -61,16 +61,16 @@ Detect TODO, FIXME, HACK, and XXX comments with git blame data.
|
|
|
61
61
|
|
|
62
62
|
```bash
|
|
63
63
|
# Full analysis with blame data
|
|
64
|
-
pf debug codemarkers analyze
|
|
64
|
+
pf.sh debug codemarkers analyze
|
|
65
65
|
|
|
66
66
|
# Only stale markers (older than threshold)
|
|
67
|
-
pf debug codemarkers stale --days 90
|
|
67
|
+
pf.sh debug codemarkers stale --days 90
|
|
68
68
|
|
|
69
69
|
# Summary counts by type
|
|
70
|
-
pf debug codemarkers summary
|
|
70
|
+
pf.sh debug codemarkers summary
|
|
71
71
|
|
|
72
72
|
# Deprecated symbol detection
|
|
73
|
-
pf debug codemarkers deprecations
|
|
73
|
+
pf.sh debug codemarkers deprecations
|
|
74
74
|
```
|
|
75
75
|
|
|
76
76
|
### Dependencies
|
|
@@ -78,8 +78,8 @@ pf debug codemarkers deprecations
|
|
|
78
78
|
Analyze dependency staleness and security advisories.
|
|
79
79
|
|
|
80
80
|
```bash
|
|
81
|
-
pf debug dependencies analyze
|
|
82
|
-
pf debug dependencies analyze --path ./pennyfarthing --format json
|
|
81
|
+
pf.sh debug dependencies analyze
|
|
82
|
+
pf.sh debug dependencies analyze --path ./pennyfarthing --format json
|
|
83
83
|
```
|
|
84
84
|
|
|
85
85
|
### Health Score
|
|
@@ -87,9 +87,9 @@ pf debug dependencies analyze --path ./pennyfarthing --format json
|
|
|
87
87
|
Composite health score across all dimensions (hotspots, complexity, dead code, dependencies, markers).
|
|
88
88
|
|
|
89
89
|
```bash
|
|
90
|
-
pf debug healthscore analyze
|
|
91
|
-
pf debug healthscore analyze --no-cache # Bypass cache
|
|
92
|
-
pf debug healthscore analyze --format json --output health.json
|
|
90
|
+
pf.sh debug healthscore analyze
|
|
91
|
+
pf.sh debug healthscore analyze --no-cache # Bypass cache
|
|
92
|
+
pf.sh debug healthscore analyze --format json --output health.json
|
|
93
93
|
```
|
|
94
94
|
|
|
95
95
|
## Common Options
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
|
|
62
62
|
### Conditional by Type
|
|
63
63
|
|
|
64
|
-
**Workflow/Agent Commands (e.g., /sm, /dev, /tea)**
|
|
64
|
+
**Workflow/Agent Commands (e.g., /pf-sm, /pf-dev, /pf-tea)**
|
|
65
65
|
- `<agent-activation>` — Required to show activation
|
|
66
66
|
- `<instructions>` — Required for agent behavior
|
|
67
67
|
|