@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,89 @@
|
|
|
1
|
+
# BDD Team Workflow - BDD with Native Team Collaboration
|
|
2
|
+
#
|
|
3
|
+
# When to use: Best for UI/UX-heavy stories where sustained parallel
|
|
4
|
+
# collaboration during design and implementation provides more value than
|
|
5
|
+
# periodic tandem consultation. Use this instead of bdd-tandem when the
|
|
6
|
+
# designer-architect and dev-tester pairings need continuous interaction
|
|
7
|
+
# throughout their respective phases.
|
|
8
|
+
#
|
|
9
|
+
# Compared to bdd-tandem: Tandem spawns a Haiku subagent for a single
|
|
10
|
+
# request/response exchange. Team mode spawns full teammate sessions that
|
|
11
|
+
# work in parallel with the lead for the entire phase duration.
|
|
12
|
+
#
|
|
13
|
+
# Team pairings:
|
|
14
|
+
# - DESIGN phase: UX-Designer (lead) + Architect — Architect validates
|
|
15
|
+
# technical feasibility of design decisions in real-time
|
|
16
|
+
# - GREEN phase: Dev (lead) + TEA — TEA verifies tests stay green and
|
|
17
|
+
# flags regressions as Dev implements
|
|
18
|
+
#
|
|
19
|
+
# Fallback: When native teams are unavailable (non-interactive mode, feature
|
|
20
|
+
# flag off, or CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS not set), phases with
|
|
21
|
+
# team blocks fall back to solo execution. The lead agent works alone —
|
|
22
|
+
# consider using bdd-tandem as an alternative that works in all modes.
|
|
23
|
+
#
|
|
24
|
+
# Flow: SM → UX-Designer (+Architect) → TEA → Dev (+TEA) → Reviewer → SM
|
|
25
|
+
|
|
26
|
+
workflow:
|
|
27
|
+
name: bdd-team
|
|
28
|
+
description: BDD with native team collaboration — architect on design, TEA on green phase
|
|
29
|
+
version: "1.0.0"
|
|
30
|
+
|
|
31
|
+
phases:
|
|
32
|
+
- name: setup
|
|
33
|
+
agent: sm
|
|
34
|
+
output: [session_file, branches, story_context]
|
|
35
|
+
|
|
36
|
+
- name: design
|
|
37
|
+
agent: ux-designer
|
|
38
|
+
input: [session_file, story_context]
|
|
39
|
+
output: [design_spec, user_flows, wireframes, behavior_scenarios]
|
|
40
|
+
gate:
|
|
41
|
+
file: gates/design-review
|
|
42
|
+
type: design_review
|
|
43
|
+
condition: UX spec defines user flows and acceptance behaviors
|
|
44
|
+
team:
|
|
45
|
+
teammates:
|
|
46
|
+
- agent: architect
|
|
47
|
+
task: "Validate technical feasibility of design decisions. Flag constraints via SendMessage."
|
|
48
|
+
|
|
49
|
+
- name: red
|
|
50
|
+
agent: tea
|
|
51
|
+
input: [design_spec, behavior_scenarios, story_context]
|
|
52
|
+
output: [failing_tests]
|
|
53
|
+
gate:
|
|
54
|
+
file: gates/tests-fail
|
|
55
|
+
type: tests_fail
|
|
56
|
+
condition: Behavior scenarios have test coverage
|
|
57
|
+
|
|
58
|
+
- name: green
|
|
59
|
+
agent: dev
|
|
60
|
+
input: [failing_tests, design_spec, story_context]
|
|
61
|
+
output: [implementation, passing_tests]
|
|
62
|
+
gate:
|
|
63
|
+
file: gates/tests-pass
|
|
64
|
+
type: tests_pass
|
|
65
|
+
condition: All tests passing, UX spec implemented
|
|
66
|
+
team:
|
|
67
|
+
teammates:
|
|
68
|
+
- agent: tea
|
|
69
|
+
task: "Verify tests stay green and flag regressions as Dev implements."
|
|
70
|
+
|
|
71
|
+
- name: review
|
|
72
|
+
agent: reviewer
|
|
73
|
+
input: [implementation, passing_tests, design_spec]
|
|
74
|
+
output: [approval]
|
|
75
|
+
gate:
|
|
76
|
+
file: gates/approval
|
|
77
|
+
type: approval
|
|
78
|
+
condition: Code review approved, UX requirements met
|
|
79
|
+
|
|
80
|
+
- name: finish
|
|
81
|
+
agent: sm
|
|
82
|
+
input: [approval]
|
|
83
|
+
output: [archived_session, story_summary]
|
|
84
|
+
|
|
85
|
+
triggers:
|
|
86
|
+
tags: [team, bdd-team]
|
|
87
|
+
points:
|
|
88
|
+
min: 3
|
|
89
|
+
default: false
|
|
@@ -13,6 +13,10 @@ workflow:
|
|
|
13
13
|
- name: setup
|
|
14
14
|
agent: sm
|
|
15
15
|
output: [session_file, branches, story_context]
|
|
16
|
+
gate:
|
|
17
|
+
file: gates/sm-setup-exit
|
|
18
|
+
type: sm_setup_exit
|
|
19
|
+
condition: Session file created with workflow, phase, context, and branch
|
|
16
20
|
|
|
17
21
|
- name: design
|
|
18
22
|
agent: ux-designer
|
|
@@ -37,9 +41,9 @@ workflow:
|
|
|
37
41
|
input: [failing_tests, design_spec, story_context]
|
|
38
42
|
output: [implementation, passing_tests]
|
|
39
43
|
gate:
|
|
40
|
-
file: gates/
|
|
41
|
-
type:
|
|
42
|
-
condition:
|
|
44
|
+
file: gates/dev-exit
|
|
45
|
+
type: dev_exit
|
|
46
|
+
condition: Tests green, tree clean, no debug code, correct branch
|
|
43
47
|
|
|
44
48
|
- name: review
|
|
45
49
|
agent: reviewer
|
|
@@ -170,7 +170,7 @@ Display completion message:
|
|
|
170
170
|
|
|
171
171
|
Next steps:
|
|
172
172
|
- Use `/pf-sprint` to view the backlog
|
|
173
|
-
- Use `pf sprint epic promote` to move to a sprint when ready
|
|
173
|
+
- Use `pf.sh sprint epic promote` to move to a sprint when ready
|
|
174
174
|
```
|
|
175
175
|
|
|
176
176
|
## SUCCESS CRITERIA:
|
|
@@ -32,7 +32,7 @@ Build a complete picture of uncommitted changes across ALL repos defined in `.cl
|
|
|
32
32
|
**CRITICAL: Use the multi-repo script, not plain `git status`.**
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
|
-
pf git status
|
|
35
|
+
pf.sh git status
|
|
36
36
|
```
|
|
37
37
|
|
|
38
38
|
This shows branch, staged/unstaged changes, and unpushed commits for **all repos** defined in the project configuration.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Step 1: Foundation Check
|
|
2
|
+
|
|
3
|
+
<step-meta>
|
|
4
|
+
step: 1
|
|
5
|
+
name: foundation
|
|
6
|
+
workflow: installation-check
|
|
7
|
+
agent: devops
|
|
8
|
+
gate: false
|
|
9
|
+
next: step-02-commands
|
|
10
|
+
</step-meta>
|
|
11
|
+
|
|
12
|
+
<purpose>
|
|
13
|
+
Verify the core Pennyfarthing installation exists and is intact. This checks the manifest, core framework directories, symlinks, and file integrity — the foundation everything else depends on.
|
|
14
|
+
</purpose>
|
|
15
|
+
|
|
16
|
+
<prerequisites>
|
|
17
|
+
- Project has been initialized with `pennyfarthing init`
|
|
18
|
+
- Running from the project root directory
|
|
19
|
+
</prerequisites>
|
|
20
|
+
|
|
21
|
+
<instructions>
|
|
22
|
+
1. Run the doctor command for the installation category
|
|
23
|
+
2. For each result, explain what it checks and why it matters:
|
|
24
|
+
- **manifest/exists**: The manifest tracks installed version and file hashes. Without it, Pennyfarthing can't detect drift or apply updates.
|
|
25
|
+
- **core/* directories**: These contain agents, commands, guides, skills, personas, and scripts. Missing directories mean broken agent invocation.
|
|
26
|
+
- **symlink/* checks** (symlink mode only): Symlinks to node_modules keep files in sync with the installed package version.
|
|
27
|
+
- **core/integrity**: Detects locally modified framework files that may conflict with updates.
|
|
28
|
+
- **core/completeness**: Flags missing files that should have been installed.
|
|
29
|
+
3. For any failures, explain the impact and offer remediation
|
|
30
|
+
4. Present the collaboration menu
|
|
31
|
+
</instructions>
|
|
32
|
+
|
|
33
|
+
<actions>
|
|
34
|
+
- Run: `pennyfarthing doctor --json --category installation`
|
|
35
|
+
- Check: manifest.json exists at `.pennyfarthing/manifest.json`
|
|
36
|
+
- Check: Core directories exist under `.claude/pennyfarthing/` or via symlinks
|
|
37
|
+
</actions>
|
|
38
|
+
|
|
39
|
+
<output>
|
|
40
|
+
Present results in a clear table format:
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
## Foundation Check Results
|
|
44
|
+
|
|
45
|
+
| Check | Status | Detail |
|
|
46
|
+
|-------|--------|--------|
|
|
47
|
+
| manifest | ... | ... |
|
|
48
|
+
| core files | ... | ... |
|
|
49
|
+
| symlinks | ... | ... |
|
|
50
|
+
|
|
51
|
+
### Issues Found
|
|
52
|
+
[Explain each failure/warning with remediation steps]
|
|
53
|
+
```
|
|
54
|
+
</output>
|
|
55
|
+
|
|
56
|
+
<collaboration-menu>
|
|
57
|
+
- **[F] Fix** - Run `pennyfarthing doctor --fix --category installation` to auto-repair
|
|
58
|
+
- **[E] Explain** - Deep dive on a specific check result
|
|
59
|
+
- **[C] Continue** - Proceed to Commands & Skills check
|
|
60
|
+
- **[R] Recheck** - Re-run after manual changes
|
|
61
|
+
</collaboration-menu>
|
|
62
|
+
|
|
63
|
+
<next-step>
|
|
64
|
+
After reviewing foundation results, proceed to step-02-commands.md for Commands & Skills verification.
|
|
65
|
+
</next-step>
|
|
66
|
+
|
|
67
|
+
## Failure Modes
|
|
68
|
+
|
|
69
|
+
- Running from wrong directory (not project root)
|
|
70
|
+
- Manifest missing entirely (needs `pennyfarthing init`)
|
|
71
|
+
- Broken symlinks after `node_modules` cleanup without reinstall
|
|
72
|
+
|
|
73
|
+
## Success Metrics
|
|
74
|
+
|
|
75
|
+
- All manifest and core file checks pass
|
|
76
|
+
- User understands each check's purpose
|
|
77
|
+
- Any failures have clear remediation path
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Step 2: Commands & Skills
|
|
2
|
+
|
|
3
|
+
<step-meta>
|
|
4
|
+
step: 2
|
|
5
|
+
name: commands
|
|
6
|
+
workflow: installation-check
|
|
7
|
+
agent: devops
|
|
8
|
+
gate: false
|
|
9
|
+
next: step-03-hooks
|
|
10
|
+
</step-meta>
|
|
11
|
+
|
|
12
|
+
<purpose>
|
|
13
|
+
Verify that slash commands, skills, user project files, and configuration are properly installed. These are the agent interface layer — what users and agents interact with directly.
|
|
14
|
+
</purpose>
|
|
15
|
+
|
|
16
|
+
<prerequisites>
|
|
17
|
+
- Foundation check (step 1) completed
|
|
18
|
+
- `.claude/` directory exists
|
|
19
|
+
</prerequisites>
|
|
20
|
+
|
|
21
|
+
<instructions>
|
|
22
|
+
1. Run the doctor command for the commands category
|
|
23
|
+
2. For each result, explain what it checks and why it matters:
|
|
24
|
+
- **core/commands**: Slash commands (`.claude/commands/pf-*.md`) should be file copies (not symlinks) to avoid node_modules drift. Stale copies mean agents use outdated instructions.
|
|
25
|
+
- **core/skills**: Skills (`.claude/skills/pf-*/`) should also be file copies. Missing skills break agent workflows.
|
|
26
|
+
- **project/directory**: `.claude/project/` holds user-specific project configuration.
|
|
27
|
+
- **project/sidecars**: `.pennyfarthing/sidecars/` stores per-agent learning files that accumulate context across sessions.
|
|
28
|
+
- **persona-config**: `.pennyfarthing/config.local.yaml` sets the active theme. Without it, agents use default (unthemed) personas.
|
|
29
|
+
- **settings.local.json**: The most critical user file — registers hooks with Claude Code. Missing = no hooks, no OTEL, no bell mode.
|
|
30
|
+
3. For warnings about stale/symlinked commands, explain the migration from symlinks to copies (v11.3.0+)
|
|
31
|
+
4. Present the collaboration menu
|
|
32
|
+
</instructions>
|
|
33
|
+
|
|
34
|
+
<actions>
|
|
35
|
+
- Run: `pennyfarthing doctor --json --category commands`
|
|
36
|
+
- Check: `.claude/commands/` contains `pf-*` files (copies, not symlinks)
|
|
37
|
+
- Check: `.claude/skills/` contains `pf-*` directories (copies, not symlinks)
|
|
38
|
+
- Check: `.pennyfarthing/config.local.yaml` exists
|
|
39
|
+
</actions>
|
|
40
|
+
|
|
41
|
+
<output>
|
|
42
|
+
Present results in a clear table format:
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
## Commands & Skills Check Results
|
|
46
|
+
|
|
47
|
+
| Check | Status | Detail |
|
|
48
|
+
|-------|--------|--------|
|
|
49
|
+
| commands | ... | ... |
|
|
50
|
+
| skills | ... | ... |
|
|
51
|
+
| project dir | ... | ... |
|
|
52
|
+
| sidecars | ... | ... |
|
|
53
|
+
| persona config | ... | ... |
|
|
54
|
+
| settings.local.json | ... | ... |
|
|
55
|
+
|
|
56
|
+
### Issues Found
|
|
57
|
+
[Explain each failure/warning with remediation steps]
|
|
58
|
+
```
|
|
59
|
+
</output>
|
|
60
|
+
|
|
61
|
+
<collaboration-menu>
|
|
62
|
+
- **[F] Fix** - Run `pennyfarthing doctor --fix --category commands` to auto-repair
|
|
63
|
+
- **[E] Explain** - Deep dive on a specific check result
|
|
64
|
+
- **[C] Continue** - Proceed to Hook Configuration check
|
|
65
|
+
- **[R] Recheck** - Re-run after manual changes
|
|
66
|
+
</collaboration-menu>
|
|
67
|
+
|
|
68
|
+
<next-step>
|
|
69
|
+
After reviewing command and skill results, proceed to step-03-hooks.md for Hook Configuration verification.
|
|
70
|
+
</next-step>
|
|
71
|
+
|
|
72
|
+
## Failure Modes
|
|
73
|
+
|
|
74
|
+
- Commands still symlinked from pre-v11.3 installs
|
|
75
|
+
- Skills missing after partial update
|
|
76
|
+
- settings.local.json deleted by user accidentally
|
|
77
|
+
|
|
78
|
+
## Success Metrics
|
|
79
|
+
|
|
80
|
+
- All commands and skills are file copies (not symlinks)
|
|
81
|
+
- settings.local.json exists
|
|
82
|
+
- User understands the symlink-to-copy migration
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Step 3: Hook Configuration
|
|
2
|
+
|
|
3
|
+
<step-meta>
|
|
4
|
+
step: 3
|
|
5
|
+
name: hooks
|
|
6
|
+
workflow: installation-check
|
|
7
|
+
agent: devops
|
|
8
|
+
gate: true
|
|
9
|
+
next: step-04-scripts
|
|
10
|
+
</step-meta>
|
|
11
|
+
|
|
12
|
+
<purpose>
|
|
13
|
+
Verify all 9 hook configurations in settings.local.json. Hooks are the runtime integration between Pennyfarthing and Claude Code — each one controls a critical behavior. This is the most complex and consequential category, which is why it has a gate.
|
|
14
|
+
</purpose>
|
|
15
|
+
|
|
16
|
+
<prerequisites>
|
|
17
|
+
- settings.local.json exists (verified in step 2)
|
|
18
|
+
- User understands that hooks are registered in `.claude/settings.local.json`
|
|
19
|
+
</prerequisites>
|
|
20
|
+
|
|
21
|
+
<instructions>
|
|
22
|
+
1. Run the doctor command for the hooks category
|
|
23
|
+
2. For each of the 9 hook checks, explain what it does, why it matters, and the impact of it being missing:
|
|
24
|
+
|
|
25
|
+
**SessionStart hooks:**
|
|
26
|
+
- **session-start-hook**: Exports `PROJECT_ROOT` env var. Without it, agents can't find project files. The most critical hook.
|
|
27
|
+
- **otel-auto-start**: Starts WheelHub server and configures 5 OTEL env vars for telemetry. Legacy `.sh` version only sets 2 of 5 vars.
|
|
28
|
+
- **auto-load-sm**: Auto-invokes `/sm` agent on new sessions. Without it, users must manually run `/sm` every time.
|
|
29
|
+
|
|
30
|
+
**Stop hooks:**
|
|
31
|
+
- **stop-hook**: Runs reflector-check to enforce CYCLIST markers at turn end. Without it, Cyclist QuickActions won't render.
|
|
32
|
+
|
|
33
|
+
**PostToolUse hooks:**
|
|
34
|
+
- **post-tool-use-hook**: Bell mode — injects queued messages via `additionalContext`. Without it, `/bell` messages are lost.
|
|
35
|
+
- **sprint-yaml-validation**: Validates sprint YAML after edits. Without it, malformed YAML breaks SprintPanel.
|
|
36
|
+
|
|
37
|
+
**PreToolUse hooks:**
|
|
38
|
+
- **context-circuit-breaker**: Auto-saves session when context exceeds threshold. Without it, long sessions lose work.
|
|
39
|
+
- **schema-validation**: Validates XML schema on Write to session/skill/step files. Without it, malformed files slip through.
|
|
40
|
+
|
|
41
|
+
**Permissions:**
|
|
42
|
+
- **benchmark-permissions**: `Bash(claude:*)` needed for parallel benchmarks. Without it, only sequential runs work.
|
|
43
|
+
|
|
44
|
+
3. For each warning/failure, explain the specific impact and offer targeted fix
|
|
45
|
+
4. Present gate criteria for user approval
|
|
46
|
+
|
|
47
|
+
**IMPORTANT:** Modifying settings.local.json affects all Claude Code sessions. Explain this to the user before applying fixes.
|
|
48
|
+
</instructions>
|
|
49
|
+
|
|
50
|
+
<actions>
|
|
51
|
+
- Run: `pennyfarthing doctor --json --category hooks`
|
|
52
|
+
- Read: `.claude/settings.local.json` to show current hook configuration
|
|
53
|
+
</actions>
|
|
54
|
+
|
|
55
|
+
<output>
|
|
56
|
+
Present results grouped by hook type:
|
|
57
|
+
|
|
58
|
+
```markdown
|
|
59
|
+
## Hook Configuration Results
|
|
60
|
+
|
|
61
|
+
### SessionStart Hooks
|
|
62
|
+
| Hook | Status | Detail |
|
|
63
|
+
|------|--------|--------|
|
|
64
|
+
| session-start | ... | ... |
|
|
65
|
+
| otel-auto-start | ... | ... |
|
|
66
|
+
| auto-load-sm | ... | ... |
|
|
67
|
+
|
|
68
|
+
### Stop Hooks
|
|
69
|
+
| Hook | Status | Detail |
|
|
70
|
+
|------|--------|--------|
|
|
71
|
+
| reflector-check | ... | ... |
|
|
72
|
+
|
|
73
|
+
### PostToolUse Hooks
|
|
74
|
+
| Hook | Status | Detail |
|
|
75
|
+
|------|--------|--------|
|
|
76
|
+
| bell-mode | ... | ... |
|
|
77
|
+
| sprint-yaml | ... | ... |
|
|
78
|
+
|
|
79
|
+
### PreToolUse Hooks
|
|
80
|
+
| Hook | Status | Detail |
|
|
81
|
+
|------|--------|--------|
|
|
82
|
+
| context-circuit-breaker | ... | ... |
|
|
83
|
+
| schema-validation | ... | ... |
|
|
84
|
+
|
|
85
|
+
### Permissions
|
|
86
|
+
| Check | Status | Detail |
|
|
87
|
+
|-------|--------|--------|
|
|
88
|
+
| benchmark-permissions | ... | ... |
|
|
89
|
+
```
|
|
90
|
+
</output>
|
|
91
|
+
|
|
92
|
+
<gate>
|
|
93
|
+
## Completion Criteria
|
|
94
|
+
- [ ] All 9 hook checks reviewed with user
|
|
95
|
+
- [ ] User understands what each hook controls
|
|
96
|
+
- [ ] Any fixes to settings.local.json approved by user
|
|
97
|
+
- [ ] User confirmed hook configuration is acceptable
|
|
98
|
+
</gate>
|
|
99
|
+
|
|
100
|
+
<collaboration-menu>
|
|
101
|
+
- **[F] Fix** - Run `pennyfarthing doctor --fix --category hooks` to add missing hooks
|
|
102
|
+
- **[E] Explain** - Deep dive on a specific hook's behavior
|
|
103
|
+
- **[C] Continue** - Approve configuration and proceed to Scripts check
|
|
104
|
+
- **[R] Recheck** - Re-run after manual edits to settings.local.json
|
|
105
|
+
</collaboration-menu>
|
|
106
|
+
|
|
107
|
+
<next-step>
|
|
108
|
+
After user approves hook configuration, proceed to step-04-scripts.md for Hook Scripts verification.
|
|
109
|
+
</next-step>
|
|
110
|
+
|
|
111
|
+
## Failure Modes
|
|
112
|
+
|
|
113
|
+
- Applying fixes without understanding what each hook does
|
|
114
|
+
- Not realizing settings.local.json changes affect all sessions
|
|
115
|
+
- Skipping gate without reviewing critical hooks (session-start, context-circuit-breaker)
|
|
116
|
+
|
|
117
|
+
## Success Metrics
|
|
118
|
+
|
|
119
|
+
- All 9 hooks configured or user made informed decision to skip
|
|
120
|
+
- User understands the relationship between hooks and features
|
|
121
|
+
- Gate approval recorded
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Step 4: Hook Scripts
|
|
2
|
+
|
|
3
|
+
<step-meta>
|
|
4
|
+
step: 4
|
|
5
|
+
name: scripts
|
|
6
|
+
workflow: installation-check
|
|
7
|
+
agent: devops
|
|
8
|
+
gate: false
|
|
9
|
+
next: step-05-layout
|
|
10
|
+
</step-meta>
|
|
11
|
+
|
|
12
|
+
<purpose>
|
|
13
|
+
Verify that hook script files exist on disk and are executable. Step 3 checked that hooks are registered in settings.local.json — this step checks that the script files those hooks point to actually exist and can run.
|
|
14
|
+
</purpose>
|
|
15
|
+
|
|
16
|
+
<prerequisites>
|
|
17
|
+
- Hook configuration reviewed (step 3)
|
|
18
|
+
- Installation type known (symlink vs copy mode)
|
|
19
|
+
</prerequisites>
|
|
20
|
+
|
|
21
|
+
<instructions>
|
|
22
|
+
1. Run the doctor command for the scripts category
|
|
23
|
+
2. For each result, explain the relationship between the settings entry and the script file:
|
|
24
|
+
- **hook/* checks**: Scripts in `.pennyfarthing/scripts/hooks/` (symlink mode) or `.claude/pennyfarthing/scripts/hooks/` (copy mode). These are the actual bash scripts that hooks execute.
|
|
25
|
+
- **Execute permissions**: Scripts must be executable (`chmod +x`). A registered hook pointing to a non-executable script causes "Permission denied" errors on every tool use.
|
|
26
|
+
- **git-hook/* checks**: Scripts in `.git/hooks/` (pre-commit, pre-push, post-merge). Framework repos should use symlinks to `pennyfarthing-dist/scripts/hooks/`; end-user repos use copies.
|
|
27
|
+
3. For git hooks, explain the difference between framework symlinks and user copies
|
|
28
|
+
4. Present the collaboration menu
|
|
29
|
+
</instructions>
|
|
30
|
+
|
|
31
|
+
<actions>
|
|
32
|
+
- Run: `pennyfarthing doctor --json --category scripts`
|
|
33
|
+
- Check: Hook scripts at `.pennyfarthing/scripts/hooks/` are executable
|
|
34
|
+
- Check: Git hooks at `.git/hooks/` are up-to-date
|
|
35
|
+
</actions>
|
|
36
|
+
|
|
37
|
+
<output>
|
|
38
|
+
Present results in two sections:
|
|
39
|
+
|
|
40
|
+
```markdown
|
|
41
|
+
## Hook Scripts
|
|
42
|
+
|
|
43
|
+
| Script | Status | Detail |
|
|
44
|
+
|--------|--------|--------|
|
|
45
|
+
| session-start.sh | ... | ... |
|
|
46
|
+
| pre-edit-check.sh | ... | ... |
|
|
47
|
+
| context-warning.sh | ... | ... |
|
|
48
|
+
| context-circuit-breaker.sh | ... | ... |
|
|
49
|
+
| bell-mode-hook.sh | ... | ... |
|
|
50
|
+
| question-reflector-check.sh | ... | ... |
|
|
51
|
+
| sprint-yaml-validation.sh | ... | ... |
|
|
52
|
+
|
|
53
|
+
## Git Hooks
|
|
54
|
+
|
|
55
|
+
| Hook | Status | Detail |
|
|
56
|
+
|------|--------|--------|
|
|
57
|
+
| pre-commit | ... | ... |
|
|
58
|
+
| pre-push | ... | ... |
|
|
59
|
+
| post-merge | ... | ... |
|
|
60
|
+
```
|
|
61
|
+
</output>
|
|
62
|
+
|
|
63
|
+
<collaboration-menu>
|
|
64
|
+
- **[F] Fix** - Run `pennyfarthing doctor --fix --category scripts` to fix permissions and stale hooks
|
|
65
|
+
- **[E] Explain** - Deep dive on a specific script's behavior
|
|
66
|
+
- **[C] Continue** - Proceed to Layout check
|
|
67
|
+
- **[R] Recheck** - Re-run after manual changes
|
|
68
|
+
</collaboration-menu>
|
|
69
|
+
|
|
70
|
+
<next-step>
|
|
71
|
+
After reviewing script results, proceed to step-05-layout.md for Directory & File Layout verification.
|
|
72
|
+
</next-step>
|
|
73
|
+
|
|
74
|
+
## Failure Modes
|
|
75
|
+
|
|
76
|
+
- Scripts missing after partial update (need `pennyfarthing update`)
|
|
77
|
+
- Execute permission stripped by git or file copy operations
|
|
78
|
+
- Git hooks stale after package version bump
|
|
79
|
+
|
|
80
|
+
## Success Metrics
|
|
81
|
+
|
|
82
|
+
- All hook scripts exist and are executable
|
|
83
|
+
- Git hooks match package source (or are custom non-pennyfarthing hooks)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Step 5: Directory & File Layout
|
|
2
|
+
|
|
3
|
+
<step-meta>
|
|
4
|
+
step: 5
|
|
5
|
+
name: layout
|
|
6
|
+
workflow: installation-check
|
|
7
|
+
agent: devops
|
|
8
|
+
gate: false
|
|
9
|
+
next: step-06-legacy
|
|
10
|
+
</step-meta>
|
|
11
|
+
|
|
12
|
+
<purpose>
|
|
13
|
+
Verify that files and directories are at their correct locations. Pennyfarthing has migrated file locations across versions — this step ensures everything is at the current canonical paths and flags any files stuck at old locations.
|
|
14
|
+
</purpose>
|
|
15
|
+
|
|
16
|
+
<prerequisites>
|
|
17
|
+
- Foundation and commands checks completed (steps 1-2)
|
|
18
|
+
</prerequisites>
|
|
19
|
+
|
|
20
|
+
<instructions>
|
|
21
|
+
1. Run the doctor command for the layout category
|
|
22
|
+
2. For each result, explain the expected location and why it matters:
|
|
23
|
+
- **dir/sprint**: `sprint/` directory holds sprint tracking YAML files.
|
|
24
|
+
- **dir/session**: `.session/` stores active work session files for each story.
|
|
25
|
+
- **layout/manifest**: `.pennyfarthing/manifest.json` tracks installed version.
|
|
26
|
+
- **layout/config**: `.pennyfarthing/config.local.yaml` stores theme and local settings.
|
|
27
|
+
- **layout/settings**: `.claude/settings.local.json` registers hooks with Claude Code.
|
|
28
|
+
- **layout/sidecars**: `.pennyfarthing/sidecars/` stores per-agent learning files.
|
|
29
|
+
- **layout/project-hooks**: `.pennyfarthing/project/hooks/` stores user-customized hook scripts (setup-env.sh, auto-load-sm.sh).
|
|
30
|
+
- **layout/*-old-location**: Files found at legacy paths that should be migrated.
|
|
31
|
+
3. For old-location warnings, explain when the migration happened and what the fix does
|
|
32
|
+
4. Present the collaboration menu
|
|
33
|
+
</instructions>
|
|
34
|
+
|
|
35
|
+
<actions>
|
|
36
|
+
- Run: `pennyfarthing doctor --json --category layout`
|
|
37
|
+
- Check: `sprint/` and `.session/` directories exist
|
|
38
|
+
- Check: Files at canonical `.pennyfarthing/` locations
|
|
39
|
+
</actions>
|
|
40
|
+
|
|
41
|
+
<output>
|
|
42
|
+
Present results:
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
## Directory & File Layout Results
|
|
46
|
+
|
|
47
|
+
| Check | Status | Detail |
|
|
48
|
+
|-------|--------|--------|
|
|
49
|
+
| sprint dir | ... | ... |
|
|
50
|
+
| session dir | ... | ... |
|
|
51
|
+
| manifest location | ... | ... |
|
|
52
|
+
| config location | ... | ... |
|
|
53
|
+
| settings location | ... | ... |
|
|
54
|
+
| sidecars location | ... | ... |
|
|
55
|
+
| project hooks | ... | ... |
|
|
56
|
+
|
|
57
|
+
### Migration Needed
|
|
58
|
+
[List any files at old locations with migration path]
|
|
59
|
+
```
|
|
60
|
+
</output>
|
|
61
|
+
|
|
62
|
+
<collaboration-menu>
|
|
63
|
+
- **[F] Fix** - Run `pennyfarthing doctor --fix --category layout` to migrate files
|
|
64
|
+
- **[E] Explain** - Deep dive on the file layout evolution
|
|
65
|
+
- **[C] Continue** - Proceed to Legacy cleanup check
|
|
66
|
+
- **[R] Recheck** - Re-run after manual moves
|
|
67
|
+
</collaboration-menu>
|
|
68
|
+
|
|
69
|
+
<next-step>
|
|
70
|
+
After reviewing layout results, proceed to step-06-legacy.md for Legacy artifact cleanup.
|
|
71
|
+
</next-step>
|
|
72
|
+
|
|
73
|
+
## Failure Modes
|
|
74
|
+
|
|
75
|
+
- Moving files manually without updating references in settings.local.json
|
|
76
|
+
- Missing sprint/ or .session/ directories (need `pennyfarthing init`)
|
|
77
|
+
|
|
78
|
+
## Success Metrics
|
|
79
|
+
|
|
80
|
+
- All files at canonical locations
|
|
81
|
+
- No old-location warnings remaining
|